{"version":3,"file":"7238a1f6-3a17aa0b573738b79219.js","mappings":";iMAaA,IAAIA,EAAqB,WACvB,SAASC,EAAEC,GACT,IAAIC,EAAIC,KACRA,KAAKC,WAAa,SAASC,GACzB,IAAIC,EACqCA,EAAvB,IAAlBJ,EAAEK,KAAKC,OAAeN,EAAEO,eAAqBP,EAAEO,eAAeC,YAAcR,EAAES,QAAcT,EAAEU,UAAUC,WAAiBX,EAAEY,OAAaZ,EAAEK,KAAKL,EAAEK,KAAKC,OAAS,GAAGE,YAAaR,EAAEU,UAAUG,aAAaV,EAAGC,GAAIJ,EAAEK,KAAKS,KAAKX,EAC7N,EAAGF,KAAKc,cAAwB,IAAbhB,EAAEiB,QAA4DjB,EAAEiB,OAAQf,KAAKI,KAAO,GAAIJ,KAAKgB,IAAM,EAAGhB,KAAKiB,MAAQnB,EAAEmB,MAAOjB,KAAKkB,IAAMpB,EAAEoB,IAAKlB,KAAKS,UAAYX,EAAEW,UAAWT,KAAKQ,QAAUV,EAAEU,QAASR,KAAKM,eAAiBR,EAAEQ,eAAgBN,KAAKW,OAAS,IACjR,CACA,IAAIQ,EAAItB,EAAEuB,UACV,OAAOD,EAAEE,QAAU,SAAStB,GAC1BA,EAAEuB,QAAQtB,KAAKC,WACjB,EAAGkB,EAAEI,OAAS,SAASxB,GACrBC,KAAKgB,KAAOhB,KAAKc,SAAW,KAAO,IAAO,GAAKd,KAAKC,WAhBxD,SAAYJ,GACV,IAAIsB,EAAIK,SAASC,cAAc,SAC/B,OAAON,EAAEO,aAAa,eAAgB7B,EAAEqB,UAAkB,IAAZrB,EAAEoB,OAAoBE,EAAEO,aAAa,QAAS7B,EAAEoB,OAAQE,EAAEQ,YAAYH,SAASI,eAAe,KAAMT,EAAEO,aAAa,SAAU,IAAKP,CAClL,CAamEU,CAAG7B,OAClE,IAAIE,EAAIF,KAAKI,KAAKJ,KAAKI,KAAKC,OAAS,GAMrC,GAAIL,KAAKc,SAAU,CACjB,IAAIgB,EA/BV,SAAYjC,GACV,GAAIA,EAAEkC,MACJ,OAAOlC,EAAEkC,MACX,IAAK,IAAIZ,EAAI,EAAGA,EAAIK,SAASQ,YAAY3B,OAAQc,IAC/C,GAAIK,SAASQ,YAAYb,GAAGc,YAAcpC,EACxC,OAAO2B,SAASQ,YAAYb,EAClC,CAyBce,CAAGhC,GACX,IACE4B,EAAEK,WAAWpC,EAAG+B,EAAEM,SAAS/B,OAC7B,CAAE,MAAOgC,GAET,CACF,MACEnC,EAAEyB,YAAYH,SAASI,eAAe7B,IACxCC,KAAKgB,KACP,EAAGG,EAAEmB,MAAQ,WACXtC,KAAKI,KAAKkB,SAAQ,SAASvB,GACzB,OAAOA,EAAEwC,YAAcxC,EAAEwC,WAAWC,YAAYzC,EAClD,IAAIC,KAAKI,KAAO,GAAIJ,KAAKgB,IAAM,CACjC,EAAGnB,CACL,CAlCyB,GAkCpB4C,EAAI,OAAQC,EAAK,QAASC,EAAI,WAAYC,EAAK,OAAQC,EAAK,OAAQC,EAAK,OAAwBC,EAAK,aAAcC,EAAKC,KAAKC,IAAKC,EAAKC,OAAOC,aAAcC,EAAKC,OAAOC,OAI9K,SAASC,EAAG5D,GACV,OAAOA,EAAE6D,MACX,CAIA,SAASC,EAAE9D,EAAGsB,EAAGrB,GACf,OAAOD,EAAE+D,QAAQzC,EAAGrB,EACtB,CACA,SAAS+D,EAAGhE,EAAGsB,GACb,OAAOtB,EAAEiE,QAAQ3C,EACnB,CACA,SAAS4C,EAAElE,EAAGsB,GACZ,OAAyB,EAAlBtB,EAAEmE,WAAW7C,EACtB,CACA,SAAS8C,EAAGpE,EAAGsB,EAAGrB,GAChB,OAAOD,EAAEqE,MAAM/C,EAAGrB,EACpB,CACA,SAASqE,EAAEtE,GACT,OAAOA,EAAEQ,MACX,CACA,SAAS+D,EAAGvE,GACV,OAAOA,EAAEQ,MACX,CACA,SAASgE,EAAGxE,EAAGsB,GACb,OAAOA,EAAEN,KAAKhB,GAAIA,CACpB,CAIA,IAAIyE,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAK,GAC/C,SAASC,EAAG/E,EAAGsB,EAAGrB,EAAGC,EAAGG,EAAGC,EAAG2B,GAC5B,MAAO,CAAE+C,MAAOhF,EAAGiF,KAAM3D,EAAG4D,OAAQjF,EAAGkF,KAAMjF,EAAGkF,MAAO/E,EAAGgF,SAAU/E,EAAGgF,KAAMb,EAAIc,OAAQb,EAAIlE,OAAQyB,EAAGuD,OAAQ,GAClH,CACA,SAASC,EAAGzF,EAAGsB,GACb,OAAOmC,EAAGsB,EAAG,GAAI,KAAM,KAAM,GAAI,KAAM,KAAM,GAAI/E,EAAG,CAAEQ,QAASR,EAAEQ,QAAUc,EAC7E,CAOA,SAASoE,IACP,OAAOb,EAAID,EAAID,EAAKT,EAAEY,EAAIF,KAAO,EAAGF,IAAY,KAANG,IAAaH,EAAK,EAAGD,KAAOI,CACxE,CACA,SAASc,IACP,OAAOzB,EAAEY,EAAIF,EACf,CACA,SAASgB,IACP,OAAOhB,CACT,CACA,SAASiB,EAAG7F,EAAGsB,GACb,OAAO8C,EAAGU,EAAI9E,EAAGsB,EACnB,CACA,SAASwE,EAAG9F,GACV,OAAQA,GACN,KAAK,EACL,KAAK,EACL,KAAK,GACL,KAAK,GACL,KAAK,GACH,OAAO,EACT,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,IACL,KAAK,GACL,KAAK,IACL,KAAK,IACH,OAAO,EACT,KAAK,GACH,OAAO,EACT,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACH,OAAO,EACT,KAAK,GACL,KAAK,GACH,OAAO,EAEX,OAAO,CACT,CACA,SAAS+F,EAAG/F,GACV,OAAOyE,EAAKC,EAAK,EAAGC,EAAKL,EAAEQ,EAAK9E,GAAI4E,EAAI,EAAG,EAC7C,CACA,SAASoB,EAAGhG,GACV,OAAO8E,EAAK,GAAI9E,CAClB,CACA,SAASiG,EAAGjG,GACV,OAAO4D,EAAGiC,EAAGjB,EAAI,EAAGsB,EAAS,KAANlG,EAAWA,EAAI,EAAU,KAANA,EAAWA,EAAI,EAAIA,IAC/D,CACA,SAASmG,EAAGnG,GACV,MAAQ6E,EAAIc,MAAQd,EAAI,IACtBa,IACF,OAAOI,EAAG9F,GAAK,GAAK8F,EAAGjB,GAAK,EAAI,GAAK,GACvC,CACA,SAASuB,EAAGpG,EAAGsB,GACb,OAASA,GAAKoE,OAASb,EAAI,IAAMA,EAAI,KAAOA,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAMA,EAAI,MAE9E,OAAOgB,EAAG7F,EAAG4F,KAAQtE,EAAI,GAAY,IAAPqE,KAAoB,IAAPD,KAC7C,CACA,SAASQ,EAAGlG,GACV,KAAO0F,KACL,OAAQb,GACN,KAAK7E,EACH,OAAO4E,EACT,KAAK,GACL,KAAK,GACG,KAAN5E,GAAkB,KAANA,GAAYkG,EAAGrB,GAC3B,MACF,KAAK,GACG,KAAN7E,GAAYkG,EAAGlG,GACf,MACF,KAAK,GACH0F,IAGN,OAAOd,CACT,CACA,SAASyB,EAAGrG,EAAGsB,GACb,KAAOoE,KAAO1F,EAAI6E,IAAM,KAClB7E,EAAI6E,IAAM,IAAmB,KAARc,OAE3B,MAAO,KAAOE,EAAGvE,EAAGsD,EAAI,GAAK,IAAMtB,EAAS,KAANtD,EAAWA,EAAI0F,IACvD,CACA,SAASY,EAAGtG,GACV,MAAQ8F,EAAGH,MACTD,IACF,OAAOG,EAAG7F,EAAG4E,EACf,CACA,SAAS2B,EAAGvG,GACV,OAAOgG,EAAGQ,EAAG,GAAI,KAAM,KAAM,KAAM,CAAC,IAAKxG,EAAI+F,EAAG/F,GAAI,EAAG,CAAC,GAAIA,GAC9D,CACA,SAASwG,EAAGxG,EAAGsB,EAAGrB,EAAGC,EAAGG,EAAGC,EAAG2B,EAAGO,EAAGiE,GAClC,IAAK,IAAIC,EAAI,EAAGC,EAAI,EAAGC,EAAI3E,EAAG4E,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,GAAIC,EAAIhH,EAAGiH,EAAIhH,EAAGiH,EAAIrH,EAAGsH,EAAIJ,EAAGH,GACjH,OAAQF,EAAII,EAAGA,EAAIzB,KACjB,KAAK,GACH,GAAS,KAALqB,GAA2B,IAAf7C,EAAEsD,EAAGZ,EAAI,GAAU,EACQ,GAAzC5C,EAAGwD,GAAK1D,EAAEmC,EAAGkB,GAAI,IAAK,OAAQ,SAAiBD,GAAK,GACpD,KACF,CACF,KAAK,GACL,KAAK,GACL,KAAK,GACHM,GAAKvB,EAAGkB,GACR,MACF,KAAK,EACL,KAAK,GACL,KAAK,GACL,KAAK,GACHK,GAAKrB,EAAGY,GACR,MACF,KAAK,GACHS,GAAKpB,EAAGR,IAAO,EAAG,GAClB,SACF,KAAK,GACH,OAAQD,KACN,KAAK,GACL,KAAK,GACHnB,EAAGiD,EAAGpB,EAAGX,IAAKE,KAAOtE,EAAGrB,GAAIwG,GAC5B,MACF,QACEe,GAAK,IAET,MACF,KAAK,IAAMR,EACTxE,EAAEkE,KAAOpC,EAAEkD,GAAKN,EAClB,KAAK,IAAMF,EACX,KAAK,GACL,KAAK,EACH,OAAQG,GACN,KAAK,EACL,KAAK,IACHF,EAAI,EACN,KAAK,GAAKN,EACRG,EAAI,GAAKxC,EAAEkD,GAAKZ,GAAKpC,EAAGsC,EAAI,GAAKY,EAAGF,EAAI,IAAKtH,EAAGD,EAAG2G,EAAI,GAAKc,EAAG5D,EAAE0D,EAAG,IAAK,IAAM,IAAKtH,EAAGD,EAAG2G,EAAI,GAAIH,GAClG,MACF,KAAK,GACHe,GAAK,IACP,QACE,GAAIhD,EAAG+C,EAAII,EAAGH,EAAGlG,EAAGrB,EAAGyG,EAAGC,EAAGtG,EAAGmC,EAAG4E,EAAGC,EAAI,GAAIC,EAAI,GAAIV,GAAItG,GAAU,MAAN6G,EAC5D,GAAU,IAANR,EACFH,EAAGgB,EAAGlG,EAAGiG,EAAGA,EAAGF,EAAG/G,EAAGsG,EAAGpE,EAAG8E,QAE3B,OAAc,KAANT,GAAwB,MAAZ3C,EAAEsD,EAAG,GAAa,IAAMX,GAC1C,KAAK,IACL,KAAK,IACL,KAAK,IACHL,EAAGxG,EAAGuH,EAAGA,EAAGrH,GAAKsE,EAAGmD,EAAG3H,EAAGuH,EAAGA,EAAG,EAAG,EAAGlH,EAAGmC,EAAG4E,EAAG/G,EAAGgH,EAAI,GAAIT,GAAIU,GAAIjH,EAAGiH,EAAGV,EAAGpE,EAAGtC,EAAImH,EAAIC,GACtF,MACF,QACEd,EAAGgB,EAAGD,EAAGA,EAAGA,EAAG,CAAC,IAAKD,EAAG,EAAG9E,EAAG8E,IAG1CZ,EAAIC,EAAIG,EAAI,EAAGE,EAAIE,EAAI,EAAGE,EAAII,EAAI,GAAIZ,EAAI3E,EAC1C,MACF,KAAK,GACH2E,EAAI,EAAItC,EAAEkD,GAAIV,EAAIC,EACpB,QACE,GAAIC,EAAI,EACN,GAAS,KAALG,IACAH,OACC,GAAS,KAALG,GAAmB,GAAPH,KAAoB,MAtK1CnC,EAAID,EAAI,EAAIV,EAAEY,IAAMF,GAAK,EAAGF,IAAY,KAANG,IAAaH,EAAK,EAAGD,KAAOI,GAuK3D,SAEJ,OAAQ2C,GAAKlE,EAAG6D,GAAIA,EAAIH,GACtB,KAAK,GACHE,EAAIP,EAAI,EAAI,GAAKa,GAAK,MAAO,GAC7B,MACF,KAAK,GACHhF,EAAEkE,MAAQpC,EAAEkD,GAAK,GAAKN,EAAGA,EAAI,EAC7B,MACF,KAAK,GACK,KAARvB,MAAe6B,GAAKvB,EAAGP,MAAOmB,EAAIlB,IAAKgB,EAAIC,EAAItC,EAAE8C,EAAII,GAAKlB,EAAGV,MAAQuB,IACrE,MACF,KAAK,GACG,KAANJ,GAAoB,GAARzC,EAAEkD,KAAYR,EAAI,IAGxC,OAAO1G,CACT,CACA,SAASqH,EAAG3H,EAAGsB,EAAGrB,EAAGC,EAAGG,EAAGC,EAAG2B,EAAGO,EAAGiE,EAAGC,EAAGC,GACxC,IAAK,IAAIC,EAAIvG,EAAI,EAAGwG,EAAU,IAANxG,EAAUC,EAAI,CAAC,IAAKwG,EAAIvC,EAAGsC,GAAIE,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGF,EAAI7G,IAAK6G,EACnF,IAAK,IAAIG,EAAI,EAAGC,EAAI/C,EAAGpE,EAAG4G,EAAI,EAAGA,EAAIzD,EAAG6D,EAAI/E,EAAE8E,KAAMK,EAAIpH,EAAGkH,EAAIJ,IAAKI,GACjEE,EAAIxD,EAAGoD,EAAI,EAAIH,EAAEK,GAAK,IAAMC,EAAIrD,EAAEqD,EAAG,OAAQN,EAAEK,QAAUT,EAAEQ,KAAOG,GACvE,OAAOrC,EAAG/E,EAAGsB,EAAGrB,EAAS,IAANI,EAAU2C,EAAKR,EAAGiE,EAAGC,EAAGC,EAC7C,CACA,SAASc,EAAGzH,EAAGsB,EAAGrB,GAChB,OAAO8E,EAAG/E,EAAGsB,EAAGrB,EAAG8C,EAAIO,EAnMhBuB,GAmM0BT,EAAGpE,EAAG,GAAI,GAAI,EACjD,CACA,SAAS0H,EAAG1H,EAAGsB,EAAGrB,EAAGC,GACnB,OAAO6E,EAAG/E,EAAGsB,EAAGrB,EAAGgD,EAAImB,EAAGpE,EAAG,EAAGE,GAAIkE,EAAGpE,EAAGE,EAAI,GAAI,GAAIA,EACxD,CACA,SAAS0H,EAAG5H,EAAGsB,GACb,IAAK,IAAIrB,EAAI,GAAIC,EAAIqE,EAAGvE,GAAIK,EAAI,EAAGA,EAAIH,EAAGG,IACxCJ,GAAKqB,EAAEtB,EAAEK,GAAIA,EAAGL,EAAGsB,IAAM,GAC3B,OAAOrB,CACT,CACA,SAAS4H,EAAG7H,EAAGsB,EAAGrB,EAAGC,GACnB,OAAQF,EAAEmF,MACR,IAzPuF,UA0PvF,KAAKlC,EACH,OAAOjD,EAAEwF,OAASxF,EAAEwF,QAAUxF,EAAEgF,MAClC,KAAKjC,EACH,MAAO,GACT,KAAKG,EACH,OAAOlD,EAAEwF,OAASxF,EAAEgF,MAAQ,IAAM4C,EAAG5H,EAAEqF,SAAUnF,GAAK,IACxD,KAAK8C,EACHhD,EAAEgF,MAAQhF,EAAEoF,MAAM0C,KAAK,KAE3B,OAAOxD,EAAErE,EAAI2H,EAAG5H,EAAEqF,SAAUnF,IAAMF,EAAEwF,OAASxF,EAAEgF,MAAQ,IAAM/E,EAAI,IAAM,EACzE,CAcA,SAAS8H,EAAG/H,GACV,IAAIsB,EAAoBoC,OAAOsE,OAAO,MACtC,OAAO,SAAS/H,GACd,YAAgB,IAATqB,EAAErB,KAAkBqB,EAAErB,GAAKD,EAAEC,IAAKqB,EAAErB,EAC7C,CACF,CACA,IAAIgI,EAAK,SAAS3G,EAAGrB,EAAGC,GACtB,IAAK,IAAIG,EAAI,EAAGC,EAAI,EAAGD,EAAIC,EAAGA,EAAIqF,IAAW,KAANtF,GAAkB,KAANC,IAAaL,EAAEC,GAAK,IAAK4F,EAAGxF,IAC7EoF,IACF,OAAOG,EAAGvE,EAAGsD,EACf,EAoBGsD,EAAK,SAAS5G,EAAGrB,GAClB,OAAO+F,EArBD,SAAS1E,EAAGrB,GAClB,IAAIC,GAAK,EAAGG,EAAI,GAChB,UACUyF,EAAGzF,IACT,KAAK,EACG,KAANA,GAAoB,KAARsF,MAAe1F,EAAEC,GAAK,GAAIoB,EAAEpB,IAAM+H,EAAGrD,EAAI,EAAG3E,EAAGC,GAC3D,MACF,KAAK,EACHoB,EAAEpB,IAAM+F,EAAG5F,GACX,MACF,KAAK,EACH,GAAU,KAANA,EAAU,CACZiB,IAAIpB,GAAa,KAARyF,IAAa,MAAQ,GAAI1F,EAAEC,GAAKoB,EAAEpB,GAAGM,OAC9C,KACF,CACF,QACEc,EAAEpB,IAAMoD,EAAGjD,UAEVA,EAAIqF,KACX,OAAOpE,CACT,CACY6G,CAAGpC,EAAGzE,GAAIrB,GACtB,EAAGmI,GAAqB,IAAIC,QAAWC,GAAK,SAAShH,GACnD,GAAiB,SAAXA,EAAE6D,MAAoB7D,EAAE4D,UAE9B5D,EAAEd,OAAS,GAAI,CACb,IAAK,IAAIP,EAAIqB,EAAE0D,MAAO9E,EAAIoB,EAAE4D,OAAQ7E,EAAIiB,EAAEiE,SAAWrF,EAAEqF,QAAUjE,EAAEgE,OAASpF,EAAEoF,KAAiB,SAAXpF,EAAEiF,MACpF,KAAIjF,EAAIA,EAAEgF,QACR,OACJ,IAAyB,IAAnB5D,EAAE8D,MAAM5E,QAAoC,KAApBP,EAAEkE,WAAW,IAAciE,GAAGG,IAAIrI,MAAQG,EAAG,CACzE+H,GAAGI,IAAIlH,GAAG,GACV,IAAK,IAAIhB,EAAI,GAAI2B,EAAIiG,EAAGjI,EAAGK,GAAIkC,EAAItC,EAAEkF,MAAOqB,EAAI,EAAGC,EAAI,EAAGD,EAAIxE,EAAEzB,OAAQiG,IACtE,IAAK,IAAIE,EAAI,EAAGA,EAAInE,EAAEhC,OAAQmG,IAAKD,IACjCpF,EAAE8D,MAAMsB,GAAKpG,EAAEmG,GAAKxE,EAAEwE,GAAG1C,QAAQ,OAAQvB,EAAEmE,IAAMnE,EAAEmE,GAAK,IAAM1E,EAAEwE,EACtE,CACF,CACF,EAAGgC,GAAK,SAASnH,GACf,GAAe,SAAXA,EAAE6D,KAAiB,CACrB,IAAIlF,EAAIqB,EAAE0D,MAEU,MAApB/E,EAAEkE,WAAW,IACO,KAApBlE,EAAEkE,WAAW,KAAc7C,EAAEkE,OAAS,GAAIlE,EAAE0D,MAAQ,GACtD,CACF,EAsCA,SAAS0D,GAAG1I,EAAGsB,GACb,OA7WF,SAAYtB,EAAGsB,GACb,OAAiB,GAAV4C,EAAElE,EAAG,MAAasB,GAAK,EAAI4C,EAAElE,EAAG,KAAO,EAAIkE,EAAElE,EAAG,KAAO,EAAIkE,EAAElE,EAAG,KAAO,EAAIkE,EAAElE,EAAG,GAAK,CAC9F,CA2WU2I,CAAG3I,EAAGsB,IACZ,KAAK,KACH,OAAOwB,EAAI,SAAW9C,EAAIA,EAC5B,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACH,OAAO8C,EAAI9C,EAAIA,EACjB,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACH,OAAO8C,EAAI9C,EAAI6C,EAAK7C,EAAI4C,EAAI5C,EAAIA,EAClC,KAAK,KACL,KAAK,KACH,OAAO8C,EAAI9C,EAAI4C,EAAI5C,EAAIA,EACzB,KAAK,KACH,OAAO8C,EAAI9C,EAAI4C,EAAI,QAAU5C,EAAIA,EACnC,KAAK,KACH,OAAO8C,EAAI9C,EAAI8D,EAAE9D,EAAG,iBAAkB8C,EAAI,WAAaF,EAAI,aAAe5C,EAC5E,KAAK,KACH,OAAO8C,EAAI9C,EAAI4C,EAAI,aAAekB,EAAE9D,EAAG,cAAe,IAAMA,EAC9D,KAAK,KACH,OAAO8C,EAAI9C,EAAI4C,EAAI,iBAAmBkB,EAAE9D,EAAG,4BAA6B,IAAMA,EAChF,KAAK,KACH,OAAO8C,EAAI9C,EAAI4C,EAAIkB,EAAE9D,EAAG,SAAU,YAAcA,EAClD,KAAK,KACH,OAAO8C,EAAI9C,EAAI4C,EAAIkB,EAAE9D,EAAG,QAAS,kBAAoBA,EACvD,KAAK,KACH,OAAO8C,EAAI,OAASgB,EAAE9D,EAAG,QAAS,IAAM8C,EAAI9C,EAAI4C,EAAIkB,EAAE9D,EAAG,OAAQ,YAAcA,EACjF,KAAK,KACH,OAAO8C,EAAIgB,EAAE9D,EAAG,qBAAsB,KAAO8C,EAAI,MAAQ9C,EAC3D,KAAK,KACH,OAAO8D,EAAEA,EAAEA,EAAE9D,EAAG,eAAgB8C,EAAI,MAAO,cAAeA,EAAI,MAAO9C,EAAG,IAAMA,EAChF,KAAK,KACL,KAAK,KACH,OAAO8D,EAAE9D,EAAG,oBAAqB8C,EAAI,UACvC,KAAK,KACH,OAAOgB,EAAEA,EAAE9D,EAAG,oBAAqB8C,EAAI,cAAgBF,EAAI,gBAAiB,aAAc,WAAaE,EAAI9C,EAAIA,EACjH,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACH,OAAO8D,EAAE9D,EAAG,kBAAmB8C,EAAI,QAAU9C,EAC/C,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACH,GAAIsE,EAAEtE,GAAK,EAAIsB,EAAI,EACjB,OAAQ4C,EAAElE,EAAGsB,EAAI,IACf,KAAK,IACH,GAAoB,KAAhB4C,EAAElE,EAAGsB,EAAI,GACX,MACJ,KAAK,IACH,OAAOwC,EAAE9D,EAAG,mBAAoB,KAAO8C,EAAI,UAAYD,GAAqB,KAAfqB,EAAElE,EAAGsB,EAAI,GAAY,KAAO,UAAYtB,EACvG,KAAK,IACH,OAAQgE,EAAGhE,EAAG,WAAa0I,GAAG5E,EAAE9D,EAAG,UAAW,kBAAmBsB,GAAKtB,EAAIA,EAEhF,MACF,KAAK,KACH,GAAoB,MAAhBkE,EAAElE,EAAGsB,EAAI,GACX,MACJ,KAAK,KACH,OAAQ4C,EAAElE,EAAGsE,EAAEtE,GAAK,IAAMgE,EAAGhE,EAAG,eAAiB,MAC/C,KAAK,IACH,OAAO8D,EAAE9D,EAAG,IAAK,IAAM8C,GAAK9C,EAC9B,KAAK,IACH,OAAO8D,EAAE9D,EAAG,wBAAyB,KAAO8C,GAAkB,KAAboB,EAAElE,EAAG,IAAa,UAAY,IAAM,UAAY8C,EAAI,SAAWF,EAAI,WAAa5C,EAErI,MACF,KAAK,KACH,OAAQkE,EAAElE,EAAGsB,EAAI,KACf,KAAK,IACH,OAAOwB,EAAI9C,EAAI4C,EAAIkB,EAAE9D,EAAG,qBAAsB,MAAQA,EACxD,KAAK,IACH,OAAO8C,EAAI9C,EAAI4C,EAAIkB,EAAE9D,EAAG,qBAAsB,SAAWA,EAC3D,KAAK,GACH,OAAO8C,EAAI9C,EAAI4C,EAAIkB,EAAE9D,EAAG,qBAAsB,MAAQA,EAE1D,OAAO8C,EAAI9C,EAAI4C,EAAI5C,EAAIA,EAE3B,OAAOA,CACT,CACA,IAwGI4I,GAzEDC,GAAK,CA/BC,SAASvH,EAAGrB,EAAGC,EAAGG,GACzB,GAAIiB,EAAEd,QAAU,IAAMc,EAAEkE,OACtB,OAAQlE,EAAE6D,MACR,KAAKlC,EACH3B,EAAEkE,OAASkD,GAAGpH,EAAE0D,MAAO1D,EAAEd,QACzB,MACF,KAAK0C,EACH,OAAO0E,EAAG,CAACnC,EAAGnE,EAAG,CACf0D,MAAOlB,EAAExC,EAAE0D,MAAO,IAAK,IAAMlC,MAC1BzC,GACP,KAAK2C,EACH,GAAI1B,EAAEd,OACJ,OA5cV,SAAYR,EAAGsB,GACb,OAAOtB,EAAE8I,IAAIxH,GAAGwG,KAAK,GACvB,CA0ciBiB,CAAGzH,EAAE8D,OAAO,SAAS9E,GAC1B,OAreZ,SAAYN,EAAGsB,GACb,OAAQtB,EAAIsB,EAAE0H,KAAKhJ,IAAMA,EAAE,GAAKA,CAClC,CAmeoBiJ,CAAG3I,EAAG,0BACZ,IAAK,aACL,IAAK,cACH,OAAOsH,EAAG,CAACnC,EAAGnE,EAAG,CACf8D,MAAO,CAACtB,EAAExD,EAAG,cAAe,gBACzBD,GACP,IAAK,gBACH,OAAOuH,EAAG,CAACnC,EAAGnE,EAAG,CACf8D,MAAO,CAACtB,EAAExD,EAAG,aAAc,IAAMwC,EAAI,eACnC2C,EAAGnE,EAAG,CACR8D,MAAO,CAACtB,EAAExD,EAAG,aAAc,eACzBmF,EAAGnE,EAAG,CACR8D,MAAO,CAACtB,EAAExD,EAAG,aAAcsC,EAAI,gBAC5BvC,GAET,MAAO,EACT,IAEV,GAAc6I,GAAK,SAAS5H,GAC1B,IAAIrB,EAAIqB,EAAED,IAIV,GAAU,QAANpB,EAAa,CACf,IAAIC,EAAIyB,SAASwH,iBAAiB,qCAClCC,MAAM7H,UAAUE,QAAQ4H,KAAKnJ,GAAG,SAAS8G,IAEnB,IADZA,EAAEsC,aAAa,gBACrBrF,QAAQ,OAAgBtC,SAAS4H,KAAKzH,YAAYkF,GAAIA,EAAEnF,aAAa,SAAU,IACnF,GACF,CACA,IAAIxB,EAAIiB,EAAEkI,eAAiBX,GAG3B,IAAY5G,EAAR3B,EAAI,CAAC,EAAMkC,EAAI,GACnBP,EAAIX,EAAEV,WAAae,SAAS4H,KAAMH,MAAM7H,UAAUE,QAAQ4H,KAGxD1H,SAASwH,iBAAiB,wBAA0BlJ,EAAI,QACxD,SAAS+G,GACP,IAAK,IAAIC,EAAID,EAAEsC,aAAa,gBAAgBG,MAAM,KAAMvC,EAAI,EAAGA,EAAID,EAAEzG,OAAQ0G,IAC3E5G,EAAE2G,EAAEC,KAAM,EACZ1E,EAAExB,KAAKgG,EACT,IAEF,IAAIP,EAOEE,EAlRI3G,EAkRD4G,EAAI,CAACiB,GAlRJ7H,EAoRD,SAASgH,GACdL,EAAEjF,OAAOsF,EACX,EArRK,SAAS1F,GACdA,EAAE2D,OAAS3D,EAAIA,EAAEkE,SAAWxF,EAAEsB,EAChC,IAmROuF,EA9RT,SAAY7G,GACV,IAAIsB,EAAIiD,EAAGvE,GACX,OAAO,SAASC,EAAGC,EAAGG,EAAGC,GACvB,IAAK,IAAI2B,EAAI,GAAIO,EAAI,EAAGA,EAAIlB,EAAGkB,IAC7BP,GAAKjC,EAAEwC,GAAGvC,EAAGC,EAAGG,EAAGC,IAAM,GAC3B,OAAO2B,CACT,CACF,CAuRayH,CAXA,CAACpB,GAAIG,IAWAkB,OAAOtJ,EAAGuG,IAGxBH,EAAI,SAASQ,EAAGC,EAAGC,EAAGC,GACpBT,EAAIQ,EAJ2B,SAASF,GACjCW,EAAGrB,EAAGU,GAAIJ,EACnB,CAMMC,CAAEG,EAAIA,EAAI,IAAMC,EAAE0C,OAAS,IAAM1C,EAAE0C,QAASxC,IAAML,EAAE8C,SAAS3C,EAAE4C,OAAQ,EAC7E,EAEF,IAAI/C,EAAI,CACN1F,IAAKpB,EACLiC,MAAO,IAAInC,EAAG,CACZsB,IAAKpB,EACLW,UAAWqB,EACXb,MAAOE,EAAEF,MACTF,OAAQI,EAAEJ,OACVP,QAASW,EAAEX,QACXF,eAAgBa,EAAEb,iBAEpBW,MAAOE,EAAEF,MACTyI,SAAUvJ,EACVyJ,WAAY,CAAC,EACbrI,OAAQ+E,GAEV,OAAOM,EAAE7E,MAAMV,QAAQgB,GAAIuE,CAC7B,EAAGiD,GAAK,CAAEC,QAAS,CAAC,GAAKC,GAAI,CAAC,EAwKUF,GAAGC,QA9J3C,WACE,GAAIrB,GACF,OAAOsB,GACTtB,GAAK,EACL,IAAI5I,EAAqB,mBAAVmK,QAAwBA,OAAOC,IAAK9I,EAAItB,EAAImK,OAAOC,IAAI,iBAAmB,MAAOnK,EAAID,EAAImK,OAAOC,IAAI,gBAAkB,MAAOlK,EAAIF,EAAImK,OAAOC,IAAI,kBAAoB,MAAO/J,EAAIL,EAAImK,OAAOC,IAAI,qBAAuB,MAAO9J,EAAIN,EAAImK,OAAOC,IAAI,kBAAoB,MAAOnI,EAAIjC,EAAImK,OAAOC,IAAI,kBAAoB,MAAO5H,EAAIxC,EAAImK,OAAOC,IAAI,iBAAmB,MAAO3D,EAAIzG,EAAImK,OAAOC,IAAI,oBAAsB,MAAO1D,EAAI1G,EAAImK,OAAOC,IAAI,yBAA2B,MAAOzD,EAAI3G,EAAImK,OAAOC,IAAI,qBAAuB,MAAOxD,EAAI5G,EAAImK,OAAOC,IAAI,kBAAoB,MAAOvD,EAAI7G,EAAImK,OAAOC,IAAI,uBAAyB,MAAOtD,EAAI9G,EAAImK,OAAOC,IAAI,cAAgB,MAAOrD,EAAI/G,EAAImK,OAAOC,IAAI,cAAgB,MAAOpD,EAAIhH,EAAImK,OAAOC,IAAI,eAAiB,MAAOnD,EAAIjH,EAAImK,OAAOC,IAAI,qBAAuB,MAAOlD,EAAIlH,EAAImK,OAAOC,IAAI,mBAAqB,MAAOjD,EAAInH,EAAImK,OAAOC,IAAI,eAAiB,MAC92B,SAAShD,EAAEE,GACT,GAAgB,iBAALA,GAAuB,OAANA,EAAY,CACtC,IAAIC,EAAID,EAAE+C,SACV,OAAQ9C,GACN,KAAKjG,EACH,OAAQgG,EAAIA,EAAEnC,MACZ,KAAKsB,EACL,KAAKC,EACL,KAAKxG,EACL,KAAKI,EACL,KAAKD,EACL,KAAKuG,EACH,OAAOU,EACT,QACE,OAAQA,EAAIA,GAAKA,EAAE+C,UACjB,KAAK7H,EACL,KAAKmE,EACL,KAAKI,EACL,KAAKD,EACL,KAAK7E,EACH,OAAOqF,EACT,QACE,OAAOC,GAGjB,KAAKtH,EACH,OAAOsH,EAEb,CACF,CACA,SAASF,EAAEC,GACT,OAAOF,EAAEE,KAAOZ,CAClB,CACA,OAAOwD,GAAEI,UAAY7D,EAAGyD,GAAEK,eAAiB7D,EAAGwD,GAAEM,gBAAkBhI,EAAG0H,GAAEO,gBAAkBxI,EAAGiI,GAAEQ,QAAUpJ,EAAG4I,GAAES,WAAahE,EAAGuD,GAAEU,SAAW1K,EAAGgK,GAAEW,KAAO9D,EAAGmD,GAAEY,KAAOhE,EAAGoD,GAAEa,OAAS9K,EAAGiK,GAAEc,SAAW1K,EAAG4J,GAAEe,WAAa5K,EAAG6J,GAAEgB,SAAWtE,EAAGsD,GAAEiB,YAAc,SAAS7D,GAC5P,OAAOD,EAAEC,IAAMF,EAAEE,KAAOb,CAC1B,EAAGyD,GAAEkB,iBAAmB/D,EAAG6C,GAAEmB,kBAAoB,SAAS/D,GACxD,OAAOF,EAAEE,KAAO9E,CAClB,EAAG0H,GAAEoB,kBAAoB,SAAShE,GAChC,OAAOF,EAAEE,KAAOrF,CAClB,EAAGiI,GAAEqB,UAAY,SAASjE,GACxB,MAAmB,iBAALA,GAAuB,OAANA,GAAcA,EAAE+C,WAAa/I,CAC9D,EAAG4I,GAAEsB,aAAe,SAASlE,GAC3B,OAAOF,EAAEE,KAAOX,CAClB,EAAGuD,GAAEuB,WAAa,SAASnE,GACzB,OAAOF,EAAEE,KAAOpH,CAClB,EAAGgK,GAAEwB,OAAS,SAASpE,GACrB,OAAOF,EAAEE,KAAOP,CAClB,EAAGmD,GAAEyB,OAAS,SAASrE,GACrB,OAAOF,EAAEE,KAAOR,CAClB,EAAGoD,GAAE0B,SAAW,SAAStE,GACvB,OAAOF,EAAEE,KAAOrH,CAClB,EAAGiK,GAAE2B,WAAa,SAASvE,GACzB,OAAOF,EAAEE,KAAOhH,CAClB,EAAG4J,GAAE4B,aAAe,SAASxE,GAC3B,OAAOF,EAAEE,KAAOjH,CAClB,EAAG6J,GAAE6B,WAAa,SAASzE,GACzB,OAAOF,EAAEE,KAAOV,CAClB,EAAGsD,GAAE8B,mBAAqB,SAAS1E,GACjC,MAAmB,iBAALA,GAA6B,mBAALA,GAAmBA,IAAMpH,GAAKoH,IAAMZ,GAAKY,IAAMhH,GAAKgH,IAAMjH,GAAKiH,IAAMV,GAAKU,IAAMT,GAAiB,iBAALS,GAAuB,OAANA,IAAeA,EAAE+C,WAAatD,GAAKO,EAAE+C,WAAavD,GAAKQ,EAAE+C,WAAapI,GAAKqF,EAAE+C,WAAa7H,GAAK8E,EAAE+C,WAAa1D,GAAKW,EAAE+C,WAAapD,GAAKK,EAAE+C,WAAanD,GAAKI,EAAE+C,WAAalD,GAAKG,EAAE+C,WAAarD,EACnV,EAAGkD,GAAE+B,OAAS7E,EAAG8C,EACnB,CA6FqDgC,GACrD,IAAqBC,GAAZnC,GAAGC,QAaTmC,GAAK,CAAC,EACTA,GAAGD,GAAGxB,YAd6B,CACjCN,UAAU,EACVgC,QAAQ,EACRC,cAAc,EACdC,aAAa,EACbC,WAAW,GAUbJ,GAAGD,GAAGrB,MATE,CACNT,UAAU,EACVoC,SAAS,EACTH,cAAc,EACdC,aAAa,EACbC,WAAW,EACXrH,MAAM,GAWR,IAAIuH,GAAK,SAASpL,EAAGrB,EAAGC,GACtB,IAAIG,EAAIiB,EAAED,IAAM,IAAMpB,EAAE6J,MAMjB,IAAN5J,QAIiC,IAApBoB,EAAEyI,WAAW1J,KAAkBiB,EAAEyI,WAAW1J,GAAKJ,EAAE2J,OACnE,EA6BA,IAAI+C,GAAK,CACPC,wBAAyB,EACzBC,kBAAmB,EACnBC,iBAAkB,EAClBC,iBAAkB,EAClBC,QAAS,EACTC,aAAc,EACdC,gBAAiB,EACjBC,YAAa,EACbC,QAAS,EACTC,KAAM,EACNC,SAAU,EACVC,aAAc,EACdC,WAAY,EACZC,aAAc,EACdC,UAAW,EACXC,QAAS,EACTC,WAAY,EACZC,YAAa,EACbC,aAAc,EACdC,WAAY,EACZC,cAAe,EACfC,eAAgB,EAChBC,gBAAiB,EACjBC,UAAW,EACXC,cAAe,EACfC,aAAc,EACdC,iBAAkB,EAClBC,WAAY,EACZC,WAAY,EACZC,QAAS,EACTC,MAAO,EACPC,QAAS,EACTC,QAAS,EACTC,OAAQ,EACRC,OAAQ,EACRC,KAAM,EACNC,gBAAiB,EAEjBC,YAAa,EACbC,aAAc,EACdC,YAAa,EACbC,gBAAiB,EACjBC,iBAAkB,EAClBC,iBAAkB,EAClBC,cAAe,EACfC,YAAa,GAIiH,gEAC9H,OAA2B,KAApBlO,EAAE6C,WAAW,EACtB,EAAGsL,GAAK,SAASnO,GACf,OAAY,MAALA,GAAyB,kBAALA,CAC7B,EAAGoO,GAAqB3H,GAAG,SAAS/H,GAClC,OAAO2P,GAAG3P,GAAKA,EAAIA,EAAE+D,QAAQ6L,GAAI,OAAOC,aAC1C,IAAIC,GAAK,SAASxO,EAAGrB,GACnB,OAAQqB,GACN,IAAK,YACL,IAAK,gBACH,GAAgB,iBAALrB,EACT,OAAOA,EAAE8D,QAAQgM,IAAI,SAAS7P,EAAGG,EAAGC,GAClC,OAAO0P,GAAI,CACTlG,KAAMzJ,EACNuJ,OAAQtJ,EACR2P,KAAMD,IACL3P,CACL,IAEN,OAAiB,IAAVsM,GAAGrL,IAAaqO,GAAGrO,IAAkB,iBAALrB,GAAuB,IAANA,EAAqBA,EAAXA,EAAI,IACxE,EAaA,SAASiQ,GAAGlQ,EAAGsB,EAAGrB,GAChB,GAAS,MAALA,EACF,MAAO,GACT,QAA2B,IAAvBA,EAAEkQ,iBAGJ,OAAOlQ,EAET,cAAeA,GACb,IAAK,UACH,MAAO,GACT,IAAK,SACH,GAAe,IAAXA,EAAEmQ,KACJ,OAAOJ,GAAI,CACTlG,KAAM7J,EAAE6J,KACRF,OAAQ3J,EAAE2J,OACVqG,KAAMD,IACL/P,EAAE6J,KACP,QAAiB,IAAb7J,EAAE2J,OAAmB,CACvB,IAAI1J,EAAID,EAAEgQ,KACV,QAAU,IAAN/P,EACF,UAAa,IAANA,GACL8P,GAAI,CACFlG,KAAM5J,EAAE4J,KACRF,OAAQ1J,EAAE0J,OACVqG,KAAMD,IACL9P,EAAIA,EAAE+P,KAEb,OADQhQ,EAAE2J,OAAS,GAErB,CACA,OA8BN,SAAY5J,EAAGsB,EAAGrB,GAChB,IAAIC,EAAI,GACR,GAAIkJ,MAAMiH,QAAQpQ,GAChB,IAAK,IAAII,EAAI,EAAGA,EAAIJ,EAAEO,OAAQH,IAC5BH,GAAKgQ,GAAGlQ,EAAGsB,EAAGrB,EAAEI,IAAM,SAExB,IAAK,IAAIC,KAAKL,EAAG,CACf,IAAIgC,EAAIhC,EAAEK,GACV,GAAgB,iBAAL2B,EACJ,MAALX,QAAsB,IAATA,EAAEW,GAAgB/B,GAAKI,EAAI,IAAMgB,EAAEW,GAAK,IAAMwN,GAAGxN,KAAO/B,GAAKwP,GAAGpP,GAAK,IAAMwP,GAAGxP,EAAG2B,GAAK,UAInG,IAAImH,MAAMiH,QAAQpO,IAAqB,iBAARA,EAAE,IAAwB,MAALX,QAAyB,IAAZA,EAAEW,EAAE,IAGhE,CACH,IAAIwE,EAAIyJ,GAAGlQ,EAAGsB,EAAGW,GACjB,OAAQ3B,GACN,IAAK,YACL,IAAK,gBACHJ,GAAKwP,GAAGpP,GAAK,IAAMmG,EAAI,IACvB,MAEF,QACmFvG,GAAKI,EAAI,IAAMmG,EAAI,IAE1G,MAbE,IAAK,IAAIjE,EAAI,EAAGA,EAAIP,EAAEzB,OAAQgC,IAC5BiN,GAAGxN,EAAEO,MAAQtC,GAAKwP,GAAGpP,GAAK,IAAMwP,GAAGxP,EAAG2B,EAAEO,IAAM,IActD,CACF,OAAOtC,CACT,CA7DaoQ,CAAGtQ,EAAGsB,EAAGrB,GAElB,IAAK,WACH,QAAU,IAAND,EAAc,CAChB,IAAIM,EAAI0P,GAAG/N,EAAIhC,EAAED,GACjB,OAAOgQ,GAAI1P,EAAG4P,GAAGlQ,EAAGsB,EAAGW,EACzB,EAmBJ,GAAS,MAALX,EACF,OAAOrB,EACT,IAAIyG,EAAIpF,EAAErB,GACV,YAAa,IAANyG,EAAeA,EAAIzG,CAC5B,CAiCA,IAEI+P,GAFAO,GAAK,iCAkCyDC,KAA1D,sBAA2B,sBAF3B,SAASlP,GACf,OAAOA,GACT,EAAiFmP,GAAK,CAAC,EAAEC,eAAgBC,IAAqB,0BAOrHC,YAAc,IAAsB1H,GAAG,CAC5C7H,IAAK,QACF,MAGPsP,GAAGE,SACH,IAwEIC,GAAIC,GAuDJC,GA/HAC,GAAK,SAAS3P,GAChB,OAAuB,iBAAG,SAASrB,EAAGC,GACpC,IAAIG,GAAI,gBAAGsQ,IACX,OAAOrP,EAAErB,EAAGI,EAAGH,EACjB,GACF,EAAGgR,IAAqB,mBAAG,CAAC,GAuBzBC,GAAK,qCAAkFC,GAAK,SAAS9P,EAAGrB,GAIzG,IAAIC,EAAI,CAAC,EACT,IAAK,IAAIG,KAAKJ,EACZwQ,GAAGpH,KAAKpJ,EAAGI,KAAOH,EAAEG,GAAKJ,EAAEI,IAK7B,OAJIH,EAAEiR,IAAM7P,EAILpB,CACT,EAAGmR,GAAK,SAAS/P,GACf,IAAIrB,EAAIqB,EAAEgQ,MAAOpR,EAAIoB,EAAEiQ,WAAYlR,EAAIiB,EAAEkQ,YACzC,OAAO9E,GAAGzM,EAAGC,EAAGG,GAAImQ,IAAG,WACrB,OAtSI,SAASlP,EAAGrB,EAAGC,GACrBwM,GAAGpL,EAAGrB,EAAGC,GACT,IAAIG,EAAIiB,EAAED,IAAM,IAAMpB,EAAE6J,KACxB,QAA2B,IAAvBxI,EAAEuI,SAAS5J,EAAE6J,MAAkB,CACjC,IAAIxJ,EAAIL,EACR,GACEqB,EAAEI,OAAOzB,IAAMK,EAAI,IAAMD,EAAI,GAAIC,EAAGgB,EAAEY,OAAO,GAAK5B,EAAIA,EAAE2P,gBAC7C,IAAN3P,EACT,CACF,CA6RWmR,CAAGxR,EAAGC,EAAGG,EAClB,IAAI,IACN,EAAGqR,GAAqBT,IAAG,SAASjR,EAAGsB,EAAGrB,GACxC,IAAIC,EAAIF,EAAE2R,IACE,iBAALzR,QAAqC,IAApBoB,EAAEyI,WAAW7J,KAAkBA,EAAIoB,EAAEyI,WAAW7J,IACxE,IAAIG,EAAIL,EAAEmR,IAAK7Q,EAAI,CAACJ,GAAI+B,EAAI,GACN,iBAAfjC,EAAE4R,UAAwB3P,EA9TnC,SAAYjC,EAAGsB,EAAGrB,GAChB,IAAIC,EAAI,GACR,OAAOD,EAAEwJ,MAAM,KAAKhI,SAAQ,SAASpB,QAC1B,IAATL,EAAEK,GAAgBiB,EAAEN,KAAKhB,EAAEK,GAAK,KAAOH,GAAKG,EAAI,GAClD,IAAIH,CACN,CAyTuC2R,CAAGvQ,EAAEyI,WAAYzJ,EAAGN,EAAE4R,WAA4B,MAAf5R,EAAE4R,YAAsB3P,EAAIjC,EAAE4R,UAAY,KAClH,IAAIpP,EA/FM,SAASlB,EAAGrB,EAAGC,GACzB,GAAiB,IAAboB,EAAEd,QAA+B,iBAARc,EAAE,IAA2B,OAATA,EAAE,SAA+B,IAAhBA,EAAE,GAAGsI,OACrE,OAAOtI,EAAE,GACX,IAAIjB,GAAI,EAAIC,EAAI,GAChB0P,QAAI,EACJ,IAAI/N,EAAIX,EAAE,GACL,MAALW,QAAuB,IAAVA,EAAE6P,KAAkBzR,GAAI,EAAIC,GAAK4P,GAAGhQ,EAAGD,EAAGgC,IAAsF3B,GAAK2B,EAAE,GACpJ,IAAK,IAAIO,EAAI,EAAGA,EAAIlB,EAAEd,OAAQgC,IAC5BlC,GAAK4P,GAAGhQ,EAAGD,EAAGqB,EAAEkB,IAAKnC,IAAqFC,GAAK2B,EAAEO,IAI9G+N,GAAGwB,UAAY,EACpB,IAAK,IAAYpL,EAARD,EAAI,GAA4B,QAApBC,EAAI4J,GAAGvH,KAAK1I,KAC/BoG,GAAK,IACLC,EAAE,GACJ,IAAIC,EApNN,SAAY5G,GACV,IAAK,IAAWC,EAAPqB,EAAI,EAAMpB,EAAI,EAAGG,EAAIL,EAAEQ,OAAQH,GAAK,IAAKH,EAAGG,GAAK,EACwEJ,EAClH,YAAT,OADLA,EAAsB,IAAlBD,EAAEmE,WAAWjE,IAAgC,IAApBF,EAAEmE,aAAajE,KAAa,GAAyB,IAApBF,EAAEmE,aAAajE,KAAa,IAA0B,IAApBF,EAAEmE,aAAajE,KAAa,MACnF,OAAZD,IAAM,KAAe,IACxCqB,EACI,YAAT,OAFkDrB,GACvDA,IAAM,MACmC,OAAZA,IAAM,KAAe,IACpC,YAAT,MAAJqB,IAAwC,OAAZA,IAAM,KAAe,IACpD,OAAQjB,GACN,KAAK,EACHiB,IAA4B,IAAtBtB,EAAEmE,WAAWjE,EAAI,KAAa,GACtC,KAAK,EACHoB,IAA4B,IAAtBtB,EAAEmE,WAAWjE,EAAI,KAAa,EACtC,KAAK,EACyBoB,EACd,YAAT,OADLA,GAAuB,IAAlBtB,EAAEmE,WAAWjE,MACuB,OAAZoB,IAAM,KAAe,IAEtD,SAAsBA,EACR,YAAT,OADEA,GAAKA,IAAM,MACuB,OAAZA,IAAM,KAAe,KAAWA,IAAM,MAAQ,GAAG0Q,SAAS,GACzF,CAkMUC,CAAG3R,GAAKoG,EAChB,MAQI,CACFoD,KAAMlD,EACNgD,OAAQtJ,EACR2P,KAAMD,GAEV,CAiEUkC,CAAG5R,OAAG,GAAQ,gBAAG4Q,KAKzBjP,GAAKX,EAAED,IAAM,IAAMmB,EAAEsH,KACrB,IAAIpD,EAAI,CAAC,EACT,IAAK,IAAIC,KAAK3G,EACZyQ,GAAGpH,KAAKrJ,EAAG2G,IAAY,QAANA,GAAeA,IAAMwK,KAA8DzK,EAAEC,GAAK3G,EAAE2G,IAC/G,OAAOD,EAAEyL,IAAMlS,EAAGyG,EAAEkL,UAAY3P,GAAmB,mBAAG,WAAI,MAAsB,mBAAGoP,GAAI,CACrFC,MAAOhQ,EACPiQ,WAAY/O,EACZgP,YAAyB,iBAALnR,KACF,mBAAGA,EAAGqG,GAC5B,IAEI0L,GAAK,CAAEnI,QAAS,CAAC,GAAKoI,GAAK,CAAC,EAOhC,SAASC,KACP,GAAIvB,GACF,OAAOD,GACTC,GAAK,EACL,IAAI/Q,EAAI0D,OAAO6O,sBAAuBjR,EAAIoC,OAAOnC,UAAUmP,eAAgBzQ,EAAIyD,OAAOnC,UAAUiR,qBA4BhG,OAAO1B,GAtBP,WACE,IACE,IAAKpN,OAAOC,OACV,OAAO,EACT,IAAIrD,EAAI,IAAIiD,OAAO,OACnB,GAAIjD,EAAE,GAAK,KAA2C,MAArCoD,OAAO+O,oBAAoBnS,GAAG,GAC7C,OAAO,EACT,IAAK,IAAI2B,EAAI,CAAC,EAAGO,EAAI,EAAGA,EAAI,GAAIA,IAC9BP,EAAE,IAAMsB,OAAOC,aAAahB,IAAMA,EAIpC,GAAmB,eAHXkB,OAAO+O,oBAAoBxQ,GAAG6G,KAAI,SAASnC,GACjD,OAAO1E,EAAE0E,EACX,IACMmB,KAAK,IACT,OAAO,EACT,IAAIpB,EAAI,CAAC,EACT,MAAO,uBAAuB+C,MAAM,IAAIhI,SAAQ,SAASkF,GACvDD,EAAEC,GAAKA,CACT,IAAmD,yBAA/CjD,OAAOgP,KAAKhP,OAAOC,OAAO,CAAC,EAAG+C,IAAIoB,KAAK,GAC7C,CAAE,MACA,OAAO,CACT,CACF,CACYzH,GAAMqD,OAAOC,OAAS,SAASrD,EAAG2B,GAC5C,IAAK,IAAIO,EAAakE,EAAVD,EA5Bd,SAAWnG,GACT,GAAS,MAALA,EACF,MAAM,IAAIqS,UAAU,yDACtB,OAAOjP,OAAOpD,EAChB,CAwBkBJ,CAAEI,GAAOqG,EAAI,EAAGA,EAAIiM,UAAUpS,OAAQmG,IAAK,CAEzD,IAAK,IAAIC,KADTpE,EAAIkB,OAAOkP,UAAUjM,IAEnBrF,EAAE+H,KAAK7G,EAAGoE,KAAOH,EAAEG,GAAKpE,EAAEoE,IAC5B,GAAI5G,EAAG,CACL0G,EAAI1G,EAAEwC,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIH,EAAElG,OAAQqG,IAC5B5G,EAAEoJ,KAAK7G,EAAGkE,EAAEG,MAAQJ,EAAEC,EAAEG,IAAMrE,EAAEkE,EAAEG,IACtC,CACF,CACA,OAAOJ,CACT,EAAGqK,EACL,CAgmBwCsB,GAAGnI,QAtlB3C,WACE,GAAI+G,GACF,OAAOqB,GACTrB,GAAK,EAAGsB,KACR,IAAItS,EAAI,EAAIsB,EAAI,MAChB,GAAI+Q,GAAGzH,SAAW,MAAwB,mBAAVT,QAAwBA,OAAOC,IAAK,CAClE,IAAInK,EAAIkK,OAAOC,IACf9I,EAAIrB,EAAE,iBAAkBoS,GAAGzH,SAAW3K,EAAE,iBAC1C,CACA,IAAIC,EAAIF,EAAE6S,mDAAmDC,kBAAmBzS,EAAIqD,OAAOnC,UAAUmP,eAAgBpQ,EAAI,CAAEe,KAAK,EAAI8Q,KAAK,EAAIY,QAAQ,EAAIC,UAAU,GACnK,SAAS/Q,EAAEO,EAAGiE,EAAGC,GACf,IAAIC,EAAGC,EAAI,CAAC,EAAGC,EAAI,KAAMC,EAAI,KAE7B,IAAKH,UADC,IAAND,IAAiBG,EAAI,GAAKH,QAAc,IAAVD,EAAEpF,MAAmBwF,EAAI,GAAKJ,EAAEpF,UAAgB,IAAVoF,EAAE0L,MAAmBrL,EAAIL,EAAE0L,KACrF1L,EACRpG,EAAEgJ,KAAK5C,EAAGE,KAAOrG,EAAEoQ,eAAe/J,KAAOC,EAAED,GAAKF,EAAEE,IACpD,GAAInE,GAAKA,EAAE8J,aACT,IAAK3F,KAAKF,EAAIjE,EAAE8J,kBACL,IAAT1F,EAAED,KAAkBC,EAAED,GAAKF,EAAEE,IACjC,MAAO,CAAE0D,SAAU/I,EAAG6D,KAAM3C,EAAGnB,IAAKwF,EAAGsL,IAAKrL,EAAG1B,MAAOwB,EAAGqM,OAAQ/S,EAAEgT,QACrE,CACA,OAAOb,GAAGc,IAAMlR,EAAGoQ,GAAGe,KAAOnR,EAAGoQ,EAClC,CAikBqDgB,GACrD,IAAIC,GAAKlB,GAAGnI,QACZ,SAASsJ,GAAGvT,EAAGsB,EAAGrB,GAChB,OAAOwQ,GAAGpH,KAAK/H,EAAG,OAASgS,GAAGH,IAAIzB,GAAIN,GAAGpR,EAAGsB,GAAIrB,GAAKqT,GAAGH,IAAInT,EAAGsB,EAAGrB,EACpE,CAIA,MAAMuT,IAAK,mBAAG,MACd,SAASC,IACPC,UAAW1T,EACXqF,SAAU/D,IAEV,OAAuBiS,GAAGC,GAAG3C,SAAU,CAAE7L,MAAOhF,EAAGqF,SAAU/D,GAC/D,CACA,SAASqS,KACP,MAAM3T,GAAI,gBAAGwT,IACb,GAZF,SAAYxT,GACV,OAAY,MAALA,CACT,CAUM4T,CAAG5T,GACL,MAAM,IAAI6T,MAAM,mDAClB,MAAO,CACLH,UAAW1T,EAEf","sources":["webpack://inflearn-static/./node_modules/@inflearn/analytics/dist/index.mjs"],"sourcesContent":["import * as Cr from \"react\";\nimport Ur, { createContext as ir, forwardRef as xt, useContext as sr, createElement as He, Fragment as St } from \"react\";\nfunction Ct(e) {\n if (e.sheet)\n return e.sheet;\n for (var r = 0; r < document.styleSheets.length; r++)\n if (document.styleSheets[r].ownerNode === e)\n return document.styleSheets[r];\n}\nfunction Ot(e) {\n var r = document.createElement(\"style\");\n return r.setAttribute(\"data-emotion\", e.key), e.nonce !== void 0 && r.setAttribute(\"nonce\", e.nonce), r.appendChild(document.createTextNode(\"\")), r.setAttribute(\"data-s\", \"\"), r;\n}\nvar Tt = /* @__PURE__ */ function() {\n function e(n) {\n var a = this;\n this._insertTag = function(o) {\n var i;\n a.tags.length === 0 ? a.insertionPoint ? i = a.insertionPoint.nextSibling : a.prepend ? i = a.container.firstChild : i = a.before : i = a.tags[a.tags.length - 1].nextSibling, a.container.insertBefore(o, i), a.tags.push(o);\n }, this.isSpeedy = n.speedy === void 0 ? process.env.NODE_ENV === \"production\" : n.speedy, this.tags = [], this.ctr = 0, this.nonce = n.nonce, this.key = n.key, this.container = n.container, this.prepend = n.prepend, this.insertionPoint = n.insertionPoint, this.before = null;\n }\n var r = e.prototype;\n return r.hydrate = function(a) {\n a.forEach(this._insertTag);\n }, r.insert = function(a) {\n this.ctr % (this.isSpeedy ? 65e3 : 1) === 0 && this._insertTag(Ot(this));\n var o = this.tags[this.tags.length - 1];\n if (process.env.NODE_ENV !== \"production\") {\n var i = a.charCodeAt(0) === 64 && a.charCodeAt(1) === 105;\n i && this._alreadyInsertedOrderInsensitiveRule && console.error(`You're attempting to insert the following rule:\n` + a + \"\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.\"), this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !i;\n }\n if (this.isSpeedy) {\n var f = Ct(o);\n try {\n f.insertRule(a, f.cssRules.length);\n } catch (c) {\n process.env.NODE_ENV !== \"production\" && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(a) && console.error('There was a problem inserting the following rule: \"' + a + '\"', c);\n }\n } else\n o.appendChild(document.createTextNode(a));\n this.ctr++;\n }, r.flush = function() {\n this.tags.forEach(function(a) {\n return a.parentNode && a.parentNode.removeChild(a);\n }), this.tags = [], this.ctr = 0, process.env.NODE_ENV !== \"production\" && (this._alreadyInsertedOrderInsensitiveRule = !1);\n }, e;\n}(), W = \"-ms-\", ke = \"-moz-\", x = \"-webkit-\", cr = \"comm\", ur = \"rule\", fr = \"decl\", Pt = \"@import\", zr = \"@keyframes\", At = Math.abs, De = String.fromCharCode, Nt = Object.assign;\nfunction $t(e, r) {\n return L(e, 0) ^ 45 ? (((r << 2 ^ L(e, 0)) << 2 ^ L(e, 1)) << 2 ^ L(e, 2)) << 2 ^ L(e, 3) : 0;\n}\nfunction qr(e) {\n return e.trim();\n}\nfunction kt(e, r) {\n return (e = r.exec(e)) ? e[0] : e;\n}\nfunction O(e, r, n) {\n return e.replace(r, n);\n}\nfunction er(e, r) {\n return e.indexOf(r);\n}\nfunction L(e, r) {\n return e.charCodeAt(r) | 0;\n}\nfunction Ee(e, r, n) {\n return e.slice(r, n);\n}\nfunction K(e) {\n return e.length;\n}\nfunction lr(e) {\n return e.length;\n}\nfunction Pe(e, r) {\n return r.push(e), e;\n}\nfunction It(e, r) {\n return e.map(r).join(\"\");\n}\nvar je = 1, ce = 1, Br = 0, z = 0, Y = 0, ue = \"\";\nfunction Me(e, r, n, a, o, i, f) {\n return { value: e, root: r, parent: n, type: a, props: o, children: i, line: je, column: ce, length: f, return: \"\" };\n}\nfunction me(e, r) {\n return Nt(Me(\"\", null, null, \"\", null, null, 0), e, { length: -e.length }, r);\n}\nfunction Dt() {\n return Y;\n}\nfunction jt() {\n return Y = z > 0 ? L(ue, --z) : 0, ce--, Y === 10 && (ce = 1, je--), Y;\n}\nfunction q() {\n return Y = z < Br ? L(ue, z++) : 0, ce++, Y === 10 && (ce = 1, je++), Y;\n}\nfunction J() {\n return L(ue, z);\n}\nfunction Ae() {\n return z;\n}\nfunction be(e, r) {\n return Ee(ue, e, r);\n}\nfunction ye(e) {\n switch (e) {\n case 0:\n case 9:\n case 10:\n case 13:\n case 32:\n return 5;\n case 33:\n case 43:\n case 44:\n case 47:\n case 62:\n case 64:\n case 126:\n case 59:\n case 123:\n case 125:\n return 4;\n case 58:\n return 3;\n case 34:\n case 39:\n case 40:\n case 91:\n return 2;\n case 41:\n case 93:\n return 1;\n }\n return 0;\n}\nfunction Gr(e) {\n return je = ce = 1, Br = K(ue = e), z = 0, [];\n}\nfunction Kr(e) {\n return ue = \"\", e;\n}\nfunction Ne(e) {\n return qr(be(z - 1, rr(e === 91 ? e + 2 : e === 40 ? e + 1 : e)));\n}\nfunction Mt(e) {\n for (; (Y = J()) && Y < 33; )\n q();\n return ye(e) > 2 || ye(Y) > 3 ? \"\" : \" \";\n}\nfunction Yt(e, r) {\n for (; --r && q() && !(Y < 48 || Y > 102 || Y > 57 && Y < 65 || Y > 70 && Y < 97); )\n ;\n return be(e, Ae() + (r < 6 && J() == 32 && q() == 32));\n}\nfunction rr(e) {\n for (; q(); )\n switch (Y) {\n case e:\n return z;\n case 34:\n case 39:\n e !== 34 && e !== 39 && rr(Y);\n break;\n case 40:\n e === 41 && rr(e);\n break;\n case 92:\n q();\n break;\n }\n return z;\n}\nfunction Vt(e, r) {\n for (; q() && e + Y !== 47 + 10; )\n if (e + Y === 42 + 42 && J() === 47)\n break;\n return \"/*\" + be(r, z - 1) + \"*\" + De(e === 47 ? e : q());\n}\nfunction Lt(e) {\n for (; !ye(J()); )\n q();\n return be(e, z);\n}\nfunction Ft(e) {\n return Kr($e(\"\", null, null, null, [\"\"], e = Gr(e), 0, [0], e));\n}\nfunction $e(e, r, n, a, o, i, f, c, p) {\n for (var h = 0, d = 0, y = f, _ = 0, T = 0, P = 0, g = 1, D = 1, A = 1, I = 0, m = \"\", k = o, u = i, V = a, R = m; D; )\n switch (P = I, I = q()) {\n case 40:\n if (P != 108 && L(R, y - 1) == 58) {\n er(R += O(Ne(I), \"&\", \"&\\f\"), \"&\\f\") != -1 && (A = -1);\n break;\n }\n case 34:\n case 39:\n case 91:\n R += Ne(I);\n break;\n case 9:\n case 10:\n case 13:\n case 32:\n R += Mt(P);\n break;\n case 92:\n R += Yt(Ae() - 1, 7);\n continue;\n case 47:\n switch (J()) {\n case 42:\n case 47:\n Pe(Wt(Vt(q(), Ae()), r, n), p);\n break;\n default:\n R += \"/\";\n }\n break;\n case 123 * g:\n c[h++] = K(R) * A;\n case 125 * g:\n case 59:\n case 0:\n switch (I) {\n case 0:\n case 125:\n D = 0;\n case 59 + d:\n T > 0 && K(R) - y && Pe(T > 32 ? Tr(R + \";\", a, n, y - 1) : Tr(O(R, \" \", \"\") + \";\", a, n, y - 2), p);\n break;\n case 59:\n R += \";\";\n default:\n if (Pe(V = Or(R, r, n, h, d, o, c, m, k = [], u = [], y), i), I === 123)\n if (d === 0)\n $e(R, r, V, V, k, i, y, c, u);\n else\n switch (_ === 99 && L(R, 3) === 110 ? 100 : _) {\n case 100:\n case 109:\n case 115:\n $e(e, V, V, a && Pe(Or(e, V, V, 0, 0, o, c, m, o, k = [], y), u), o, u, y, c, a ? k : u);\n break;\n default:\n $e(R, V, V, V, [\"\"], u, 0, c, u);\n }\n }\n h = d = T = 0, g = A = 1, m = R = \"\", y = f;\n break;\n case 58:\n y = 1 + K(R), T = P;\n default:\n if (g < 1) {\n if (I == 123)\n --g;\n else if (I == 125 && g++ == 0 && jt() == 125)\n continue;\n }\n switch (R += De(I), I * g) {\n case 38:\n A = d > 0 ? 1 : (R += \"\\f\", -1);\n break;\n case 44:\n c[h++] = (K(R) - 1) * A, A = 1;\n break;\n case 64:\n J() === 45 && (R += Ne(q())), _ = J(), d = y = K(m = R += Lt(Ae())), I++;\n break;\n case 45:\n P === 45 && K(R) == 2 && (g = 0);\n }\n }\n return i;\n}\nfunction Or(e, r, n, a, o, i, f, c, p, h, d) {\n for (var y = o - 1, _ = o === 0 ? i : [\"\"], T = lr(_), P = 0, g = 0, D = 0; P < a; ++P)\n for (var A = 0, I = Ee(e, y + 1, y = At(g = f[P])), m = e; A < T; ++A)\n (m = qr(g > 0 ? _[A] + \" \" + I : O(I, /&\\f/g, _[A]))) && (p[D++] = m);\n return Me(e, r, n, o === 0 ? ur : c, p, h, d);\n}\nfunction Wt(e, r, n) {\n return Me(e, r, n, cr, De(Dt()), Ee(e, 2, -2), 0);\n}\nfunction Tr(e, r, n, a) {\n return Me(e, r, n, fr, Ee(e, 0, a), Ee(e, a + 1, -1), a);\n}\nfunction se(e, r) {\n for (var n = \"\", a = lr(e), o = 0; o < a; o++)\n n += r(e[o], o, e, r) || \"\";\n return n;\n}\nfunction Ut(e, r, n, a) {\n switch (e.type) {\n case Pt:\n case fr:\n return e.return = e.return || e.value;\n case cr:\n return \"\";\n case zr:\n return e.return = e.value + \"{\" + se(e.children, a) + \"}\";\n case ur:\n e.value = e.props.join(\",\");\n }\n return K(n = se(e.children, a)) ? e.return = e.value + \"{\" + n + \"}\" : \"\";\n}\nfunction zt(e) {\n var r = lr(e);\n return function(n, a, o, i) {\n for (var f = \"\", c = 0; c < r; c++)\n f += e[c](n, a, o, i) || \"\";\n return f;\n };\n}\nfunction qt(e) {\n return function(r) {\n r.root || (r = r.return) && e(r);\n };\n}\nfunction Bt(e) {\n var r = /* @__PURE__ */ Object.create(null);\n return function(n) {\n return r[n] === void 0 && (r[n] = e(n)), r[n];\n };\n}\nvar Gt = function(r, n, a) {\n for (var o = 0, i = 0; o = i, i = J(), o === 38 && i === 12 && (n[a] = 1), !ye(i); )\n q();\n return be(r, z);\n}, Kt = function(r, n) {\n var a = -1, o = 44;\n do\n switch (ye(o)) {\n case 0:\n o === 38 && J() === 12 && (n[a] = 1), r[a] += Gt(z - 1, n, a);\n break;\n case 2:\n r[a] += Ne(o);\n break;\n case 4:\n if (o === 44) {\n r[++a] = J() === 58 ? \"&\\f\" : \"\", n[a] = r[a].length;\n break;\n }\n default:\n r[a] += De(o);\n }\n while (o = q());\n return r;\n}, Jt = function(r, n) {\n return Kr(Kt(Gr(r), n));\n}, Pr = /* @__PURE__ */ new WeakMap(), Ht = function(r) {\n if (!(r.type !== \"rule\" || !r.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n r.length < 1)) {\n for (var n = r.value, a = r.parent, o = r.column === a.column && r.line === a.line; a.type !== \"rule\"; )\n if (a = a.parent, !a)\n return;\n if (!(r.props.length === 1 && n.charCodeAt(0) !== 58 && !Pr.get(a)) && !o) {\n Pr.set(r, !0);\n for (var i = [], f = Jt(n, i), c = a.props, p = 0, h = 0; p < f.length; p++)\n for (var d = 0; d < c.length; d++, h++)\n r.props[h] = i[p] ? f[p].replace(/&\\f/g, c[d]) : c[d] + \" \" + f[p];\n }\n }\n}, Zt = function(r) {\n if (r.type === \"decl\") {\n var n = r.value;\n // charcode for l\n n.charCodeAt(0) === 108 && // charcode for b\n n.charCodeAt(2) === 98 && (r.return = \"\", r.value = \"\");\n }\n}, Xt = \"emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason\", Qt = function(r) {\n return r.type === \"comm\" && r.children.indexOf(Xt) > -1;\n}, en = function(r) {\n return function(n, a, o) {\n if (!(n.type !== \"rule\" || r.compat)) {\n var i = n.value.match(/(:first|:nth|:nth-last)-child/g);\n if (i) {\n for (var f = n.parent === o[0], c = f ? o[0].children : (\n // global rule at the root level\n o\n ), p = c.length - 1; p >= 0; p--) {\n var h = c[p];\n if (h.line < n.line)\n break;\n if (h.column < n.column) {\n if (Qt(h))\n return;\n break;\n }\n }\n i.forEach(function(d) {\n console.error('The pseudo class \"' + d + '\" is potentially unsafe when doing server-side rendering. Try changing it to \"' + d.split(\"-child\")[0] + '-of-type\".');\n });\n }\n }\n };\n}, Jr = function(r) {\n return r.type.charCodeAt(1) === 105 && r.type.charCodeAt(0) === 64;\n}, rn = function(r, n) {\n for (var a = r - 1; a >= 0; a--)\n if (!Jr(n[a]))\n return !0;\n return !1;\n}, Ar = function(r) {\n r.type = \"\", r.value = \"\", r.return = \"\", r.children = \"\", r.props = \"\";\n}, tn = function(r, n, a) {\n Jr(r) && (r.parent ? (console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\"), Ar(r)) : rn(n, a) && (console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\"), Ar(r)));\n};\nfunction Hr(e, r) {\n switch ($t(e, r)) {\n case 5103:\n return x + \"print-\" + e + e;\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921:\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005:\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855:\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return x + e + e;\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return x + e + ke + e + W + e + e;\n case 6828:\n case 4268:\n return x + e + W + e + e;\n case 6165:\n return x + e + W + \"flex-\" + e + e;\n case 5187:\n return x + e + O(e, /(\\w+).+(:[^]+)/, x + \"box-$1$2\" + W + \"flex-$1$2\") + e;\n case 5443:\n return x + e + W + \"flex-item-\" + O(e, /flex-|-self/, \"\") + e;\n case 4675:\n return x + e + W + \"flex-line-pack\" + O(e, /align-content|flex-|-self/, \"\") + e;\n case 5548:\n return x + e + W + O(e, \"shrink\", \"negative\") + e;\n case 5292:\n return x + e + W + O(e, \"basis\", \"preferred-size\") + e;\n case 6060:\n return x + \"box-\" + O(e, \"-grow\", \"\") + x + e + W + O(e, \"grow\", \"positive\") + e;\n case 4554:\n return x + O(e, /([^-])(transform)/g, \"$1\" + x + \"$2\") + e;\n case 6187:\n return O(O(O(e, /(zoom-|grab)/, x + \"$1\"), /(image-set)/, x + \"$1\"), e, \"\") + e;\n case 5495:\n case 3959:\n return O(e, /(image-set\\([^]*)/, x + \"$1$`$1\");\n case 4968:\n return O(O(e, /(.+:)(flex-)?(.*)/, x + \"box-pack:$3\" + W + \"flex-pack:$3\"), /s.+-b[^;]+/, \"justify\") + x + e + e;\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return O(e, /(.+)-inline(.+)/, x + \"$1$2\") + e;\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n if (K(e) - 1 - r > 6)\n switch (L(e, r + 1)) {\n case 109:\n if (L(e, r + 4) !== 45)\n break;\n case 102:\n return O(e, /(.+:)(.+)-([^]+)/, \"$1\" + x + \"$2-$3$1\" + ke + (L(e, r + 3) == 108 ? \"$3\" : \"$2-$3\")) + e;\n case 115:\n return ~er(e, \"stretch\") ? Hr(O(e, \"stretch\", \"fill-available\"), r) + e : e;\n }\n break;\n case 4949:\n if (L(e, r + 1) !== 115)\n break;\n case 6444:\n switch (L(e, K(e) - 3 - (~er(e, \"!important\") && 10))) {\n case 107:\n return O(e, \":\", \":\" + x) + e;\n case 101:\n return O(e, /(.+:)([^;!]+)(;|!.+)?/, \"$1\" + x + (L(e, 14) === 45 ? \"inline-\" : \"\") + \"box$3$1\" + x + \"$2$3$1\" + W + \"$2box$3\") + e;\n }\n break;\n case 5936:\n switch (L(e, r + 11)) {\n case 114:\n return x + e + W + O(e, /[svh]\\w+-[tblr]{2}/, \"tb\") + e;\n case 108:\n return x + e + W + O(e, /[svh]\\w+-[tblr]{2}/, \"tb-rl\") + e;\n case 45:\n return x + e + W + O(e, /[svh]\\w+-[tblr]{2}/, \"lr\") + e;\n }\n return x + e + W + e + e;\n }\n return e;\n}\nvar nn = function(r, n, a, o) {\n if (r.length > -1 && !r.return)\n switch (r.type) {\n case fr:\n r.return = Hr(r.value, r.length);\n break;\n case zr:\n return se([me(r, {\n value: O(r.value, \"@\", \"@\" + x)\n })], o);\n case ur:\n if (r.length)\n return It(r.props, function(i) {\n switch (kt(i, /(::plac\\w+|:read-\\w+)/)) {\n case \":read-only\":\n case \":read-write\":\n return se([me(r, {\n props: [O(i, /:(read-\\w+)/, \":\" + ke + \"$1\")]\n })], o);\n case \"::placeholder\":\n return se([me(r, {\n props: [O(i, /:(plac\\w+)/, \":\" + x + \"input-$1\")]\n }), me(r, {\n props: [O(i, /:(plac\\w+)/, \":\" + ke + \"$1\")]\n }), me(r, {\n props: [O(i, /:(plac\\w+)/, W + \"input-$1\")]\n })], o);\n }\n return \"\";\n });\n }\n}, an = [nn], on = function(r) {\n var n = r.key;\n if (process.env.NODE_ENV !== \"production\" && !n)\n throw new Error(`You have to configure \\`key\\` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\nIf multiple caches share the same key they might \"fight\" for each other's style elements.`);\n if (n === \"css\") {\n var a = document.querySelectorAll(\"style[data-emotion]:not([data-s])\");\n Array.prototype.forEach.call(a, function(g) {\n var D = g.getAttribute(\"data-emotion\");\n D.indexOf(\" \") !== -1 && (document.head.appendChild(g), g.setAttribute(\"data-s\", \"\"));\n });\n }\n var o = r.stylisPlugins || an;\n if (process.env.NODE_ENV !== \"production\" && /[^a-z-]/.test(n))\n throw new Error('Emotion key must only contain lower case alphabetical characters and - but \"' + n + '\" was passed');\n var i = {}, f, c = [];\n f = r.container || document.head, Array.prototype.forEach.call(\n // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll('style[data-emotion^=\"' + n + ' \"]'),\n function(g) {\n for (var D = g.getAttribute(\"data-emotion\").split(\" \"), A = 1; A < D.length; A++)\n i[D[A]] = !0;\n c.push(g);\n }\n );\n var p, h = [Ht, Zt];\n process.env.NODE_ENV !== \"production\" && h.push(en({\n get compat() {\n return P.compat;\n }\n }), tn);\n {\n var d, y = [Ut, process.env.NODE_ENV !== \"production\" ? function(g) {\n g.root || (g.return ? d.insert(g.return) : g.value && g.type !== cr && d.insert(g.value + \"{}\"));\n } : qt(function(g) {\n d.insert(g);\n })], _ = zt(h.concat(o, y)), T = function(D) {\n return se(Ft(D), _);\n };\n p = function(D, A, I, m) {\n d = I, process.env.NODE_ENV !== \"production\" && A.map !== void 0 && (d = {\n insert: function(u) {\n I.insert(u + A.map);\n }\n }), T(D ? D + \"{\" + A.styles + \"}\" : A.styles), m && (P.inserted[A.name] = !0);\n };\n }\n var P = {\n key: n,\n sheet: new Tt({\n key: n,\n container: f,\n nonce: r.nonce,\n speedy: r.speedy,\n prepend: r.prepend,\n insertionPoint: r.insertionPoint\n }),\n nonce: r.nonce,\n inserted: i,\n registered: {},\n insert: p\n };\n return P.sheet.hydrate(c), P;\n}, tr = { exports: {} }, S = {};\n/** @license React v16.13.1\n * react-is.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 */\nvar Nr;\nfunction sn() {\n if (Nr)\n return S;\n Nr = 1;\n var e = typeof Symbol == \"function\" && Symbol.for, r = e ? Symbol.for(\"react.element\") : 60103, n = e ? Symbol.for(\"react.portal\") : 60106, a = e ? Symbol.for(\"react.fragment\") : 60107, o = e ? Symbol.for(\"react.strict_mode\") : 60108, i = e ? Symbol.for(\"react.profiler\") : 60114, f = e ? Symbol.for(\"react.provider\") : 60109, c = e ? Symbol.for(\"react.context\") : 60110, p = e ? Symbol.for(\"react.async_mode\") : 60111, h = e ? Symbol.for(\"react.concurrent_mode\") : 60111, d = e ? Symbol.for(\"react.forward_ref\") : 60112, y = e ? Symbol.for(\"react.suspense\") : 60113, _ = e ? Symbol.for(\"react.suspense_list\") : 60120, T = e ? Symbol.for(\"react.memo\") : 60115, P = e ? Symbol.for(\"react.lazy\") : 60116, g = e ? Symbol.for(\"react.block\") : 60121, D = e ? Symbol.for(\"react.fundamental\") : 60117, A = e ? Symbol.for(\"react.responder\") : 60118, I = e ? Symbol.for(\"react.scope\") : 60119;\n function m(u) {\n if (typeof u == \"object\" && u !== null) {\n var V = u.$$typeof;\n switch (V) {\n case r:\n switch (u = u.type, u) {\n case p:\n case h:\n case a:\n case i:\n case o:\n case y:\n return u;\n default:\n switch (u = u && u.$$typeof, u) {\n case c:\n case d:\n case P:\n case T:\n case f:\n return u;\n default:\n return V;\n }\n }\n case n:\n return V;\n }\n }\n }\n function k(u) {\n return m(u) === h;\n }\n return S.AsyncMode = p, S.ConcurrentMode = h, S.ContextConsumer = c, S.ContextProvider = f, S.Element = r, S.ForwardRef = d, S.Fragment = a, S.Lazy = P, S.Memo = T, S.Portal = n, S.Profiler = i, S.StrictMode = o, S.Suspense = y, S.isAsyncMode = function(u) {\n return k(u) || m(u) === p;\n }, S.isConcurrentMode = k, S.isContextConsumer = function(u) {\n return m(u) === c;\n }, S.isContextProvider = function(u) {\n return m(u) === f;\n }, S.isElement = function(u) {\n return typeof u == \"object\" && u !== null && u.$$typeof === r;\n }, S.isForwardRef = function(u) {\n return m(u) === d;\n }, S.isFragment = function(u) {\n return m(u) === a;\n }, S.isLazy = function(u) {\n return m(u) === P;\n }, S.isMemo = function(u) {\n return m(u) === T;\n }, S.isPortal = function(u) {\n return m(u) === n;\n }, S.isProfiler = function(u) {\n return m(u) === i;\n }, S.isStrictMode = function(u) {\n return m(u) === o;\n }, S.isSuspense = function(u) {\n return m(u) === y;\n }, S.isValidElementType = function(u) {\n return typeof u == \"string\" || typeof u == \"function\" || u === a || u === h || u === i || u === o || u === y || u === _ || typeof u == \"object\" && u !== null && (u.$$typeof === P || u.$$typeof === T || u.$$typeof === f || u.$$typeof === c || u.$$typeof === d || u.$$typeof === D || u.$$typeof === A || u.$$typeof === I || u.$$typeof === g);\n }, S.typeOf = m, S;\n}\nvar C = {};\n/** @license React v16.13.1\n * react-is.development.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 */\nvar $r;\nfunction cn() {\n return $r || ($r = 1, process.env.NODE_ENV !== \"production\" && function() {\n var e = typeof Symbol == \"function\" && Symbol.for, r = e ? Symbol.for(\"react.element\") : 60103, n = e ? Symbol.for(\"react.portal\") : 60106, a = e ? Symbol.for(\"react.fragment\") : 60107, o = e ? Symbol.for(\"react.strict_mode\") : 60108, i = e ? Symbol.for(\"react.profiler\") : 60114, f = e ? Symbol.for(\"react.provider\") : 60109, c = e ? Symbol.for(\"react.context\") : 60110, p = e ? Symbol.for(\"react.async_mode\") : 60111, h = e ? Symbol.for(\"react.concurrent_mode\") : 60111, d = e ? Symbol.for(\"react.forward_ref\") : 60112, y = e ? Symbol.for(\"react.suspense\") : 60113, _ = e ? Symbol.for(\"react.suspense_list\") : 60120, T = e ? Symbol.for(\"react.memo\") : 60115, P = e ? Symbol.for(\"react.lazy\") : 60116, g = e ? Symbol.for(\"react.block\") : 60121, D = e ? Symbol.for(\"react.fundamental\") : 60117, A = e ? Symbol.for(\"react.responder\") : 60118, I = e ? Symbol.for(\"react.scope\") : 60119;\n function m(v) {\n return typeof v == \"string\" || typeof v == \"function\" || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n v === a || v === h || v === i || v === o || v === y || v === _ || typeof v == \"object\" && v !== null && (v.$$typeof === P || v.$$typeof === T || v.$$typeof === f || v.$$typeof === c || v.$$typeof === d || v.$$typeof === D || v.$$typeof === A || v.$$typeof === I || v.$$typeof === g);\n }\n function k(v) {\n if (typeof v == \"object\" && v !== null) {\n var te = v.$$typeof;\n switch (te) {\n case r:\n var ne = v.type;\n switch (ne) {\n case p:\n case h:\n case a:\n case i:\n case o:\n case y:\n return ne;\n default:\n var Q = ne && ne.$$typeof;\n switch (Q) {\n case c:\n case d:\n case P:\n case T:\n case f:\n return Q;\n default:\n return te;\n }\n }\n case n:\n return te;\n }\n }\n }\n var u = p, V = h, R = c, F = f, Ye = r, Ve = d, Le = a, Fe = P, _e = T, B = n, X = i, we = o, Re = y, fe = !1;\n function xe(v) {\n return fe || (fe = !0, console.warn(\"The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 17+. Update your code to use ReactIs.isConcurrentMode() instead. It has the exact same API.\")), le(v) || k(v) === p;\n }\n function le(v) {\n return k(v) === h;\n }\n function Se(v) {\n return k(v) === c;\n }\n function Ce(v) {\n return k(v) === f;\n }\n function Oe(v) {\n return typeof v == \"object\" && v !== null && v.$$typeof === r;\n }\n function We(v) {\n return k(v) === d;\n }\n function Ue(v) {\n return k(v) === a;\n }\n function de(v) {\n return k(v) === P;\n }\n function pe(v) {\n return k(v) === T;\n }\n function ee(v) {\n return k(v) === n;\n }\n function ve(v) {\n return k(v) === i;\n }\n function re(v) {\n return k(v) === o;\n }\n function ze(v) {\n return k(v) === y;\n }\n C.AsyncMode = u, C.ConcurrentMode = V, C.ContextConsumer = R, C.ContextProvider = F, C.Element = Ye, C.ForwardRef = Ve, C.Fragment = Le, C.Lazy = Fe, C.Memo = _e, C.Portal = B, C.Profiler = X, C.StrictMode = we, C.Suspense = Re, C.isAsyncMode = xe, C.isConcurrentMode = le, C.isContextConsumer = Se, C.isContextProvider = Ce, C.isElement = Oe, C.isForwardRef = We, C.isFragment = Ue, C.isLazy = de, C.isMemo = pe, C.isPortal = ee, C.isProfiler = ve, C.isStrictMode = re, C.isSuspense = ze, C.isValidElementType = m, C.typeOf = k;\n }()), C;\n}\nprocess.env.NODE_ENV === \"production\" ? tr.exports = sn() : tr.exports = cn();\nvar un = tr.exports, Zr = un, fn = {\n $$typeof: !0,\n render: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0\n}, ln = {\n $$typeof: !0,\n compare: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0,\n type: !0\n}, Xr = {};\nXr[Zr.ForwardRef] = fn;\nXr[Zr.Memo] = ln;\nvar dn = !0;\nfunction pn(e, r, n) {\n var a = \"\";\n return n.split(\" \").forEach(function(o) {\n e[o] !== void 0 ? r.push(e[o] + \";\") : a += o + \" \";\n }), a;\n}\nvar Qr = function(r, n, a) {\n var o = r.key + \"-\" + n.name;\n // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (a === !1 || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n dn === !1) && r.registered[o] === void 0 && (r.registered[o] = n.styles);\n}, vn = function(r, n, a) {\n Qr(r, n, a);\n var o = r.key + \"-\" + n.name;\n if (r.inserted[n.name] === void 0) {\n var i = n;\n do\n r.insert(n === i ? \".\" + o : \"\", i, r.sheet, !0), i = i.next;\n while (i !== void 0);\n }\n};\nfunction hn(e) {\n for (var r = 0, n, a = 0, o = e.length; o >= 4; ++a, o -= 4)\n n = e.charCodeAt(a) & 255 | (e.charCodeAt(++a) & 255) << 8 | (e.charCodeAt(++a) & 255) << 16 | (e.charCodeAt(++a) & 255) << 24, n = /* Math.imul(k, m): */\n (n & 65535) * 1540483477 + ((n >>> 16) * 59797 << 16), n ^= /* k >>> r: */\n n >>> 24, r = /* Math.imul(k, m): */\n (n & 65535) * 1540483477 + ((n >>> 16) * 59797 << 16) ^ /* Math.imul(h, m): */\n (r & 65535) * 1540483477 + ((r >>> 16) * 59797 << 16);\n switch (o) {\n case 3:\n r ^= (e.charCodeAt(a + 2) & 255) << 16;\n case 2:\n r ^= (e.charCodeAt(a + 1) & 255) << 8;\n case 1:\n r ^= e.charCodeAt(a) & 255, r = /* Math.imul(h, m): */\n (r & 65535) * 1540483477 + ((r >>> 16) * 59797 << 16);\n }\n return r ^= r >>> 13, r = /* Math.imul(h, m): */\n (r & 65535) * 1540483477 + ((r >>> 16) * 59797 << 16), ((r ^ r >>> 15) >>> 0).toString(36);\n}\nvar mn = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n}, kr = `You have illegal escape sequence in your template literal, most likely inside content's property value.\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \"content: '\\\\00d7';\" should become \"content: '\\\\\\\\00d7';\".\nYou can read more about this here:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences`, En = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\", yn = /[A-Z]|^ms/g, et = /_EMO_([^_]+?)_([^]*?)_EMO_/g, dr = function(r) {\n return r.charCodeAt(1) === 45;\n}, Ir = function(r) {\n return r != null && typeof r != \"boolean\";\n}, Ze = /* @__PURE__ */ Bt(function(e) {\n return dr(e) ? e : e.replace(yn, \"-$&\").toLowerCase();\n}), Ie = function(r, n) {\n switch (r) {\n case \"animation\":\n case \"animationName\":\n if (typeof n == \"string\")\n return n.replace(et, function(a, o, i) {\n return G = {\n name: o,\n styles: i,\n next: G\n }, o;\n });\n }\n return mn[r] !== 1 && !dr(r) && typeof n == \"number\" && n !== 0 ? n + \"px\" : n;\n};\nif (process.env.NODE_ENV !== \"production\") {\n var gn = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/, bn = [\"normal\", \"none\", \"initial\", \"inherit\", \"unset\"], _n = Ie, wn = /^-ms-/, Rn = /-(.)/g, Dr = {};\n Ie = function(r, n) {\n if (r === \"content\" && (typeof n != \"string\" || bn.indexOf(n) === -1 && !gn.test(n) && (n.charAt(0) !== n.charAt(n.length - 1) || n.charAt(0) !== '\"' && n.charAt(0) !== \"'\")))\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + n + \"\\\"'`\");\n var a = _n(r, n);\n return a !== \"\" && !dr(r) && r.indexOf(\"-\") !== -1 && Dr[r] === void 0 && (Dr[r] = !0, console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + r.replace(wn, \"ms-\").replace(Rn, function(o, i) {\n return i.toUpperCase();\n }) + \"?\")), a;\n };\n}\nvar rt = \"Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.\";\nfunction ge(e, r, n) {\n if (n == null)\n return \"\";\n if (n.__emotion_styles !== void 0) {\n if (process.env.NODE_ENV !== \"production\" && n.toString() === \"NO_COMPONENT_SELECTOR\")\n throw new Error(rt);\n return n;\n }\n switch (typeof n) {\n case \"boolean\":\n return \"\";\n case \"object\": {\n if (n.anim === 1)\n return G = {\n name: n.name,\n styles: n.styles,\n next: G\n }, n.name;\n if (n.styles !== void 0) {\n var a = n.next;\n if (a !== void 0)\n for (; a !== void 0; )\n G = {\n name: a.name,\n styles: a.styles,\n next: G\n }, a = a.next;\n var o = n.styles + \";\";\n return process.env.NODE_ENV !== \"production\" && n.map !== void 0 && (o += n.map), o;\n }\n return xn(e, r, n);\n }\n case \"function\": {\n if (e !== void 0) {\n var i = G, f = n(e);\n return G = i, ge(e, r, f);\n } else\n process.env.NODE_ENV !== \"production\" && console.error(\"Functions that are interpolated in css calls will be stringified.\\nIf you want to have a css call based on props, create a function that returns a css call like this\\nlet dynamicStyle = (props) => css`color: ${props.color}`\\nIt can be called directly with props or interpolated in a styled call like this\\nlet SomeComponent = styled('div')`${dynamicStyle}`\");\n break;\n }\n case \"string\":\n if (process.env.NODE_ENV !== \"production\") {\n var c = [], p = n.replace(et, function(d, y, _) {\n var T = \"animation\" + c.length;\n return c.push(\"const \" + T + \" = keyframes`\" + _.replace(/^@keyframes animation-\\w+/, \"\") + \"`\"), \"${\" + T + \"}\";\n });\n c.length && console.error(\"`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\nInstead of doing this:\\n\\n\" + [].concat(c, [\"`\" + p + \"`\"]).join(`\n`) + `\n\nYou should wrap it with \\`css\\` like this:\n\n` + (\"css`\" + p + \"`\"));\n }\n break;\n }\n if (r == null)\n return n;\n var h = r[n];\n return h !== void 0 ? h : n;\n}\nfunction xn(e, r, n) {\n var a = \"\";\n if (Array.isArray(n))\n for (var o = 0; o < n.length; o++)\n a += ge(e, r, n[o]) + \";\";\n else\n for (var i in n) {\n var f = n[i];\n if (typeof f != \"object\")\n r != null && r[f] !== void 0 ? a += i + \"{\" + r[f] + \"}\" : Ir(f) && (a += Ze(i) + \":\" + Ie(i, f) + \";\");\n else {\n if (i === \"NO_COMPONENT_SELECTOR\" && process.env.NODE_ENV !== \"production\")\n throw new Error(rt);\n if (Array.isArray(f) && typeof f[0] == \"string\" && (r == null || r[f[0]] === void 0))\n for (var c = 0; c < f.length; c++)\n Ir(f[c]) && (a += Ze(i) + \":\" + Ie(i, f[c]) + \";\");\n else {\n var p = ge(e, r, f);\n switch (i) {\n case \"animation\":\n case \"animationName\": {\n a += Ze(i) + \":\" + p + \";\";\n break;\n }\n default:\n process.env.NODE_ENV !== \"production\" && i === \"undefined\" && console.error(En), a += i + \"{\" + p + \"}\";\n }\n }\n }\n }\n return a;\n}\nvar jr = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g, tt;\nprocess.env.NODE_ENV !== \"production\" && (tt = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g);\nvar G, Mr = function(r, n, a) {\n if (r.length === 1 && typeof r[0] == \"object\" && r[0] !== null && r[0].styles !== void 0)\n return r[0];\n var o = !0, i = \"\";\n G = void 0;\n var f = r[0];\n f == null || f.raw === void 0 ? (o = !1, i += ge(a, n, f)) : (process.env.NODE_ENV !== \"production\" && f[0] === void 0 && console.error(kr), i += f[0]);\n for (var c = 1; c < r.length; c++)\n i += ge(a, n, r[c]), o && (process.env.NODE_ENV !== \"production\" && f[c] === void 0 && console.error(kr), i += f[c]);\n var p;\n process.env.NODE_ENV !== \"production\" && (i = i.replace(tt, function(_) {\n return p = _, \"\";\n })), jr.lastIndex = 0;\n for (var h = \"\", d; (d = jr.exec(i)) !== null; )\n h += \"-\" + // $FlowFixMe we know it's not null\n d[1];\n var y = hn(i) + h;\n return process.env.NODE_ENV !== \"production\" ? {\n name: y,\n styles: i,\n map: p,\n next: G,\n toString: function() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n } : {\n name: y,\n styles: i,\n next: G\n };\n}, Sn = function(r) {\n return r();\n}, Cn = Cr[\"useInsertionEffect\"] ? Cr[\"useInsertionEffect\"] : !1, On = Cn || Sn, pr = {}.hasOwnProperty, vr = /* @__PURE__ */ ir(\n // we're doing this to avoid preconstruct's dead code elimination in this one case\n // because this module is primarily intended for the browser and node\n // but it's also required in react native and similar environments sometimes\n // and we could have a special build just for that\n // but this is much easier and the native packages\n // might use a different theme context in the future anyway\n typeof HTMLElement < \"u\" ? /* @__PURE__ */ on({\n key: \"css\"\n }) : null\n);\nprocess.env.NODE_ENV !== \"production\" && (vr.displayName = \"EmotionCacheContext\");\nvr.Provider;\nvar Tn = function(r) {\n return /* @__PURE__ */ xt(function(n, a) {\n var o = sr(vr);\n return r(n, o, a);\n });\n}, nt = /* @__PURE__ */ ir({});\nprocess.env.NODE_ENV !== \"production\" && (nt.displayName = \"EmotionThemeContext\");\nvar Yr = function(r) {\n var n = r.split(\".\");\n return n[n.length - 1];\n}, Pn = function(r) {\n var n = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(r);\n if (n || (n = /^([A-Za-z0-9$.]+)@/.exec(r), n))\n return Yr(n[1]);\n}, An = /* @__PURE__ */ new Set([\"renderWithHooks\", \"processChild\", \"finishClassComponent\", \"renderToString\"]), Nn = function(r) {\n return r.replace(/\\$/g, \"-\");\n}, $n = function(r) {\n if (r)\n for (var n = r.split(`\n`), a = 0; a < n.length; a++) {\n var o = Pn(n[a]);\n if (o) {\n if (An.has(o))\n break;\n if (/^[A-Z]/.test(o))\n return Nn(o);\n }\n }\n}, nr = \"__EMOTION_TYPE_PLEASE_DO_NOT_USE__\", ar = \"__EMOTION_LABEL_PLEASE_DO_NOT_USE__\", kn = function(r, n) {\n if (process.env.NODE_ENV !== \"production\" && typeof n.css == \"string\" && // check if there is a css declaration\n n.css.indexOf(\":\") !== -1)\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + n.css + \"`\");\n var a = {};\n for (var o in n)\n pr.call(n, o) && (a[o] = n[o]);\n if (a[nr] = r, process.env.NODE_ENV !== \"production\" && n.css && (typeof n.css != \"object\" || typeof n.css.name != \"string\" || n.css.name.indexOf(\"-\") === -1)) {\n var i = $n(new Error().stack);\n i && (a[ar] = i);\n }\n return a;\n}, In = function(r) {\n var n = r.cache, a = r.serialized, o = r.isStringTag;\n return Qr(n, a, o), On(function() {\n return vn(n, a, o);\n }), null;\n}, at = /* @__PURE__ */ Tn(function(e, r, n) {\n var a = e.css;\n typeof a == \"string\" && r.registered[a] !== void 0 && (a = r.registered[a]);\n var o = e[nr], i = [a], f = \"\";\n typeof e.className == \"string\" ? f = pn(r.registered, i, e.className) : e.className != null && (f = e.className + \" \");\n var c = Mr(i, void 0, sr(nt));\n if (process.env.NODE_ENV !== \"production\" && c.name.indexOf(\"-\") === -1) {\n var p = e[ar];\n p && (c = Mr([c, \"label:\" + p + \";\"]));\n }\n f += r.key + \"-\" + c.name;\n var h = {};\n for (var d in e)\n pr.call(e, d) && d !== \"css\" && d !== nr && (process.env.NODE_ENV === \"production\" || d !== ar) && (h[d] = e[d]);\n return h.ref = n, h.className = f, /* @__PURE__ */ He(St, null, /* @__PURE__ */ He(In, {\n cache: r,\n serialized: c,\n isStringTag: typeof o == \"string\"\n }), /* @__PURE__ */ He(o, h));\n});\nprocess.env.NODE_ENV !== \"production\" && (at.displayName = \"EmotionCssPropInternal\");\nvar or = { exports: {} }, ie = {};\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\nvar Xe, Vr;\nfunction ot() {\n if (Vr)\n return Xe;\n Vr = 1;\n var e = Object.getOwnPropertySymbols, r = Object.prototype.hasOwnProperty, n = Object.prototype.propertyIsEnumerable;\n function a(i) {\n if (i == null)\n throw new TypeError(\"Object.assign cannot be called with null or undefined\");\n return Object(i);\n }\n function o() {\n try {\n if (!Object.assign)\n return !1;\n var i = new String(\"abc\");\n if (i[5] = \"de\", Object.getOwnPropertyNames(i)[0] === \"5\")\n return !1;\n for (var f = {}, c = 0; c < 10; c++)\n f[\"_\" + String.fromCharCode(c)] = c;\n var p = Object.getOwnPropertyNames(f).map(function(d) {\n return f[d];\n });\n if (p.join(\"\") !== \"0123456789\")\n return !1;\n var h = {};\n return \"abcdefghijklmnopqrst\".split(\"\").forEach(function(d) {\n h[d] = d;\n }), Object.keys(Object.assign({}, h)).join(\"\") === \"abcdefghijklmnopqrst\";\n } catch {\n return !1;\n }\n }\n return Xe = o() ? Object.assign : function(i, f) {\n for (var c, p = a(i), h, d = 1; d < arguments.length; d++) {\n c = Object(arguments[d]);\n for (var y in c)\n r.call(c, y) && (p[y] = c[y]);\n if (e) {\n h = e(c);\n for (var _ = 0; _ < h.length; _++)\n n.call(c, h[_]) && (p[h[_]] = c[h[_]]);\n }\n }\n return p;\n }, Xe;\n}\n/** @license React v17.0.2\n * react-jsx-runtime.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 */\nvar Lr;\nfunction Dn() {\n if (Lr)\n return ie;\n Lr = 1, ot();\n var e = Ur, r = 60103;\n if (ie.Fragment = 60107, typeof Symbol == \"function\" && Symbol.for) {\n var n = Symbol.for;\n r = n(\"react.element\"), ie.Fragment = n(\"react.fragment\");\n }\n var a = e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, o = Object.prototype.hasOwnProperty, i = { key: !0, ref: !0, __self: !0, __source: !0 };\n function f(c, p, h) {\n var d, y = {}, _ = null, T = null;\n h !== void 0 && (_ = \"\" + h), p.key !== void 0 && (_ = \"\" + p.key), p.ref !== void 0 && (T = p.ref);\n for (d in p)\n o.call(p, d) && !i.hasOwnProperty(d) && (y[d] = p[d]);\n if (c && c.defaultProps)\n for (d in p = c.defaultProps, p)\n y[d] === void 0 && (y[d] = p[d]);\n return { $$typeof: r, type: c, key: _, ref: T, props: y, _owner: a.current };\n }\n return ie.jsx = f, ie.jsxs = f, ie;\n}\nvar Qe = {};\n/** @license React v17.0.2\n * react-jsx-runtime.development.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 */\nvar Fr;\nfunction jn() {\n return Fr || (Fr = 1, function(e) {\n process.env.NODE_ENV !== \"production\" && function() {\n var r = Ur, n = ot(), a = 60103, o = 60106;\n e.Fragment = 60107;\n var i = 60108, f = 60114, c = 60109, p = 60110, h = 60112, d = 60113, y = 60120, _ = 60115, T = 60116, P = 60121, g = 60122, D = 60117, A = 60129, I = 60131;\n if (typeof Symbol == \"function\" && Symbol.for) {\n var m = Symbol.for;\n a = m(\"react.element\"), o = m(\"react.portal\"), e.Fragment = m(\"react.fragment\"), i = m(\"react.strict_mode\"), f = m(\"react.profiler\"), c = m(\"react.provider\"), p = m(\"react.context\"), h = m(\"react.forward_ref\"), d = m(\"react.suspense\"), y = m(\"react.suspense_list\"), _ = m(\"react.memo\"), T = m(\"react.lazy\"), P = m(\"react.block\"), g = m(\"react.server.block\"), D = m(\"react.fundamental\"), m(\"react.scope\"), m(\"react.opaque.id\"), A = m(\"react.debug_trace_mode\"), m(\"react.offscreen\"), I = m(\"react.legacy_hidden\");\n }\n var k = typeof Symbol == \"function\" && Symbol.iterator, u = \"@@iterator\";\n function V(t) {\n if (t === null || typeof t != \"object\")\n return null;\n var s = k && t[k] || t[u];\n return typeof s == \"function\" ? s : null;\n }\n var R = r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n function F(t) {\n {\n for (var s = arguments.length, l = new Array(s > 1 ? s - 1 : 0), E = 1; E < s; E++)\n l[E - 1] = arguments[E];\n Ye(\"error\", t, l);\n }\n }\n function Ye(t, s, l) {\n {\n var E = R.ReactDebugCurrentFrame, N = E.getStackAddendum();\n N !== \"\" && (s += \"%s\", l = l.concat([N]));\n var $ = l.map(function(w) {\n return \"\" + w;\n });\n $.unshift(\"Warning: \" + s), Function.prototype.apply.call(console[t], console, $);\n }\n }\n var Ve = !1;\n function Le(t) {\n return !!(typeof t == \"string\" || typeof t == \"function\" || t === e.Fragment || t === f || t === A || t === i || t === d || t === y || t === I || Ve || typeof t == \"object\" && t !== null && (t.$$typeof === T || t.$$typeof === _ || t.$$typeof === c || t.$$typeof === p || t.$$typeof === h || t.$$typeof === D || t.$$typeof === P || t[0] === g));\n }\n function Fe(t, s, l) {\n var E = s.displayName || s.name || \"\";\n return t.displayName || (E !== \"\" ? l + \"(\" + E + \")\" : l);\n }\n function _e(t) {\n return t.displayName || \"Context\";\n }\n function B(t) {\n if (t == null)\n return null;\n if (typeof t.tag == \"number\" && F(\"Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue.\"), typeof t == \"function\")\n return t.displayName || t.name || null;\n if (typeof t == \"string\")\n return t;\n switch (t) {\n case e.Fragment:\n return \"Fragment\";\n case o:\n return \"Portal\";\n case f:\n return \"Profiler\";\n case i:\n return \"StrictMode\";\n case d:\n return \"Suspense\";\n case y:\n return \"SuspenseList\";\n }\n if (typeof t == \"object\")\n switch (t.$$typeof) {\n case p:\n var s = t;\n return _e(s) + \".Consumer\";\n case c:\n var l = t;\n return _e(l._context) + \".Provider\";\n case h:\n return Fe(t, t.render, \"ForwardRef\");\n case _:\n return B(t.type);\n case P:\n return B(t._render);\n case T: {\n var E = t, N = E._payload, $ = E._init;\n try {\n return B($(N));\n } catch {\n return null;\n }\n }\n }\n return null;\n }\n var X = 0, we, Re, fe, xe, le, Se, Ce;\n function Oe() {\n }\n Oe.__reactDisabledLog = !0;\n function We() {\n {\n if (X === 0) {\n we = console.log, Re = console.info, fe = console.warn, xe = console.error, le = console.group, Se = console.groupCollapsed, Ce = console.groupEnd;\n var t = {\n configurable: !0,\n enumerable: !0,\n value: Oe,\n writable: !0\n };\n Object.defineProperties(console, {\n info: t,\n log: t,\n warn: t,\n error: t,\n group: t,\n groupCollapsed: t,\n groupEnd: t\n });\n }\n X++;\n }\n }\n function Ue() {\n {\n if (X--, X === 0) {\n var t = {\n configurable: !0,\n enumerable: !0,\n writable: !0\n };\n Object.defineProperties(console, {\n log: n({}, t, {\n value: we\n }),\n info: n({}, t, {\n value: Re\n }),\n warn: n({}, t, {\n value: fe\n }),\n error: n({}, t, {\n value: xe\n }),\n group: n({}, t, {\n value: le\n }),\n groupCollapsed: n({}, t, {\n value: Se\n }),\n groupEnd: n({}, t, {\n value: Ce\n })\n });\n }\n X < 0 && F(\"disabledDepth fell below zero. This is a bug in React. Please file an issue.\");\n }\n }\n var de = R.ReactCurrentDispatcher, pe;\n function ee(t, s, l) {\n {\n if (pe === void 0)\n try {\n throw Error();\n } catch (N) {\n var E = N.stack.trim().match(/\\n( *(at )?)/);\n pe = E && E[1] || \"\";\n }\n return `\n` + pe + t;\n }\n }\n var ve = !1, re;\n {\n var ze = typeof WeakMap == \"function\" ? WeakMap : Map;\n re = new ze();\n }\n function v(t, s) {\n if (!t || ve)\n return \"\";\n {\n var l = re.get(t);\n if (l !== void 0)\n return l;\n }\n var E;\n ve = !0;\n var N = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var $;\n $ = de.current, de.current = null, We();\n try {\n if (s) {\n var w = function() {\n throw Error();\n };\n if (Object.defineProperty(w.prototype, \"props\", {\n set: function() {\n throw Error();\n }\n }), typeof Reflect == \"object\" && Reflect.construct) {\n try {\n Reflect.construct(w, []);\n } catch (Z) {\n E = Z;\n }\n Reflect.construct(t, [], w);\n } else {\n try {\n w.call();\n } catch (Z) {\n E = Z;\n }\n t.call(w.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (Z) {\n E = Z;\n }\n t();\n }\n } catch (Z) {\n if (Z && E && typeof Z.stack == \"string\") {\n for (var b = Z.stack.split(`\n`), U = E.stack.split(`\n`), j = b.length - 1, M = U.length - 1; j >= 1 && M >= 0 && b[j] !== U[M]; )\n M--;\n for (; j >= 1 && M >= 0; j--, M--)\n if (b[j] !== U[M]) {\n if (j !== 1 || M !== 1)\n do\n if (j--, M--, M < 0 || b[j] !== U[M]) {\n var H = `\n` + b[j].replace(\" at new \", \" at \");\n return typeof t == \"function\" && re.set(t, H), H;\n }\n while (j >= 1 && M >= 0);\n break;\n }\n }\n } finally {\n ve = !1, de.current = $, Ue(), Error.prepareStackTrace = N;\n }\n var oe = t ? t.displayName || t.name : \"\", Sr = oe ? ee(oe) : \"\";\n return typeof t == \"function\" && re.set(t, Sr), Sr;\n }\n function te(t, s, l) {\n return v(t, !1);\n }\n function ne(t) {\n var s = t.prototype;\n return !!(s && s.isReactComponent);\n }\n function Q(t, s, l) {\n if (t == null)\n return \"\";\n if (typeof t == \"function\")\n return v(t, ne(t));\n if (typeof t == \"string\")\n return ee(t);\n switch (t) {\n case d:\n return ee(\"Suspense\");\n case y:\n return ee(\"SuspenseList\");\n }\n if (typeof t == \"object\")\n switch (t.$$typeof) {\n case h:\n return te(t.render);\n case _:\n return Q(t.type, s, l);\n case P:\n return te(t._render);\n case T: {\n var E = t, N = E._payload, $ = E._init;\n try {\n return Q($(N), s, l);\n } catch {\n }\n }\n }\n return \"\";\n }\n var hr = {}, mr = R.ReactDebugCurrentFrame;\n function Te(t) {\n if (t) {\n var s = t._owner, l = Q(t.type, t._source, s ? s.type : null);\n mr.setExtraStackFrame(l);\n } else\n mr.setExtraStackFrame(null);\n }\n function st(t, s, l, E, N) {\n {\n var $ = Function.call.bind(Object.prototype.hasOwnProperty);\n for (var w in t)\n if ($(t, w)) {\n var b = void 0;\n try {\n if (typeof t[w] != \"function\") {\n var U = Error((E || \"React class\") + \": \" + l + \" type `\" + w + \"` is invalid; it must be a function, usually from the `prop-types` package, but received `\" + typeof t[w] + \"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.\");\n throw U.name = \"Invariant Violation\", U;\n }\n b = t[w](s, w, E, l, null, \"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\");\n } catch (j) {\n b = j;\n }\n b && !(b instanceof Error) && (Te(N), F(\"%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).\", E || \"React class\", l, w, typeof b), Te(null)), b instanceof Error && !(b.message in hr) && (hr[b.message] = !0, Te(N), F(\"Failed %s type: %s\", l, b.message), Te(null));\n }\n }\n }\n var he = R.ReactCurrentOwner, qe = Object.prototype.hasOwnProperty, ct = {\n key: !0,\n ref: !0,\n __self: !0,\n __source: !0\n }, Er, yr, Be;\n Be = {};\n function ut(t) {\n if (qe.call(t, \"ref\")) {\n var s = Object.getOwnPropertyDescriptor(t, \"ref\").get;\n if (s && s.isReactWarning)\n return !1;\n }\n return t.ref !== void 0;\n }\n function ft(t) {\n if (qe.call(t, \"key\")) {\n var s = Object.getOwnPropertyDescriptor(t, \"key\").get;\n if (s && s.isReactWarning)\n return !1;\n }\n return t.key !== void 0;\n }\n function lt(t, s) {\n if (typeof t.ref == \"string\" && he.current && s && he.current.stateNode !== s) {\n var l = B(he.current.type);\n Be[l] || (F('Component \"%s\" contains the string ref \"%s\". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref', B(he.current.type), t.ref), Be[l] = !0);\n }\n }\n function dt(t, s) {\n {\n var l = function() {\n Er || (Er = !0, F(\"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\", s));\n };\n l.isReactWarning = !0, Object.defineProperty(t, \"key\", {\n get: l,\n configurable: !0\n });\n }\n }\n function pt(t, s) {\n {\n var l = function() {\n yr || (yr = !0, F(\"%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\", s));\n };\n l.isReactWarning = !0, Object.defineProperty(t, \"ref\", {\n get: l,\n configurable: !0\n });\n }\n }\n var vt = function(t, s, l, E, N, $, w) {\n var b = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: a,\n // Built-in properties that belong on the element\n type: t,\n key: s,\n ref: l,\n props: w,\n // Record the component responsible for creating this element.\n _owner: $\n };\n return b._store = {}, Object.defineProperty(b._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: !1\n }), Object.defineProperty(b, \"_self\", {\n configurable: !1,\n enumerable: !1,\n writable: !1,\n value: E\n }), Object.defineProperty(b, \"_source\", {\n configurable: !1,\n enumerable: !1,\n writable: !1,\n value: N\n }), Object.freeze && (Object.freeze(b.props), Object.freeze(b)), b;\n };\n function ht(t, s, l, E, N) {\n {\n var $, w = {}, b = null, U = null;\n l !== void 0 && (b = \"\" + l), ft(s) && (b = \"\" + s.key), ut(s) && (U = s.ref, lt(s, N));\n for ($ in s)\n qe.call(s, $) && !ct.hasOwnProperty($) && (w[$] = s[$]);\n if (t && t.defaultProps) {\n var j = t.defaultProps;\n for ($ in j)\n w[$] === void 0 && (w[$] = j[$]);\n }\n if (b || U) {\n var M = typeof t == \"function\" ? t.displayName || t.name || \"Unknown\" : t;\n b && dt(w, M), U && pt(w, M);\n }\n return vt(t, b, U, N, E, he.current, w);\n }\n }\n var Ge = R.ReactCurrentOwner, gr = R.ReactDebugCurrentFrame;\n function ae(t) {\n if (t) {\n var s = t._owner, l = Q(t.type, t._source, s ? s.type : null);\n gr.setExtraStackFrame(l);\n } else\n gr.setExtraStackFrame(null);\n }\n var Ke;\n Ke = !1;\n function Je(t) {\n return typeof t == \"object\" && t !== null && t.$$typeof === a;\n }\n function br() {\n {\n if (Ge.current) {\n var t = B(Ge.current.type);\n if (t)\n return `\n\nCheck the render method of \\`` + t + \"`.\";\n }\n return \"\";\n }\n }\n function mt(t) {\n {\n if (t !== void 0) {\n var s = t.fileName.replace(/^.*[\\\\\\/]/, \"\"), l = t.lineNumber;\n return `\n\nCheck your code at ` + s + \":\" + l + \".\";\n }\n return \"\";\n }\n }\n var _r = {};\n function Et(t) {\n {\n var s = br();\n if (!s) {\n var l = typeof t == \"string\" ? t : t.displayName || t.name;\n l && (s = `\n\nCheck the top-level render call using <` + l + \">.\");\n }\n return s;\n }\n }\n function wr(t, s) {\n {\n if (!t._store || t._store.validated || t.key != null)\n return;\n t._store.validated = !0;\n var l = Et(s);\n if (_r[l])\n return;\n _r[l] = !0;\n var E = \"\";\n t && t._owner && t._owner !== Ge.current && (E = \" It was passed a child from \" + B(t._owner.type) + \".\"), ae(t), F('Each child in a list should have a unique \"key\" prop.%s%s See https://reactjs.org/link/warning-keys for more information.', l, E), ae(null);\n }\n }\n function Rr(t, s) {\n {\n if (typeof t != \"object\")\n return;\n if (Array.isArray(t))\n for (var l = 0; l < t.length; l++) {\n var E = t[l];\n Je(E) && wr(E, s);\n }\n else if (Je(t))\n t._store && (t._store.validated = !0);\n else if (t) {\n var N = V(t);\n if (typeof N == \"function\" && N !== t.entries)\n for (var $ = N.call(t), w; !(w = $.next()).done; )\n Je(w.value) && wr(w.value, s);\n }\n }\n }\n function yt(t) {\n {\n var s = t.type;\n if (s == null || typeof s == \"string\")\n return;\n var l;\n if (typeof s == \"function\")\n l = s.propTypes;\n else if (typeof s == \"object\" && (s.$$typeof === h || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n s.$$typeof === _))\n l = s.propTypes;\n else\n return;\n if (l) {\n var E = B(s);\n st(l, t.props, \"prop\", E, t);\n } else if (s.PropTypes !== void 0 && !Ke) {\n Ke = !0;\n var N = B(s);\n F(\"Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?\", N || \"Unknown\");\n }\n typeof s.getDefaultProps == \"function\" && !s.getDefaultProps.isReactClassApproved && F(\"getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.\");\n }\n }\n function gt(t) {\n {\n for (var s = Object.keys(t.props), l = 0; l < s.length; l++) {\n var E = s[l];\n if (E !== \"children\" && E !== \"key\") {\n ae(t), F(\"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\", E), ae(null);\n break;\n }\n }\n t.ref !== null && (ae(t), F(\"Invalid attribute `ref` supplied to `React.Fragment`.\"), ae(null));\n }\n }\n function xr(t, s, l, E, N, $) {\n {\n var w = Le(t);\n if (!w) {\n var b = \"\";\n (t === void 0 || typeof t == \"object\" && t !== null && Object.keys(t).length === 0) && (b += \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\");\n var U = mt(N);\n U ? b += U : b += br();\n var j;\n t === null ? j = \"null\" : Array.isArray(t) ? j = \"array\" : t !== void 0 && t.$$typeof === a ? (j = \"<\" + (B(t.type) || \"Unknown\") + \" />\", b = \" Did you accidentally export a JSX literal instead of a component?\") : j = typeof t, F(\"React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\", j, b);\n }\n var M = ht(t, s, l, N, $);\n if (M == null)\n return M;\n if (w) {\n var H = s.children;\n if (H !== void 0)\n if (E)\n if (Array.isArray(H)) {\n for (var oe = 0; oe < H.length; oe++)\n Rr(H[oe], t);\n Object.freeze && Object.freeze(H);\n } else\n F(\"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\");\n else\n Rr(H, t);\n }\n return t === e.Fragment ? gt(M) : yt(M), M;\n }\n }\n function bt(t, s, l) {\n return xr(t, s, l, !0);\n }\n function _t(t, s, l) {\n return xr(t, s, l, !1);\n }\n var wt = _t, Rt = bt;\n e.jsx = wt, e.jsxs = Rt;\n }();\n }(Qe)), Qe;\n}\nprocess.env.NODE_ENV === \"production\" ? or.exports = Dn() : or.exports = jn();\nvar Wr = or.exports;\nfunction Mn(e, r, n) {\n return pr.call(r, \"css\") ? Wr.jsx(at, kn(e, r), n) : Wr.jsx(e, r, n);\n}\nfunction Yn(e) {\n return e == null;\n}\nconst it = ir(null);\nfunction Ln({\n analytics: e,\n children: r\n}) {\n return /* @__PURE__ */ Mn(it.Provider, { value: e, children: r });\n}\nfunction Fn() {\n const e = sr(it);\n if (Yn(e))\n throw new Error(\"useAnalytics는 AnalyticsProvider 하위에서 사용되어야 합니다.\");\n return {\n analytics: e\n };\n}\nexport {\n Ln as AnalyticsProvider,\n Fn as useAnalytics\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rc2hlZXRAMS4yLjEvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsaXNANC4xLjMvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsaXNANC4xLjMvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsaXNANC4xLjMvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxpc0A0LjEuMy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGlzQDQuMS4zL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1NlcmlhbGl6ZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGlzQDQuMS4zL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rbWVtb2l6ZUAwLjguMC9ub2RlX21vZHVsZXMvQGVtb3Rpb24vbWVtb2l6ZS9kaXN0L2Vtb3Rpb24tbWVtb2l6ZS5lc20uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rY2FjaGVAMTEuMTAuNS9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE2LjEzLjEvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1pc0AxNi4xMy4xL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3QtaXNAMTYuMTMuMS9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NAMy4zLjIvbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BlbW90aW9uK3V0aWxzQDEuMi4wL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24raGFzaEAwLjkuMC9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rdW5pdGxlc3NAMC44LjAvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rc2VyaWFsaXplQDEuMS4xL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5icm93c2VyLmVzbS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZW1vdGlvbit1c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc0AxLjAuMF9yZWFjdEAxNy4wLjIvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzL2Rpc3QvZW1vdGlvbi11c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy5icm93c2VyLmVzbS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZW1vdGlvbityZWFjdEAxMS4xMC41X0BiYWJlbCtjb3JlQDcuMjAuMTJfQHR5cGVzK3JlYWN0QDE3LjAuMzNfcmVhY3RAMTcuMC4yL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC02YTg4M2RhOS5icm93c2VyLmVzbS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9vYmplY3QtYXNzaWduQDQuMS4xL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rcmVhY3RAMTEuMTAuNV9AYmFiZWwrY29yZUA3LjIwLjEyX0B0eXBlcytyZWFjdEAxNy4wLjMzX3JlYWN0QDE3LjAuMi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmJyb3dzZXIuZXNtLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNOaWwuanMiLCIuLi9zcmMvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwg4p2k77iPXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyfC1tcy1leHBhbmR8LW1zLXJldmVhbCl7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuIiwiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gY2hhcmF0KHZhbHVlLCAwKSBeIDQ1ID8gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMykgOiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhcmF0ICh2YWx1ZSwgaW5kZXgpIHtcblx0cmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpIHwgMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHIgKHZhbHVlLCBiZWdpbiwgZW5kKSB7XG5cdHJldHVybiB2YWx1ZS5zbGljZShiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpemVvZiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHthbnlbXX0gYXJyYXlcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCAodmFsdWUsIGFycmF5KSB7XG5cdHJldHVybiBhcnJheS5wdXNoKHZhbHVlKSwgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUgKGFycmF5LCBjYWxsYmFjaykge1xuXHRyZXR1cm4gYXJyYXkubWFwKGNhbGxiYWNrKS5qb2luKCcnKVxufVxuIiwiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDpcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCJpbXBvcnQge0lNUE9SVCwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJpbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnO1xuaW1wb3J0IHsgZGVhbGxvYywgYWxsb2MsIG5leHQsIHRva2VuLCBmcm9tLCBwZWVrLCBkZWxpbWl0LCBzbGljZSwgcG9zaXRpb24sIFJVTEVTRVQsIGNvbWJpbmUsIG1hdGNoLCBzZXJpYWxpemUsIGNvcHksIHJlcGxhY2UsIFdFQktJVCwgTU9aLCBNUywgS0VZRlJBTUVTLCBERUNMQVJBVElPTiwgaGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHN0cmluZ2lmeSwgQ09NTUVOVCwgcnVsZXNoZWV0LCBtaWRkbGV3YXJlLCBjb21waWxlIH0gZnJvbSAnc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcgPSBmdW5jdGlvbiBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcoYmVnaW4sIHBvaW50cywgaW5kZXgpIHtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgdmFyIGNoYXJhY3RlciA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSBwZWVrKCk7IC8vICZcXGZcblxuICAgIGlmIChwcmV2aW91cyA9PT0gMzggJiYgY2hhcmFjdGVyID09PSAxMikge1xuICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZShiZWdpbiwgcG9zaXRpb24pO1xufTtcblxudmFyIHRvUnVsZXMgPSBmdW5jdGlvbiB0b1J1bGVzKHBhcnNlZCwgcG9pbnRzKSB7XG4gIC8vIHByZXRlbmQgd2UndmUgc3RhcnRlZCB3aXRoIGEgY29tbWFcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjaGFyYWN0ZXIgPSA0NDtcblxuICBkbyB7XG4gICAgc3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vICZcXGZcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gMzggJiYgcGVlaygpID09PSAxMikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IDEwMCUgY29ycmVjdCwgd2UgZG9uJ3QgYWNjb3VudCBmb3IgbGl0ZXJhbCBzZXF1ZW5jZXMgaGVyZSAtIGxpa2UgZm9yIGV4YW1wbGUgcXVvdGVkIHN0cmluZ3NcbiAgICAgICAgICAvLyBzdHlsaXMgaW5zZXJ0cyBcXGYgYWZ0ZXIgJiB0byBrbm93IHdoZW4gJiB3aGVyZSBpdCBzaG91bGQgcmVwbGFjZSB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGNvbnRleHQgc2VsZWN0b3JcbiAgICAgICAgICAvLyBhbmQgd2hlbiBpdCBzaG91bGQganVzdCBjb25jYXRlbmF0ZSB0aGUgb3V0ZXIgYW5kIGlubmVyIHNlbGVjdG9yc1xuICAgICAgICAgIC8vIGl0J3MgdmVyeSB1bmxpa2VseSBmb3IgdGhpcyBzZXF1ZW5jZSB0byBhY3R1YWxseSBhcHBlYXIgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgc28gd2UganVzdCBsZXZlcmFnZSB0aGlzIGZhY3QgaGVyZVxuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcocG9zaXRpb24gLSAxLCBwb2ludHMsIGluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBkZWxpbWl0KGNoYXJhY3Rlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIC8vIGNvbW1hXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDQ0KSB7XG4gICAgICAgICAgLy8gY29sb25cbiAgICAgICAgICBwYXJzZWRbKytpbmRleF0gPSBwZWVrKCkgPT09IDU4ID8gJyZcXGYnIDogJyc7XG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IHBhcnNlZFtpbmRleF0ubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZnJvbShjaGFyYWN0ZXIpO1xuICAgIH1cbiAgfSB3aGlsZSAoY2hhcmFjdGVyID0gbmV4dCgpKTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxudmFyIGdldFJ1bGVzID0gZnVuY3Rpb24gZ2V0UnVsZXModmFsdWUsIHBvaW50cykge1xuICByZXR1cm4gZGVhbGxvYyh0b1J1bGVzKGFsbG9jKHZhbHVlKSwgcG9pbnRzKSk7XG59OyAvLyBXZWFrU2V0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCBvbmx5IFdlYWtNYXAgaXMgc3VwcG9ydGVkIGluIElFMTFcblxuXG52YXIgZml4ZWRFbGVtZW50cyA9IC8qICNfX1BVUkVfXyAqL25ldyBXZWFrTWFwKCk7XG52YXIgY29tcGF0ID0gZnVuY3Rpb24gY29tcGF0KGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8ICFlbGVtZW50LnBhcmVudCB8fCAvLyBwb3NpdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBjb250YWlucyBwc2V1ZG9cbiAgLy8gbmVnYXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgaGFzIGJlZW4gYWxyZWFkeSBwcmVmaXhlZFxuICBlbGVtZW50Lmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlLFxuICAgICAgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gIHZhciBpc0ltcGxpY2l0UnVsZSA9IGVsZW1lbnQuY29sdW1uID09PSBwYXJlbnQuY29sdW1uICYmIGVsZW1lbnQubGluZSA9PT0gcGFyZW50LmxpbmU7XG5cbiAgd2hpbGUgKHBhcmVudC50eXBlICE9PSAncnVsZScpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gIH0gLy8gc2hvcnQtY2lyY3VpdCBmb3IgdGhlIHNpbXBsZXN0IGNhc2VcblxuXG4gIGlmIChlbGVtZW50LnByb3BzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZS5jaGFyQ29kZUF0KDApICE9PSA1OFxuICAvKiBjb2xvbiAqL1xuICAmJiAhZml4ZWRFbGVtZW50cy5nZXQocGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZiB0aGlzIGlzIGFuIGltcGxpY2l0bHkgaW5zZXJ0ZWQgcnVsZSAodGhlIG9uZSBlYWdlcmx5IGluc2VydGVkIGF0IHRoZSBlYWNoIG5ldyBuZXN0ZWQgbGV2ZWwpXG4gIC8vIHRoZW4gdGhlIHByb3BzIGhhcyBhbHJlYWR5IGJlZW4gbWFuaXB1bGF0ZWQgYmVmb3JlaGFuZCBhcyB0aGV5IHRoYXQgYXJyYXkgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIGl0cyBcInJ1bGUgcGFyZW50XCJcblxuXG4gIGlmIChpc0ltcGxpY2l0UnVsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpeGVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHRydWUpO1xuICB2YXIgcG9pbnRzID0gW107XG4gIHZhciBydWxlcyA9IGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpO1xuICB2YXIgcGFyZW50UnVsZXMgPSBwYXJlbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcmVudFJ1bGVzLmxlbmd0aDsgaisrLCBrKyspIHtcbiAgICAgIGVsZW1lbnQucHJvcHNba10gPSBwb2ludHNbaV0gPyBydWxlc1tpXS5yZXBsYWNlKC8mXFxmL2csIHBhcmVudFJ1bGVzW2pdKSA6IHBhcmVudFJ1bGVzW2pdICsgXCIgXCIgKyBydWxlc1tpXTtcbiAgICB9XG4gIH1cbn07XG52YXIgcmVtb3ZlTGFiZWwgPSBmdW5jdGlvbiByZW1vdmVMYWJlbChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdkZWNsJykge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIC8vIGNoYXJjb2RlIGZvciBsXG4gICAgdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gMTA4ICYmIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgdmFsdWUuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICAgICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxufTtcbnZhciBpZ25vcmVGbGFnID0gJ2Vtb3Rpb24tZGlzYWJsZS1zZXJ2ZXItcmVuZGVyaW5nLXVuc2FmZS1zZWxlY3Rvci13YXJuaW5nLXBsZWFzZS1kby1ub3QtdXNlLXRoaXMtdGhlLXdhcm5pbmctZXhpc3RzLWZvci1hLXJlYXNvbic7XG5cbnZhciBpc0lnbm9yaW5nQ29tbWVudCA9IGZ1bmN0aW9uIGlzSWdub3JpbmdDb21tZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gJ2NvbW0nICYmIGVsZW1lbnQuY2hpbGRyZW4uaW5kZXhPZihpZ25vcmVGbGFnKSA+IC0xO1xufTtcblxudmFyIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtID0gZnVuY3Rpb24gY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0oY2FjaGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4pIHtcbiAgICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgY2FjaGUuY29tcGF0KSByZXR1cm47XG4gICAgdmFyIHVuc2FmZVBzZXVkb0NsYXNzZXMgPSBlbGVtZW50LnZhbHVlLm1hdGNoKC8oOmZpcnN0fDpudGh8Om50aC1sYXN0KS1jaGlsZC9nKTtcblxuICAgIGlmICh1bnNhZmVQc2V1ZG9DbGFzc2VzKSB7XG4gICAgICB2YXIgaXNOZXN0ZWQgPSBlbGVtZW50LnBhcmVudCA9PT0gY2hpbGRyZW5bMF07IC8vIGluIG5lc3RlZCBydWxlcyBjb21tZW50cyBiZWNvbWUgY2hpbGRyZW4gb2YgdGhlIFwiYXV0by1pbnNlcnRlZFwiIHJ1bGVcbiAgICAgIC8vXG4gICAgICAvLyBjb25zaWRlcmluZyB0aGlzIGlucHV0OlxuICAgICAgLy8gLmEge1xuICAgICAgLy8gICAuYiAvKiBjb21tICovIHt9XG4gICAgICAvLyAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gfVxuICAgICAgLy8gd2UgZ2V0IG91dHB1dCBjb3JyZXNwb25kaW5nIHRvIHRoaXM6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgICYge1xuICAgICAgLy8gICAgIC8qIGNvbW0gKi9cbiAgICAgIC8vICAgICBjb2xvcjogaG90cGluaztcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICAuYiB7fVxuICAgICAgLy8gfVxuXG4gICAgICB2YXIgY29tbWVudENvbnRhaW5lciA9IGlzTmVzdGVkID8gY2hpbGRyZW5bMF0uY2hpbGRyZW4gOiAvLyBnbG9iYWwgcnVsZSBhdCB0aGUgcm9vdCBsZXZlbFxuICAgICAgY2hpbGRyZW47XG5cbiAgICAgIGZvciAodmFyIGkgPSBjb21tZW50Q29udGFpbmVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBub2RlID0gY29tbWVudENvbnRhaW5lcltpXTtcblxuICAgICAgICBpZiAobm9kZS5saW5lIDwgZWxlbWVudC5saW5lKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gaXQgaXMgcXVpdGUgd2VpcmQgYnV0IGNvbW1lbnRzIGFyZSAqdXN1YWxseSogcHV0IGF0IGBjb2x1bW46IGVsZW1lbnQuY29sdW1uIC0gMWBcbiAgICAgICAgLy8gc28gd2Ugc2VlayAqZnJvbSB0aGUgZW5kKiBmb3IgdGhlIG5vZGUgdGhhdCBpcyBlYXJsaWVyIHRoYW4gdGhlIHJ1bGUncyBgZWxlbWVudGAgYW5kIGNoZWNrIHRoYXRcbiAgICAgICAgLy8gdGhpcyB3aWxsIGFsc28gbWF0Y2ggaW5wdXRzIGxpa2UgdGhpczpcbiAgICAgICAgLy8gLmEge1xuICAgICAgICAvLyAgIC8qIGNvbW0gKi9cbiAgICAgICAgLy8gICAuYiB7fVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGJ1dCB0aGF0IGlzIGZpbmVcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaXQgd291bGQgYmUgdGhlIGVhc2llc3QgdG8gY2hhbmdlIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGNvbW1lbnQgdG8gYmUgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBydWxlOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLmIgeyAvKiBjb21tICovIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB3aXRoIHN1Y2ggaW5wdXRzIHdlIHdvdWxkbid0IGhhdmUgdG8gc2VhcmNoIGZvciB0aGUgY29tbWVudCBhdCBhbGxcbiAgICAgICAgLy8gVE9ETzogY29uc2lkZXIgY2hhbmdpbmcgdGhpcyBjb21tZW50IHBsYWNlbWVudCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5cblxuICAgICAgICBpZiAobm9kZS5jb2x1bW4gPCBlbGVtZW50LmNvbHVtbikge1xuICAgICAgICAgIGlmIChpc0lnbm9yaW5nQ29tbWVudChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVuc2FmZVBzZXVkb0NsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAodW5zYWZlUHNldWRvQ2xhc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBwc2V1ZG8gY2xhc3MgXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3MgKyBcIlxcXCIgaXMgcG90ZW50aWFsbHkgdW5zYWZlIHdoZW4gZG9pbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBUcnkgY2hhbmdpbmcgaXQgdG8gXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3Muc3BsaXQoJy1jaGlsZCcpWzBdICsgXCItb2YtdHlwZVxcXCIuXCIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGlzSW1wb3J0UnVsZSA9IGZ1bmN0aW9uIGlzSW1wb3J0UnVsZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1ICYmIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDApID09PSA2NDtcbn07XG5cbnZhciBpc1ByZXBlbmRlZFdpdGhSZWd1bGFyUnVsZXMgPSBmdW5jdGlvbiBpc1ByZXBlbmRlZFdpdGhSZWd1bGFyUnVsZXMoaW5kZXgsIGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKCFpc0ltcG9ydFJ1bGUoY2hpbGRyZW5baV0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59OyAvLyB1c2UgdGhpcyB0byByZW1vdmUgaW5jb3JyZWN0IGVsZW1lbnRzIGZyb20gZnVydGhlciBwcm9jZXNzaW5nXG4vLyBzbyB0aGV5IGRvbid0IGdldCBoYW5kZWQgdG8gdGhlIGBzaGVldGAgKG9yIGFueXRoaW5nIGVsc2UpXG4vLyBhcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYWRkaXRpb25hbCBsb2dzIHdoaWNoIGluIHR1cm4gY291bGQgYmUgb3ZlcmhlbG1pbmcgdG8gdGhlIHVzZXJcblxuXG52YXIgbnVsbGlmeUVsZW1lbnQgPSBmdW5jdGlvbiBudWxsaWZ5RWxlbWVudChlbGVtZW50KSB7XG4gIGVsZW1lbnQudHlwZSA9ICcnO1xuICBlbGVtZW50LnZhbHVlID0gJyc7XG4gIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgZWxlbWVudC5jaGlsZHJlbiA9ICcnO1xuICBlbGVtZW50LnByb3BzID0gJyc7XG59O1xuXG52YXIgaW5jb3JyZWN0SW1wb3J0QWxhcm0gPSBmdW5jdGlvbiBpbmNvcnJlY3RJbXBvcnRBbGFybShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4pIHtcbiAgaWYgKCFpc0ltcG9ydFJ1bGUoZWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZWxlbWVudC5wYXJlbnQpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiYEBpbXBvcnRgIHJ1bGVzIGNhbid0IGJlIG5lc3RlZCBpbnNpZGUgb3RoZXIgcnVsZXMuIFBsZWFzZSBtb3ZlIGl0IHRvIHRoZSB0b3AgbGV2ZWwgYW5kIHB1dCBpdCBiZWZvcmUgcmVndWxhciBydWxlcy4gS2VlcCBpbiBtaW5kIHRoYXQgdGhleSBjYW4gb25seSBiZSB1c2VkIHdpdGhpbiBnbG9iYWwgc3R5bGVzLlwiKTtcbiAgICBudWxsaWZ5RWxlbWVudChlbGVtZW50KTtcbiAgfSBlbHNlIGlmIChpc1ByZXBlbmRlZFdpdGhSZWd1bGFyUnVsZXMoaW5kZXgsIGNoaWxkcmVuKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgYWZ0ZXIgb3RoZXIgcnVsZXMuIFBsZWFzZSBwdXQgeW91ciBgQGltcG9ydGAgcnVsZXMgYmVmb3JlIHlvdXIgb3RoZXIgcnVsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbiBjcmVhdGVDYWNoZShvcHRpb25zKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAha2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGhhdmUgdG8gY29uZmlndXJlIGBrZXlgIGZvciB5b3VyIGNhY2hlLiBQbGVhc2UgbWFrZSBzdXJlIGl0J3MgdW5pcXVlIChhbmQgbm90IGVxdWFsIHRvICdjc3MnKSBhcyBpdCdzIHVzZWQgZm9yIGxpbmtpbmcgc3R5bGVzIHRvIHlvdXIgY2FjaGUuXFxuXCIgKyBcIklmIG11bHRpcGxlIGNhY2hlcyBzaGFyZSB0aGUgc2FtZSBrZXkgdGhleSBtaWdodCBcXFwiZmlnaHRcXFwiIGZvciBlYWNoIG90aGVyJ3Mgc3R5bGUgZWxlbWVudHMuXCIpO1xuICB9XG5cbiAgaWYgKCBrZXkgPT09ICdjc3MnKSB7XG4gICAgdmFyIHNzclN0eWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25dOm5vdChbZGF0YS1zXSlcIik7IC8vIGdldCBTU1JlZCBzdHlsZXMgb3V0IG9mIHRoZSB3YXkgb2YgUmVhY3QncyBoeWRyYXRpb25cbiAgICAvLyBkb2N1bWVudC5oZWFkIGlzIGEgc2FmZSBwbGFjZSB0byBtb3ZlIHRoZW0gdG8odGhvdWdoIG5vdGUgZG9jdW1lbnQuaGVhZCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcGxhY2UgdGhleSB3aWxsIGJlKVxuICAgIC8vIG5vdGUgdGhpcyB2ZXJ5IHZlcnkgaW50ZW50aW9uYWxseSB0YXJnZXRzIGFsbCBzdHlsZSBlbGVtZW50cyByZWdhcmRsZXNzIG9mIHRoZSBrZXkgdG8gZW5zdXJlXG4gICAgLy8gdGhhdCBjcmVhdGluZyBhIGNhY2hlIHdvcmtzIGluc2lkZSBvZiByZW5kZXIgb2YgYSBSZWFjdCBjb21wb25lbnRcblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc3NyU3R5bGVzLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzdHlsaXNQbHVnaW5zID0gb3B0aW9ucy5zdHlsaXNQbHVnaW5zIHx8IGRlZmF1bHRTdHlsaXNQbHVnaW5zO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGlmICgvW15hLXotXS8udGVzdChrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbW90aW9uIGtleSBtdXN0IG9ubHkgY29udGFpbiBsb3dlciBjYXNlIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIGFuZCAtIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIHBhc3NlZFwiKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5zZXJ0ZWQgPSB7fTtcbiAgdmFyIGNvbnRhaW5lcjtcbiAgdmFyIG5vZGVzVG9IeWRyYXRlID0gW107XG5cbiAge1xuICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmhlYWQ7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggLy8gdGhpcyBtZWFucyB3ZSB3aWxsIGlnbm9yZSBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGEgc3BhY2UgaW4gdGhlbSB3aGljaFxuICAgIC8vIG1lYW5zIHRoYXQgdGhlIHN0eWxlIGVsZW1lbnRzIHdlJ3JlIGxvb2tpbmcgYXQgYXJlIG9ubHkgRW1vdGlvbiAxMSBzZXJ2ZXItcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXj1cXFwiXCIgKyBrZXkgKyBcIiBcXFwiXVwiKSwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAgdmFyIG9tbmlwcmVzZW50UGx1Z2lucyA9IFtjb21wYXQsIHJlbW92ZUxhYmVsXTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIG9tbmlwcmVzZW50UGx1Z2lucy5wdXNoKGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKHtcbiAgICAgIGdldCBjb21wYXQoKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5jb21wYXQ7XG4gICAgICB9XG5cbiAgICB9KSwgaW5jb3JyZWN0SW1wb3J0QWxhcm0pO1xuICB9XG5cbiAge1xuICAgIHZhciBjdXJyZW50U2hlZXQ7XG4gICAgdmFyIGZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBpZiAoIWVsZW1lbnQucm9vdCkge1xuICAgICAgICBpZiAoZWxlbWVudFtcInJldHVyblwiXSkge1xuICAgICAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQoZWxlbWVudFtcInJldHVyblwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC52YWx1ZSAmJiBlbGVtZW50LnR5cGUgIT09IENPTU1FTlQpIHtcbiAgICAgICAgICAvLyBpbnNlcnQgZW1wdHkgcnVsZSBpbiBub24tcHJvZHVjdGlvbiBlbnZpcm9ubWVudHNcbiAgICAgICAgICAvLyBzbyBAZW1vdGlvbi9qZXN0IGNhbiBncmFiIGBrZXlgIGZyb20gdGhlIChKUylET00gZm9yIGNhY2hlcyB3aXRob3V0IGFueSBydWxlcyBpbnNlcnRlZCB5ZXRcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnQudmFsdWUgKyBcInt9XCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSA6IHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQoc2VsZWN0b3IsIHNlcmlhbGl6ZWQsIHNoZWV0LCBzaG91bGRDYWNoZSkge1xuICAgICAgY3VycmVudFNoZWV0ID0gc2hlZXQ7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNlcmlhbGl6ZWQubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3VycmVudFNoZWV0ID0ge1xuICAgICAgICAgIGluc2VydDogZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0Lmluc2VydChydWxlICsgc2VyaWFsaXplZC5tYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3R5bGlzKHNlbGVjdG9yID8gc2VsZWN0b3IgKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCIgOiBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5LFxuICAgICAgcHJlcGVuZDogb3B0aW9ucy5wcmVwZW5kLFxuICAgICAgaW5zZXJ0aW9uUG9pbnQ6IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnRcbiAgICB9KSxcbiAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICBpbnNlcnRlZDogaW5zZXJ0ZWQsXG4gICAgcmVnaXN0ZXJlZDoge30sXG4gICAgaW5zZXJ0OiBfaW5zZXJ0XG4gIH07XG4gIGNhY2hlLnNoZWV0Lmh5ZHJhdGUobm9kZXNUb0h5ZHJhdGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDYWNoZTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCJ2YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIG1heWJlU3R5bGVzID0gY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG11cm11cjI7XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pdGxlc3NLZXlzO1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG52YXIgVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IgPSBcIllvdSBoYXZlIHBhc3NlZCBpbiBmYWxzeSB2YWx1ZSBhcyBzdHlsZSBvYmplY3QncyBrZXkgKGNhbiBoYXBwZW4gd2hlbiBpbiBleGFtcGxlIHlvdSBwYXNzIHVuZXhwb3J0ZWQgY29tcG9uZW50IGFzIGNvbXB1dGVkIGtleSkuXCI7XG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNvbnRlbnRWYWx1ZVBhdHRlcm4gPSAvKHZhcnxhdHRyfGNvdW50ZXJzP3x1cmx8ZWxlbWVudHwoKChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbCkpfGNvbmljKS1ncmFkaWVudClcXCh8KG5vLSk/KG9wZW58Y2xvc2UpLXF1b3RlLztcbiAgdmFyIGNvbnRlbnRWYWx1ZXMgPSBbJ25vcm1hbCcsICdub25lJywgJ2luaXRpYWwnLCAnaW5oZXJpdCcsICd1bnNldCddO1xuICB2YXIgb2xkUHJvY2Vzc1N0eWxlVmFsdWUgPSBwcm9jZXNzU3R5bGVWYWx1ZTtcbiAgdmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcbiAgdmFyIGh5cGhlbmF0ZWRDYWNoZSA9IHt9O1xuXG4gIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdjb250ZW50Jykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udGVudFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEgJiYgIWNvbnRlbnRWYWx1ZVBhdHRlcm4udGVzdCh2YWx1ZSkgJiYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpIHx8IHZhbHVlLmNoYXJBdCgwKSAhPT0gJ1wiJyAmJiB2YWx1ZS5jaGFyQXQoMCkgIT09IFwiJ1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3Ugc2VlbSB0byBiZSB1c2luZyBhIHZhbHVlIGZvciAnY29udGVudCcgd2l0aG91dCBxdW90ZXMsIHRyeSByZXBsYWNpbmcgaXQgd2l0aCBgY29udGVudDogJ1xcXCJcIiArIHZhbHVlICsgXCJcXFwiJ2BcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb2Nlc3NlZCA9IG9sZFByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpO1xuXG4gICAgaWYgKHByb2Nlc3NlZCAhPT0gJycgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiBrZXkuaW5kZXhPZignLScpICE9PSAtMSAmJiBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVXNpbmcga2ViYWItY2FzZSBmb3IgY3NzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gXCIgKyBrZXkucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKS5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChzdHIsIF9jaGFyKSB7XG4gICAgICAgIHJldHVybiBfY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSkgKyBcIj9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfTtcbn1cblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb24uX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi50b1N0cmluZygpID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGludGVycG9sYXRpb24ubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczogaW50ZXJwb2xhdGlvbi5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gaW50ZXJwb2xhdGlvbi5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGludGVycG9sYXRpb24uc3R5bGVzICsgXCI7XCI7XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gaW50ZXJwb2xhdGlvbi5tYXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJwb2xhdGVkIGluIGNzcyBjYWxscyB3aWxsIGJlIHN0cmluZ2lmaWVkLlxcbicgKyAnSWYgeW91IHdhbnQgdG8gaGF2ZSBhIGNzcyBjYWxsIGJhc2VkIG9uIHByb3BzLCBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjc3MgY2FsbCBsaWtlIHRoaXNcXG4nICsgJ2xldCBkeW5hbWljU3R5bGUgPSAocHJvcHMpID0+IGNzc2Bjb2xvcjogJHtwcm9wcy5jb2xvcn1gXFxuJyArICdJdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHdpdGggcHJvcHMgb3IgaW50ZXJwb2xhdGVkIGluIGEgc3R5bGVkIGNhbGwgbGlrZSB0aGlzXFxuJyArIFwibGV0IFNvbWVDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpYCR7ZHluYW1pY1N0eWxlfWBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBpbnRlcnBvbGF0aW9uLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgdmFyIGZha2VWYXJOYW1lID0gXCJhbmltYXRpb25cIiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoZWQucHVzaChcImNvbnN0IFwiICsgZmFrZVZhck5hbWUgKyBcIiA9IGtleWZyYW1lc2BcIiArIHAyLnJlcGxhY2UoL15Aa2V5ZnJhbWVzIGFuaW1hdGlvbi1cXHcrLywgJycpICsgXCJgXCIpO1xuICAgICAgICAgIHJldHVybiBcIiR7XCIgKyBmYWtlVmFyTmFtZSArIFwifVwiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdga2V5ZnJhbWVzYCBvdXRwdXQgZ290IGludGVycG9sYXRlZCBpbnRvIHBsYWluIHN0cmluZywgcGxlYXNlIHdyYXAgaXQgd2l0aCBgY3NzYC5cXG5cXG4nICsgJ0luc3RlYWQgb2YgZG9pbmcgdGhpczpcXG5cXG4nICsgW10uY29uY2F0KG1hdGNoZWQsIFtcImBcIiArIHJlcGxhY2VkICsgXCJgXCJdKS5qb2luKCdcXG4nKSArICdcXG5cXG5Zb3Ugc2hvdWxkIHdyYXAgaXQgd2l0aCBgY3NzYCBsaWtlIHRoaXM6XFxuXFxuJyArIChcImNzc2BcIiArIHJlcGxhY2VkICsgXCJgXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFtpbnRlcnBvbGF0aW9uXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogaW50ZXJwb2xhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9rZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpbX2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZWdpc3RlcmVkICE9IG51bGwgJiYgcmVnaXN0ZXJlZFt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0cmluZyArPSBfa2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW3ZhbHVlXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWUpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGludGVycG9sYXRlZCA9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlKTtcblxuICAgICAgICAgIHN3aXRjaCAoX2tleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBfa2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbnZhciBzb3VyY2VNYXBQYXR0ZXJuO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzb3VyY2VNYXBQYXR0ZXJuID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvL2c7XG59IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG5cbnZhciBjdXJzb3I7XG52YXIgc2VyaWFsaXplU3R5bGVzID0gZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgIH1cblxuICAgIHN0eWxlcyArPSBzdHJpbmdzWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldKTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcyArPSBzdHJpbmdzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VNYXA7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBzdHlsZXMgPSBzdHlsZXMucmVwbGFjZShzb3VyY2VNYXBQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHNvdXJjZU1hcCA9IG1hdGNoO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIC8vICRGbG93Rml4TWUgd2Uga25vdyBpdCdzIG5vdCBudWxsXG4gICAgbWF0Y2hbMV07XG4gIH1cblxuICB2YXIgbmFtZSA9IGhhc2hTdHJpbmcoc3R5bGVzKSArIGlkZW50aWZpZXJOYW1lO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZSBTZXJpYWxpemVkU3R5bGVzIHR5cGUgZG9lc24ndCBoYXZlIHRvU3RyaW5nIHByb3BlcnR5IChhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQgaXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICAgIG1hcDogc291cmNlTWFwLFxuICAgICAgbmV4dDogY3Vyc29yLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBuZXh0OiBjdXJzb3JcbiAgfTtcbn07XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSAgdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgdXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIGZvcndhcmRSZWYsIGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovY3JlYXRlQ29udGV4dCh7fSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFRoZW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uVGhlbWVDb250ZXh0Jztcbn1cblxudmFyIHVzZVRoZW1lID0gZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG59O1xuXG52YXIgZ2V0VGhlbWUgPSBmdW5jdGlvbiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSkge1xuICBpZiAodHlwZW9mIHRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG1lcmdlZFRoZW1lID0gdGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAobWVyZ2VkVGhlbWUgPT0gbnVsbCB8fCB0eXBlb2YgbWVyZ2VkVGhlbWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobWVyZ2VkVGhlbWUpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbVGhlbWVQcm92aWRlcl0gUGxlYXNlIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIHRoZW1lIGZ1bmN0aW9uLCBpLmUuIHRoZW1lPXsoKSA9PiAoe30pfSEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAodGhlbWUgPT0gbnVsbCB8fCB0eXBlb2YgdGhlbWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodGhlbWUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSBtYWtlIHlvdXIgdGhlbWUgcHJvcCBhIHBsYWluIG9iamVjdCcpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cbiAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIHRoZW1lID0gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgdmFyIFdpdGhUaGVtZSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKHJlbmRlcik7XG4gIFdpdGhUaGVtZS5kaXNwbGF5TmFtZSA9IFwiV2l0aFRoZW1lKFwiICsgY29tcG9uZW50TmFtZSArIFwiKVwiO1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MoV2l0aFRoZW1lLCBDb21wb25lbnQpO1xufVxuXG52YXIgZ2V0TGFzdFBhcnQgPSBmdW5jdGlvbiBnZXRMYXN0UGFydChmdW5jdGlvbk5hbWUpIHtcbiAgLy8gVGhlIG1hdGNoIG1heSBiZSBzb21ldGhpbmcgbGlrZSAnT2JqZWN0LmNyZWF0ZUVtb3Rpb25Qcm9wcycgb3JcbiAgLy8gJ0xvYWRlci5wcm90b3R5cGUucmVuZGVyJ1xuICB2YXIgcGFydHMgPSBmdW5jdGlvbk5hbWUuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xufTtcblxudmFyIGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZSA9IGZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZShsaW5lKSB7XG4gIC8vIFY4XG4gIHZhciBtYXRjaCA9IC9eXFxzK2F0XFxzKyhbQS1aYS16MC05JC5dKylcXHMvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTsgLy8gU2FmYXJpIC8gRmlyZWZveFxuXG4gIG1hdGNoID0gL14oW0EtWmEtejAtOSQuXSspQC8uZXhlYyhsaW5lKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZ2V0TGFzdFBhcnQobWF0Y2hbMV0pO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxudmFyIGludGVybmFsUmVhY3RGdW5jdGlvbk5hbWVzID0gLyogI19fUFVSRV9fICovbmV3IFNldChbJ3JlbmRlcldpdGhIb29rcycsICdwcm9jZXNzQ2hpbGQnLCAnZmluaXNoQ2xhc3NDb21wb25lbnQnLCAncmVuZGVyVG9TdHJpbmcnXSk7IC8vIFRoZXNlIGlkZW50aWZpZXJzIGNvbWUgZnJvbSBlcnJvciBzdGFja3MsIHNvIHRoZXkgaGF2ZSB0byBiZSB2YWxpZCBKU1xuLy8gaWRlbnRpZmllcnMsIHRodXMgd2Ugb25seSBuZWVkIHRvIHJlcGxhY2Ugd2hhdCBpcyBhIHZhbGlkIGNoYXJhY3RlciBmb3IgSlMsXG4vLyBidXQgbm90IGZvciBDU1MuXG5cbnZhciBzYW5pdGl6ZUlkZW50aWZpZXIgPSBmdW5jdGlvbiBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICByZXR1cm4gaWRlbnRpZmllci5yZXBsYWNlKC9cXCQvZywgJy0nKTtcbn07XG5cbnZhciBnZXRMYWJlbEZyb21TdGFja1RyYWNlID0gZnVuY3Rpb24gZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZShzdGFja1RyYWNlKSB7XG4gIGlmICghc3RhY2tUcmFjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdmFyIGxpbmVzID0gc3RhY2tUcmFjZS5zcGxpdCgnXFxuJyk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBmdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZXNbaV0pOyAvLyBUaGUgZmlyc3QgbGluZSBvZiBWOCBzdGFjayB0cmFjZXMgaXMganVzdCBcIkVycm9yXCJcblxuICAgIGlmICghZnVuY3Rpb25OYW1lKSBjb250aW51ZTsgLy8gSWYgd2UgcmVhY2ggb25lIG9mIHRoZXNlLCB3ZSBoYXZlIGdvbmUgdG9vIGZhciBhbmQgc2hvdWxkIHF1aXRcblxuICAgIGlmIChpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcy5oYXMoZnVuY3Rpb25OYW1lKSkgYnJlYWs7IC8vIFRoZSBjb21wb25lbnQgbmFtZSBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIHN0YWNrIHRoYXQgc3RhcnRzIHdpdGggYW5cbiAgICAvLyB1cHBlcmNhc2UgbGV0dGVyXG5cbiAgICBpZiAoL15bQS1aXS8udGVzdChmdW5jdGlvbk5hbWUpKSByZXR1cm4gc2FuaXRpemVJZGVudGlmaWVyKGZ1bmN0aW9uTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxudmFyIHR5cGVQcm9wTmFtZSA9ICdfX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBsYWJlbFByb3BOYW1lID0gJ19fRU1PVElPTl9MQUJFTF9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBjcmVhdGVFbW90aW9uUHJvcHMgPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIHByb3BzLmNzcyA9PT0gJ3N0cmluZycgJiYgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjc3MgZGVjbGFyYXRpb25cbiAgcHJvcHMuY3NzLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmdzIGFyZSBub3QgYWxsb3dlZCBhcyBjc3MgcHJvcCB2YWx1ZXMsIHBsZWFzZSB3cmFwIGl0IGluIGEgY3NzIHRlbXBsYXRlIGxpdGVyYWwgZnJvbSAnQGVtb3Rpb24vcmVhY3QnIGxpa2UgdGhpczogY3NzYFwiICsgcHJvcHMuY3NzICsgXCJgXCIpO1xuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBGb3IgcGVyZm9ybWFuY2UsIG9ubHkgY2FsbCBnZXRMYWJlbEZyb21TdGFja1RyYWNlIGluIGRldmVsb3BtZW50IGFuZCB3aGVuXG4gIC8vIHRoZSBsYWJlbCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNvbXB1dGVkXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgISFwcm9wcy5jc3MgJiYgKHR5cGVvZiBwcm9wcy5jc3MgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBwcm9wcy5jc3MubmFtZSAhPT0gJ3N0cmluZycgfHwgcHJvcHMuY3NzLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkpIHtcbiAgICB2YXIgbGFiZWwgPSBnZXRMYWJlbEZyb21TdGFja1RyYWNlKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICBpZiAobGFiZWwpIG5ld1Byb3BzW2xhYmVsUHJvcE5hbWVdID0gbGFiZWw7XG4gIH1cblxuICByZXR1cm4gbmV3UHJvcHM7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBydWxlcyA9IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgRW1vdGlvbiA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gIHZhciBjc3NQcm9wID0gcHJvcHMuY3NzOyAvLyBzbyB0aGF0IHVzaW5nIGBjc3NgIGZyb20gYGVtb3Rpb25gIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGNzcyBwcm9wIHdvcmtzXG4gIC8vIG5vdCBwYXNzaW5nIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIHNlcmlhbGl6ZVN0eWxlcyBiZWNhdXNlIGl0IHdvdWxkXG4gIC8vIG1ha2UgY2VydGFpbiBiYWJlbCBvcHRpbWlzYXRpb25zIG5vdCBwb3NzaWJsZVxuXG4gIGlmICh0eXBlb2YgY3NzUHJvcCA9PT0gJ3N0cmluZycgJiYgY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3NzUHJvcCA9IGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF07XG4gIH1cblxuICB2YXIgV3JhcHBlZENvbXBvbmVudCA9IHByb3BzW3R5cGVQcm9wTmFtZV07XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW2Nzc1Byb3BdO1xuICB2YXIgY2xhc3NOYW1lID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBwcm9wcy5jbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lICsgXCIgXCI7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCB1bmRlZmluZWQsIHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5uYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICB2YXIgbGFiZWxGcm9tU3RhY2sgPSBwcm9wc1tsYWJlbFByb3BOYW1lXTtcblxuICAgIGlmIChsYWJlbEZyb21TdGFjaykge1xuICAgICAgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc2VyaWFsaXplZCwgJ2xhYmVsOicgKyBsYWJlbEZyb21TdGFjayArICc7J10pO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbmV4cG9ydCB7IENhY2hlUHJvdmlkZXIgYXMgQywgRW1vdGlvbiBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd25Qcm9wZXJ0eSBhcyBoLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3JlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpO3ZhciBmPXJlcXVpcmUoXCJyZWFjdFwiKSxnPTYwMTAzO2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIGg9U3ltYm9sLmZvcjtnPWgoXCJyZWFjdC5lbGVtZW50XCIpO2V4cG9ydHMuRnJhZ21lbnQ9aChcInJlYWN0LmZyYWdtZW50XCIpfXZhciBtPWYuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuUmVhY3RDdXJyZW50T3duZXIsbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIHEoYyxhLGspe3ZhciBiLGQ9e30sZT1udWxsLGw9bnVsbDt2b2lkIDAhPT1rJiYoZT1cIlwiK2spO3ZvaWQgMCE9PWEua2V5JiYoZT1cIlwiK2Eua2V5KTt2b2lkIDAhPT1hLnJlZiYmKGw9YS5yZWYpO2ZvcihiIGluIGEpbi5jYWxsKGEsYikmJiFwLmhhc093blByb3BlcnR5KGIpJiYoZFtiXT1hW2JdKTtpZihjJiZjLmRlZmF1bHRQcm9wcylmb3IoYiBpbiBhPWMuZGVmYXVsdFByb3BzLGEpdm9pZCAwPT09ZFtiXSYmKGRbYl09YVtiXSk7cmV0dXJueyQkdHlwZW9mOmcsdHlwZTpjLGtleTplLHJlZjpsLHByb3BzOmQsX293bmVyOm0uY3VycmVudH19ZXhwb3J0cy5qc3g9cTtleHBvcnRzLmpzeHM9cTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbmV4cG9ydHMuRnJhZ21lbnQgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIGV4cG9ydHMuRnJhZ21lbnQgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSksIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQpIHtcbiAgICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICAgIGlmICghdmFsaWRUeXBlKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSk7XG5cbiAgICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFVih0eXBlLCBwcm9wcywga2V5LCBzb3VyY2UsIHNlbGYpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gICAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgICBpZiAodmFsaWRUeXBlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59IC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgZXhpc3QgdG8gc3RpbGwgZ2V0IGNoaWxkIHdhcm5pbmdzIGluIGRldlxuLy8gZXZlbiB3aXRoIHRoZSBwcm9kIHRyYW5zZm9ybS4gVGhpcyBtZWFucyB0aGF0IGpzeERFViBpcyBwdXJlbHlcbi8vIG9wdC1pbiBiZWhhdmlvciBmb3IgYmV0dGVyIG1lc3NhZ2VzIGJ1dCB0aGF0IHdlIHdvbid0IHN0b3Bcbi8vIGdpdmluZyB5b3Ugd2FybmluZ3MgaWYgeW91IHVzZSBwcm9kdWN0aW9uIGFwaXMuXG5cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25EeW5hbWljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGpzeCA9ICBqc3hXaXRoVmFsaWRhdGlvbkR5bmFtaWMgOyAvLyB3ZSBtYXkgd2FudCB0byBzcGVjaWFsIGNhc2UganN4cyBpbnRlcm5hbGx5IHRvIHRha2UgYWR2YW50YWdlIG9mIHN0YXRpYyBjaGlsZHJlbi5cbi8vIGZvciBub3cgd2UgY2FuIHNoaXAgaWRlbnRpY2FsIHByb2QgZnVuY3Rpb25zXG5cbnZhciBqc3hzID0gIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljIDtcblxuZXhwb3J0cy5qc3ggPSBqc3g7XG5leHBvcnRzLmpzeHMgPSBqc3hzO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJpbXBvcnQgJ3JlYWN0JztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgaCBhcyBoYXNPd25Qcm9wZXJ0eSwgRSBhcyBFbW90aW9uLCBjIGFzIGNyZWF0ZUVtb3Rpb25Qcm9wcyB9IGZyb20gJy4uLy4uL2Rpc3QvZW1vdGlvbi1lbGVtZW50LTZhODgzZGE5LmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0ICcuLi8uLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IEZyYWdtZW50IGFzIEZyYWdtZW50JDEsIGpzeCBhcyBqc3gkMSwganN4cyBhcyBqc3hzJDEgfSBmcm9tICdyZWFjdC9qc3gtcnVudGltZSc7XG5cbnZhciBGcmFnbWVudCA9IEZyYWdtZW50JDE7XG5mdW5jdGlvbiBqc3godHlwZSwgcHJvcHMsIGtleSkge1xuICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwocHJvcHMsICdjc3MnKSkge1xuICAgIHJldHVybiBqc3gkMSh0eXBlLCBwcm9wcywga2V5KTtcbiAgfVxuXG4gIHJldHVybiBqc3gkMShFbW90aW9uLCBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpLCBrZXkpO1xufVxuZnVuY3Rpb24ganN4cyh0eXBlLCBwcm9wcywga2V5KSB7XG4gIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgcmV0dXJuIGpzeHMkMSh0eXBlLCBwcm9wcywga2V5KTtcbiAgfVxuXG4gIHJldHVybiBqc3hzJDEoRW1vdGlvbiwgY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSwga2V5KTtcbn1cblxuZXhwb3J0IHsgRnJhZ21lbnQsIGpzeCwganN4cyB9O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbnVsbGlzaCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTmlsKG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOaWwodm9pZCAwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmlsKE5hTik7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05pbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOaWw7XG4iLCJpbXBvcnQgdHlwZSB7IEFuYWx5dGljc0luc3RhbmNlIH0gZnJvbSAnYW5hbHl0aWNzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgQW5hbHl0aWNzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QW5hbHl0aWNzSW5zdGFuY2UgfCBudWxsPihudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFuYWx5dGljc1Byb3ZpZGVyKHtcbiAgYW5hbHl0aWNzLFxuICBjaGlsZHJlbixcbn06IHtcbiAgYW5hbHl0aWNzOiBBbmFseXRpY3NJbnN0YW5jZTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgcmV0dXJuIDxBbmFseXRpY3NDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXthbmFseXRpY3N9PntjaGlsZHJlbn08L0FuYWx5dGljc0NvbnRleHQuUHJvdmlkZXI+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQW5hbHl0aWNzKCkge1xuICBjb25zdCBhbmFseXRpY3MgPSB1c2VDb250ZXh0KEFuYWx5dGljc0NvbnRleHQpO1xuXG4gIGlmIChpc05pbChhbmFseXRpY3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBbmFseXRpY3PripQgQW5hbHl0aWNzUHJvdmlkZXIg7ZWY7JyE7JeQ7IScIOyCrOyaqeuQmOyWtOyVvCDtlanri4jri6QuJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFuYWx5dGljcyxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJzaGVldEZvclRhZyIsInRhZyIsImkiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJvcHRpb25zIiwiU3R5bGVTaGVldCIsIl90aGlzIiwiYmVmb3JlIiwiX3Byb3RvIiwibm9kZXMiLCJydWxlIiwiaXNJbXBvcnRSdWxlIiwic2hlZXQiLCJlIiwiTVMiLCJNT1oiLCJXRUJLSVQiLCJDT01NRU5UIiwiUlVMRVNFVCIsIkRFQ0xBUkFUSU9OIiwiSU1QT1JUIiwiS0VZRlJBTUVTIiwiYWJzIiwiZnJvbSIsImFzc2lnbiIsImhhc2giLCJ2YWx1ZSIsImxlbmd0aCIsImNoYXJhdCIsInRyaW0iLCJtYXRjaCIsInBhdHRlcm4iLCJyZXBsYWNlIiwicmVwbGFjZW1lbnQiLCJpbmRleG9mIiwic2VhcmNoIiwiaW5kZXgiLCJzdWJzdHIiLCJiZWdpbiIsImVuZCIsInN0cmxlbiIsInNpemVvZiIsImFwcGVuZCIsImFycmF5IiwiY29tYmluZSIsImNhbGxiYWNrIiwibGluZSIsImNvbHVtbiIsInBvc2l0aW9uIiwiY2hhcmFjdGVyIiwiY2hhcmFjdGVycyIsIm5vZGUiLCJyb290IiwicGFyZW50IiwidHlwZSIsInByb3BzIiwiY2hpbGRyZW4iLCJjb3B5IiwiY2hhciIsInByZXYiLCJuZXh0IiwicGVlayIsImNhcmV0Iiwic2xpY2UiLCJ0b2tlbiIsImFsbG9jIiwiZGVhbGxvYyIsImRlbGltaXQiLCJkZWxpbWl0ZXIiLCJ3aGl0ZXNwYWNlIiwiZXNjYXBpbmciLCJjb3VudCIsImNvbW1lbnRlciIsImlkZW50aWZpZXIiLCJjb21waWxlIiwicGFyc2UiLCJydWxlcyIsInJ1bGVzZXRzIiwicHNldWRvIiwicG9pbnRzIiwiZGVjbGFyYXRpb25zIiwib2Zmc2V0IiwiYXRydWxlIiwicHJvcGVydHkiLCJwcmV2aW91cyIsInZhcmlhYmxlIiwic2Nhbm5pbmciLCJhbXBlcnNhbmQiLCJyZWZlcmVuY2UiLCJjb21tZW50IiwiZGVjbGFyYXRpb24iLCJydWxlc2V0IiwicG9zdCIsInNpemUiLCJqIiwiayIsIngiLCJ5IiwieiIsInNlcmlhbGl6ZSIsIm91dHB1dCIsInN0cmluZ2lmeSIsImVsZW1lbnQiLCJtaWRkbGV3YXJlIiwiY29sbGVjdGlvbiIsInJ1bGVzaGVldCIsIm1lbW9pemUiLCJmbiIsImNhY2hlIiwiYXJnIiwiaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nIiwidG9SdWxlcyIsInBhcnNlZCIsImdldFJ1bGVzIiwiZml4ZWRFbGVtZW50cyIsImNvbXBhdCIsImlzSW1wbGljaXRSdWxlIiwicGFyZW50UnVsZXMiLCJyZW1vdmVMYWJlbCIsImlnbm9yZUZsYWciLCJpc0lnbm9yaW5nQ29tbWVudCIsImNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtIiwidW5zYWZlUHNldWRvQ2xhc3NlcyIsImlzTmVzdGVkIiwiY29tbWVudENvbnRhaW5lciIsInVuc2FmZVBzZXVkb0NsYXNzIiwiaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzIiwibnVsbGlmeUVsZW1lbnQiLCJpbmNvcnJlY3RJbXBvcnRBbGFybSIsInByZWZpeCIsInByZWZpeGVyIiwiZGVmYXVsdFN0eWxpc1BsdWdpbnMiLCJjcmVhdGVDYWNoZSIsImtleSIsInNzclN0eWxlcyIsImRhdGFFbW90aW9uQXR0cmlidXRlIiwic3R5bGlzUGx1Z2lucyIsImluc2VydGVkIiwiY29udGFpbmVyIiwibm9kZXNUb0h5ZHJhdGUiLCJhdHRyaWIiLCJfaW5zZXJ0Iiwib21uaXByZXNlbnRQbHVnaW5zIiwiY3VycmVudFNoZWV0IiwiZmluYWxpemluZ1BsdWdpbnMiLCJzZXJpYWxpemVyIiwic3R5bGlzIiwic3R5bGVzIiwic2VsZWN0b3IiLCJzZXJpYWxpemVkIiwic2hvdWxkQ2FjaGUiLCJiIiwiYyIsImQiLCJmIiwiZyIsImgiLCJsIiwibSIsIm4iLCJwIiwicSIsInIiLCJ0IiwidiIsInciLCJhIiwidSIsIkEiLCJyZWFjdElzX3Byb2R1Y3Rpb25fbWluIiwiaGFzU3ltYm9sIiwiUkVBQ1RfRUxFTUVOVF9UWVBFIiwiUkVBQ1RfUE9SVEFMX1RZUEUiLCJSRUFDVF9GUkFHTUVOVF9UWVBFIiwiUkVBQ1RfU1RSSUNUX01PREVfVFlQRSIsIlJFQUNUX1BST0ZJTEVSX1RZUEUiLCJSRUFDVF9QUk9WSURFUl9UWVBFIiwiUkVBQ1RfQ09OVEVYVF9UWVBFIiwiUkVBQ1RfQVNZTkNfTU9ERV9UWVBFIiwiUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUiLCJSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsIlJFQUNUX01FTU9fVFlQRSIsIlJFQUNUX0xBWllfVFlQRSIsIlJFQUNUX0JMT0NLX1RZUEUiLCJSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIiwiUkVBQ1RfUkVTUE9OREVSX1RZUEUiLCJSRUFDVF9TQ09QRV9UWVBFIiwiaXNWYWxpZEVsZW1lbnRUeXBlIiwidHlwZU9mIiwib2JqZWN0IiwiJCR0eXBlb2YiLCIkJHR5cGVvZlR5cGUiLCJBc3luY01vZGUiLCJDb25jdXJyZW50TW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJGb3J3YXJkUmVmIiwiRnJhZ21lbnQiLCJMYXp5IiwiTWVtbyIsIlBvcnRhbCIsIlByb2ZpbGVyIiwiU3RyaWN0TW9kZSIsIlN1c3BlbnNlIiwiaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUiLCJpc0FzeW5jTW9kZSIsImlzQ29uY3VycmVudE1vZGUiLCJpc0NvbnRleHRDb25zdW1lciIsImlzQ29udGV4dFByb3ZpZGVyIiwiaXNFbGVtZW50IiwiaXNGb3J3YXJkUmVmIiwiaXNGcmFnbWVudCIsImlzTGF6eSIsImlzTWVtbyIsImlzUG9ydGFsIiwiaXNQcm9maWxlciIsImlzU3RyaWN0TW9kZSIsImlzU3VzcGVuc2UiLCJyZWFjdElzX2RldmVsb3BtZW50IiwicmVhY3RJc01vZHVsZSIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVhY3RJcyIsIkZPUldBUkRfUkVGX1NUQVRJQ1MiLCJNRU1PX1NUQVRJQ1MiLCJUWVBFX1NUQVRJQ1MiLCJpc0Jyb3dzZXIiLCJnZXRSZWdpc3RlcmVkU3R5bGVzIiwicmVnaXN0ZXJlZCIsInJlZ2lzdGVyZWRTdHlsZXMiLCJjbGFzc05hbWVzIiwicmF3Q2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwicmVnaXN0ZXJTdHlsZXMiLCJpc1N0cmluZ1RhZyIsImluc2VydFN0eWxlcyIsImN1cnJlbnQiLCJtdXJtdXIyIiwic3RyIiwibGVuIiwidW5pdGxlc3NLZXlzIiwiSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IiLCJVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiIsImh5cGhlbmF0ZVJlZ2V4IiwiYW5pbWF0aW9uUmVnZXgiLCJpc0N1c3RvbVByb3BlcnR5IiwiaXNQcm9jZXNzYWJsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsInByb2Nlc3NTdHlsZVZhbHVlIiwicDEiLCJwMiIsImN1cnNvciIsInVuaXRsZXNzIiwiY29udGVudFZhbHVlUGF0dGVybiIsImNvbnRlbnRWYWx1ZXMiLCJvbGRQcm9jZXNzU3R5bGVWYWx1ZSIsIm1zUGF0dGVybiIsImh5cGhlblBhdHRlcm4iLCJoeXBoZW5hdGVkQ2FjaGUiLCJwcm9jZXNzZWQiLCJfY2hhciIsIm5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlIiwiaGFuZGxlSW50ZXJwb2xhdGlvbiIsIm1lcmdlZFByb3BzIiwiaW50ZXJwb2xhdGlvbiIsImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCJwcmV2aW91c0N1cnNvciIsInJlc3VsdCIsIm1hdGNoZWQiLCJyZXBsYWNlZCIsImZha2VWYXJOYW1lIiwiY2FjaGVkIiwib2JqIiwic3RyaW5nIiwiX2tleSIsIl9pIiwiaW50ZXJwb2xhdGVkIiwibGFiZWxQYXR0ZXJuIiwic291cmNlTWFwUGF0dGVybiIsInNlcmlhbGl6ZVN0eWxlcyIsImFyZ3MiLCJzdHJpbmdNb2RlIiwic3RyaW5ncyIsInNvdXJjZU1hcCIsImlkZW50aWZpZXJOYW1lIiwibmFtZSIsImhhc2hTdHJpbmciLCJzeW5jRmFsbGJhY2siLCJjcmVhdGUiLCJ1c2VJbnNlcnRpb25FZmZlY3QiLCJSZWFjdCIsInVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2siLCJoYXNPd25Qcm9wZXJ0eSIsIkVtb3Rpb25DYWNoZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0Iiwid2l0aEVtb3Rpb25DYWNoZSIsImZ1bmMiLCJmb3J3YXJkUmVmIiwicmVmIiwidXNlQ29udGV4dCIsIlRoZW1lQ29udGV4dCIsImdldExhc3RQYXJ0IiwiZnVuY3Rpb25OYW1lIiwicGFydHMiLCJnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUiLCJpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyIsInNhbml0aXplSWRlbnRpZmllciIsImdldExhYmVsRnJvbVN0YWNrVHJhY2UiLCJzdGFja1RyYWNlIiwibGluZXMiLCJ0eXBlUHJvcE5hbWUiLCJsYWJlbFByb3BOYW1lIiwiY3JlYXRlRW1vdGlvblByb3BzIiwibmV3UHJvcHMiLCJsYWJlbCIsIkluc2VydGlvbiIsIl9yZWYiLCJFbW90aW9uIiwiY3NzUHJvcCIsIldyYXBwZWRDb21wb25lbnQiLCJsYWJlbEZyb21TdGFjayIsImNyZWF0ZUVsZW1lbnQiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wSXNFbnVtZXJhYmxlIiwidG9PYmplY3QiLCJ2YWwiLCJzaG91bGRVc2VOYXRpdmUiLCJ0ZXN0MSIsInRlc3QyIiwib3JkZXIyIiwidGVzdDMiLCJsZXR0ZXIiLCJvYmplY3RBc3NpZ24iLCJ0YXJnZXQiLCJzb3VyY2UiLCJ0byIsInN5bWJvbHMiLCJzIiwicmVhY3RKc3hSdW50aW1lX3Byb2R1Y3Rpb25fbWluIiwiX2Fzc2lnbiIsImV4cG9ydHMiLCJSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSIsIlJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIiwiUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIiwic3ltYm9sRm9yIiwiTUFZQkVfSVRFUkFUT1JfU1lNQk9MIiwiRkFVWF9JVEVSQVRPUl9TWU1CT0wiLCJnZXRJdGVyYXRvckZuIiwibWF5YmVJdGVyYWJsZSIsIm1heWJlSXRlcmF0b3IiLCJSZWFjdFNoYXJlZEludGVybmFscyIsImVycm9yIiwiZm9ybWF0IiwiX2xlbjIiLCJfa2V5MiIsInByaW50V2FybmluZyIsImxldmVsIiwiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsInN0YWNrIiwiYXJnc1dpdGhGb3JtYXQiLCJpdGVtIiwiZW5hYmxlU2NvcGVBUEkiLCJnZXRXcmFwcGVkTmFtZSIsIm91dGVyVHlwZSIsImlubmVyVHlwZSIsIndyYXBwZXJOYW1lIiwiZ2V0Q29udGV4dE5hbWUiLCJnZXRDb21wb25lbnROYW1lIiwiY29udGV4dCIsInByb3ZpZGVyIiwibGF6eUNvbXBvbmVudCIsInBheWxvYWQiLCJpbml0IiwiZGlzYWJsZWREZXB0aCIsInByZXZMb2ciLCJwcmV2SW5mbyIsInByZXZXYXJuIiwicHJldkVycm9yIiwicHJldkdyb3VwIiwicHJldkdyb3VwQ29sbGFwc2VkIiwicHJldkdyb3VwRW5kIiwiZGlzYWJsZWRMb2ciLCJkaXNhYmxlTG9ncyIsInJlZW5hYmxlTG9ncyIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCJkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSIsIm93bmVyRm4iLCJyZWVudHJ5IiwiY29tcG9uZW50RnJhbWVDYWNoZSIsIlBvc3NpYmx5V2Vha01hcCIsImRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUiLCJjb25zdHJ1Y3QiLCJmcmFtZSIsImNvbnRyb2wiLCJwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlIiwicHJldmlvdXNEaXNwYXRjaGVyIiwiRmFrZSIsInNhbXBsZSIsInNhbXBsZUxpbmVzIiwiY29udHJvbExpbmVzIiwiX2ZyYW1lIiwic3ludGhldGljRnJhbWUiLCJkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUiLCJzaG91bGRDb25zdHJ1Y3QiLCJDb21wb25lbnQiLCJwcm90b3R5cGUiLCJkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYiLCJsb2dnZWRUeXBlRmFpbHVyZXMiLCJzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCIsIm93bmVyIiwiY2hlY2tQcm9wVHlwZXMiLCJ0eXBlU3BlY3MiLCJ2YWx1ZXMiLCJsb2NhdGlvbiIsImNvbXBvbmVudE5hbWUiLCJoYXMiLCJ0eXBlU3BlY05hbWUiLCJlcnJvciQxIiwiZXJyIiwiZXgiLCJSZWFjdEN1cnJlbnRPd25lciIsIlJFU0VSVkVEX1BST1BTIiwic3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24iLCJzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biIsImRpZFdhcm5BYm91dFN0cmluZ1JlZnMiLCJoYXNWYWxpZFJlZiIsImNvbmZpZyIsImdldHRlciIsImhhc1ZhbGlkS2V5Iiwid2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkIiwic2VsZiIsImRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyIiwiZGlzcGxheU5hbWUiLCJ3YXJuQWJvdXRBY2Nlc3NpbmdLZXkiLCJkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlciIsIndhcm5BYm91dEFjY2Vzc2luZ1JlZiIsIlJlYWN0RWxlbWVudCIsImpzeERFViIsIm1heWJlS2V5IiwicHJvcE5hbWUiLCJkZWZhdWx0UHJvcHMiLCJSZWFjdEN1cnJlbnRPd25lciQxIiwiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxIiwic2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMSIsInByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duIiwiaXNWYWxpZEVsZW1lbnQiLCJnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0iLCJnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bSIsImZpbGVOYW1lIiwibGluZU51bWJlciIsIm93bmVySGFzS2V5VXNlV2FybmluZyIsImdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8iLCJwYXJlbnRUeXBlIiwiaW5mbyIsInBhcmVudE5hbWUiLCJ2YWxpZGF0ZUV4cGxpY2l0S2V5IiwiY3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsImNoaWxkT3duZXIiLCJ2YWxpZGF0ZUNoaWxkS2V5cyIsImNoaWxkIiwiaXRlcmF0b3JGbiIsIml0ZXJhdG9yIiwic3RlcCIsInZhbGlkYXRlUHJvcFR5cGVzIiwicHJvcFR5cGVzIiwiX25hbWUiLCJ2YWxpZGF0ZUZyYWdtZW50UHJvcHMiLCJmcmFnbWVudCIsImtleXMiLCJqc3hXaXRoVmFsaWRhdGlvbiIsImlzU3RhdGljQ2hpbGRyZW4iLCJ2YWxpZFR5cGUiLCJzb3VyY2VJbmZvIiwidHlwZVN0cmluZyIsImpzeFdpdGhWYWxpZGF0aW9uU3RhdGljIiwianN4V2l0aFZhbGlkYXRpb25EeW5hbWljIiwianN4IiwianN4cyIsImpzeFJ1bnRpbWVNb2R1bGUiLCJqc3gkMSIsImlzTmlsIiwiQW5hbHl0aWNzQ29udGV4dCIsIkFuYWx5dGljc1Byb3ZpZGVyIiwiYW5hbHl0aWNzIiwidXNlQW5hbHl0aWNzIl0sIm1hcHBpbmdzIjoiOztBQXVCQSxTQUFTQSxHQUFZQyxHQUFLO0FBQ3hCLE1BQUlBLEVBQUk7QUFFTixXQUFPQSxFQUFJO0FBTWIsV0FBU0MsSUFBSSxHQUFHQSxJQUFJLFNBQVMsWUFBWSxRQUFRQTtBQUMvQyxRQUFJLFNBQVMsWUFBWUEsQ0FBQyxFQUFFLGNBQWNEO0FBRXhDLGFBQU8sU0FBUyxZQUFZQyxDQUFDO0FBR25DO0FBRUEsU0FBU0MsR0FBbUJDLEdBQVM7QUFDbkMsTUFBSUgsSUFBTSxTQUFTLGNBQWMsT0FBTztBQUN4QyxTQUFBQSxFQUFJLGFBQWEsZ0JBQWdCRyxFQUFRLEdBQUcsR0FFeENBLEVBQVEsVUFBVSxVQUNwQkgsRUFBSSxhQUFhLFNBQVNHLEVBQVEsS0FBSyxHQUd6Q0gsRUFBSSxZQUFZLFNBQVMsZUFBZSxFQUFFLENBQUMsR0FDM0NBLEVBQUksYUFBYSxVQUFVLEVBQUUsR0FDdEJBO0FBQ1Q7QUFFQSxJQUFJSSxLQUEwQiwyQkFBWTtBQUV4QyxXQUFTQSxFQUFXRCxHQUFTO0FBQzNCLFFBQUlFLElBQVE7QUFFWixTQUFLLGFBQWEsU0FBVUwsR0FBSztBQUMvQixVQUFJTTtBQUVKLE1BQUlELEVBQU0sS0FBSyxXQUFXLElBQ3BCQSxFQUFNLGlCQUNSQyxJQUFTRCxFQUFNLGVBQWUsY0FDckJBLEVBQU0sVUFDZkMsSUFBU0QsRUFBTSxVQUFVLGFBRXpCQyxJQUFTRCxFQUFNLFNBR2pCQyxJQUFTRCxFQUFNLEtBQUtBLEVBQU0sS0FBSyxTQUFTLENBQUMsRUFBRSxhQUc3Q0EsRUFBTSxVQUFVLGFBQWFMLEdBQUtNLENBQU0sR0FFeENELEVBQU0sS0FBSyxLQUFL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\n"],"names":["Tt","e","n","a","this","_insertTag","o","i","tags","length","insertionPoint","nextSibling","prepend","container","firstChild","before","insertBefore","push","isSpeedy","speedy","ctr","nonce","key","r","prototype","hydrate","forEach","insert","document","createElement","setAttribute","appendChild","createTextNode","Ot","f","sheet","styleSheets","ownerNode","Ct","insertRule","cssRules","c","flush","parentNode","removeChild","W","ke","x","cr","ur","fr","zr","At","Math","abs","De","String","fromCharCode","Nt","Object","assign","qr","trim","O","replace","er","indexOf","L","charCodeAt","Ee","slice","K","lr","Pe","je","ce","Br","z","Y","ue","Me","value","root","parent","type","props","children","line","column","return","me","q","J","Ae","be","ye","Gr","Kr","Ne","rr","Mt","Yt","Vt","Lt","Ft","$e","p","h","d","y","_","T","P","g","D","A","I","m","k","u","V","R","Wt","Tr","Or","se","Ut","join","Bt","create","Gt","Jt","Kt","Pr","WeakMap","Ht","get","set","Zt","Hr","$t","Nr","an","map","It","exec","kt","on","querySelectorAll","Array","call","getAttribute","head","stylisPlugins","split","zt","concat","styles","inserted","name","registered","tr","exports","S","Symbol","for","$$typeof","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","sn","Zr","Xr","render","defaultProps","displayName","propTypes","compare","Qr","mn","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","Ir","Ze","dr","yn","toLowerCase","Ie","et","G","next","ge","__emotion_styles","anim","isArray","xn","jr","On","pr","hasOwnProperty","vr","HTMLElement","Provider","Xe","Vr","Lr","Tn","nt","nr","kn","In","cache","serialized","isStringTag","vn","at","css","className","pn","raw","lastIndex","toString","hn","Mr","ref","or","ie","ot","getOwnPropertySymbols","propertyIsEnumerable","getOwnPropertyNames","keys","TypeError","arguments","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","__self","__source","_owner","current","jsx","jsxs","Dn","Wr","Mn","it","Ln","analytics","Fn","Yn","Error"],"sourceRoot":""}