web-interface.assets.bb8c8232-1320.b35b8a794ed0a972125d.js.map Maven / Gradle / Ivy
{"version":3,"file":"bb8c8232-1320.b35b8a794ed0a972125d.js","mappings":"0NAGIA,EAA0B,IAA4B,GAAqC,EAE/FA,EAAwB,KAAK,CAACC,EAAO,GAAI;AAAA;AAAA,GAErC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,EAAE,MAAQ,CAAC,EAAE,SAAW,yBAAyB,eAAiB,CAAC;AAAA;AAAA,EAA2D,EAAE,WAAa,EAAE,CAAC,CAAC,EAEvPD,EAAwB,OAAS,CAChC,aAAgB,sBACjB,EACA,QAAeA,C,2GCTXA,EAA0B,IAA4B,GAAqC,EAE/FA,EAAwB,KAAK,CAACC,EAAO,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBtC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,oEAAoE,EAAE,MAAQ,CAAC,EAAE,SAAW,uIAAuI,eAAiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAuR,EAAE,WAAa,EAAE,CAAC,CAAC,EAE7jBD,EAAwB,OAAS,CAChC,QAAW,uBACX,UAAa,uBACb,UAAa,sBACd,EACA,QAAeA,C,2GC9BXA,EAA0B,IAA4B,GAAqC,EAE/FA,EAAwB,KAAK,CAACC,EAAO,GAAI;AAAA;AAAA,GAErC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,gEAAgE,EAAE,MAAQ,CAAC,EAAE,SAAW,yBAAyB,eAAiB,CAAC;AAAA;AAAA,EAAmD,EAAE,WAAa,EAAE,CAAC,CAAC,EAExOD,EAAwB,OAAS,CAChC,UAAa,sBACd,EACA,QAAeA,C,gICUf,MAAME,EACJ,gCACE,gBAAC,SAAE,oEACgE,gBAAC,SAAG,EACrE,gBAAC,WAAK,wBAAyB,EAAM,gBAAC,SAAG,CAC3C,EACA,gBAAC,SAAE,sBACkB,gBAAC,YAAK,SAAO,EAAO,OAAI,gBAAC,YAAK,SAAO,EAAO,WAAQ,gBAAC,SAAG,EAC3E,gBAAC,WAAI,+BAA6B,EAAM,gBAAC,SAAG,CAC9C,CACF,EAGIC,EAAW,CACf,OAAQ,qFACR,iBAAkB,6CAClB,UAAW,gEACX,QAAS,4BACT,gBAAiB,iBACnB,EAEMC,EACJ,gBAAC,IAAW,CAAC,WAAW,UAAU,QAASF,EAAe,aAAc,CAAC,MAAM,EAAG,SAAAC,CAAA,CAAoB,EASlGE,EAAoB,CAAC,CAAE,MAAAC,EAAO,SAAAC,EAAU,QAAAC,EAAS,SAAAC,CAAS,IAC9D,gBAAC,MAAW,MAAAH,EACA,SAAAC,EACA,QAAAC,EACA,YAAY,gBACZ,mBAAoBJ,EACpB,UAAW,EACX,gBAAe,IACxBK,CACH,EAGFJ,EAAkB,UAAY,CAC5B,MAAO,WAAiB,WACxB,SAAU,SAAe,WACzB,QAAS,SAAe,WACxB,SAAU,WACZ,EAEAA,EAAkB,aAAe,CAC/B,SAAU,MACZ,EAEA,QAAeA,C,mWCjEXK,EAAU,CAAC,EAEfA,EAAQ,kBAAoB,KAC5BA,EAAQ,cAAgB,IAElBA,EAAQ,OAAS,SAAc,KAAM,MAAM,EAEjDA,EAAQ,OAAS,IACjBA,EAAQ,mBAAqB,IAE7B,IAAIC,GAAS,IAAI,IAASD,CAAO,EAK1B,SAAe,KAAW,IAAQ,OAAS,IAAQ,OAAS,OCQ7D,GAAkB,CAAC,CAAE,QAASE,EAAa,OAAAC,GAAQ,SAAAC,GAAU,GAAAC,EAAG,IAAa,CACjF,KAAM,CAAE,eAAAC,EAAe,KAAIC,EAAA,GAAgB,EAC3C,IAAIC,EAAUN,EACd,MAAMO,GAAO,IAAWC,EAAA,EAAkB,SAASP,EAAM,CAAC,EACpDQ,GAAmBL,GAAeF,EAAQ,EAEhD,IAAIQ,EACAC,GAEJ,OAAQV,GAAQ,CACd,KAAKO,EAAA,EAAkB,QACrBG,GAAY,eACZD,EAAO,aACP,MACF,KAAKF,EAAA,EAAkB,QACrBG,GAAY,cACZD,EAAO,UACP,MACF,KAAKF,EAAA,EAAkB,QACrBG,GAAY,cACZD,EAAO,QACP,MACF,QACEC,GAAY,YACZD,EAAO,OACPJ,GAAW,QAAK,MAAmBG,EAAgB,CAAC,GACxD,CAEA,OAAIH,GAAWH,GAEX,gBAAC,IAAc,CAAC,UAAU,MAAM,QAASG,EAAS,UAAS,GAAC,QAAQ,SAClE,gBAAC,QAAK,UAAW,GAAGK,EAAS,IAAI,GAAM,SAAS,IAC9C,gBAAC,KAAI,CAAC,KAAMD,CAAA,CAAM,EAAE,IAAEH,EACxB,CACF,EAKF,gBAAC,QAAK,UAAW,GAAGI,EAAS,IAAI,GAAM,SAAS,IAC9C,gBAAC,KAAI,CAAC,KAAMD,CAAA,CAAM,EAAE,IAAEH,EACxB,CAEJ,EAEA,GAAgB,UAAY,CAC1B,GAAI,WACJ,SAAU,WACV,QAAS,WACT,OAAQ,UACV,EAEA,GAAgB,aAAe,CAC7B,GAAI,GACJ,SAAU,OACV,QAAS,GACT,OAAQ,EACV,EAEA,SAAe,E,yGC1Bf,QAhD0B,CACxB,QAAS,EACT,QAAS,EACT,QAAS,EACT,QAAS,EACT,WAAY,CACV,EAAG,CAAE,KAAM,SAAU,EACrB,EAAG,CAAE,KAAM,SAAU,EACrB,EAAG,CAAE,KAAM,SAAU,EACrB,EAAG,CAAE,KAAM,SAAU,CACvB,EAEA,kBAAkBK,EAAY,CAC5B,OAAO,OAAO,KAAK,KAAK,UAAU,EAAE,SAAS,OAAOA,CAAU,CAAC,CACjE,EAEA,aAAaC,EAAc,CACzB,MAAMZ,EAAS,IAAUY,CAAY,EAErC,OAAIZ,IAAW,KAAK,WAAW,KAAK,OAAO,EAAE,KACpC,KAAK,QAGVA,IAAW,KAAK,WAAW,KAAK,OAAO,EAAE,KACpC,KAAK,QAGVA,IAAW,KAAK,WAAW,KAAK,OAAO,EAAE,KACpC,KAAK,QAGP,KAAK,OACd,EAEA,SAASW,EAAY,CACnB,OAAQ,IAASA,CAAU,EAAG,CAC5B,KAAK,KAAK,QACR,MAAO,UACT,KAAK,KAAK,QACR,MAAO,UACT,KAAK,KAAK,QACR,MAAO,UACT,QACE,MAAO,SACX,CACF,CACF,C,ycCzCO,MAAME,KAAgCC,GAAA,IAC3C,8BACA,IAAM,kBAAqB,CACzB,KAAM,CAAE,YAAa,EAAK,EAC1B,YAAa,CAAE,YAAa,EAAK,EACjC,UAAW,CAAE,YAAa,EAAK,CACjC,CAAC,CACH,EAEaC,MAA8BD,GAAA,IACzC,8BACA,IAAM,gBAAmB,CACvB,YAAa,CAACD,CAA6B,EAC3C,UAAW,WACX,SAAU,OACV,QAAS,OACT,WAAY,CACV,MAAO,OACP,KAAM,OACN,SAAU,OACV,MAAO,MACT,EACA,MAAO,OAEP,iBAAkB,CAChB,MAAO,CACL,SAAU,KAAK,SACf,QAAS,KAAK,QACd,MAAO,KAAK,MACZ,WAAY,KAAK,UACnB,CACF,EAEA,kBAAmB,CACjB,KAAK,QAAQ,CACX,SAAU,KAAK,SACf,QAAS,KAAK,QACd,MAAO,KAAK,MACZ,WAAY,KAAK,UACnB,CAAC,CACH,EAEA,KAAK,CAAE,MAAApB,EAAQ,GAAI,KAAAuB,EAAO,EAAG,SAAAC,EAAW,GAAI,QAAAC,CAAQ,EAAG,CACrD,MAAMC,EAAO,CACX,MAAA1B,EACA,KAAAuB,EACA,SAAUC,EACV,QAAAC,CACF,EAEME,KAAU,OAAkB,OAAQC,GAAA,GAAoB,GAAG,KAAK,SAAS,iBAAiB,EAAGF,CAAI,EAEvGC,EAAQ,KACLE,IACC,KAAK,SAAWA,EAAS,SACzB,KAAK,MAAQA,EAAS,MACtB,KAAK,QAAUA,EAAS,QAExB,KAAK,WAAa,CAChB,MAAOA,EAAS,WAAW,MAC3B,MAAOA,EAAS,WAAW,MAC3B,KAAMA,EAAS,WAAW,KAC1B,SAAUA,EAAS,WAAW,QAChC,EAEA,KAAK,iBAAiB,EAEfA,GAERC,GAAU,CACTC,GAAA,EAAiB,MAAMD,EAAM,SAAW,IAAMA,EAAM,gBAAkB,yCAAyCA,EAAM,OAAO,GAC1H,6BAA6B,CACjC,CACF,EAEAV,EAA8B,KAAK,QAAQO,CAAO,CACpD,EAEA,aAAc,CACZ,KAAK,KAAK,CAAE,MAAO,KAAK,MAAO,KAAM,KAAK,WAAW,KAAM,SAAU,KAAK,WAAW,SAAU,QAAS,KAAK,OAAQ,CAAC,CACxH,EAEA,UAAUK,EAAQC,EAAY,CAE5B,MAAMC,EADa,OAAO,KAAKD,CAAU,EACF,IAAKE,IAAe,CACzD,WAAYA,EACZ,cAAeF,EAAWE,CAAS,CACrC,EAAE,EACIT,EAAO,CACX,OAAAM,EACA,WAAYE,CACd,EAEMP,KAAU,OAAkB,MAAOC,GAAA,GAAoB,GAAG,KAAK,SAAS,wBAAwB,EAAGF,CAAI,EAE7GC,EAAQ,KACLE,IACCE,GAAA,EAAiB,QAAQ,GAAI,GAAG,IAAWC,CAAM,CAAC,QAAQE,EAAoB,MAAM,uBAAuB,EAEpGL,GAERC,GAAU,CACTC,GAAA,EAAiB,MAAM,cAAcC,CAAM,wBAAwBF,CAAK,GACtE,aAAaE,CAAM,aAAa,CACpC,CACF,EAEAZ,EAA8B,UAAU,QAAQO,CAAO,CACzD,CACF,CAAC,CACH,E,sXCvGA,MAAMS,GAAyB,UAAO;AAAA;AAAA;AAAA;AAAA,EAMhCC,MAAqB,WAAO,OAAK;AAAA;AAAA,EAIjCC,GAAyB,UAAO;AAAA;AAAA;AAAA,EAKhCC,GAAsB,UAAO;AAAA;AAAA;AAAA;AAAA,EAM7BC,GAAgB,UAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASvBC,GAAW,UAAO,GAA2B,CAAC,CAAE,SAAAC,EAAW,EAAM,OAAM;AAAA,YACjEA,EAAW,OAAS,SAAS;AAAA,sBACnBA,EAAW,qBAAuB,SAAS;AAAA;AAAA;AAAA,CAGhE,EAEKC,GAAuB,UAAO;AAAA;AAAA;AAAA;AAAA,EAM9BC,GAAgB,UAAO;AAAA;AAAA,EAIvBC,GAAqB,UAAO;AAAA;AAAA;AAAA,EAK5BC,GAAyB,UAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQhCC,GAAoB,UAAO;AAAA;AAAA;AAAA,EAK3BC,MAAa,WAAO,QAAM,KAAK;AAAA;AAAA;AAAA,EAK/BC,GAAgB,UAAO;AAAA;AAAA;AAAA;AAAA,EAMvBC,MAAmB,WAAO,IAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpCC,MAAgB,WAAOC,GAAA,CAAK;AAAA;AAAA;AAAA;AAAA,EAM5BC,GAAkBC,GAAmB,CACzC,GAAI,CACF,OAAO,IAAI,OAAOA,EAAQ,GAAG,CAC/B,MAAgB,CACd,MAAO,GACT,CACF,EAmBMC,GAA8B,CAAC,CACnC,KAAAC,EACA,SAAAC,EACA,OAAAC,EACA,sBAAAC,EACA,qBAAAC,EACA,uBAAAC,EACA,gCAAAC,EACA,kBAAAC,EACA,WAAAC,CACF,IAAa,CACX,KAAM,CAACC,EAAaC,EAAc,KAAI,YAAiB,EAAE,EACnD,CAACC,EAAwBC,EAAyB,KAAI,YAAmBP,CAAsB,EAC/F,CAACQ,EAAiCC,CAAkC,KAAI,YAAmBR,CAA+B,EAE1H5D,GAAU,IAAM,CACpBkE,GAA0BP,CAAsB,EAChDS,EAAmCR,CAA+B,EAClEI,GAAe,EAAE,CACnB,EAEMK,GAAa,KAAQJ,EAAwBN,CAAsB,GAAK,KAAQQ,EAAiCP,CAA+B,EAIhJU,EAFkB,CAAC,GAAGX,EAAwB,GAAGC,EAAiC,GAAGC,CAAiB,EAAE,OAAQU,GAAkBA,EAAc,MAAMpB,GAAeY,CAAW,CAAC,CAAC,EAE3J,IAAKS,GAAe,CAC/C,KAAM,CAAE,cAAAD,GAAe,UAAAE,EAAW,SAAAC,GAAU,iBAAAC,EAAiB,EAAIb,EAAWU,CAAU,EAEhFI,GAAWX,EAAuB,SAASO,CAAU,EACrDK,GAAoB,CAACD,IAAYT,EAAgC,SAASK,CAAU,EACpFM,GAAiBF,IAAYlB,EAAqB,KAAK,IAAI,GAAOmB,IAAqBH,GAAS,IAAKK,GAAYA,EAAQ,SAAS,EAAE,KAAK,IAAI,GAAM,GACnJC,GAAqBL,GAAiB,OAAS,EAErD,OACE,gBAACpC,GAAA,CAAS,IAAKiC,EACL,SAAUQ,GACV,QAAS,IAAM,CACRA,KACCH,GACFT,EAAmCD,EAAgC,OAAQc,GAASA,IAAST,CAAU,CAAC,EAExGN,GAA0BU,GAAWX,EAAuB,OAAQgB,GAASA,IAAST,CAAU,EAAI,CAAC,GAAGP,EAAwBO,CAAU,CAAC,EAGjJ,GACR,gBAAC9B,GAAA,KACEkC,IAAY,gBAAC,KAAI,CAAC,KAAK,QAAQ,MAAO,GAAGJ,CAAU,eAAgB,EACnEK,IAAqB,gBAAC,KAAI,CAAC,KAAK,UAAU,KAAK,uBAAuB,MAAO,GAAGL,CAAU,eAAgB,CAC7G,EACA,gBAAC9B,GAAA,KAAc,gBAACwC,GAAA,EAAU,CAAC,MAAOX,GAAc,MAAO,KAAK,QAAS,EAAE,EACvE,gBAAC3B,GAAA,KACE4B,EACD,gBAAClC,GAAA,CAAc,MAAOwC,EAAA,EACpB,gBAAC,aAAOA,EAAc,CACxB,CACF,EACA,gBAACpC,GAAA,KACEsC,IAAsB,gBAAC,KAAI,CAAC,KAAK,OAAO,MAAO,uBAAuBL,GAAiB,KAAK,IAAI,CAAC,GAAI,CACxG,EACA,gBAAChC,GAAA,KACC,gBAAC,aACE8B,EACG,gBAACU,GAAA,EAAkB,CAAC,UAAWV,EAAU,KAAM,gBAAiBA,EAAU,sBAAuB,EACjG,gBAAC,UAAG,mBAAiB,CAC3B,CACF,EACA,gBAAC5B,GAAA,MAAoB+B,IAAYC,KAAsB,CAACG,IACnD,gBAAC,KAAI,CAAC,KAAK,QAAQ,MAAO,UAAUR,CAAU,GAAI,CACvD,CACF,CAEJ,CAAC,EAED,OACE,gBAAC,yBAAsB,UAAWlB,EACX,OAAQC,CAAA,EAC7B,gBAAC,QAAM,OAAN,KACC,gBAACT,GAAA,KAAW,QACL,gBAAC,SAAGW,CAAsB,EAAI,kBACnC,gBAACV,GAAA,KACC,gBAAC,aACE,GAAGW,EAAqB,MAAM,WAAWA,EAAqB,OAAS,EAAI,IAAM,EAAE,KACnFA,EAAqB,KAAK,IAAI,CACjC,CACF,CACF,CACF,EACA,gBAAC,QAAM,KAAN,KACC,gBAACV,GAAA,CAAiB,MAAOe,EACP,cAAgBqB,GAAMpB,GAAeoB,CAAC,EACtC,UAAW,EAAG,EAC9Bd,EAAK,OAAS,GACd,gBAACrB,GAAA,CAAc,QAAQ,QAAO,sDACyB,gBAAC,KAAI,CAAC,KAAK,OAAO,KAAK,IAAK,GAAE,gEAErF,EAEF,gBAACf,GAAA,KACC,gBAACC,GAAA,CAAmB,UAAU,+BAC5B,gBAAC,aACGmC,EAAK,SAAW,EAChB,gBAAC/B,GAAA,KACC,gBAAC,MAAG,QAAS,GACX,gBAACH,GAAA,KAAuB,6DAExB,CACF,CACF,EAEAkC,EAEF,gBAAC7B,GAAA,KACC,gBAAC,MAAG,QAAS,GACX,gBAACJ,GAAA,KACC,gBAAC,KAAI,CAAC,GAAIgD,GAAA,GAAO,OAAO,SAAS,mBAAmB,gBAAC,KAAI,CAAC,KAAK,KAAM,GAAE,6BAEvE,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,gBAAC,QAAM,OAAN,KACC,gBAAC,SAAM,CAAC,KAAK,SAAS,QAAS9B,CAAA,EAAU,QAAM,EAC/C,gBAAC,SAAM,CAAC,KAAK,SAAS,QAASvD,EAAA,EAAS,OAAK,EAC7C,gBAAC,UAAO,KAAK,SACL,QAAQ,UACR,SAAUqE,GACV,QAAS,IAAMb,EAAOS,EAAwBE,CAA+B,GAAG,MACxF,CACF,CACF,CAEJ,EAEAd,GAA4B,UAAY,CACtC,KAAM,SAAe,WACrB,sBAAuB,WAAiB,WACxC,qBAAsB,UAAgB,WACtC,uBAAwB,UAAgB,WACxC,gCAAiC,UAAgB,WACjD,kBAAmB,UAAgB,WACnC,SAAU,SAAe,WACzB,OAAQ,SAAe,WACvB,WAAY,SAAe,UAC7B,EAEA,SAAeA,GCtQTiC,GAAuB,UAAO;AAAA;AAAA,EAa9BC,GAAuC,CAAC,CAC5C,WAAAxD,EACA,eAAAyD,EACA,8BAAAC,EACA,+BAAAC,EACA,KAAApC,EACA,SAAAC,CACF,IAAa,CACX,KAAM,CAACoC,EAA4BC,CAA6B,KAAI,YAAmB,CAAC,CAAC,EACnF,CAACC,EAAqCC,CAAsC,KAAI,YAAmB,CAAC,CAAC,EACrG,CAACC,GAAkBC,CAAmB,KAAI,YAAkB,EAAK,EACjEC,MAAgBC,GAAA,GAAiB,EAEjCC,EAA0B,IAAO,IAAgBV,EAA8B,IAAI,CAAC,CAAE,UAAAhB,CAAU,IAAMA,CAAS,CAAC,EAAG,CAAC,EAEpH2B,EAA0BC,GAA6BA,EAAQ,KAAK,CAACC,EAASC,OAAY,KAAsBD,EAAQ,KAAMC,EAAQ,IAAI,CAAC,EAC9I,IAAKC,GAAWA,EAAO,IAAI,EAExBC,GAA4B,CAACC,EAA4DC,IAAiC,CAG9H,MAAMC,EAFcF,EAA+B,IAAI,CAAC,CAAE,QAAA3B,CAAQ,IAAMA,CAAO,EAAE,OAAO,CAAC8B,EAAa9B,IAAY8B,EAAY,OAAO9B,EAAQ,WAAW,EAAG,CAAC,CAAC,EAErH,IAAK+B,GAAetB,EAAe,KAAMjB,GAAkBA,EAAc,KAAOuC,EAAW,gBAAgB,CAAC,EACjJ,OAAQvC,IAAkBoC,GAAA,YAAAA,EAAmB,MAAOpC,EAAc,YAAY,EAEjF,OAAO6B,EAAuBQ,CAAmB,CACnD,EAEMG,GAA8B,CAACC,EAAkCL,IAAiC,CACtG,MAAMM,EAAkBzB,EAAe,OAAQgB,GAAW,CAACQ,EAAuB,SAASR,EAAO,IAAI,IAAMG,GAAA,YAAAA,EAAmB,MAAOH,EAAO,YAAa,EAE1J,OAAOJ,EAAuBa,CAAe,CAC/C,EAEMC,GAAmCC,GAAsC,CAC7E,MAAMC,EAAc,KAAQD,CAAuB,EAEnD,MAAO,CACL,IAAaA,EAAwB,OAAQX,GAAWY,EAAYZ,CAAM,IAAMf,EAA8B,MAAM,CAAC,EACrH,IAAa0B,EAAwB,OAAQX,GAAWY,EAAYZ,CAAM,EAAIf,EAA8B,MAAM,CAAC,CACrH,CACF,EAEMjC,EAAS,CAAC6D,EAAgCC,IAAuC,CACrF1B,EAA8ByB,CAAoB,EAClDvB,EAAuCwB,CAAwB,EAC/DtB,EAAoB,EAAI,CAC1B,EAEMuB,EAA4B,IAAM,CACtC3B,EAA8B,CAAC,CAAC,EAChCE,EAAuC,CAAC,CAAC,EACzCE,EAAoB,EAAK,CAC3B,EAEMwB,GAA6B,IAAM,CACvC,MAAMC,EAA+BjC,EAAe,OAAQgB,GAAWb,EAA2B,SAASa,EAAO,IAAI,CAAC,EAEvHf,EAA8B,QAASiC,GAAyB,CAC9D,IAAIrB,EAAUoB,EAEd,GAAI5B,EAAoC,OAAQ,CAC9C,MAAM8B,EAAuBxB,EAAwB,EAC/CyB,EAAcnB,GAA0B,CAACiB,CAAoB,EAAGC,CAAoB,EACpFE,EAAoB,KAAaD,EAAa/B,CAAmC,EACjFiC,EAA+BtC,EAAe,OAAQgB,GAAWqB,EAAkB,SAASrB,EAAO,IAAI,CAAC,EAC9GH,EAAU,CAAC,GAAGoB,EAA8B,GAAGK,CAA4B,CAC7E,CAEA7B,GAAc,KAAqB,SAAS,uBAAwB,CAClE,aAAc,WACd,YAAa,gBACf,CAAC,EAEDP,EAA+B,CAACgC,CAAoB,EAAGrB,EAAS,IAAM,CAAC,CAAC,CAC1E,CAAC,EAEDkB,EAA0B,EAC1BhE,EAAS,CACX,EAEMwE,EAAoBvD,GAAuBgB,EAAe,KAAMgB,GAAWA,EAAO,OAAShC,CAAU,EAErGwD,GAAgBxD,GAAuB,CAC3C,MAAMD,EAAgBwD,EAAiBvD,CAAU,EAEjD,OAAOzC,EAAW,KAAM0C,GAAcA,EAAU,KAAOF,EAAc,YAAY,CACnF,EAEM0D,GAAezD,GAAuB,CAC1C,MAAMD,EAAgBwD,EAAiBvD,CAAU,EAEjD,OAAOiB,EAA8B,OAAO,CAAC,CAAE,QAAAV,CAAQ,IAAMA,EAAQ,YAAY,IAAK+B,GAAeA,EAAW,gBAAgB,EAAE,SAASvC,EAAc,EAAE,CAAC,EAAE,IAAKuC,GAAeA,EAAW,OAAO,CACtM,EAEMoB,GAAsB,CAACC,EAAkBC,EAAqB1D,IAA+B,CACjG,MAAM2D,EAAqB3D,EAAS,OAAO,CAACmC,EAAa9B,IAAY8B,EAAY,OAC/E9B,EAAQ,YAAY,KAAM+B,GAAgBA,EAAW,eAAiBsB,GAAiBtB,EAAW,mBAAqBqB,CAAS,EAAE,kBACpI,EAAG,CAAC,CAAC,EAEL,OAAO,IAAKE,CAAkB,CAChC,EAEMvE,GAAcU,GAAuB,CACzC,MAAMD,EAAgBwD,EAAiBvD,CAAU,EAC3CC,EAAYuD,GAAaxD,CAAU,EACnCE,EAAWuD,GAAYzD,CAAU,EACjCG,EAAmBuD,GAAoB3D,EAAc,GAAIE,EAAU,GAAIC,CAAQ,EAErF,MAAO,CAAE,cAAAH,EAAe,UAAAE,EAAW,SAAAC,EAAU,iBAAAC,CAAiB,CAChE,EAEM2D,GAA6B,IAAM,CACvC,MAAMC,EAAkB9C,EAA8B,IAAI,CAAC,CAAE,QAAAV,CAAQ,IAAMA,EAAQ,SAAS,EAAE,KAAK,IAAI,EACjGyD,EAA0B,GAAG/C,EAA8B,MAAM,YACjEgD,EAAUhD,EAA8B,QAAU,EAAI8C,EAAkBC,EAE9E,OACE,gBAAC,yBAAsB,UAAWzC,GACX,MAAM,wBACN,UAAWyB,GACX,SAAUD,CAAA,EAC/B,gBAACjC,GAAA,KACC,gBAAC,SAAE,yDAAsD,gBAAC,SAAGmD,CAAQ,EAAI,GAAC,CAC5E,CACF,CAEJ,EAEMC,MAA6B,WAAQ,IACR,IAAM,CACrC,MAAM/B,EAAoBR,EAAwB,EAC5Ca,EAAyBP,GAA0BhB,EAA+BkB,CAAiB,EACnGgC,EAA2B5B,GAA4BC,EAAwBL,CAAiB,EAChG,CAAChD,EAAwBC,CAA+B,EAAIsD,GAAgCF,CAAsB,EAExH,OACE,gBAAC,IAA4B,KAAA1D,EACA,uBAAuBqD,GAAA,YAAAA,EAAmB,OAAQ,GAClD,qBAAsBlB,EAA8B,IAAI,CAAC,CAAE,QAAAV,CAAQ,IAAMA,EAAQ,SAAS,EAC1F,uBAAApB,EACA,gCAAAC,EACA,kBAAmB+E,EACnB,SAAApF,EACA,OAAAC,EACA,WAAAM,EAAA,CAAwB,CAEzD,EAIC,CAACR,CAAI,CAAC,EAET,OACE,gCACE,gBAACoF,GAAA,IAA2B,EAC3BJ,GAA2B,CAC9B,CAEJ,EAEA/C,GAAqC,UAAY,CAC/C,WAAY,UAAgB,WAC5B,eAAgB,UAAgB,WAChC,8BAA+B,UAAgB,WAC/C,+BAAgC,SAAe,WAC/C,KAAM,SAAe,WACrB,SAAU,SAAe,UAC3B,EAEA,SAAeA,G,gCC1Lf,MAAMqD,GAAkB,CAAC,QAAS,UAAW,MAAM,EAO7CC,GAA0B,CAAC,CAAE,8BAAApD,EAA+B,gBAAAqD,CAAgB,IAAa,CAC7F,KAAM,CAACC,EAAgBC,CAAiB,KAAI,YAAiB,EAAE,EACzD,CAACC,EAA8BC,CAA+B,KAAI,YAAS,EAAK,EAChF,CAACC,EAAWC,CAAY,KAAI,YAAkB,EAAK,EACnDnD,KAAgBC,GAAA,GAAiB,EAEjCmD,EAAsB,IAAM,CAChCL,EAAkB,MAAS,CAC7B,EAEMM,GAA4B,CAACC,EAAyBC,IAA6B,CACvFA,EAAa,EACbR,EAAkBO,EAAgBA,EAAc,CAAC,EAAI,MAAS,EAC9DH,EAAa,EAAI,CACnB,EAEMK,EAAsB,IAAM,CAChCJ,EAAoB,EACpBD,EAAa,EAAK,CACpB,EAEMM,GAAuB,IAAM,CACjCzD,EAAc,KAAqB,SAAS,mBAAoB,CAC9D,aAAc,WACd,YAAa,iBACb,cAAe,CACb,OAAQ8C,CACV,CACF,CAAC,EAEDD,EAAgBC,EAAgBtD,EAA+BgE,CAAmB,CACpF,EAEME,EAA2B,IAAM,CACrCT,EAAgC,EAAI,CACtC,EAEMU,EAAwBC,GAC5B,gCACE,gBAAC,SAAE,oBACgB,gBAAC,cAAQd,CAAe,EAAS,yBAClD,gBAAC,KAAS,CAAC,SAAS,eAAe,OAAO,iBAAiB,MAAOc,EAAiB,OAAQ,EAAE,GAC/F,EACA,gBAAC,SAAGA,EAAiB,KAAK,IAAI,CAAE,EAChC,gBAAC,SAAE,oDAAkD,CACvD,EAGIC,GAA6B,IACjC,gBAAC,QAAK,CAAC,QAAQ,OAAO,OAAO,oCAC3B,gBAAC,SAAE,+JAGH,EACA,gBAAC,SACE,KAAWf,CAAc,EAAE,4DAC9B,EACA,gBAAC,SAAM,CAAC,OAAO,SAAS,QAAQ,UAAU,QAASY,CAAA,EAA0B,6BAE7E,CACF,EAGII,GAA6B,IAAM,CACvC,MAAMF,EAAmB,IAAapE,EAA8B,IAAI,CAAC,CAAE,QAAAV,CAAQ,IAAMA,EAAQ,SAAS,CAAC,EAGrGiF,EAAgCvE,EAA8B,MAAM,CAAC,CAAE,UAAAhB,EAAW,QAAAM,EAAQ,IAAMA,GAAQ,YAAY,KAAK,CAAC,CAAE,aAAAkF,EAAa,IAAMA,KAAiBxF,EAAU,EAAE,CAAC,EAE7KyF,GAAiC,CAACjB,GAAgC,CAACe,EAEzE,OACE,gBAAC,yBAAsB,UAAAb,EACA,MAAM,yBACN,sBAAuBe,GACvB,UAAWR,GACX,SAAUD,CAAA,EAC/B,gBAAC,WACES,GACGJ,GAA2B,EAC3BF,EAAqBC,CAAgB,CAC3C,CACF,CAEJ,EAEMM,GAAmBrI,GAAmB,KAAWA,CAAM,EAE7D,OACE,gBAAC,YACC,gBAAC,MAAc,GAAG,4BACH,MAAM,6BACN,YACE,gBAAC,SAAM,CAAC,QAAQ,UAAU,OAAO,SAAQ,SAAO,EAElD,MAAO8G,GACP,cAAeuB,GACf,cAAepB,EAAiB,CAACA,CAAc,EAAI,CAAC,EACpD,kBAAmB,GACnB,aAAcO,EAAA,CAA2B,EACvDS,GAA2B,CAC9B,CAEJ,EAEAlB,GAAwB,UAAY,CAClC,8BAA+B,UAAgB,WAC/C,gBAAiB,SAAe,UAClC,EAEA,SAAeA,GCpHTuB,MAAsB,WAAO,QAAM;AAAA;AAAA,EAYnCC,GAAkC,CAAC,CACvC,WAAAtI,EACA,eAAAyD,EACA,8BAAAC,EACA,+BAAAC,EACA,gBAAAoD,CACF,IAAa,CACX,KAAM,CAACwB,EAAwBC,CAAyB,KAAI,YAAS,EAAK,EACpEC,KAA6B,eAAY,IAAMD,EAA0B,EAAK,EAAG,CAAC,CAAC,EAEnFE,EAA6B,IAAKhF,EAA8B,IAAI,CAAC,CAAE,UAAAhB,CAAU,IAAMA,EAAU,IAAI,CAAC,EACtGiG,EAAsB,CAACjF,EAA8B,QAAUgF,EAA2B,SAAW,EAErGE,GAAyB,IACxBlF,EAA8B,OAI/BgF,EAA2B,SAAW,EACjC,mCAAmCA,EAA2B,KAAK,IAAI,CAAC,8BAG1E,wBAPE,oEAUX,OACE,gBAAC,gBAAa,KACZ,gBAACL,GAAA,CAAoB,MAAOO,GAAuB,EAC9B,QAAQ,UACR,OAAO,QACP,SAAUD,EACV,QAAS,IAAMH,EAA0B,EAAI,GAChE,gBAAC,KAAI,CAAC,KAAK,aAAc,GAAE,wBAC7B,EACA,gBAAC,IAAqC,WAAAxI,EACA,eAAAyD,EACA,8BAAAC,EACA,+BAAAC,EACA,KAAM4E,EACN,SAAUE,CAAA,CAA4B,EAC5E,gBAAC,GAAuB,CAAC,8BAAA/E,EAA8D,gBAAAqD,CAAA,CAAkC,CAC3H,CAEJ,EAEAuB,GAAgC,UAAY,CAC1C,WAAY,UAAgB,WAC5B,eAAgB,UAAgB,WAChC,8BAA+B,UAAgB,WAC/C,+BAAgC,SAAe,WAC/C,gBAAiB,SAAe,UAClC,EAEA,SAAeA,G,qBCwFf,SAxJwC,IAAiB,CACvD,UAAW,CACT,WAAY,UAAgB,WAC5B,eAAgB,UAAgB,WAChC,QAAS,WAAiB,WAC1B,OAAQ,SAAe,UACzB,EAEA,eAAepF,EAAM2F,EAAOC,EAAU,CACpC,KAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,MAExBA,EAAO7F,EAAM2F,CAAK,EAClBC,EAAS,CACX,EAEA,qBAAsB,CACpB,KAAM,CAAE,WAAA9I,EAAY,QAAAR,CAAQ,EAAI,KAAK,MAC/BwJ,EAAmBtG,GAAc,GAAGA,EAAU,EAAE,IAAIA,EAAU,IAAI,GAElEuG,EAAiBjJ,EACpB,KAAK,CAACkJ,EAAIC,OAAO,KAAsBD,EAAG,KAAMC,EAAG,IAAI,CAAC,EAExD,IAAIH,CAAe,EAEhBI,EAAsB/C,GAAgB,CAC1C,KAAM,CAAC7H,CAAE,EAAI6H,EAAY,MAAM,GAAG,EAC5B3D,EAAY,IAAK1C,EAAY,CAAE,GAAAxB,CAAO,CAAC,EAE7C,OAAO,gBAAC4E,GAAA,EAAkB,CAAC,UAAWV,EAAU,KAAM,gBAAiBA,EAAU,sBAAuB,CAC1G,EAEMqG,EAAS,CAAC,CAAC1C,CAAW,EAAGyC,IAAa,CAC1C,KAAM,CAACtK,CAAE,EAAI6H,EAAcA,EAAY,MAAM,GAAG,EAAI,CAAC,EAErD,KAAK,eAAe,YAAa7H,EAAIsK,CAAQ,CAC/C,EAEA,IAAIO,EAEJ,GAAI7J,EAAQ,UAAW,CACrB,MAAMkD,EAAY1C,EAAW,KAAMsJ,GAAMA,EAAE,KAAO9J,EAAQ,SAAS,EAEnE6J,EAAkB3G,EAAYsG,EAAgBtG,CAAS,EAAI,MAC7D,CAEA,OACE,gBAAC,MAAc,GAAG,mBACH,MAAM,sBACN,YAAa,gBAAC,SAAM,CAAC,OAAO,QAAQ,QAAQ,QAAO,aAAU,gBAAC,QAAK,UAAU,OAAQ,EAAE,EACvF,MAAOuG,EACP,cAAeG,EACf,aAAcL,EACd,cAAeM,EAAkB,CAACA,CAAe,EAAI,CAAC,EACtD,kBAAkB,sBAAsB,CAE3D,EAEA,wBAAyB,CACvB,KAAM,CAAE,eAAA5F,EAAgB,QAAAjE,CAAQ,EAAI,KAAK,MAEnC+J,EAAuB/G,GAAkB,GAAGA,EAAc,EAAE,IAAIA,EAAc,IAAI,GAClFgH,EAAqB/F,EACxB,KAAK,CAACyF,EAAIC,OAAO,KAAsBD,EAAG,KAAMC,EAAG,IAAI,CAAC,EAExD,IAAII,CAAmB,EAEpBE,EAA0BC,GAAoB,CAClD,KAAM,CAAClL,CAAE,EAAIkL,EAAgB,MAAM,GAAG,EAChClH,EAAgB,IAAKiB,EAAgB,CAAE,GAAAjF,CAAO,CAAC,EAErD,OAAO,gBAAC,YAAK,gBAAC2E,GAAA,EAAU,CAAC,MAAOX,EAAc,MAAO,KAAK,QAAS,GAAE,IAAEA,EAAc,IAAK,CAC5F,EAEMuG,EAAS,CAAC,CAACW,CAAe,EAAGZ,IAAa,CAC9C,KAAM,CAACtK,CAAE,EAAIkL,EAAkBA,EAAgB,MAAM,GAAG,EAAI,CAAC,EAE7D,KAAK,eAAe,gBAAiBlL,EAAIsK,CAAQ,CACnD,EAEA,IAAIa,EAEJ,GAAInK,EAAQ,cAAe,CACzB,MAAMgD,EAAgBiB,EAAe,KAAM6F,GAAMA,EAAE,KAAO9J,EAAQ,aAAa,EAE/EmK,EAAsBnH,EAAgB+G,EAAoB/G,CAAa,EAAI,MAC7E,CAEA,OACE,gBAAC,MAAc,GAAG,uBACH,MAAM,0BACN,YAAa,gBAAC,SAAM,CAAC,OAAO,QAAQ,QAAQ,QAAO,iBAAc,gBAAC,QAAK,UAAU,OAAQ,EAAE,EAC3F,MAAOgH,EACP,cAAeC,EACf,aAAcV,EACd,cAAeY,EAAsB,CAACA,CAAmB,EAAI,CAAC,EAC9D,kBAAkB,0BAA0B,CAE/D,EAEA,aAAc,CACZ,KAAM,CAAE,WAAA3J,EAAY,QAAAR,CAAQ,EAAI,KAAK,MAE/BoK,EAAmB,IAAK5J,EAAW,IAAK0C,GAAc,IAAWA,EAAU,qBAAqB,CAAC,CAAC,EACrG,KAAK,GAAqB,EAEvBqG,EAAS,CAAC,CAACc,CAAE,EAAGf,IAAa,KAAK,eAAe,KAAMe,EAAIf,CAAQ,EAEnEgB,EAAWtK,EAAQ,GAEzB,OACE,gBAAC,MAAc,GAAG,YACH,MAAM,eACN,YAAa,gBAAC,SAAM,CAAC,OAAO,QAAQ,QAAQ,QAAO,MAAG,gBAAC,QAAK,UAAU,OAAQ,EAAE,EAChF,MAAOoK,EACP,aAAcb,EACd,cAAee,EAAW,CAACA,CAAQ,EAAI,CAAC,EACxC,kBAAkB,eAAe,CAEpD,EAEA,iBAAkB,CAChB,KAAM,CAAE,QAAAtK,CAAQ,EAAI,KAAK,MACnBlB,EAAS,OAAO,KAAKO,GAAA,EAAkB,UAAU,EAAE,IAAKkL,GAAQ,OAAOA,CAAG,CAAC,EAC3EhB,EAAS,CAAC,CAAC9J,CAAU,EAAG6J,IAAa,KAAK,eAAe,SAAU7J,EAAY6J,CAAQ,EAEvFkB,EAAexK,EAAQ,OACvByK,EAAmBhL,GAAe,IAAWJ,GAAA,EAAkB,SAASI,CAAU,CAAC,EAEzF,OACE,gBAAC,MAAc,GAAG,gBACH,MAAM,6BACN,YAAa,gBAAC,SAAM,CAAC,OAAO,QAAQ,QAAQ,QAAO,oBAAiB,gBAAC,QAAK,UAAU,OAAQ,EAAE,EAC9F,MAAOX,EACP,cAAe2L,EACf,aAAclB,EACd,cAAeiB,EAAe,CAACA,CAAY,EAAI,CAAC,EAChD,kBAAkB,6BAA6B,CAElE,EAEA,QAAS,CACP,OACE,gBAAC,gBAAa,KACX,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,YAAY,CACpB,CAEJ,CACF,CAAC,E,6LCzKG7L,GAAU,CAAC,EAEfA,GAAQ,kBAAoB,KAC5BA,GAAQ,cAAgB,KAElBA,GAAQ,OAAS,UAAc,KAAM,MAAM,EAEjDA,GAAQ,OAAS,KACjBA,GAAQ,mBAAqB,KAE7B,IAAIC,GAAS,KAAI,KAASD,EAAO,EAK1B,SAAe,MAAW,KAAQ,OAAS,KAAQ,OAAS,O,qKCAnE,MAAM,WAAuB,WAAgB,CAA7C,kCAQE,uBAAe,CAAC+L,EAAMrB,IAAU,CAC9B,KAAM,CAAE,WAAA7I,EAAY,eAAAyD,CAAe,EAAI,KAAK,MAE5C,GAAIyG,IAAS,YAAa,CAExB,MAAMxH,EAAY1C,EAAW,KAAMsJ,GAAMA,EAAE,KAAOT,CAAK,EAEvD,MAAO,GAAGnG,EAAU,IAAI,OAAOA,EAAU,qBAAqB,EAChE,CAEA,OAAIwH,IAAS,gBAEJzG,EAAe,KAAM,GAAM,EAAE,KAAOoF,CAAK,EAAE,KAGhDqB,IAAS,SAEJrL,GAAA,EAAkB,SAASgK,CAAK,EAGlCA,CACT,CAAC,EAED,wBAAiBrJ,GAAY,OAAO,KAAKA,CAAO,EAAE,IAAK2K,GAAc,gBAAC,MAAG,IAAKA,CAAA,EAAYA,EAAU,KAAG,KAAK,aAAaA,EAAW3K,EAAQ2K,CAAS,CAAC,CAAE,CAAK,CAAC,CAAD,CAE7J,QAAS,CACP,KAAM,CAAE,QAAA3K,EAAS,eAAA4K,CAAe,EAAI,KAAK,MAEzC,OAAI,IAAQ5K,CAAO,EACV,KAIP,gBAAC,MAAG,CAAC,UAAU,UACb,gBAAC,MAAG,CAAC,GAAI,IACP,gBAAC,MAAG,UAAU,eACZ,gBAAC,UAAG,gBAAC,SAAE,SAAO,CAAI,EACjB,KAAK,cAAcA,CAAO,EAC3B,gBAAC,UACC,gBAAC,SAAM,CAAC,QAAQ,OAAO,OAAO,SAAS,UAAW,GAAM,aAAc,QAAS4K,CAAA,EAC7E,gBAAC,KAAI,CAAC,KAAK,OAAQ,GAAE,YACvB,CACF,CACF,CACF,CACF,CAEJ,CACF,CAvDE,GADI,GACG,YAAY,CACjB,WAAY,UAAgB,WAC5B,eAAgB,UAAgB,WAChC,QAAS,WAAiB,WAC1B,eAAgB,SAAe,UACjC,CAAC,EAoDH,SAAe,GC1CTC,GAA0B,UAAO,IAAI,CAAC,CAAE,MAAAC,CAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA,aAK7CA,EAAM,OAAO,QAAQ,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAO/C,EAEKC,GAAiB,UAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBxBC,MAAoB,WAAOD,EAAc,EAAE,CAAC,CAAE,MAAAD,CAAM,OAAM;AAAA,WACrDA,EAAM,OAAO,QAAQ,MAAM,OAAO;AAAA;AAAA,CAE5C,EAEKG,GAAoB,UAAO;AAAA;AAAA;AAAA;AAAA,EAM3BC,GAAqB,UAAO;AAAA;AAAA,EAI5BC,GAAyB,UAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUhCC,GAA4B,UAAO;AAAA;AAAA;AAAA;AAAA,EAM5BC,GAAa,CAAC,GAAI,GAAI,GAAI,GAAG,EAqBpCC,GAA2B,CAAC,CAChC,eAAArH,EACA,WAAAzD,EACA,aAAA+K,EACA,WAAAC,EACA,MAAAjN,EACA,sBAAAkN,EACA,QAAAzL,EACA,SAAA0L,EACA,cAAAC,EACA,sBAAAC,EACA,gBAAArE,EACF,IAAa,CACX,KAAM,CAACwB,EAAwBC,EAAyB,KAAI,YAAS,EAAK,EACpE,CAAC3F,EAAUwI,CAAW,KAAI,YAAmB,CAAC,CAAC,EAC/CC,MAAiB,UAAO,IAAI,EAG5BC,GAAoBN,EAAsB,OAAO,CAAC,CAAE,UAAAvI,CAAU,IAAM,CAAC,IAAQA,CAAS,CAAC,EAEvF8I,GAAqB,CAACxI,EAAyBN,IAAyB,GAAGM,EAAQ,OAAO,IAAIN,EAAU,IAAI,GAE5G+I,EAAgB,CAACC,EAAqDC,IAAwBD,EAAY,OAAS,GAAKA,EAAY,SAAWC,EAAU,UAE/J,aAAU,IAAM,CACd,MAAMC,EAAoBN,GAAiBA,GAAe,QAAQ,gBAAgB,EAAI,OAElFM,IAEFA,EAAkB,cAAgB/I,EAAS,OAAS,GAAK,CAAC4I,EAAczL,EAAY6C,CAAQ,EAEhG,EAAG,CAACyI,GAAgBtL,EAAY6C,CAAQ,CAAC,EAEzC,MAAMgJ,EAA4B,CAAC/D,EAA8C5F,EAAyC4J,IAA6B,CACrJV,EAAsBtD,EAAkB5F,EAAwB4J,CAAY,CAC9E,EAEMC,GAAsB,CAAChM,EAAgB2D,EAA2DoI,IAA6B,CACnI,MAAME,EAAqB,CAAC,EAE5BtI,EAA8B,QAAQ,CAAC,CAAE,QAAAV,GAAS,UAAAN,EAAU,IAAM,CAC5DsJ,EAAmBhJ,GAAQ,OAAO,EACpCgJ,EAAmBhJ,GAAQ,OAAO,EAAE,KAAKN,GAAU,EAAE,EAErDsJ,EAAmBhJ,GAAQ,OAAO,EAAI,CAACN,GAAU,EAAE,CAEvD,CAAC,EAEDqE,GAAgBhH,EAAQiM,EAAoBF,CAAY,CAC1D,EAEMG,EAAmBC,GAAU,CACjC,MAAMC,EAAgBD,EAAM,OAAO,QAC/BX,GAAkB,IAAI,CAAC,CAAE,QAAAvI,EAAS,UAAAN,CAAU,IAAM8I,GAAmBxI,EAASN,CAAS,CAAC,EACxF,CAAC,EAEL2I,EAAYc,CAAY,CAC1B,EAEMC,GAAgB1I,GAA8D,CAClF,MAAM2I,EAAgBxJ,EAAS,OAE/B,IAAIyJ,EAEJ,OAAID,IAAkB,EACpBC,EACE,gBAAC,IAAgC,WAAAtM,EACA,eAAAyD,EACA,QAAAjE,EACA,OAAQ0L,CAAA,CAAU,EAGrDoB,EACE,gBAAC,IAAgC,8BAA+B5I,EAC/B,WAAA1D,EACA,eAAAyD,EACA,+BAAgCoI,EAChC,gBAAiBE,EAAA,CAAqB,EAKzE,gBAAC,KAAoB,OAApB,KACC,gBAAC1B,GAAA,KAAyBiC,CAAW,EAErC,gBAAC,SAAM,IAAKhB,GACL,GAAG,sBACH,KAAK,WACL,MAAOe,IAAkB,EAAI,aAAe,GAAGA,CAAa,YAC5D,SAAUd,GAAkB,SAAW,EACvC,QAASE,EAAcF,GAAmB1I,CAAQ,EAClD,SAAUoJ,EACV,iBAAiB,oBAAoB,CAC9C,CAEJ,EAEMM,GAAgClG,GAAyB6F,GAAU,CACvE,MAAMC,EAAgBD,EAAM,OAAO,QAC/B,KAAMrJ,EAAU,CAACwD,CAAW,CAAC,EAC7B,KAAQxD,EAAUwD,CAAW,EAEjCgF,EAAYc,CAAY,CAC1B,EAEMK,GAA6BxJ,GACjC,gBAAC,KAAoB,KAApB,CAAyB,IAAK,WAAWA,EAAQ,OAAO,IACvD,gBAACwH,GAAA,KACC,gBAAC,MAAG,KACF,gBAAC,MAAG,CAAC,GAAI,IACP,gBAAC,MAAG,UAAU,2BACXxH,EAAQ,UAAU,IAAC,gBAACyJ,GAAA,EAAmB,CAAC,gBAAiBzJ,EAAQ,aAAa,iBAAkB,EAAE,SAC3F,gBAAC,aAAOA,EAAQ,OAAQ,CAClC,CACF,CACF,EACA,gBAAC,MAAG,KACF,gBAAC,MAAG,CAAC,GAAI,IACP,gBAAC,YAAK,iCAC2BA,EAAQ,aAAa,gBACtD,CACF,CACF,CACF,CACF,EAGI0J,GAAkB,CAAC1J,EAAyBN,EAAsBiK,IAAqC,CAC3G,MAAMtG,EAAcmF,GAAmBxI,EAASN,CAAS,EACnDkK,GAAsB5J,EAAQ,YAAY,OAAQ+B,GAAeA,EAAW,eAAiBrC,EAAU,EAAE,EAAE,IAAKqC,GAAeA,EAAW,gBAAgB,EAC1J8H,GAAoBF,EAAgB,OAAQlI,GAAWmI,GAAoB,SAASnI,EAAO,EAAE,CAAC,EAAE,KAAK,CAACyE,EAAIC,QAAO,KAAsBD,EAAG,KAAMC,GAAG,IAAI,CAAC,EAC9J,IAAI2D,GAAkB,CAAE,OAAQ,KAAM,QAAS,KAAM,GAAI,IAAK,EAE9D,GAAI,CACF,MAAMC,EAAS/J,EAAQ,aAAa,OAAO,WAAW,KAAMsG,IAAMA,GAAE,eAAiB5G,EAAU,EAAE,EAE7FqK,IACFD,GAAkB,CAChB,OAAQC,EAAO,OACf,QAASA,EAAO,QAChB,GAAIA,EAAO,YACb,EAEJ,MAAY,CAEZ,CAEA,OACE,gBAAC,MAAG,CAAC,IAAK1G,CAAA,EACR,gBAAC,MAAG,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,GACrB,gBAAC,SAAM,GAAI,GAAGA,CAAW,YAClB,KAAK,WACL,MAAO3D,EAAU,KACjB,QAASG,EAAS,SAASwD,CAAW,EACtC,SAAUkG,GAA6BlG,CAAW,EAAG,CAC9D,EACA,gBAAC,MAAG,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,GACrB,gBAACoE,GAAA,KACGoC,GAAkB,OAAS,GAC3B,gBAACG,GAAA,GAAgB,OAAQF,GAAgB,OACxB,QAASA,GAAgB,QACzB,GAAIA,GAAgB,GACpB,SAAU9J,EAAQ,UAAW,CAElD,CACF,EACA,gBAAC,MAAG,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,GACtB,gBAACyH,GAAA,KACGoC,GAAkB,OAAS,GAE3B,gBAAC,MAAW,KAAK,cACL,QAAS,IAAM,CACbxB,EAAY,CAAChF,CAAW,CAAC,EACzBmC,GAA0B,EAAI,CAChC,EAAG,EAEhBqE,GAAkB,IAAKrK,GACtB,gBAAC,MAAK,IAAKA,EAAc,GACnB,GAAIc,GAAA,GAAO,OAAO,SAAS,mBAAmBd,EAAc,EAAE,GAClE,gBAACoI,GAAA,KACC,gBAACzH,GAAA,GAAW,MAAOX,EAAc,MACrB,KAAMA,EAAc,KAAM,CACxC,CACF,CAEF,CACF,CACF,CACF,CAEJ,EAEMyK,GAAgB,CAACjK,EAAyB0I,EAA0BiB,IACpEjB,EAAY,SAAW,EAClBc,GAA0BxJ,CAAO,EAIxC,gBAAC,KAAoB,KAApB,CAAyB,IAAK,WAAWA,EAAQ,OAAO,IACvD,gBAACuH,GAAA,KACC,gBAAC,MAAG,KACF,gBAAC,MAAG,CAAC,GAAI,IACP,gBAACG,GAAA,CAAmB,UAAW,2BAA2B,CAAC1H,EAAQ,QAAU,KAAY,SAAS,IAC/FA,EAAQ,UAAU,IAAC,gBAACyJ,GAAA,EAAmB,CAAC,gBAAiBzJ,EAAQ,aAAa,iBAAkB,EAAE,SAC7F,gBAAC,aAAOA,EAAQ,QAAQ,IAAE,CAACA,EAAQ,QAAU,gBAAC,SAAE,iBAAgB,CAAK,CAC7E,CACF,CACF,EACC0I,EAAY,IAAKhJ,GAAcgK,GAAgB1J,EAASN,EAAWiK,CAAe,CAAC,CACtF,CACF,EAIEO,GAAe,CAAC7L,EAAiByH,IAA0B,CAC/DqC,EAAc9J,EAAQyH,CAAQ,CAChC,EAEMqE,EAAc,IAAM,CACxBhC,EAAc,CAChB,EAEMiC,EAAqB,IAAM,CAC/BlC,EAAS,CACX,EAEMmC,EAAmB,CAAC/N,EAAcC,IAAqB,CAC3D8L,EAAY,CAAC,CAAC,EACdN,EAAazL,EAAMC,CAAQ,CAC7B,EAEMmE,EAAgCb,EAAS,IAAKyK,GAA+BrC,EAAsB,KACvG,CAAC,CAAE,QAAAjI,EAAS,UAAAN,CAAU,IAAM8I,GAAmBxI,EAASN,CAAS,IAAM4K,CAA0B,CACnG,EAAE,OAAQ3H,GAAyB,CAAC,EAACA,GAAA,MAAAA,EAAsB,YAAa,CAAC,EAACA,GAAA,MAAAA,EAAsB,QAAO,EAEvG,IAAI1F,EAEJ,OAAIgL,EAAsB,SAAW,EACnChL,EACE,gBAAC,KAAoB,KAApB,KACEgL,EAAsB,SAAW,EAAI,qCAAuC,qCAC/E,EAKFhL,EAFiB,IAAqBgL,EAAsB,IAAI,CAAC,CAAE,QAAAjI,CAAQ,IAAMA,CAAO,CAAC,EAE1D,IAAKuK,GAAiB,CACnD,MAAMC,EAAoBvC,EACvB,OAAO,CAAC,CAAE,QAAAjI,CAAQ,IAAMA,EAAQ,UAAYuK,EAAa,OAAO,EAChE,IAAI,CAAC,CAAE,UAAA7K,CAAU,IAAMA,CAAS,EAChC,OAAQA,GAAc,CAAC,IAAQA,CAAS,CAAC,EAE5C,OAAOuK,GAAcM,EAAcC,EAAmB/J,CAAc,CACtE,CAAC,EAID,gBAACkH,GAAA,KACC,gBAAC,MAAc,UAAWE,GACX,WAAYG,EAAW,MACvB,SAAUqC,CAAA,EACvB,gBAACvP,GAAA,EAAiB,CAAC,MAAAC,EAAc,SAAUmP,GAAc,QAASC,CAAA,CAAa,EAC/E,gBAAC,IAAe,WAAAnN,EACA,eAAAyD,EACA,QAAAjE,EACA,eAAgB4N,CAAA,CAAoB,EACpD,gBAAC,MAAG,KACF,gBAAC,MAAG,CAAC,GAAI,IACP,gBAAC,KAAmB,KACjBhB,GAAa1I,CAA6B,EAC1CzD,CACH,CACF,CACF,CACF,EACA,gBAAC,IAAqC,WAAAD,EACA,eAAAyD,EACA,8BAAAC,EACA,+BAAgCmI,EAChC,KAAMtD,EACN,SAAU,IAAM,CACd8C,EAAY,CAAC,CAAC,EACd7C,GAA0B,EAAK,CACjC,EAAG,CAC3C,CAEJ,EAEAsC,GAAyB,UAAY,CACnC,sBAAuB,UAAgB,WACvC,WAAY,UAAgB,WAC5B,eAAgB,UAAgB,WAChC,WAAY,WAAiB,WAC7B,MAAO,WAAiB,WACxB,QAAS,WAAiB,WAC1B,aAAc,SAAe,WAC7B,SAAU,SAAe,WACzB,cAAe,SAAe,WAC9B,sBAAuB,SAAe,WACtC,gBAAiB,SAAe,UAClC,EAEA,SAAeA,GC3YT2C,GAAoC,IAAiB,CAEzD,UAAW,CACT,OAAQ,WACR,yBAA0B,WAAiB,UAC7C,EAEA,OAAQ,CAAC,YAAeC,EAAA,EAAiB,YAAY,EAAG,YAAerO,GAA6B,UAAU,EAAG,YAAesO,EAAA,EAA8B,gBAAgB,CAAC,EAE/K,iBAAkB,CAChB,MAAO,CACL,OAAQ,MACV,CACF,EAEA,mBAAoB,CAClB,KAAK,SAAS,KAAK,MAAM,MAAM,EAC/B,KAAK,SAAW,YAAY,KAAK,eAAgB,GAAI,CACvD,EAEA,mBAAmBC,EAAW,CACxBA,EAAU,SAAW,KAAK,MAAM,QAElC,KAAK,SAAS,KAAK,MAAM,MAAM,CAEnC,EAEA,sBAAuB,CACjB,KAAK,UACP,cAAc,KAAK,QAAQ,CAE/B,EAEA,iBAAiBtO,EAAMC,EAAU,CAC/B,KAAM,CAAE,QAAAC,EAAS,MAAAzB,CAAM,EAAI,KAAK,MAAM,SAEtCoB,EAA8B,KAAK,CAAE,MAAApB,EAAO,QAAAyB,EAAS,KAAAF,EAAM,SAAAC,CAAS,CAAC,CACvE,EAEA,aAAasO,EAAUhF,EAAO,CAC5B,KAAM,CAAE,UAAAiF,EAAW,SAAAvO,CAAS,EAAI,KAAK,MAAM,yBACrC,CAAE,QAAAC,EAAS,MAAAzB,CAAM,EAAI,KAAK,MAAM,SACtC,IAAIgQ,EAEAF,GACFE,EAAa,IAAUvO,CAAO,EAC9BuO,EAAWF,CAAQ,EAAIhF,GAEvBkF,EAAa,CAAC,EAGhBD,EAAU,EAEV3O,EAA8B,KAAK,CAAE,MAAApB,EAAO,QAASgQ,EAAY,SAAAxO,EAAU,KAAM,CAAE,CAAC,CACtF,EAEA,kBAAkBxB,EAAQ,GAAI+K,EAAW,IAAM,CAAC,EAAG,CACjD,KAAM,CAAE,UAAAgF,EAAW,SAAAvO,CAAS,EAAI,KAAK,MAAM,yBACrC,CAAE,QAAAC,CAAQ,EAAI,KAAK,MAAM,SAE/BsO,EAAU,EAEV3O,EAA8B,KAAK,CAAE,MAAApB,EAAO,QAAAyB,EAAS,SAAAD,EAAU,KAAM,CAAE,CAAC,EAAE,QAAQuJ,CAAQ,CAC5F,EAEA,0BAA0BhB,EAAkB5F,EAAwB4J,EAAc,CAChF,KAAgB,qBAAqBhE,EAAkB5F,CAAsB,EAAE,KAAMtC,GAAa,CAChGkM,EAAa,EACb,KAAM,CAAE,MAAA/N,EAAO,QAAAyB,CAAQ,EAAI,KAAK,MAAM,SAChC,CAAE,KAAAF,EAAM,SAAAC,CAAS,EAAI,KAAK,MAAM,yBAEtC,OAAAJ,EAA8B,KAAK,CAAE,MAAApB,EAAO,QAAAyB,EAAS,SAAAD,EAAU,KAAAD,CAAK,CAAC,EAE9DM,CACT,CAAC,CACH,EAEA,oBAAoBG,EAAQiM,EAAoBF,EAAc,CAC5D3M,EAA8B,UAAUY,EAAQiM,CAAkB,EAAE,KAAMpM,IACxEkM,EAAa,EAENlM,EACR,CACH,EAEA,gBAAiB,CACX,KAAK,MAAM,UACbT,EAA8B,YAAY,CAE9C,EAEA,SAAS6O,EAAQ,CACf,KAAM,CAAE,KAAA1O,EAAM,SAAAC,CAAS,EAAI,KAAK,MAAM,yBAChCxB,EAAQiQ,EAAS,WAAWA,CAAM,GAAK,GAE7C,IAAkB,IAAI,EACtB7O,EAA8B,KAAK,CAAE,MAAApB,EAAO,KAAAuB,EAAM,SAAAC,CAAS,CAAC,EAC5D,IAA+B,IAAI,CACrC,EAEA,QAAS,CACP,KAAM,CAAE,WAAAS,EAAY,eAAAyD,EAAgB,SAAAd,CAAS,EAAI,KAAK,MAEtD,GAAI,CAAC3C,GAAc,CAACA,EAAW,YAAc,CAAC2C,GAAY,CAACA,EAAS,UAAY,CAACc,GAAkB,CAACA,EAAe,eACjH,OAAO,gBAAC,KAAO,CAAC,KAAK,2BAA4B,GAGnD,MAAM+J,EAAoB,CAAC,EAE3B,OAAA7K,EAAS,SACN,KAAK,CAACsL,EAAIC,OAAO,KAAsBD,EAAG,UAAWC,EAAG,SAAS,CAAC,EAClE,QAASlL,GAAY,CACpB,MAAMmL,EAAyBnL,EAAQ,WAEvC,GAAI,IAAQmL,CAAsB,EAAG,CACnCX,EAAkB,KAAK,CAAE,UAAW,CAAC,EAAG,QAAAxK,CAAiB,CAAC,EAE1D,MACF,CAEAmL,EACG,IAAK3P,GAAO,IAAKwB,EAAW,WAAY,CAAE,GAAAxB,CAAO,CAAC,CAAC,EACnD,QAAS4P,GAAwB,CAChCZ,EAAkB,KAAK,CAAE,UAAWY,EAAqB,QAAApL,CAAiB,CAAC,CAC7E,CAAC,CACL,CAAC,EAGD,gBAAC,IAAyB,sBAAuBwK,EACvB,WAAYxN,EAAW,WACvB,eAAgByD,EAAe,eAC/B,WAAYd,EAAS,WACrB,MAAOA,EAAS,MAChB,QAASA,EAAS,QAClB,aAAc,KAAK,iBACnB,SAAU,KAAK,aACf,cAAe,KAAK,kBACpB,sBAAuB,KAAK,0BAC5B,gBAAiB,KAAK,oBAAqB,CAEzE,CACF,CAAC,EAED,MAAe0L,EAAA,GAA6BZ,GAAmC,CAAE,UAAW5C,EAAW,CAAC,E,sCChIxG,SAzBkC,IAAM,CACtC,KAAM,CAAE,QAASmD,CAAO,KAAIM,GAAA,GAAS,EAErC,OACE,gBAAC,KAAa,CAAC,MAAM,6BACnB,gBAACC,GAAA,EAAsB,IAAC,EACxB,gBAAC,MAAW,MAAM,4BACN,kBAAmB,CACjB,MAAO,wBACP,KAAMC,EAAA,EAAW,MAAM,iBACzB,GACV,gBAAC,YAAK,0GAEN,CACF,EAEA,gBAAC,MAAG,CAAC,UAAU,WACb,gBAAC,MAAG,CAAC,GAAI,IACP,gBAAC,GAAiC,CAAC,OAAAR,CAAA,CAAgB,CACrD,CACF,CACF,CAEJ,C,iLCxBO,MAAMS,KAAkB,MAC7B,gBACA,IAAM,kBAAqB,CACzB,cAAe,CAAE,YAAa,EAAK,EACnC,WAAY,CAAE,YAAa,EAAK,EAChC,kBAAmB,CAAE,YAAa,EAAK,EACvC,iBAAkB,CAAE,YAAa,EAAK,EACtC,qBAAsB,CAAE,YAAa,EAAK,CAC5C,CAAC,CACH,EAEaC,KAAgB,MAC3B,gBACA,IAAM,gBAAmB,CACvB,YAAa,CAACD,CAAe,EAC7B,UAAW,YACX,SAAU,OACV,WAAY,OACZ,WAAY,CACV,MAAO,OACP,KAAM,OACN,SAAU,OACV,MAAO,MACT,EACA,MAAO,OACP,KAAM,CACJ,MAAO,OACP,MAAO,MACT,EAEA,MAAO,CACL,KAAK,iBAAiB,CACxB,EAEA,kBAAmB,CACjB,KAAK,QAAQ,CACX,SAAU,KAAK,SACf,MAAO,KAAK,MACZ,WAAY,KAAK,WACjB,WAAY,KAAK,WACjB,KAAM,KAAK,IACb,CAAC,CACH,EAEA,cAAc,CAAE,MAAA1Q,EAAQ,GAAI,KAAAuB,EAAO,EAAG,SAAAC,EAAW,GAAI,WAAAoP,EAAa,GAAO,UAAAC,EAAY,YAAa,MAAAC,EAAQ,KAAM,EAAG,CACjH,MAAMC,EAAS,CACb,MAAA/Q,EACA,KAAAuB,EACA,SAAUC,EACV,YAAaoP,EACb,KAAMC,EACN,MAAAC,CACF,EAEME,EAAM,IAAI,KAAK,SAAS,EAAE,OAAOD,CAAM,EAAE,SAAS,EAClDpP,KAAU,MAAkB,MAAO,KAAoBqP,CAAG,CAAC,EAEjErP,EAAQ,KACLE,IACC,KAAK,SAAWA,EAAS,SACzB,KAAK,MAAQA,EAAS,MACtB,KAAK,WAAaA,EAAS,YAE3B,KAAK,WAAa,CAChB,MAAOA,EAAS,WAAW,MAC3B,MAAOA,EAAS,WAAW,MAC3B,KAAMA,EAAS,WAAW,KAC1B,SAAUA,EAAS,WAAW,QAChC,EAEA,KAAK,KAAO,CACV,MAAOA,EAAS,KAChB,MAAOA,EAAS,KAClB,EAEA,KAAK,iBAAiB,EAEfA,GAERC,GAAU,CACT,IAAiB,MAAMA,EAAM,SAAW,IAAMA,EAAM,gBAAkB,yCAAyCA,EAAM,OAAO,GAC1H,6BAA6B,CACjC,CACF,EAEA4O,EAAgB,cAAc,QAAQ/O,CAAO,CAC/C,EAEA,WAAWQ,EAAW,CACpB,MAAMR,KAAU,MAAkB,MAAO,KAAoB,GAAG,KAAK,SAAS,IAAIQ,CAAS,EAAE,CAAC,EAE9FR,EAAQ,MAAOG,GAAU,CACvB,IAAImP,EAAe,wCAAwCnP,CAAK,GAE5DA,EAAM,SAAW,MACnBmP,EAAe,qCAAqC9O,CAAS,0CAG/D,IAAiB,MAAM8O,EAAc,4BAA4B,CACnE,CAAC,EAEDP,EAAgB,WAAW,QAAQ/O,CAAO,CAC5C,EAEA,iBAAiBQ,EAAWwC,EAAW,CACrC,MAAM3C,EAAS,CAAC,EAEhBA,EAAO,UAAY2C,EACnB3C,EAAO,WAAa,CAAC,EACrBA,EAAO,WAAW,QAAU,GAC5B,MAAML,KAAU,MAAM,MAAO,KAAoB,GAAG,KAAK,SAAS,IAAIQ,CAAS,SAAS,EAAG,CAACH,CAAM,CAAC,EAEnGL,EACG,MACEG,GAAU,CACT,IAAiB,MAAM,0CAA0CA,CAAK,GACpE,2BAA2B,CAC/B,CACF,EAEF4O,EAAgB,iBAAiB,QAAQ/O,CAAO,CAClD,EAEA,kBAAkBQ,EAAW,CAC3B,MAAMR,KAAU,MAAkB,MAAO,KAAoB,GAAG,KAAK,SAAS,IAAIQ,CAAS,SAAS,CAAC,EAErGR,EACG,MACEG,GAAU,CACT,IAAiB,MAAM,gDAAgDA,CAAK,GAC1E,oCAAoC,CACxC,CACF,EAEF4O,EAAgB,kBAAkB,QAAQ/O,CAAO,CACnD,EAEA,6BAA6BsO,EAAQ3H,EAAaqD,EAAiB,CACjE,MAAO,CACL,QAASsE,EACT,aAAc3H,EACd,iBAAkBqD,CACpB,CACF,EAEA,qBAAqB/G,EAAUc,EAAgB,CAC7C,MAAMwL,EAAQtM,EAAS,IAAI,CAAC,CAAE,QAAAK,EAAS,UAAAN,CAAU,IAAM,CAErD,MAAMmD,EAAc7C,EAAQ,YAAY,OAAQ+B,GAAeA,EAAW,eAAiBrC,EAAU,EAAE,EAGvG,OAAAe,EAAe,QAASjB,GAAkB,CACxCqD,EAAY,KAAK,CAAE,aAAcnD,EAAU,GAAI,iBAAkBF,EAAc,EAAG,CAAC,CACrF,CAAC,EAEM,CAAE,QAASQ,EAAQ,QAAS,YAAA6C,CAAyB,CAC9D,CAAC,EAEKnG,KAAU,MAAM,MAAO,KAAoB,GAAG,KAAK,SAAS,iBAAiB,EAAG,CAAE,MAAAuP,CAAa,CAAC,EAEtGvP,EACG,KACEE,IACC,IAAiB,QAAQ,GAAI,4BAA4B+C,EAAS,MAAM,uBAAuB,EAExF/C,GAERC,GAAU,CACT,IAAiB,MAAM,gDAAgDA,CAAK,GAC1E,oCAAoC,CACxC,CACF,EAEF4O,EAAgB,qBAAqB,QAAQ/O,CAAO,CACtD,CACF,CAAC,CACH,C,uBCxMA,IAAIwP,EAAW,EAAQ,UAAa,EAChCC,EAAgB,EAAQ,UAAkB,EAC1CC,EAAoB,EAAQ,UAAsB,EAClDC,EAAW,EAAQ,UAAa,EAChCC,EAAY,EAAQ,UAAc,EAClCC,EAAW,EAAQ,UAAa,EAGhCC,EAAY,KAAK,IAYrB,SAASC,EAAiBC,EAAQC,EAAUC,EAAY,CAStD,QARIC,EAAWD,EAAaR,EAAoBD,EAC5CW,EAASJ,EAAO,CAAC,EAAE,OACnBK,EAAYL,EAAO,OACnBM,EAAWD,EACXE,EAAS,MAAMF,CAAS,EACxBG,EAAY,IACZnD,EAAS,CAAC,EAEPiD,KAAY,CACjB,IAAIG,EAAQT,EAAOM,CAAQ,EACvBA,GAAYL,IACdQ,EAAQd,EAASc,EAAOb,EAAUK,CAAQ,CAAC,GAE7CO,EAAYV,EAAUW,EAAM,OAAQD,CAAS,EAC7CD,EAAOD,CAAQ,EAAI,CAACJ,IAAeD,GAAaG,GAAU,KAAOK,EAAM,QAAU,KAC7E,IAAIjB,EAASc,GAAYG,CAAK,EAC9B,MACN,CACAA,EAAQT,EAAO,CAAC,EAEhB,IAAIU,EAAQ,GACRC,GAAOJ,EAAO,CAAC,EAEnBK,EACA,KAAO,EAAEF,EAAQN,GAAU/C,EAAO,OAASmD,GAAW,CACpD,IAAIrH,EAAQsH,EAAMC,CAAK,EACnBG,EAAWZ,EAAWA,EAAS9G,CAAK,EAAIA,EAG5C,GADAA,EAAS+G,GAAc/G,IAAU,EAAKA,EAAQ,EAC1C,EAAEwH,GACEd,EAASc,GAAME,CAAQ,EACvBV,EAAS9C,EAAQwD,EAAUX,CAAU,GACtC,CAEL,IADAI,EAAWD,EACJ,EAAEC,GAAU,CACjB,IAAIQ,GAAQP,EAAOD,CAAQ,EAC3B,GAAI,EAAEQ,GACEjB,EAASiB,GAAOD,CAAQ,EACxBV,EAASH,EAAOM,CAAQ,EAAGO,EAAUX,CAAU,GAErD,SAASU,CAEb,CACID,IACFA,GAAK,KAAKE,CAAQ,EAEpBxD,EAAO,KAAKlE,CAAK,CACnB,CACF,CACA,OAAOkE,CACT,CAEArP,EAAO,QAAU+R,C,qBCzEjB,IAAIgB,EAAoB,EAAQ,UAAqB,EASrD,SAASC,EAAoB7H,EAAO,CAClC,OAAO4H,EAAkB5H,CAAK,EAAIA,EAAQ,CAAC,CAC7C,CAEAnL,EAAO,QAAUgT,C,qBCbjB,IAAIC,EAAkB,EAAQ,UAAoB,EAC9CC,EAAmB,EAAQ,UAAqB,EAGhDC,EAAc,OAAO,UAGrBC,EAAiBD,EAAY,eAwB7BE,EAAUH,EAAiB,SAAS7D,EAAQlE,EAAOkB,EAAK,CACtD+G,EAAe,KAAK/D,EAAQhD,CAAG,EACjC,EAAEgD,EAAOhD,CAAG,EAEZ4G,EAAgB5D,EAAQhD,EAAK,CAAC,CAElC,CAAC,EAEDrM,EAAO,QAAUqT,C,uBCvCjB,IAAI1B,EAAW,EAAQ,UAAa,EAChCI,EAAmB,EAAQ,UAAqB,EAChDuB,EAAW,EAAQ,UAAa,EAChCN,EAAsB,EAAQ,UAAwB,EAmBtDO,EAAeD,EAAS,SAAStB,EAAQ,CAC3C,IAAIwB,EAAS7B,EAASK,EAAQgB,CAAmB,EACjD,OAAQQ,EAAO,QAAUA,EAAO,CAAC,IAAMxB,EAAO,CAAC,EAC3CD,EAAiByB,CAAM,EACvB,CAAC,CACP,CAAC,EAEDxT,EAAO,QAAUuT,C,qBC7BjB,IAAIE,EAAmB,EAAQ,UAAqB,EAsBhDC,EAAYD,EAAiB,SAASpE,EAAQsE,EAAMjB,EAAO,CAC7D,OAAOrD,GAAUqD,EAAQ,IAAM,IAAMiB,EAAK,YAAY,CACxD,CAAC,EAED3T,EAAO,QAAU0T,C,6NCfbjT,EAAU,CAAC,EAEfA,EAAQ,kBAAoB,IAC5BA,EAAQ,cAAgB,IAElBA,EAAQ,OAAS,SAAc,KAAM,MAAM,EAEjDA,EAAQ,OAAS,IACjBA,EAAQ,mBAAqB,IAE7B,IAAIC,EAAS,IAAI,IAASD,CAAO,EAK1B,QAAe,KAAW,IAAQ,OAAS,IAAQ,OAAS,M","sources":["webpack://graylog-web-interface/./src/components/sidecars/administration/FiltersSummary.css","webpack://graylog-web-interface/./src/components/sidecars/common/CommonSidecarStyles.css","webpack://graylog-web-interface/./src/components/sidecars/common/StatusIndicator.css","webpack://graylog-web-interface/./src/components/sidecars/common/SidecarSearchForm.tsx","webpack://graylog-web-interface/./src/components/sidecars/common/StatusIndicator.css?492e","webpack://graylog-web-interface/./src/components/sidecars/common/StatusIndicator.tsx","webpack://graylog-web-interface/./src/logic/sidecar/SidecarStatusEnum.js","webpack://graylog-web-interface/./src/stores/sidecars/SidecarsAdministrationStore.js","webpack://graylog-web-interface/./src/components/sidecars/administration/CollectorConfigurationModal.tsx","webpack://graylog-web-interface/./src/components/sidecars/administration/CollectorConfigurationModalContainer.tsx","webpack://graylog-web-interface/./src/components/sidecars/administration/CollectorProcessControl.tsx","webpack://graylog-web-interface/./src/components/sidecars/administration/CollectorsAdministrationActions.tsx","webpack://graylog-web-interface/./src/components/sidecars/administration/CollectorsAdministrationFilters.jsx","webpack://graylog-web-interface/./src/components/sidecars/administration/FiltersSummary.css?ad7e","webpack://graylog-web-interface/./src/components/sidecars/administration/FiltersSummary.jsx","webpack://graylog-web-interface/./src/components/sidecars/administration/CollectorsAdministration.tsx","webpack://graylog-web-interface/./src/components/sidecars/administration/CollectorsAdministrationContainer.jsx","webpack://graylog-web-interface/./src/pages/SidecarAdministrationPage.tsx","webpack://graylog-web-interface/./src/stores/sidecars/SidecarsStore.js","webpack://graylog-web-interface/./node_modules/lodash/_baseIntersection.js","webpack://graylog-web-interface/./node_modules/lodash/_castArrayLikeObject.js","webpack://graylog-web-interface/./node_modules/lodash/countBy.js","webpack://graylog-web-interface/./node_modules/lodash/intersection.js","webpack://graylog-web-interface/./node_modules/lodash/lowerCase.js","webpack://graylog-web-interface/./src/components/sidecars/common/CommonSidecarStyles.css?ba64"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.Lrll75Yl_6CGdqA_fws8 {\n vertical-align: baseline;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/sidecars/administration/FiltersSummary.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,wBAAwB;AAC5B\",\"sourcesContent\":[\":local(.deleteButton) {\\n vertical-align: baseline;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"deleteButton\": `Lrll75Yl_6CGdqA_fws8`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.zL2vwyqmPLuE_eSRQt1q {\n margin-top: 10px;\n}\n\n.zL2vwyqmPLuE_eSRQt1q dt {\n float: left;\n clear: left;\n}\n\n.zL2vwyqmPLuE_eSRQt1q dd {\n margin-left: 160px;\n}\n\n.m4So8k7QXl39uuSoP2WS {\n margin-top: 10px;\n}\n\n.Bfhoisypey7je2baSbGs {\n opacity: 0.5;\n z-index: 20;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/sidecars/common/CommonSidecarStyles.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;AACpB;;AAEA;IACI,WAAW;IACX,WAAW;AACf;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,YAAY;IACZ,WAAW;AACf\",\"sourcesContent\":[\":local(.deflist) {\\n margin-top: 10px;\\n}\\n\\n:local(.deflist) dt {\\n float: left;\\n clear: left;\\n}\\n\\n:local(.deflist) dd {\\n margin-left: 160px;\\n}\\n\\n:local(.topMargin) {\\n margin-top: 10px;\\n}\\n\\n:local(.greyedOut) {\\n opacity: 0.5;\\n z-index: 20;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"deflist\": `zL2vwyqmPLuE_eSRQt1q`,\n\t\"topMargin\": `m4So8k7QXl39uuSoP2WS`,\n\t\"greyedOut\": `Bfhoisypey7je2baSbGs`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.xUMQPeRwYREG_QMMJHzD {\n white-space: nowrap;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/sidecars/common/StatusIndicator.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,mBAAmB;AACvB\",\"sourcesContent\":[\":local(.indicator) {\\n white-space: nowrap;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"indicator\": `xUMQPeRwYREG_QMMJHzD`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { SearchForm } from 'components/common';\nimport QueryHelper from 'components/common/QueryHelper';\n\nconst queryExamples = (\n <>\n \n Find sidecars that did not communicate with Graylog since a date:
\n {'last_seen:<=2018-04-10'}
\n
\n \n Find sidecars with failing
or unknown
status:
\n status:failing status:unknown
\n
\n >\n);\n\nconst fieldMap = {\n status: 'Status of the sidecar as it appears in the list, i.e. running, failing, or unknown',\n operating_system: 'Operating system the sidecar is running on',\n last_seen: 'Date and time when the sidecar last communicated with Graylog',\n node_id: 'Identifier of the sidecar',\n sidecar_version: 'Sidecar version',\n};\n\nconst queryHelp = (\n \n);\n\ntype Props = React.PropsWithChildren<{\n query: string,\n onSearch: (query: string) => void,\n onReset: () => void,\n}>;\n\nconst SidecarSearchForm = ({ query, onSearch, onReset, children }: Props) => (\n \n {children}\n \n);\n\nSidecarSearchForm.propTypes = {\n query: PropTypes.string.isRequired,\n onSearch: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n children: PropTypes.element,\n};\n\nSidecarSearchForm.defaultProps = {\n children: undefined,\n};\n\nexport default SidecarSearchForm;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./StatusIndicator.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./StatusIndicator.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport upperFirst from 'lodash/upperFirst';\n\nimport { OverlayTrigger, Icon } from 'components/common';\nimport SidecarStatusEnum from 'logic/sidecar/SidecarStatusEnum';\nimport { relativeDifference } from 'util/DateTime';\nimport useUserDateTime from 'hooks/useUserDateTime';\n\nimport style from './StatusIndicator.css';\n\ntype Props = {\n message: string,\n status: number,\n lastSeen: string,\n id: string,\n}\n\nconst StatusIndicator = ({ message: messageProp, status, lastSeen, id }: Props) => {\n const { toUserTimezone } = useUserDateTime();\n let message = messageProp;\n const text = upperFirst(SidecarStatusEnum.toString(status));\n const lastSeenDateTime = toUserTimezone(lastSeen);\n\n let icon;\n let className;\n\n switch (status) {\n case SidecarStatusEnum.RUNNING:\n className = 'text-success';\n icon = 'play_arrow';\n break;\n case SidecarStatusEnum.FAILING:\n className = 'text-danger';\n icon = 'warning';\n break;\n case SidecarStatusEnum.STOPPED:\n className = 'text-danger';\n icon = 'error';\n break;\n default:\n className = 'text-info';\n icon = 'help';\n message += ` (${relativeDifference(lastSeenDateTime)})`;\n }\n\n if (message && id) {\n return (\n \n \n {text}\n \n \n );\n }\n\n return (\n \n {text}\n \n );\n};\n\nStatusIndicator.propTypes = {\n id: PropTypes.string,\n lastSeen: PropTypes.string,\n message: PropTypes.string,\n status: PropTypes.number,\n};\n\nStatusIndicator.defaultProps = {\n id: '',\n lastSeen: undefined,\n message: '',\n status: -1,\n};\n\nexport default StatusIndicator;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport lowerCase from 'lodash/lowerCase';\nimport toNumber from 'lodash/toNumber';\n\nconst SidecarStatusEnum = {\n RUNNING: 0,\n UNKNOWN: 1,\n FAILING: 2,\n STOPPED: 3,\n properties: {\n 0: { name: 'running' },\n 1: { name: 'unknown' },\n 2: { name: 'failing' },\n 3: { name: 'stopped' },\n },\n\n isValidStatusCode(statusCode) {\n return Object.keys(this.properties).includes(String(statusCode));\n },\n\n toStatusCode(stringStatus) {\n const status = lowerCase(stringStatus);\n\n if (status === this.properties[this.RUNNING].name) {\n return this.RUNNING;\n }\n\n if (status === this.properties[this.FAILING].name) {\n return this.FAILING;\n }\n\n if (status === this.properties[this.STOPPED].name) {\n return this.STOPPED;\n }\n\n return this.UNKNOWN;\n },\n\n toString(statusCode) {\n switch (toNumber(statusCode)) {\n case this.RUNNING:\n return 'running';\n case this.FAILING:\n return 'failing';\n case this.STOPPED:\n return 'stopped';\n default:\n return 'unknown';\n }\n },\n};\n\nexport default SidecarStatusEnum;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\nimport upperFirst from 'lodash/upperFirst';\n\nimport * as URLUtils from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport { fetchPeriodically } from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const SidecarsAdministrationActions = singletonActions(\n 'core.SidecarsAdministration',\n () => Reflux.createActions({\n list: { asyncResult: true },\n refreshList: { asyncResult: true },\n setAction: { asyncResult: true },\n }),\n);\n\nexport const SidecarsAdministrationStore = singletonStore(\n 'core.SidecarsAdministration',\n () => Reflux.createStore({\n listenables: [SidecarsAdministrationActions],\n sourceUrl: '/sidecar',\n sidecars: undefined,\n filters: undefined,\n pagination: {\n count: undefined,\n page: undefined,\n pageSize: undefined,\n total: undefined,\n },\n query: undefined,\n\n getInitialState() {\n return {\n sidecars: this.sidecars,\n filters: this.filters,\n query: this.query,\n pagination: this.pagination,\n };\n },\n\n propagateChanges() {\n this.trigger({\n sidecars: this.sidecars,\n filters: this.filters,\n query: this.query,\n pagination: this.pagination,\n });\n },\n\n list({ query = '', page = 1, pageSize = 50, filters }) {\n const body = {\n query: query,\n page: page,\n per_page: pageSize,\n filters: filters,\n };\n\n const promise = fetchPeriodically('POST', URLUtils.qualifyUrl(`${this.sourceUrl}/administration`), body);\n\n promise.then(\n (response) => {\n this.sidecars = response.sidecars;\n this.query = response.query;\n this.filters = response.filters;\n\n this.pagination = {\n total: response.pagination.total,\n count: response.pagination.count,\n page: response.pagination.page,\n pageSize: response.pagination.per_page,\n };\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(error.status === 400 ? error.responseMessage : `Fetching Sidecars failed with status: ${error.message}`,\n 'Could not retrieve Sidecars');\n },\n );\n\n SidecarsAdministrationActions.list.promise(promise);\n },\n\n refreshList() {\n this.list({ query: this.query, page: this.pagination.page, pageSize: this.pagination.pageSize, filters: this.filters });\n },\n\n setAction(action, collectors) {\n const sidecarIds = Object.keys(collectors);\n const formattedCollectors = sidecarIds.map((sidecarId) => ({\n sidecar_id: sidecarId,\n collector_ids: collectors[sidecarId],\n }));\n const body = {\n action: action,\n collectors: formattedCollectors,\n };\n\n const promise = fetchPeriodically('PUT', URLUtils.qualifyUrl(`${this.sourceUrl}/administration/action`), body);\n\n promise.then(\n (response) => {\n UserNotification.success('', `${upperFirst(action)} for ${formattedCollectors.length} collectors requested`);\n\n return response;\n },\n (error) => {\n UserNotification.error(`Requesting ${action} failed with status: ${error}`,\n `Could not ${action} collectors`);\n },\n );\n\n SidecarsAdministrationActions.setAction.promise(promise);\n },\n }),\n);\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport styled, { css } from 'styled-components';\n\nimport Routes from 'routing/Routes';\nimport { Table, BootstrapModalWrapper, Button, Modal } from 'components/bootstrap';\nimport { SearchForm, Icon } from 'components/common';\nimport CollectorIndicator from 'components/sidecars/common/CollectorIndicator';\nimport ColorLabel from 'components/sidecars/common/ColorLabel';\nimport { Link } from 'components/common/router';\nimport Alert from 'components/bootstrap/Alert';\n\nimport type { Collector, Configuration, SidecarSummary } from '../types';\n\nconst ConfigurationContainer = styled.div`\n overflow: auto;\n height: 360px;\n margin-top: 8px;\n`;\n\nconst ConfigurationTable = styled(Table)`\n margin-bottom: 0;\n`;\n\nconst NoConfigurationMessage = styled.div`\n display: flex;\n justify-content: center;\n`;\n\nconst AddNewConfiguration = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst SecondaryText = styled.div`\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: #aaa;\n margin-top: -4px;\n margin-bottom: -2px;\n`;\n\nconst TableRow = styled.tr<{ disabled?: boolean }>(({ disabled = false }) => css`\n cursor: ${disabled ? 'auto' : 'pointer'};\n background-color: ${disabled ? '#E8E8E8 !important' : 'initial'};\n border-bottom: 1px solid lightgray;\n height: 49px;\n`);\n\nconst StickyTableRowFooter = styled.tr`\n height: 32px;\n position: sticky;\n bottom: -1px;\n`;\n\nconst IconTableCell = styled.td`\n width: 32px;\n`;\n\nconst CollectorTableCell = styled.td`\n width: 140px;\n text-align: right;\n`;\n\nconst ConfigurationTableCell = styled.td`\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n max-width: 0;\n`;\n\nconst UnselectTableCell = styled.td`\n width: 32px;\n text-align: center;\n`;\n\nconst ModalTitle = styled(Modal.Title)`\n font-size: 1.266rem !important;\n line-height: 1.1;\n`;\n\nconst ModalSubTitle = styled.div`\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nconst StyledSearchForm = styled(SearchForm)`\n .form-group,\n .query {\n width: 100% !important;\n }\n`;\n\nconst InfoContainer = styled(Alert)`\n border: unset;\n margin-bottom: 0;\n margin-top: 4px;\n`;\n\nconst getFilterQuery = (_query: string) => {\n try {\n return new RegExp(_query, 'i');\n } catch (error) {\n return ' ';\n }\n};\n\ntype Props = {\n show: boolean,\n onCancel: () => void,\n onSave: (selectedConfigurations: string[], partiallySelectedConfigurations: string[]) => void,\n selectedCollectorName: string,\n selectedSidecarNames: string[],\n initialAssignedConfigs: string[],\n initialPartiallyAssignedConfigs: string[],\n unassignedConfigs: string[],\n getRowData: (configName: string) => {\n configuration: Configuration,\n collector: Collector,\n sidecars: SidecarSummary[],\n autoAssignedTags: string[],\n }\n};\n\nconst CollectorConfigurationModal = ({\n show,\n onCancel,\n onSave,\n selectedCollectorName,\n selectedSidecarNames,\n initialAssignedConfigs,\n initialPartiallyAssignedConfigs,\n unassignedConfigs,\n getRowData,\n}: Props) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedConfigurations, setSelectedConfigurations] = useState(initialAssignedConfigs);\n const [partiallySelectedConfigurations, setPartiallySelectedConfigurations] = useState(initialPartiallyAssignedConfigs);\n\n const onReset = () => {\n setSelectedConfigurations(initialAssignedConfigs);\n setPartiallySelectedConfigurations(initialPartiallyAssignedConfigs);\n setSearchQuery('');\n };\n\n const isNotDirty = isEqual(selectedConfigurations, initialAssignedConfigs) && isEqual(partiallySelectedConfigurations, initialPartiallyAssignedConfigs);\n\n const filteredOptions = [...initialAssignedConfigs, ...initialPartiallyAssignedConfigs, ...unassignedConfigs].filter((configuration) => configuration.match(getFilterQuery(searchQuery)));\n\n const rows = filteredOptions.map((configName) => {\n const { configuration, collector, sidecars, autoAssignedTags } = getRowData(configName);\n\n const selected = selectedConfigurations.includes(configName);\n const partiallySelected = !selected && partiallySelectedConfigurations.includes(configName);\n const secondaryText = (selected && selectedSidecarNames.join(', ')) || (partiallySelected && sidecars.map((sidecar) => sidecar.node_name).join(', ')) || '';\n const isAssignedFromTags = autoAssignedTags.length > 0;\n\n return (\n {\n if (!isAssignedFromTags) {\n if (partiallySelected) {\n setPartiallySelectedConfigurations(partiallySelectedConfigurations.filter((name) => name !== configName));\n } else {\n setSelectedConfigurations(selected ? selectedConfigurations.filter((name) => name !== configName) : [...selectedConfigurations, configName]);\n }\n }\n }}>\n \n {selected && }\n {partiallySelected && }\n \n \n \n {configName}\n \n {secondaryText}\n \n \n \n {isAssignedFromTags && }\n \n \n \n {collector\n ? \n : Unknown collector}\n \n \n {(selected || partiallySelected) && !isAssignedFromTags\n && }\n \n \n );\n });\n\n return (\n \n \n \n Edit {selectedCollectorName} Configurations\n \n \n {`${selectedSidecarNames.length} sidecar${selectedSidecarNames.length > 1 ? 's' : ''}: `}\n {selectedSidecarNames.join(', ')}\n \n \n \n \n \n setSearchQuery(q)}\n topMargin={0} />\n {(rows.length > 0) && (\n \n Collector configurations that have a lock icon have been assigned\n using tags and cannot be changed here.\n \n )}\n \n \n \n {(rows.length === 0) ? (\n \n \n No configurations available for the selected log\n collector.\n \n \n \n ) : (\n rows\n )}\n \n \n \n Add a new\n configuration\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nCollectorConfigurationModal.propTypes = {\n show: PropTypes.bool.isRequired,\n selectedCollectorName: PropTypes.string.isRequired,\n selectedSidecarNames: PropTypes.array.isRequired,\n initialAssignedConfigs: PropTypes.array.isRequired,\n initialPartiallyAssignedConfigs: PropTypes.array.isRequired,\n unassignedConfigs: PropTypes.array.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired,\n getRowData: PropTypes.func.isRequired,\n};\n\nexport default CollectorConfigurationModal;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React, { useState, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport countBy from 'lodash/countBy';\nimport intersection from 'lodash/intersection';\nimport uniq from 'lodash/uniq';\nimport styled from 'styled-components';\n\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport { BootstrapModalConfirm } from 'components/bootstrap';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport CollectorConfigurationModal from './CollectorConfigurationModal';\n\nimport type { Collector, Configuration, SidecarCollectorPairType, SidecarSummary } from '../types';\n\nconst ConfigurationSummary = styled.div`\n word-break: break-all;\n`;\n\ntype Props = {\n collectors: Collector[],\n configurations: Configuration[],\n selectedSidecarCollectorPairs: SidecarCollectorPairType[],\n onConfigurationSelectionChange: (pairs: SidecarCollectorPairType[], configs: Configuration[], callback: () => void) => void,\n show: boolean,\n onCancel: () => void,\n};\n\nconst CollectorConfigurationModalContainer = ({\n collectors,\n configurations,\n selectedSidecarCollectorPairs,\n onConfigurationSelectionChange,\n show,\n onCancel,\n}: Props) => {\n const [nextAssignedConfigurations, setNextAssignedConfigurations] = useState([]);\n const [nextPartiallyAssignedConfigurations, setNextPartiallyAssignedConfigurations] = useState([]);\n const [showConfirmModal, setShowConfirmModal] = useState(false);\n const sendTelemetry = useSendTelemetry();\n\n const getSelectedLogCollector = () => (uniq(selectedSidecarCollectorPairs.map(({ collector }) => collector)))[0];\n\n const sortConfigurationNames = (configs: Configuration[]) => configs.sort((config1, config2) => naturalSortIgnoreCase(config1.name, config2.name))\n .map((config) => config.name);\n\n const getAssignedConfigurations = (_selectedSidecarCollectorPairs: SidecarCollectorPairType[], selectedCollector: Collector) => {\n const assignments = _selectedSidecarCollectorPairs.map(({ sidecar }) => sidecar).reduce((accumulator, sidecar) => accumulator.concat(sidecar.assignments), []);\n\n const filteredAssignments = assignments.map((assignment) => configurations.find((configuration) => configuration.id === assignment.configuration_id))\n .filter((configuration) => selectedCollector?.id === configuration.collector_id);\n\n return sortConfigurationNames(filteredAssignments);\n };\n\n const getUnassignedConfigurations = (assignedConfigurations: string[], selectedCollector: Collector) => {\n const filteredConfigs = configurations.filter((config) => !assignedConfigurations.includes(config.name) && (selectedCollector?.id === config.collector_id));\n\n return sortConfigurationNames(filteredConfigs);\n };\n\n const getFullyAndPartiallyAssignments = (_assignedConfigurations: string[]) => {\n const occurrences = countBy(_assignedConfigurations);\n\n return [\n uniq(_assignedConfigurations.filter((config) => occurrences[config] === selectedSidecarCollectorPairs.length)),\n uniq(_assignedConfigurations.filter((config) => occurrences[config] < selectedSidecarCollectorPairs.length)),\n ];\n };\n\n const onSave = (fullyAssignedConfigs: string[], partiallyAssignedConfigs: string[]) => {\n setNextAssignedConfigurations(fullyAssignedConfigs);\n setNextPartiallyAssignedConfigurations(partiallyAssignedConfigs);\n setShowConfirmModal(true);\n };\n\n const cancelConfigurationChange = () => {\n setNextAssignedConfigurations([]);\n setNextPartiallyAssignedConfigurations([]);\n setShowConfirmModal(false);\n };\n\n const confirmConfigurationChange = () => {\n const assignedConfigurationsToSave = configurations.filter((config) => nextAssignedConfigurations.includes(config.name));\n\n selectedSidecarCollectorPairs.forEach((sidecarCollectorPair) => {\n let configs = assignedConfigurationsToSave;\n\n if (nextPartiallyAssignedConfigurations.length) {\n const selectedLogCollector = getSelectedLogCollector();\n const assignments = getAssignedConfigurations([sidecarCollectorPair], selectedLogCollector);\n const assignmentsToKeep = intersection(assignments, nextPartiallyAssignedConfigurations);\n const assignedConfigurationsToKeep = configurations.filter((config) => assignmentsToKeep.includes(config.name));\n configs = [...assignedConfigurationsToSave, ...assignedConfigurationsToKeep];\n }\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.SIDECARS.CONFIGURATION_ASSIGNED, {\n app_pathname: 'sidecars',\n app_section: 'administration',\n });\n\n onConfigurationSelectionChange([sidecarCollectorPair], configs, () => {});\n });\n\n cancelConfigurationChange();\n onCancel();\n };\n\n const getConfiguration = (configName: string) => configurations.find((config) => config.name === configName);\n\n const getCollector = (configName: string) => {\n const configuration = getConfiguration(configName);\n\n return collectors.find((collector) => collector.id === configuration.collector_id);\n };\n\n const getSidecars = (configName: string) => {\n const configuration = getConfiguration(configName);\n\n return selectedSidecarCollectorPairs.filter(({ sidecar }) => sidecar.assignments.map((assignment) => assignment.configuration_id).includes(configuration.id)).map((assignment) => assignment.sidecar);\n };\n\n const getAssignedFromTags = (configId: string, collectorId: string, sidecars: SidecarSummary[]) => {\n const assigned_from_tags = sidecars.reduce((accumulator, sidecar) => accumulator.concat(\n sidecar.assignments.find((assignment) => (assignment.collector_id === collectorId) && (assignment.configuration_id === configId)).assigned_from_tags,\n ), []);\n\n return uniq(assigned_from_tags);\n };\n\n const getRowData = (configName: string) => {\n const configuration = getConfiguration(configName);\n const collector = getCollector(configName);\n const sidecars = getSidecars(configName);\n const autoAssignedTags = getAssignedFromTags(configuration.id, collector.id, sidecars);\n\n return { configuration, collector, sidecars, autoAssignedTags };\n };\n\n const renderConfigurationSummary = () => {\n const sidecarsSummary = selectedSidecarCollectorPairs.map(({ sidecar }) => sidecar.node_name).join(', ');\n const numberOfSidecarsSummary = `${selectedSidecarCollectorPairs.length} sidecars`;\n const summary = selectedSidecarCollectorPairs.length <= 5 ? sidecarsSummary : numberOfSidecarsSummary;\n\n return (\n \n \n Are you sure you want to proceed with this action for {summary}?
\n \n \n );\n };\n\n const MemoizedConfigurationModal = useMemo(() => {\n const renderConfigurationModal = () => {\n const selectedCollector = getSelectedLogCollector();\n const assignedConfigurations = getAssignedConfigurations(selectedSidecarCollectorPairs, selectedCollector);\n const unassignedConfigurations = getUnassignedConfigurations(assignedConfigurations, selectedCollector);\n const [initialAssignedConfigs, initialPartiallyAssignedConfigs] = getFullyAndPartiallyAssignments(assignedConfigurations);\n\n return (\n sidecar.node_name)}\n initialAssignedConfigs={initialAssignedConfigs}\n initialPartiallyAssignedConfigs={initialPartiallyAssignedConfigs}\n unassignedConfigs={unassignedConfigurations}\n onCancel={onCancel}\n onSave={onSave}\n getRowData={getRowData} />\n );\n };\n\n return renderConfigurationModal;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [show]);\n\n return (\n <>\n \n {renderConfigurationSummary()}\n >\n );\n};\n\nCollectorConfigurationModalContainer.propTypes = {\n collectors: PropTypes.array.isRequired,\n configurations: PropTypes.array.isRequired,\n selectedSidecarCollectorPairs: PropTypes.array.isRequired,\n onConfigurationSelectionChange: PropTypes.func.isRequired,\n show: PropTypes.bool.isRequired,\n onCancel: PropTypes.func.isRequired,\n};\n\nexport default CollectorConfigurationModalContainer;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport capitalize from 'lodash/capitalize';\nimport uniq from 'lodash/uniq';\n\nimport { Button, Panel, BootstrapModalConfirm } from 'components/bootstrap';\nimport { Pluralize, SelectPopover } from 'components/common';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport type { SidecarCollectorPairType } from '../types';\n\nconst PROCESS_ACTIONS = ['start', 'restart', 'stop'];\n\ntype Props = {\n selectedSidecarCollectorPairs: SidecarCollectorPairType[],\n onProcessAction: (action: string, pairs: SidecarCollectorPairType[], callback: () => void) => void,\n};\n\nconst CollectorProcessControl = ({ selectedSidecarCollectorPairs, onProcessAction }: Props) => {\n const [selectedAction, setSelectedAction] = useState('');\n const [isConfigurationWarningHidden, setIsConfigurationWarningHidden] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const sendTelemetry = useSendTelemetry();\n\n const resetSelectedAction = () => {\n setSelectedAction(undefined);\n };\n\n const handleProcessActionSelect = (processAction: string[], hideCallback: () => void) => {\n hideCallback();\n setSelectedAction(processAction ? processAction[0] : undefined);\n setShowModal(true);\n };\n\n const cancelProcessAction = () => {\n resetSelectedAction();\n setShowModal(false);\n };\n\n const confirmProcessAction = () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.SIDECARS.PROCESS_ACTION_SET, {\n app_pathname: 'sidecars',\n app_section: 'administration',\n event_details: {\n action: selectedAction,\n },\n });\n\n onProcessAction(selectedAction, selectedSidecarCollectorPairs, cancelProcessAction);\n };\n\n const hideConfigurationWarning = () => {\n setIsConfigurationWarningHidden(true);\n };\n\n const renderSummaryContent = (selectedSidecars: string[]) => (\n <>\n \n You are going to {selectedAction} log collectors in \n :\n
\n {selectedSidecars.join(', ')}
\n Are you sure you want to proceed with this action?
\n >\n );\n\n const renderConfigurationWarning = () => (\n \n \n At least one selected Collector is not configured yet. To start a new Collector, assign a\n Configuration to it and the Sidecar will start the process for you.\n
\n \n {capitalize(selectedAction)}ing a Collector without Configuration will have no effect.\n
\n \n \n );\n\n const renderProcessActionSummary = () => {\n const selectedSidecars = uniq(selectedSidecarCollectorPairs.map(({ sidecar }) => sidecar.node_name));\n\n // Check if all selected collectors have assigned configurations\n const allHaveConfigurationsAssigned = selectedSidecarCollectorPairs.every(({ collector, sidecar }) => sidecar.assignments.some(({ collector_id }) => collector_id === collector.id));\n\n const shouldShowConfigurationWarning = !isConfigurationWarningHidden && !allHaveConfigurationsAssigned;\n\n return (\n \n \n {shouldShowConfigurationWarning\n ? renderConfigurationWarning()\n : renderSummaryContent(selectedSidecars)}\n \n \n );\n };\n\n const actionFormatter = (action: string) => capitalize(action);\n\n return (\n \n Process\n )}\n items={PROCESS_ACTIONS}\n itemFormatter={actionFormatter}\n selectedItems={selectedAction ? [selectedAction] : []}\n displayDataFilter={false}\n onItemSelect={handleProcessActionSelect} />\n {renderProcessActionSummary()}\n \n );\n};\n\nCollectorProcessControl.propTypes = {\n selectedSidecarCollectorPairs: PropTypes.array.isRequired,\n onProcessAction: PropTypes.func.isRequired,\n};\n\nexport default CollectorProcessControl;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport uniq from 'lodash/uniq';\nimport styled from 'styled-components';\n\nimport { ButtonToolbar, Button } from 'components/bootstrap';\nimport { Icon } from 'components/common';\n\nimport CollectorConfigurationModalContainer from './CollectorConfigurationModalContainer';\nimport CollectorProcessControl from './CollectorProcessControl';\n\nimport type { Collector, Configuration, SidecarCollectorPairType } from '../types';\n\nconst ConfigurationButton = styled(Button)`\n margin-right: 6px;\n`;\n\ntype Props = {\n collectors: Collector[],\n configurations: Configuration[],\n selectedSidecarCollectorPairs: SidecarCollectorPairType[],\n onConfigurationSelectionChange: (pairs: SidecarCollectorPairType[], configs: Configuration[], callback: () => void) => void,\n onProcessAction: (action: string, pairs: SidecarCollectorPairType[], callback: () => void) => void,\n};\n\nconst CollectorsAdministrationActions = ({\n collectors,\n configurations,\n selectedSidecarCollectorPairs,\n onConfigurationSelectionChange,\n onProcessAction,\n}: Props) => {\n const [showConfigurationModal, setShowConfigurationModal] = useState(false);\n const onCancelConfigurationModal = useCallback(() => setShowConfigurationModal(false), []);\n\n const selectedLogCollectorsNames = uniq(selectedSidecarCollectorPairs.map(({ collector }) => collector.name));\n const disableConfigButton = !selectedSidecarCollectorPairs.length || selectedLogCollectorsNames.length !== 1;\n\n const getConfigButtonTooltip = () => {\n if (!selectedSidecarCollectorPairs.length) {\n return 'Incompatible collectors, please check your sidecar configuration.';\n }\n\n if (selectedLogCollectorsNames.length !== 1) {\n return `Cannot change configurations of ${selectedLogCollectorsNames.join(', ')} collectors simultaneously.`;\n }\n\n return 'Assign Configurations';\n };\n\n return (\n \n setShowConfigurationModal(true)}>\n Assign Configurations\n \n \n \n \n );\n};\n\nCollectorsAdministrationActions.propTypes = {\n collectors: PropTypes.array.isRequired,\n configurations: PropTypes.array.isRequired,\n selectedSidecarCollectorPairs: PropTypes.array.isRequired,\n onConfigurationSelectionChange: PropTypes.func.isRequired,\n onProcessAction: PropTypes.func.isRequired,\n};\n\nexport default CollectorsAdministrationActions;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport PropTypes from 'prop-types';\nimport find from 'lodash/find';\nimport uniq from 'lodash/uniq';\nimport upperFirst from 'lodash/upperFirst';\n\nimport { SelectPopover } from 'components/common';\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport CollectorIndicator from 'components/sidecars/common/CollectorIndicator';\nimport ColorLabel from 'components/sidecars/common/ColorLabel';\nimport SidecarStatusEnum from 'logic/sidecar/SidecarStatusEnum';\n\nconst CollectorsAdministrationFilters = createReactClass({\n propTypes: {\n collectors: PropTypes.array.isRequired,\n configurations: PropTypes.array.isRequired,\n filters: PropTypes.object.isRequired,\n filter: PropTypes.func.isRequired,\n },\n\n onFilterChange(name, value, callback) {\n const { filter } = this.props;\n\n filter(name, value);\n callback();\n },\n\n getCollectorsFilter() {\n const { collectors, filters } = this.props;\n const collectorMapper = (collector) => `${collector.id};${collector.name}`;\n\n const collectorItems = collectors\n .sort((c1, c2) => naturalSortIgnoreCase(c1.name, c2.name))\n // TODO: Hack to be able to filter in SelectPopover. We should change that to avoid this hack.\n .map(collectorMapper);\n\n const collectorFormatter = (collectorId) => {\n const [id] = collectorId.split(';');\n const collector = find(collectors, { id: id });\n\n return ;\n };\n\n const filter = ([collectorId], callback) => {\n const [id] = collectorId ? collectorId.split(';') : [];\n\n this.onFilterChange('collector', id, callback);\n };\n\n let collectorFilter;\n\n if (filters.collector) {\n const collector = collectors.find((c) => c.id === filters.collector);\n\n collectorFilter = collector ? collectorMapper(collector) : undefined;\n }\n\n return (\n Collector }\n items={collectorItems}\n itemFormatter={collectorFormatter}\n onItemSelect={filter}\n selectedItems={collectorFilter ? [collectorFilter] : []}\n filterPlaceholder=\"Filter by collector\" />\n );\n },\n\n getConfigurationFilter() {\n const { configurations, filters } = this.props;\n\n const configurationMapper = (configuration) => `${configuration.id};${configuration.name}`;\n const configurationItems = configurations\n .sort((c1, c2) => naturalSortIgnoreCase(c1.name, c2.name))\n // TODO: Hack to be able to filter in SelectPopover. We should change that to avoid this hack.\n .map(configurationMapper);\n\n const configurationFormatter = (configurationId) => {\n const [id] = configurationId.split(';');\n const configuration = find(configurations, { id: id });\n\n return {configuration.name};\n };\n\n const filter = ([configurationId], callback) => {\n const [id] = configurationId ? configurationId.split(';') : [];\n\n this.onFilterChange('configuration', id, callback);\n };\n\n let configurationFilter;\n\n if (filters.configuration) {\n const configuration = configurations.find((c) => c.id === filters.configuration);\n\n configurationFilter = configuration ? configurationMapper(configuration) : undefined;\n }\n\n return (\n Configuration }\n items={configurationItems}\n itemFormatter={configurationFormatter}\n onItemSelect={filter}\n selectedItems={configurationFilter ? [configurationFilter] : []}\n filterPlaceholder=\"Filter by configuration\" />\n );\n },\n\n getOSFilter() {\n const { collectors, filters } = this.props;\n\n const operatingSystems = uniq(collectors.map((collector) => upperFirst(collector.node_operating_system)))\n .sort(naturalSortIgnoreCase);\n\n const filter = ([os], callback) => this.onFilterChange('os', os, callback);\n\n const osFilter = filters.os;\n\n return (\n OS }\n items={operatingSystems}\n onItemSelect={filter}\n selectedItems={osFilter ? [osFilter] : []}\n filterPlaceholder=\"Filter by OS\" />\n );\n },\n\n getStatusFilter() {\n const { filters } = this.props;\n const status = Object.keys(SidecarStatusEnum.properties).map((key) => String(key));\n const filter = ([statusCode], callback) => this.onFilterChange('status', statusCode, callback);\n\n const statusFilter = filters.status;\n const statusFormatter = (statusCode) => upperFirst(SidecarStatusEnum.toString(statusCode));\n\n return (\n Collector Status }\n items={status}\n itemFormatter={statusFormatter}\n onItemSelect={filter}\n selectedItems={statusFilter ? [statusFilter] : []}\n filterPlaceholder=\"Filter by collector status\" />\n );\n },\n\n render() {\n return (\n \n {this.getCollectorsFilter()}\n {this.getConfigurationFilter()}\n {this.getStatusFilter()}\n {this.getOSFilter()}\n \n );\n },\n});\n\nexport default CollectorsAdministrationFilters;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./FiltersSummary.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./FiltersSummary.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { Button, Col, Row } from 'components/bootstrap';\nimport { Icon } from 'components/common';\nimport SidecarStatusEnum from 'logic/sidecar/SidecarStatusEnum';\n\nimport style from './FiltersSummary.css';\n\nclass FiltersSummary extends React.Component {\n static propTypes = {\n collectors: PropTypes.array.isRequired,\n configurations: PropTypes.array.isRequired,\n filters: PropTypes.object.isRequired,\n onResetFilters: PropTypes.func.isRequired,\n };\n\n formatFilter = (type, value) => {\n const { collectors, configurations } = this.props;\n\n if (type === 'collector') {\n // Get collector name\n const collector = collectors.find((c) => c.id === value);\n\n return `${collector.name} on ${collector.node_operating_system}`;\n }\n\n if (type === 'configuration') {\n // Get configuration name\n return configurations.find((c) => c.id === value).name;\n }\n\n if (type === 'status') {\n // Convert status code to string\n return SidecarStatusEnum.toString(value);\n }\n\n return value;\n };\n\n formatFilters = (filters) => Object.keys(filters).map((filterKey) => {filterKey}: {this.formatFilter(filterKey, filters[filterKey])} );\n\n render() {\n const { filters, onResetFilters } = this.props;\n\n if (isEmpty(filters)) {\n return null;\n }\n\n return (\n \n \n \n - Filters
\n {this.formatFilters(filters)}\n - \n \n
\n
\n \n
\n );\n }\n}\n\nexport default FiltersSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport union from 'lodash/union';\nimport uniq from 'lodash/uniq';\nimport without from 'lodash/without';\nimport styled, { css } from 'styled-components';\n\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport { Link } from 'components/common/router';\nimport { ControlledTableList, PaginatedList, IconButton } from 'components/common';\nimport Routes from 'routing/Routes';\nimport { Col, Row, Input } from 'components/bootstrap';\nimport ColorLabel from 'components/sidecars/common/ColorLabel';\nimport OperatingSystemIcon from 'components/sidecars/common/OperatingSystemIcon';\nimport SidecarSearchForm from 'components/sidecars/common/SidecarSearchForm';\nimport StatusIndicator from 'components/sidecars/common/StatusIndicator';\nimport commonStyle from 'components/sidecars/common/CommonSidecarStyles.css';\n\nimport CollectorsAdministrationActions from './CollectorsAdministrationActions';\nimport CollectorsAdministrationFilters from './CollectorsAdministrationFilters';\nimport CollectorConfigurationModalContainer from './CollectorConfigurationModalContainer';\nimport FiltersSummary from './FiltersSummary';\n\nimport type { Collector, Configuration, SidecarCollectorPairType, SidecarSummary } from '../types';\n\nconst HeaderComponentsWrapper = styled.div(({ theme }) => css`\n float: right;\n margin: 5px 0;\n\n .btn-link {\n color: ${theme.colors.variant.darker.default};\n }\n\n .btn-toolbar {\n display: flex;\n max-height: 29px;\n }\n`);\n\nconst CollectorEntry = styled.div`\n .row {\n margin-bottom: 5px;\n }\n\n .form-group {\n display: inline-block;\n margin: 0 10px 0 0;\n }\n\n .checkbox {\n margin-top: 5px;\n margin-bottom: 5px;\n }\n\n .checkbox label {\n font-size: 1rem; /* theme.fonts.size.body */\n }\n`;\n\nconst DisabledCollector = styled(CollectorEntry)(({ theme }) => css`\n color: ${theme.colors.variant.light.default};\n margin-left: 20px;\n`);\n\nconst AdditionalContent = styled.span`\n display: flex;\n margin-top: 5px;\n flex-wrap: wrap;\n`;\n\nconst AlignedInformation = styled.span`\n margin-left: 20px;\n`;\n\nconst PaginatedListContainer = styled.div`\n .page-size {\n padding-top: 4px;\n }\n\n .search {\n margin-bottom: 15px;\n }\n`;\n\nconst StyledColorLabelContainer = styled.span`\n .color-label-wrapper {\n display: flex;\n }\n`;\n\nexport const PAGE_SIZES = [10, 25, 50, 100];\n\ntype Props = {\n collectors: Collector[],\n configurations: Configuration[],\n sidecarCollectorPairs: SidecarCollectorPairType[],\n query: string,\n filters: { [_key: string]: string },\n pagination: {\n total: number;\n count: number;\n page: number;\n perPage: number;\n },\n onPageChange: (currentPage: number, pageSize: number) => void,\n onFilter: (collectorIds?: string[], callback?: () => void) => void,\n onQueryChange: (query?: string, callback?: () => void) => void,\n onConfigurationChange: (pairs: SidecarCollectorPairType[], configs: Configuration[], callback: () => void) => void,\n onProcessAction: (action: string, collectorDict: { [sidecarId: string]: string[] }, callback: () => void) => void,\n};\n\nconst CollectorsAdministration = ({\n configurations,\n collectors,\n onPageChange,\n pagination,\n query,\n sidecarCollectorPairs,\n filters,\n onFilter,\n onQueryChange,\n onConfigurationChange,\n onProcessAction,\n}: Props) => {\n const [showConfigurationModal, setShowConfigurationModal] = useState(false);\n const [selected, setSelected] = useState([]);\n const selectAllInput = useRef(null);\n\n // Filter out sidecars with no compatible collectors\n const enabledCollectors = sidecarCollectorPairs.filter(({ collector }) => !isEmpty(collector));\n\n const sidecarCollectorId = (sidecar: SidecarSummary, collector: Collector) => `${sidecar.node_id}-${collector.name}`;\n\n const isAllSelected = (_collectors: (SidecarCollectorPairType|Collector)[], _selected: string[]) => _collectors.length > 0 && _collectors.length === _selected.length;\n\n useEffect(() => {\n const selectAllCheckbox = selectAllInput ? selectAllInput.current.getInputDOMNode() : undefined;\n\n if (selectAllCheckbox) {\n // Set the select all checkbox as indeterminate if some but not all items are selected.\n selectAllCheckbox.indeterminate = selected.length > 0 && !isAllSelected(collectors, selected);\n }\n }, [selectAllInput, collectors, selected]);\n\n const handleConfigurationChange = (selectedSidecars: SidecarCollectorPairType[], selectedConfigurations: Configuration[], doneCallback: () => void) => {\n onConfigurationChange(selectedSidecars, selectedConfigurations, doneCallback);\n };\n\n const handleProcessAction = (action: string, selectedSidecarCollectorPairs: SidecarCollectorPairType[], doneCallback: () => void) => {\n const selectedCollectors = {};\n\n selectedSidecarCollectorPairs.forEach(({ sidecar, collector }) => {\n if (selectedCollectors[sidecar.node_id]) {\n selectedCollectors[sidecar.node_id].push(collector.id);\n } else {\n selectedCollectors[sidecar.node_id] = [collector.id];\n }\n });\n\n onProcessAction(action, selectedCollectors, doneCallback);\n };\n\n const toggleSelectAll = (event) => {\n const newSelection = (event.target.checked\n ? enabledCollectors.map(({ sidecar, collector }) => sidecarCollectorId(sidecar, collector))\n : []);\n\n setSelected(newSelection);\n };\n\n const formatHeader = (selectedSidecarCollectorPairs: SidecarCollectorPairType[]) => {\n const selectedItems = selected.length;\n\n let headerMenu;\n\n if (selectedItems === 0) {\n headerMenu = (\n \n );\n } else {\n headerMenu = (\n \n );\n }\n\n return (\n \n {headerMenu} \n\n \n \n );\n };\n\n const handleSidecarCollectorSelect = (collectorId: string) => (event) => {\n const newSelection = (event.target.checked\n ? union(selected, [collectorId])\n : without(selected, collectorId));\n\n setSelected(newSelection);\n };\n\n const formatSidecarNoCollectors = (sidecar: SidecarSummary) => (\n \n \n \n \n \n {sidecar.node_name} \n {sidecar.node_id}\n
\n \n
\n \n \n \n No collectors compatible with {sidecar.node_details.operating_system}\n \n \n
\n \n \n );\n\n const formatCollector = (sidecar: SidecarSummary, collector: Collector, _configurations: Configuration[]) => {\n const collectorId = sidecarCollectorId(sidecar, collector);\n const configAssignmentIDs = sidecar.assignments.filter((assignment) => assignment.collector_id === collector.id).map((assignment) => assignment.configuration_id);\n const configAssignments = _configurations.filter((config) => configAssignmentIDs.includes(config.id)).sort((c1, c2) => naturalSortIgnoreCase(c1.name, c2.name));\n let collectorStatus = { status: null, message: null, id: null };\n\n try {\n const result = sidecar.node_details.status.collectors.find((c) => c.collector_id === collector.id);\n\n if (result) {\n collectorStatus = {\n status: result.status,\n message: result.message,\n id: result.collector_id,\n };\n }\n } catch (e) {\n // Do nothing\n }\n\n return (\n \n \n \n \n \n \n {(configAssignments.length > 0) && (\n \n )}\n \n \n \n \n {(configAssignments.length > 0)\n && (\n {\n setSelected([collectorId]);\n setShowConfigurationModal(true);\n }} />\n )}\n {configAssignments.map((configuration) => (\n \n \n \n \n \n ),\n )}\n \n \n
\n );\n };\n\n const formatSidecar = (sidecar: SidecarSummary, _collectors: Collector[], _configurations: Configuration[]) => {\n if (_collectors.length === 0) {\n return formatSidecarNoCollectors(sidecar);\n }\n\n return (\n \n \n \n \n \n {sidecar.node_name} \n {sidecar.node_id} {!sidecar.active && — inactive}\n \n \n
\n {_collectors.map((collector) => formatCollector(sidecar, collector, _configurations))}\n \n \n );\n };\n\n const handleSearch = (_query?: string, callback?: () => void) => {\n onQueryChange(_query, callback);\n };\n\n const handleReset = () => {\n onQueryChange();\n };\n\n const handleResetFilters = () => {\n onFilter();\n };\n\n const handlePageChange = (page: number, pageSize: number) => {\n setSelected([]);\n onPageChange(page, pageSize);\n };\n\n const selectedSidecarCollectorPairs = selected.map((selectedSidecarCollectorId) => sidecarCollectorPairs.find(\n ({ sidecar, collector }) => sidecarCollectorId(sidecar, collector) === selectedSidecarCollectorId),\n ).filter((sidecarCollectorPair) => !!sidecarCollectorPair?.collector && !!sidecarCollectorPair?.sidecar);\n\n let formattedCollectors;\n\n if (sidecarCollectorPairs.length === 0) {\n formattedCollectors = (\n \n {sidecarCollectorPairs.length === 0 ? 'There are no collectors to display' : 'Filters do not match any collectors'}\n \n );\n } else {\n const sidecars = uniq(sidecarCollectorPairs.map(({ sidecar }) => sidecar));\n\n formattedCollectors = sidecars.map((sidecarToMap) => {\n const sidecarCollectors = sidecarCollectorPairs\n .filter(({ sidecar }) => sidecar.node_id === sidecarToMap.node_id)\n .map(({ collector }) => collector)\n .filter((collector) => !isEmpty(collector));\n\n return formatSidecar(sidecarToMap, sidecarCollectors, configurations);\n });\n }\n\n return (\n \n \n \n \n \n \n \n {formatHeader(selectedSidecarCollectorPairs)}\n {formattedCollectors}\n \n \n
\n \n {\n setSelected([]);\n setShowConfigurationModal(false);\n }} />\n \n );\n};\n\nCollectorsAdministration.propTypes = {\n sidecarCollectorPairs: PropTypes.array.isRequired,\n collectors: PropTypes.array.isRequired,\n configurations: PropTypes.array.isRequired,\n pagination: PropTypes.object.isRequired,\n query: PropTypes.string.isRequired,\n filters: PropTypes.object.isRequired,\n onPageChange: PropTypes.func.isRequired,\n onFilter: PropTypes.func.isRequired,\n onQueryChange: PropTypes.func.isRequired,\n onConfigurationChange: PropTypes.func.isRequired,\n onProcessAction: PropTypes.func.isRequired,\n};\n\nexport default CollectorsAdministration;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport PropTypes from 'prop-types';\nimport Reflux from 'reflux';\nimport cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport { Spinner } from 'components/common';\nimport withPaginationQueryParameter from 'components/common/withPaginationQueryParameter';\nimport { CollectorConfigurationsActions, CollectorConfigurationsStore } from 'stores/sidecars/CollectorConfigurationsStore';\nimport { CollectorsActions, CollectorsStore } from 'stores/sidecars/CollectorsStore';\nimport { SidecarsActions } from 'stores/sidecars/SidecarsStore';\nimport { SidecarsAdministrationActions, SidecarsAdministrationStore } from 'stores/sidecars/SidecarsAdministrationStore';\n\nimport CollectorsAdministration, { PAGE_SIZES } from './CollectorsAdministration';\n\nconst CollectorsAdministrationContainer = createReactClass({\n // eslint-disable-next-line react/no-unused-class-component-methods\n propTypes: {\n nodeId: PropTypes.string,\n paginationQueryParameter: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connect(CollectorsStore, 'collectors'), Reflux.connect(SidecarsAdministrationStore, 'sidecars'), Reflux.connect(CollectorConfigurationsStore, 'configurations')],\n\n getDefaultProps() {\n return {\n nodeId: undefined,\n };\n },\n\n componentDidMount() {\n this.loadData(this.props.nodeId);\n this.interval = setInterval(this.reloadSidecars, 5000);\n },\n\n componentDidUpdate(prevProps) {\n if (prevProps.nodeId !== this.props.nodeId) {\n // This means the user changed the URL, so we don't need to keep the previous state.\n this.loadData(this.props.nodeId);\n }\n },\n\n componentWillUnmount() {\n if (this.interval) {\n clearInterval(this.interval);\n }\n },\n\n handlePageChange(page, pageSize) {\n const { filters, query } = this.state.sidecars;\n\n SidecarsAdministrationActions.list({ query, filters, page, pageSize });\n },\n\n handleFilter(property, value) {\n const { resetPage, pageSize } = this.props.paginationQueryParameter;\n const { filters, query } = this.state.sidecars;\n let newFilters;\n\n if (property) {\n newFilters = cloneDeep(filters);\n newFilters[property] = value;\n } else {\n newFilters = {};\n }\n\n resetPage();\n\n SidecarsAdministrationActions.list({ query, filters: newFilters, pageSize, page: 1 });\n },\n\n handleQueryChange(query = '', callback = () => {}) {\n const { resetPage, pageSize } = this.props.paginationQueryParameter;\n const { filters } = this.state.sidecars;\n\n resetPage();\n\n SidecarsAdministrationActions.list({ query, filters, pageSize, page: 1 }).finally(callback);\n },\n\n handleConfigurationChange(selectedSidecars, selectedConfigurations, doneCallback) {\n SidecarsActions.assignConfigurations(selectedSidecars, selectedConfigurations).then((response) => {\n doneCallback();\n const { query, filters } = this.state.sidecars;\n const { page, pageSize } = this.props.paginationQueryParameter;\n\n SidecarsAdministrationActions.list({ query, filters, pageSize, page });\n\n return response;\n });\n },\n\n handleProcessAction(action, selectedCollectors, doneCallback) {\n SidecarsAdministrationActions.setAction(action, selectedCollectors).then((response) => {\n doneCallback();\n\n return response;\n });\n },\n\n reloadSidecars() {\n if (this.state.sidecars) {\n SidecarsAdministrationActions.refreshList();\n }\n },\n\n loadData(nodeId) {\n const { page, pageSize } = this.props.paginationQueryParameter;\n const query = nodeId ? `node_id:${nodeId}` : '';\n\n CollectorsActions.all();\n SidecarsAdministrationActions.list({ query, page, pageSize });\n CollectorConfigurationsActions.all();\n },\n\n render() {\n const { collectors, configurations, sidecars } = this.state;\n\n if (!collectors || !collectors.collectors || !sidecars || !sidecars.sidecars || !configurations || !configurations.configurations) {\n return ;\n }\n\n const sidecarCollectors = [];\n\n sidecars.sidecars\n .sort((s1, s2) => naturalSortIgnoreCase(s1.node_name, s2.node_name))\n .forEach((sidecar) => {\n const compatibleCollectorIds = sidecar.collectors;\n\n if (isEmpty(compatibleCollectorIds)) {\n sidecarCollectors.push({ collector: {}, sidecar: sidecar });\n\n return;\n }\n\n compatibleCollectorIds\n .map((id) => find(collectors.collectors, { id: id }))\n .forEach((compatibleCollector) => {\n sidecarCollectors.push({ collector: compatibleCollector, sidecar: sidecar });\n });\n });\n\n return (\n \n );\n },\n});\n\nexport default withPaginationQueryParameter(CollectorsAdministrationContainer, { pageSizes: PAGE_SIZES });\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport { Col, Row } from 'components/bootstrap';\nimport DocsHelper from 'util/DocsHelper';\nimport { DocumentTitle, PageHeader } from 'components/common';\nimport CollectorsAdministrationContainer from 'components/sidecars/administration/CollectorsAdministrationContainer';\nimport SidecarsPageNavigation from 'components/sidecars/common/SidecarsPageNavigation';\nimport useQuery from 'routing/useQuery';\n\nconst SidecarAdministrationPage = () => {\n const { node_id: nodeId } = useQuery();\n\n return (\n \n \n \n \n The Graylog collectors can reliably forward contents of log files or Windows EventLog from your servers.\n \n \n\n \n \n \n \n
\n \n );\n};\n\nexport default SidecarAdministrationPage;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\nimport URI from 'urijs';\n\nimport * as URLUtils from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport fetch, { fetchPeriodically } from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const SidecarsActions = singletonActions(\n 'core.Sidecars',\n () => Reflux.createActions({\n listPaginated: { asyncResult: true },\n getSidecar: { asyncResult: true },\n getSidecarActions: { asyncResult: true },\n restartCollector: { asyncResult: true },\n assignConfigurations: { asyncResult: true },\n }),\n);\n\nexport const SidecarsStore = singletonStore(\n 'core.Sidecars',\n () => Reflux.createStore({\n listenables: [SidecarsActions],\n sourceUrl: '/sidecars',\n sidecars: undefined,\n onlyActive: undefined,\n pagination: {\n count: undefined,\n page: undefined,\n pageSize: undefined,\n total: undefined,\n },\n query: undefined,\n sort: {\n field: undefined,\n order: undefined,\n },\n\n init() {\n this.propagateChanges();\n },\n\n propagateChanges() {\n this.trigger({\n sidecars: this.sidecars,\n query: this.query,\n onlyActive: this.onlyActive,\n pagination: this.pagination,\n sort: this.sort,\n });\n },\n\n listPaginated({ query = '', page = 1, pageSize = 50, onlyActive = false, sortField = 'node_name', order = 'asc' }) {\n const search = {\n query: query,\n page: page,\n per_page: pageSize,\n only_active: onlyActive,\n sort: sortField,\n order: order,\n };\n\n const uri = URI(this.sourceUrl).search(search).toString();\n const promise = fetchPeriodically('GET', URLUtils.qualifyUrl(uri));\n\n promise.then(\n (response) => {\n this.sidecars = response.sidecars;\n this.query = response.query;\n this.onlyActive = response.only_active;\n\n this.pagination = {\n total: response.pagination.total,\n count: response.pagination.count,\n page: response.pagination.page,\n pageSize: response.pagination.per_page,\n };\n\n this.sort = {\n field: response.sort,\n order: response.order,\n };\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(error.status === 400 ? error.responseMessage : `Fetching Sidecars failed with status: ${error.message}`,\n 'Could not retrieve Sidecars');\n },\n );\n\n SidecarsActions.listPaginated.promise(promise);\n },\n\n getSidecar(sidecarId) {\n const promise = fetchPeriodically('GET', URLUtils.qualifyUrl(`${this.sourceUrl}/${sidecarId}`));\n\n promise.catch((error) => {\n let errorMessage = `Fetching Sidecar failed with status: ${error}`;\n\n if (error.status === 404) {\n errorMessage = `Unable to find a sidecar with ID <${sidecarId}>, maybe it was inactive for too long.`;\n }\n\n UserNotification.error(errorMessage, 'Could not retrieve Sidecar');\n });\n\n SidecarsActions.getSidecar.promise(promise);\n },\n\n restartCollector(sidecarId, collector) {\n const action = {};\n\n action.collector = collector;\n action.properties = {};\n action.properties.restart = true;\n const promise = fetch('PUT', URLUtils.qualifyUrl(`${this.sourceUrl}/${sidecarId}/action`), [action]);\n\n promise\n .catch(\n (error) => {\n UserNotification.error(`Restarting Sidecar failed with status: ${error}`,\n 'Could not restart Sidecar');\n },\n );\n\n SidecarsActions.restartCollector.promise(promise);\n },\n\n getSidecarActions(sidecarId) {\n const promise = fetchPeriodically('GET', URLUtils.qualifyUrl(`${this.sourceUrl}/${sidecarId}/action`));\n\n promise\n .catch(\n (error) => {\n UserNotification.error(`Fetching Sidecar actions failed with status: ${error}`,\n 'Could not retrieve Sidecar actions');\n },\n );\n\n SidecarsActions.getSidecarActions.promise(promise);\n },\n\n toConfigurationAssignmentDto(nodeId, collectorId, configurationId) {\n return {\n node_id: nodeId,\n collector_id: collectorId,\n configuration_id: configurationId,\n };\n },\n\n assignConfigurations(sidecars, configurations) {\n const nodes = sidecars.map(({ sidecar, collector }) => {\n // Add all previous assignments, but the one that was changed\n const assignments = sidecar.assignments.filter((assignment) => assignment.collector_id !== collector.id);\n\n // Add new assignments\n configurations.forEach((configuration) => {\n assignments.push({ collector_id: collector.id, configuration_id: configuration.id });\n });\n\n return { node_id: sidecar.node_id, assignments: assignments };\n });\n\n const promise = fetch('PUT', URLUtils.qualifyUrl(`${this.sourceUrl}/configurations`), { nodes: nodes });\n\n promise\n .then(\n (response) => {\n UserNotification.success('', `Configuration change for ${sidecars.length} collectors requested`);\n\n return response;\n },\n (error) => {\n UserNotification.error(`Fetching Sidecar actions failed with status: ${error}`,\n 'Could not retrieve Sidecar actions');\n },\n );\n\n SidecarsActions.assignConfigurations.promise(promise);\n },\n }),\n);\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseIntersection;\n","var isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nmodule.exports = castArrayLikeObject;\n","var baseAssignValue = require('./_baseAssignValue'),\n createAggregator = require('./_createAggregator');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\nvar countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n});\n\nmodule.exports = countBy;\n","var arrayMap = require('./_arrayMap'),\n baseIntersection = require('./_baseIntersection'),\n baseRest = require('./_baseRest'),\n castArrayLikeObject = require('./_castArrayLikeObject');\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n});\n\nmodule.exports = intersection;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\nvar lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n});\n\nmodule.exports = lowerCase;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./CommonSidecarStyles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./CommonSidecarStyles.css\";\n export default content && content.locals ? content.locals : undefined;\n"],"names":["___CSS_LOADER_EXPORT___","module","queryExamples","fieldMap","queryHelp","SidecarSearchForm","query","onSearch","onReset","children","options","update","messageProp","status","lastSeen","id","toUserTimezone","useUserDateTime","message","text","SidecarStatusEnum","lastSeenDateTime","icon","className","statusCode","stringStatus","SidecarsAdministrationActions","singleton","SidecarsAdministrationStore","page","pageSize","filters","body","promise","URLUtils","response","error","UserNotification","action","collectors","formattedCollectors","sidecarId","ConfigurationContainer","ConfigurationTable","NoConfigurationMessage","AddNewConfiguration","SecondaryText","TableRow","disabled","StickyTableRowFooter","IconTableCell","CollectorTableCell","ConfigurationTableCell","UnselectTableCell","ModalTitle","ModalSubTitle","StyledSearchForm","InfoContainer","Alert","getFilterQuery","_query","CollectorConfigurationModal","show","onCancel","onSave","selectedCollectorName","selectedSidecarNames","initialAssignedConfigs","initialPartiallyAssignedConfigs","unassignedConfigs","getRowData","searchQuery","setSearchQuery","selectedConfigurations","setSelectedConfigurations","partiallySelectedConfigurations","setPartiallySelectedConfigurations","isNotDirty","rows","configuration","configName","collector","sidecars","autoAssignedTags","selected","partiallySelected","secondaryText","sidecar","isAssignedFromTags","name","ColorLabel","CollectorIndicator","q","Routes","ConfigurationSummary","CollectorConfigurationModalContainer","configurations","selectedSidecarCollectorPairs","onConfigurationSelectionChange","nextAssignedConfigurations","setNextAssignedConfigurations","nextPartiallyAssignedConfigurations","setNextPartiallyAssignedConfigurations","showConfirmModal","setShowConfirmModal","sendTelemetry","useSendTelemetry","getSelectedLogCollector","sortConfigurationNames","configs","config1","config2","config","getAssignedConfigurations","_selectedSidecarCollectorPairs","selectedCollector","filteredAssignments","accumulator","assignment","getUnassignedConfigurations","assignedConfigurations","filteredConfigs","getFullyAndPartiallyAssignments","_assignedConfigurations","occurrences","fullyAssignedConfigs","partiallyAssignedConfigs","cancelConfigurationChange","confirmConfigurationChange","assignedConfigurationsToSave","sidecarCollectorPair","selectedLogCollector","assignments","assignmentsToKeep","assignedConfigurationsToKeep","getConfiguration","getCollector","getSidecars","getAssignedFromTags","configId","collectorId","assigned_from_tags","renderConfigurationSummary","sidecarsSummary","numberOfSidecarsSummary","summary","MemoizedConfigurationModal","unassignedConfigurations","PROCESS_ACTIONS","CollectorProcessControl","onProcessAction","selectedAction","setSelectedAction","isConfigurationWarningHidden","setIsConfigurationWarningHidden","showModal","setShowModal","resetSelectedAction","handleProcessActionSelect","processAction","hideCallback","cancelProcessAction","confirmProcessAction","hideConfigurationWarning","renderSummaryContent","selectedSidecars","renderConfigurationWarning","renderProcessActionSummary","allHaveConfigurationsAssigned","collector_id","shouldShowConfigurationWarning","actionFormatter","ConfigurationButton","CollectorsAdministrationActions","showConfigurationModal","setShowConfigurationModal","onCancelConfigurationModal","selectedLogCollectorsNames","disableConfigButton","getConfigButtonTooltip","value","callback","filter","collectorMapper","collectorItems","c1","c2","collectorFormatter","collectorFilter","c","configurationMapper","configurationItems","configurationFormatter","configurationId","configurationFilter","operatingSystems","os","osFilter","key","statusFilter","statusFormatter","type","filterKey","onResetFilters","HeaderComponentsWrapper","theme","CollectorEntry","DisabledCollector","AdditionalContent","AlignedInformation","PaginatedListContainer","StyledColorLabelContainer","PAGE_SIZES","CollectorsAdministration","onPageChange","pagination","sidecarCollectorPairs","onFilter","onQueryChange","onConfigurationChange","setSelected","selectAllInput","enabledCollectors","sidecarCollectorId","isAllSelected","_collectors","_selected","selectAllCheckbox","handleConfigurationChange","doneCallback","handleProcessAction","selectedCollectors","toggleSelectAll","event","newSelection","formatHeader","selectedItems","headerMenu","handleSidecarCollectorSelect","formatSidecarNoCollectors","OperatingSystemIcon","formatCollector","_configurations","configAssignmentIDs","configAssignments","collectorStatus","result","StatusIndicator","formatSidecar","handleSearch","handleReset","handleResetFilters","handlePageChange","selectedSidecarCollectorId","sidecarToMap","sidecarCollectors","CollectorsAdministrationContainer","CollectorsStore","CollectorConfigurationsStore","prevProps","property","resetPage","newFilters","nodeId","s1","s2","compatibleCollectorIds","compatibleCollector","withPaginationQueryParameter","useQuery","SidecarsPageNavigation","DocsHelper","SidecarsActions","SidecarsStore","onlyActive","sortField","order","search","uri","errorMessage","nodes","SetCache","arrayIncludes","arrayIncludesWith","arrayMap","baseUnary","cacheHas","nativeMin","baseIntersection","arrays","iteratee","comparator","includes","length","othLength","othIndex","caches","maxLength","array","index","seen","outer","computed","cache","isArrayLikeObject","castArrayLikeObject","baseAssignValue","createAggregator","objectProto","hasOwnProperty","countBy","baseRest","intersection","mapped","createCompounder","lowerCase","word"],"sourceRoot":""}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy