aboutsummaryrefslogtreecommitdiffstats
path: root/dist/comments-comments-app.js.map
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-04-17 00:17:29 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2024-04-17 20:10:34 +0200
commitfd7906d5403f0b3e2c53f6643dbf25fadc334b2c (patch)
tree78b412497fc81092452c8ac9cc22964477567499 /dist/comments-comments-app.js.map
parent6c9ca8b0253c67c499cf233235a2aad8b72f48ce (diff)
downloadnextcloud-server-fd7906d5403f0b3e2c53f6643dbf25fadc334b2c.tar.gz
nextcloud-server-fd7906d5403f0b3e2c53f6643dbf25fadc334b2c.zip
chore: Compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'dist/comments-comments-app.js.map')
-rw-r--r--dist/comments-comments-app.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/dist/comments-comments-app.js.map b/dist/comments-comments-app.js.map
index a6812e84579..3fb5ae4ec1e 100644
--- a/dist/comments-comments-app.js.map
+++ b/dist/comments-comments-app.js.map
@@ -1 +1 @@
-{"version":3,"file":"comments-comments-app.js?v=7ba9915d37fcbd7a2604","mappings":";UAAIA,ECAAC,EACAC,gHCmBJ,MCpB0G,EDoB1G,CACEC,KAAM,cACNC,MAAO,CAAC,SACRC,MAAO,CACLC,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,qBEff,SAXgB,OACd,GCRW,WAAkB,IAAIG,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAOF,EAAII,GAAG,CAACC,YAAY,oCAAoCC,MAAM,CAAC,eAAcN,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOc,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,MAAM,QAASD,EAAO,IAAI,OAAOR,EAAIU,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAON,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACI,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,uNAAuN,CAAEN,EAAS,MAAEE,EAAG,QAAQ,CAACF,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIP,UAAUO,EAAIa,UACnuB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBmF,ECoBnH,CACEvB,KAAM,uBACNC,MAAO,CAAC,SACRC,MAAO,CACLC,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,MCff,GAXgB,OACd,GCRW,WAAkB,IAAIG,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAOF,EAAII,GAAG,CAACC,YAAY,+CAA+CC,MAAM,CAAC,eAAcN,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOc,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,MAAM,QAASD,EAAO,IAAI,OAAOR,EAAIU,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAON,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACI,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,sHAAsH,CAAEN,EAAS,MAAEE,EAAG,QAAQ,CAACF,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIP,UAAUO,EAAIa,UAC7oB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBqF,ECoBrH,CACEvB,KAAM,yBACNC,MAAO,CAAC,SACRC,MAAO,CACLC,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,MCff,GAXgB,OACd,GCRW,WAAkB,IAAIG,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAOF,EAAII,GAAG,CAACC,YAAY,iDAAiDC,MAAM,CAAC,eAAcN,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOc,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,MAAM,QAASD,EAAO,IAAI,OAAOR,EAAIU,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAON,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACI,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,wLAAwL,CAAEN,EAAS,MAAEE,EAAG,QAAQ,CAACF,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIP,UAAUO,EAAIa,UACjtB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBhC,0FCwBA,MAAMC,EAAc,WACnB,OAAOC,EAAAA,EAAAA,IAAkB,eAC1B,ECAO,SAASC,EAAmBC,GAAmB,IAAZC,EAAMC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAClD,MAAMG,EAAS,IAAIC,UACnB,IAAIC,EAAUP,EACd,IAAK,IAAIQ,EAAI,EAAGA,EAAIP,EAAQO,IAC3BD,EAAUF,EAAOI,gBAAgBF,EAAS,aAAaG,gBAAgBC,YAExE,OAAOJ,CACR,2BCNA,MAAMK,GAASC,EAAAA,EAAAA,IAAahB,KAGtBiB,EAAcC,IAClBH,EAAOE,WAAW,CAEhB,mBAAoB,iBAEpBE,aAAcD,QAAAA,EAAS,IACvB,GAIJE,EAAAA,EAAAA,IAAqBH,GACrBA,GAAWI,EAAAA,EAAAA,OAEX,UCnBA,GAAeC,WAAAA,MACbC,OAAO,YACPC,aACAC,uBCCF,SACC/C,MAAO,CACNgD,GAAI,CACH9C,KAAMK,OACNF,QAAS,MAEV4C,QAAS,CACR/C,KAAMC,OACNE,QAAS,IAEV6C,WAAY,CACXhD,KAAM,CAACC,OAAQI,QACf4C,UAAU,GAEXC,aAAc,CACblD,KAAMC,OACNE,QAAS,UAIXgD,KAAIA,KACI,CACNC,SAAS,EACTC,SAAS,EACTC,SAAS,IAIXC,QAAS,CAERC,MAAAA,GACCjD,KAAK8C,SAAU,CAChB,EACAI,YAAAA,GACClD,KAAK8C,SAAU,EAEf9C,KAAKmD,mBAAmBnD,KAAKwC,QAC9B,EACA,mBAAMY,CAAcZ,GACnBxC,KAAK+C,SAAU,EACf,UCpCYM,eAAeV,EAAcF,EAAYa,EAAWd,GAClE,MAAMe,EAAc,CAAC,GAAIZ,EAAcF,EAAYa,GAAWE,KAAK,KAEnE,aAAa5B,EAAO6B,cAAcF,EAAaG,OAAOC,OAAO,CAC5DC,OAAQ,YACRhB,KAAM,8KAAFiB,OAMarB,EAAO,iFAK1B,CDqBUsB,CAAY9D,KAAK2C,aAAc3C,KAAKyC,WAAYzC,KAAKuC,GAAIC,GAC/DuB,EAAOC,MAAM,iBAAkB,CAAErB,aAAc3C,KAAK2C,aAAcF,WAAYzC,KAAKyC,WAAYF,GAAIvC,KAAKuC,GAAIC,YAC5GxC,KAAKQ,MAAM,iBAAkBgC,GAC7BxC,KAAK8C,SAAU,CAChB,CAAE,MAAOmB,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,uDACxBC,EAAQH,MAAMA,EACf,CAAE,QACDjE,KAAK+C,SAAU,CAChB,CACD,EAGAsB,gBAAAA,GACCrE,KAAK6C,SAAU,EACf,MAAMyB,EAAgBC,WAAWvE,KAAKwE,SAAUC,EAAAA,KAChDC,EAAAA,EAAAA,IAASP,EAAE,WAAY,oBAAoB,KAC1CQ,aAAaL,GACbtE,KAAK6C,SAAU,CAAK,GAEtB,EACA,cAAM2B,GACL,UE5DYnB,eAAeV,EAAcF,EAAYa,GACvD,MAAMC,EAAc,CAAC,GAAIZ,EAAcF,EAAYa,GAAWE,KAAK,WAG7D5B,EAAOgD,WAAWrB,EACzB,CFwDUsB,CAAc7E,KAAK2C,aAAc3C,KAAKyC,WAAYzC,KAAKuC,IAC7DwB,EAAOC,MAAM,kBAAmB,CAAErB,aAAc3C,KAAK2C,aAAcF,WAAYzC,KAAKyC,WAAYF,GAAIvC,KAAKuC,KACzGvC,KAAKQ,MAAM,SAAUR,KAAKuC,GAC3B,CAAE,MAAO0B,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,yDACxBC,EAAQH,MAAMA,GACdjE,KAAK6C,SAAU,CAChB,CACD,EAGA,kBAAMiC,CAAatC,GAClBxC,KAAK+C,SAAU,EACf,IACC,MAAMgC,QGtEK1B,eAAeV,EAAcF,EAAYD,GACvD,MAAMwC,EAAe,CAAC,GAAIrC,EAAcF,GAAYe,KAAK,KAEnDyB,QAAiBC,EAAAA,EAAMC,KAAKtE,IAAgBmE,EAAc,CAC/DI,kBAAkBC,EAAAA,EAAAA,MAAiBC,YACnCC,SAASF,EAAAA,EAAAA,MAAiBG,IAC1BC,UAAW,QACXC,kBAAmB,IAAIC,MAAQC,cAC/BpD,UACAqD,WAAYlD,EACZmD,KAAM,YAKDvC,EAAcyB,EAAe,IADjBe,SAASd,EAASe,QAAQ,oBAAoBC,MAAM,KAAKC,OAIrEC,QAAgBvE,EAAOwE,KAAK7C,EAAa,CAC9C8C,SAAS,IAGJ9G,EAAQ4G,EAAQvD,KAAKrD,MAO3B,OAHAA,EAAM6F,iBAAmBrE,EAAmBxB,EAAM6F,iBAAkB,GACpE7F,EAAMiD,QAAUzB,EAAmBxB,EAAMiD,QAAS,GAE3C2D,EAAQvD,IAChB,CHwC6B0D,CAAWtG,KAAK2C,aAAc3C,KAAKyC,WAAYD,GACxEuB,EAAOC,MAAM,qBAAsB,CAAErB,aAAc3C,KAAK2C,aAAcF,WAAYzC,KAAKyC,WAAYsC,eACnG/E,KAAKQ,MAAM,MAAOuE,GAGlB/E,KAAKQ,MAAM,iBAAkB,IAC7BR,KAAKuG,aAAe,EACrB,CAAE,MAAOtC,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,yDACxBC,EAAQH,MAAMA,EACf,CAAE,QACDjE,KAAK+C,SAAU,CAChB,CACD,IIvHiL,ECsInL,CACA1D,KAAA,UAEAmH,WAAA,CACAC,WAAA,IACAC,eAAA,IACAC,UAAA,IACAC,kBAAA,IACAC,SAAA,IACAC,SAAA,IACAC,WAAA,IACAC,sBAbAA,IAAA,0DAeAC,OAAA,CAAAC,EAAAA,GAAAC,GAEAC,cAAA,EAEA7H,MAAA,CACA6F,iBAAA,CACA3F,KAAAC,OACAgD,UAAA,GAEA6C,QAAA,CACA9F,KAAAC,OACAgD,UAAA,GAEAgD,iBAAA,CACAjG,KAAAC,OACAE,QAAA,MAMAyH,OAAA,CACA5H,KAAA6H,QACA1H,SAAA,GAMA2H,aAAA,CACA9H,KAAA+H,SACA9E,UAAA,GAGA+E,IAAA,CACAhI,KAAAC,OACAE,QAAA,QAIAgD,KAAAA,KACA,CACA8E,UAAA,EAGAnB,aAAA,GACAoB,WAAA,IAIAC,SAAA,CAOAC,YAAAA,GACA,OAAAxC,EAAAA,EAAAA,MAAAG,MAAA,KAAAD,OACA,EAOAuC,eAAAA,GACA,YAAAC,eACA,GAEA,KAAAC,cAAA,KAAAzB,aACA,EAEAwB,cAAAA,GACA,YAAAxB,cAAA,UAAAA,aAAA0B,MACA,EAKAC,SAAAA,GACA,OAAAvC,KAAAwC,MAAA,KAAAzC,iBACA,GAGA0C,MAAA,CAEA5F,OAAAA,CAAAA,GACA,KAAAW,mBAAAX,EACA,GAGA6F,WAAAA,GAEA,KAAAlF,mBAAA,KAAAX,QACA,EAEAQ,QAAA,CACAmB,EAAA,KAOAhB,kBAAAA,CAAAX,GACA,KAAA+D,aAAA/D,EAAA8F,WACA,KAAAX,WAAA,CACA,EAKAY,QAAAA,GAEA,aAAAhC,aAAA0B,OAIA,YAAAZ,QACA,KAAAvC,aAAA,KAAAyB,aAAA0B,aACA,KAAAO,WAAA,KAEA,KAAAC,MAAApB,OAAAqB,IAAAC,OAAA,UAIA,KAAAvF,cAAA,KAAAmD,aAAA0B,OACA,EAEAW,QAAAA,GACA,KAAAlB,UAAA,CACA,2IC5QImB,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,OCP1D,SAXgB,OACd,GZTW,WAAkB,IAAIpJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAGF,EAAI0H,IAAI,CAAC2B,WAAW,CAAC,CAAC/J,KAAK,OAAOgK,QAAQ,SAASrI,OAAQjB,EAAI8C,QAASyG,WAAW,aAAa7B,IAAI,YAAYrH,YAAY,UAAUmJ,MAAM,CAAC,mBAAoBxJ,EAAIgD,UAAU,CAAC9C,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,WAAW,CAACG,YAAY,kBAAkBC,MAAM,CAAC,eAAeN,EAAIqF,iBAAiB,KAAOrF,EAAIwF,QAAQ,KAAO,OAAO,GAAGxF,EAAIW,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACH,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACL,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIqF,qBAAqBrF,EAAIW,GAAG,KAAMX,EAAI8H,cAAgB9H,EAAIwC,KAAOxC,EAAIgD,QAAS9C,EAAG,YAAY,CAACG,YAAY,oBAAoB,CAAGL,EAAI+C,QAAyb7C,EAAG,iBAAiB,CAACI,MAAM,CAAC,KAAO,cAAcC,GAAG,CAAC,MAAQP,EAAImD,eAAe,CAACnD,EAAIW,GAAG,eAAeX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,gBAAgB,gBAAhkB,CAAClE,EAAG,iBAAiB,CAACI,MAAM,CAAC,qBAAoB,EAAK,KAAO,eAAeC,GAAG,CAAC,MAAQP,EAAIkD,SAAS,CAAClD,EAAIW,GAAG,iBAAiBX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,iBAAiB,kBAAkBpE,EAAIW,GAAG,KAAKT,EAAG,qBAAqBF,EAAIW,GAAG,KAAKT,EAAG,iBAAiB,CAACI,MAAM,CAAC,qBAAoB,EAAK,KAAO,eAAeC,GAAG,CAAC,MAAQP,EAAIsE,mBAAmB,CAACtE,EAAIW,GAAG,iBAAiBX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,mBAAmB,oBAAoL,GAAGpE,EAAIa,KAAKb,EAAIW,GAAG,KAAMX,EAAIwC,IAAMxC,EAAIgD,QAAS9C,EAAG,MAAM,CAACG,YAAY,uCAAwCL,EAAI2F,iBAAkBzF,EAAG,aAAa,CAACG,YAAY,qBAAqBC,MAAM,CAAC,UAAYN,EAAImI,UAAU,kBAAiB,KAAQnI,EAAIa,MAAM,GAAGb,EAAIW,GAAG,KAAMX,EAAIsH,QAAUtH,EAAI+C,QAAS7C,EAAG,OAAO,CAACG,YAAY,kBAAkBE,GAAG,CAAC,OAAS,SAASC,GAAQA,EAAOiJ,gBAAiB,IAAI,CAACvJ,EAAG,MAAM,CAACG,YAAY,yBAAyB,CAACH,EAAG,wBAAwB,CAACwJ,IAAI,SAASpJ,MAAM,CAAC,gBAAgBN,EAAIwH,aAAa,iBAAmBxH,EAAIgD,QAAQ,MAAQhD,EAAIsH,OAAStH,EAAIoE,EAAE,WAAY,eAAiBpE,EAAIoE,EAAE,WAAY,gBAAgB,YAAcpE,EAAIoE,EAAE,WAAY,qBAAqB,MAAQpE,EAAIwG,aAAa,YAAYxG,EAAI2J,SAAS,mBAAmB,oCAAoCpJ,GAAG,CAAC,eAAeP,EAAIoD,mBAAmB,OAASpD,EAAIwI,YAAYxI,EAAIW,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACH,EAAG,WAAW,CAACI,MAAM,CAAC,KAAO,yBAAyB,cAAc,SAAS,aAAaN,EAAIoE,EAAE,WAAY,gBAAgB,SAAWpE,EAAIgI,gBAAgBzH,GAAG,CAAC,MAAQP,EAAIwI,UAAUoB,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAE/J,EAAIgD,QAAS9C,EAAG,OAAO,CAACG,YAAY,uBAAuBH,EAAG,aAAa,CAACI,MAAM,CAAC,KAAO,MAAM,EAAE0J,OAAM,IAAO,MAAK,EAAM,eAAe,IAAI,GAAGhK,EAAIW,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,8BAA8BC,MAAM,CAAC,GAAK,qCAAqC,CAACN,EAAIW,GAAG,aAAaX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,oDAAoD,gBAAgBlE,EAAG,MAAM,CAACG,YAAY,mBAAmBmJ,MAAM,CAAC,6BAA8BxJ,EAAI2H,UAAUsC,SAAS,CAAC,UAAYjK,EAAIY,GAAGZ,EAAI+H,kBAAkBxH,GAAG,CAAC,MAAQP,EAAI6I,eAC56F,GACsB,IYUpB,EACA,KACA,WACA,MAI8B,uBCdhC,SAAeqB,EAAAA,EAAAA,IAAgB,CAC3B1K,MAAO,CACHkD,WAAY,CACRhD,KAAMK,OACN4C,UAAU,GAEdC,aAAc,CACVlD,KAAMC,OACNE,QAAS,UAGjBgD,KAAIA,KACO,CACHsH,WAAY,CACR9E,kBAAkBC,EAAAA,EAAAA,MAAiBC,YACnCC,SAASF,EAAAA,EAAAA,MAAiBG,IAC1BqE,IAAK,UAETH,SAAU,CAAC,IAGnB1G,QAAS,CAOL,kBAAMuE,CAAa4C,EAAQC,GACvB,MAAM,KAAExH,SAAesC,EAAAA,EAAMmF,KAAIC,EAAAA,EAAAA,IAAe,yBAA0B,CACtEC,OAAQ,CACJJ,SACAK,SAAU,QACVC,OAAQzK,KAAKyC,WACbiI,OAAQ,8BACRC,OAAOC,EAAAA,EAAAA,GAAU,WAAY,6BAKrC,OADAhI,EAAKiI,IAAIjI,KAAKkI,SAAQC,IAAU/K,KAAK0J,SAASqB,EAAKxI,IAAMwI,CAAI,IACtDX,EAAS1G,OAAOsH,OAAOhL,KAAK0J,UACvC,EAOAuB,eAAAA,CAAgBC,GAaZ,OAZAxH,OAAOsH,OAAOE,GACTC,OACAL,SAAQM,IAAW,IAAAC,EACpBrL,KAAK0J,SAAS0B,EAAQE,WAAa,CAE/BC,KAAM,YACNhJ,GAAI6I,EAAQE,UACZE,MAAOJ,EAAQK,mBACfC,OAAQ,QACRC,SAAyB,QAAhBN,GAAAhG,EAAAA,EAAAA,aAAgB,IAAAgG,OAAA,EAAhBA,EAAkB7F,OAAQ4F,EAAQE,UAC9C,IAEEtL,KAAK0J,QAChB,qBChER,MAAMkC,GAAe,CACjB,YAAa,CAAC,wBAAwB,GACtC,YAAa,CAAC,iBAAiB,GAC/B,YAAa,CAAC,eAAyB,GACvC,YAAa,CAAC,cAAc,GAC5B,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,gBAAgB,GAAM,GACpC,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,UAAU,GACxB,YAAa,CAAC,UAAU,GACxB,YAAa,CAAC,yBAAyB,GACvC,YAAa,CAAC,WAAW,GACzB,WAAY,CAAC,+BAA+B,GAC5C,aAAc,CAAC,aAAa,IAI1BC,GAAeC,GAAMA,EAAEC,QAAQ,YAAa,QAI5CC,GAAkBC,GAAWA,EAAOzI,KAAK,IAOlC0I,GAAa,CAACC,EAAMC,KAC7B,MAAMC,EAAMD,EAEZ,GAAyB,MAArBD,EAAKG,OAAOD,GACZ,MAAM,IAAIE,MAAM,6BAGpB,MAAMN,EAAS,GACTO,EAAO,GACb,IAAIhL,EAAI6K,EAAM,EACVI,GAAW,EACXC,GAAQ,EACRC,GAAW,EACXC,GAAS,EACTC,EAASR,EACTS,EAAa,GACjBC,EAAO,KAAOvL,EAAI2K,EAAKhL,QAAQ,CAC3B,MAAM6L,EAAIb,EAAKG,OAAO9K,GACtB,GAAW,MAANwL,GAAmB,MAANA,GAAcxL,IAAM6K,EAAM,EAA5C,CAKA,GAAU,MAANW,GAAaP,IAAaE,EAAU,CACpCE,EAASrL,EAAI,EACb,KACJ,CAEA,GADAiL,GAAW,EACD,OAANO,GACKL,EADT,CAQA,GAAU,MAANK,IAAcL,EAEd,IAAK,MAAOM,GAAMC,EAAMC,EAAGC,MAAS1J,OAAO2J,QAAQzB,IAC/C,GAAIO,EAAKmB,WAAWL,EAAKzL,GAAI,CAEzB,GAAIsL,EACA,MAAO,CAAC,MAAM,EAAOX,EAAKhL,OAASkL,GAAK,GAE5C7K,GAAKyL,EAAI9L,OACLiM,EACAZ,EAAKe,KAAKL,GAEVjB,EAAOsB,KAAKL,GAChBR,EAAQA,GAASS,EACjB,SAASJ,CACb,CAIRJ,GAAW,EACPG,GAGIE,EAAIF,EACJb,EAAOsB,KAAK1B,GAAYiB,GAAc,IAAMjB,GAAYmB,IAEnDA,IAAMF,GACXb,EAAOsB,KAAK1B,GAAYmB,IAE5BF,EAAa,GACbtL,KAKA2K,EAAKmB,WAAW,KAAM9L,EAAI,IAC1ByK,EAAOsB,KAAK1B,GAAYmB,EAAI,MAC5BxL,GAAK,GAGL2K,EAAKmB,WAAW,IAAK9L,EAAI,IACzBsL,EAAaE,EACbxL,GAAK,IAITyK,EAAOsB,KAAK1B,GAAYmB,IACxBxL,IAhDA,MALQmL,GAAW,EACXnL,GATR,MAHIoL,GAAS,EACTpL,GAgER,CACA,GAAIqL,EAASrL,EAGT,MAAO,CAAC,IAAI,EAAO,GAAG,GAI1B,IAAKyK,EAAO9K,SAAWqL,EAAKrL,OACxB,MAAO,CAAC,MAAM,EAAOgL,EAAKhL,OAASkL,GAAK,GAM5C,GAAoB,IAAhBG,EAAKrL,QACa,IAAlB8K,EAAO9K,QACP,SAASqM,KAAKvB,EAAO,MACpBW,EAAQ,CAET,MAAO,EAjHOd,EAgHiB,IAArBG,EAAO,GAAG9K,OAAe8K,EAAO,GAAGwB,OAAO,GAAKxB,EAAO,GAhH5CH,EAAEC,QAAQ,2BAA4B,UAiHjC,EAAOc,EAASR,GAAK,EAClD,CAlHiB,IAACP,EAmHlB,MAAM4B,EAAU,KAAOd,EAAS,IAAM,IAAMZ,GAAeC,GAAU,IAC/D0B,EAAQ,KAAOf,EAAS,GAAK,KAAOZ,GAAeQ,GAAQ,IAMjE,MAAO,CALMP,EAAO9K,QAAUqL,EAAKrL,OAC7B,IAAMuM,EAAU,IAAMC,EAAQ,IAC9B1B,EAAO9K,OACHuM,EACAC,EACIjB,EAAOG,EAASR,GAAK,EAAK,8BC7IrC,MAAM,GAAY,CAACuB,EAAGC,EAAShF,EAAU,CAAC,KAC7CiF,GAAmBD,MAEdhF,EAAQkF,WAAmC,MAAtBF,EAAQvB,OAAO,KAGlC,IAAI0B,GAAUH,EAAShF,GAASoF,MAAML,IAI3CM,GAAe,wBACfC,GAAkBC,GAASC,IAAOA,EAAEf,WAAW,MAAQe,EAAEC,SAASF,GAClEG,GAAqBH,GAASC,GAAMA,EAAEC,SAASF,GAC/CI,GAAwBJ,IAC1BA,EAAMA,EAAIK,cACFJ,IAAOA,EAAEf,WAAW,MAAQe,EAAEI,cAAcH,SAASF,IAE3DM,GAA2BN,IAC7BA,EAAMA,EAAIK,cACFJ,GAAMA,EAAEI,cAAcH,SAASF,IAErCO,GAAgB,aAChBC,GAAmBP,IAAOA,EAAEf,WAAW,MAAQe,EAAEQ,SAAS,KAC1DC,GAAsBT,GAAY,MAANA,GAAmB,OAANA,GAAcA,EAAEQ,SAAS,KAClEE,GAAY,UACZC,GAAeX,GAAY,MAANA,GAAmB,OAANA,GAAcA,EAAEf,WAAW,KAC7D2B,GAAS,QACTC,GAAYb,GAAmB,IAAbA,EAAElN,SAAiBkN,EAAEf,WAAW,KAClD6B,GAAed,GAAmB,IAAbA,EAAElN,QAAsB,MAANkN,GAAmB,OAANA,EACpDe,GAAW,yBACXC,GAAmB,EAAEC,EAAIlB,EAAM,OACjC,MAAMmB,EAAQC,GAAgB,CAACF,IAC/B,OAAKlB,GAELA,EAAMA,EAAIK,cACFJ,GAAMkB,EAAMlB,IAAMA,EAAEI,cAAcH,SAASF,IAFxCmB,CAE4C,EAErDE,GAAsB,EAAEH,EAAIlB,EAAM,OACpC,MAAMmB,EAAQG,GAAmB,CAACJ,IAClC,OAAKlB,GAELA,EAAMA,EAAIK,cACFJ,GAAMkB,EAAMlB,IAAMA,EAAEI,cAAcH,SAASF,IAFxCmB,CAE4C,EAErDI,GAAgB,EAAEL,EAAIlB,EAAM,OAC9B,MAAMmB,EAAQG,GAAmB,CAACJ,IAClC,OAAQlB,EAAeC,GAAMkB,EAAMlB,IAAMA,EAAEC,SAASF,GAAtCmB,CAA0C,EAEtDK,GAAa,EAAEN,EAAIlB,EAAM,OAC3B,MAAMmB,EAAQC,GAAgB,CAACF,IAC/B,OAAQlB,EAAeC,GAAMkB,EAAMlB,IAAMA,EAAEC,SAASF,GAAtCmB,CAA0C,EAEtDC,GAAkB,EAAEF,MACtB,MAAMO,EAAMP,EAAGnO,OACf,OAAQkN,GAAMA,EAAElN,SAAW0O,IAAQxB,EAAEf,WAAW,IAAI,EAElDoC,GAAqB,EAAEJ,MACzB,MAAMO,EAAMP,EAAGnO,OACf,OAAQkN,GAAMA,EAAElN,SAAW0O,GAAa,MAANxB,GAAmB,OAANA,CAAU,EAGvDyB,GAAsC,iBAAZC,IAAwBA,GAC1B,iBAAhBA,GAAQC,KACdD,GAAQC,KACRD,GAAQC,IAAIC,gCACZF,GAAQG,SACV,QAON,GAAUC,IAD6B,UAApBL,GAJD,KACA,IAKX,MAAMM,GAAWC,OAAO,eAC/B,GAAUD,SAAWA,GACrB,MAAME,GAAU,CACZ,IAAK,CAAEC,KAAM,YAAaC,MAAO,aACjC,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAIzBC,GAAQ,OAERC,GAAOD,GAAQ,KASfE,GAAW7E,GAAMA,EAAE7F,MAAM,IAAI2K,QAAO,CAACC,EAAK7D,KAC5C6D,EAAI7D,IAAK,EACF6D,IACR,CAAC,GAEEC,GAAaH,GAAQ,mBAErBI,GAAqBJ,GAAQ,OAEnC,GAAUK,OADY,CAACnD,EAAShF,EAAU,CAAC,IAAO+E,GAAM,GAAUA,EAAGC,EAAShF,GAE9E,MAAMuF,GAAM,CAAC6C,EAAGC,EAAI,CAAC,IAAMxN,OAAOC,OAAO,CAAC,EAAGsN,EAAGC,GA2BhD,GAAUC,SA1BeC,IACrB,IAAKA,GAAsB,iBAARA,IAAqB1N,OAAO2N,KAAKD,GAAKjQ,OACrD,OAAO,GAEX,MAAMmQ,EAAO,GAEb,OAAO5N,OAAOC,QADJ,CAACiK,EAAGC,EAAShF,EAAU,CAAC,IAAMyI,EAAK1D,EAAGC,EAASO,GAAIgD,EAAKvI,KAC1C,CACpBmF,UAAW,cAAwBsD,EAAKtD,UACpC,WAAAuD,CAAY1D,EAAShF,EAAU,CAAC,GAC5B2I,MAAM3D,EAASO,GAAIgD,EAAKvI,GAC5B,CACA,eAAOsI,CAAStI,GACZ,OAAOyI,EAAKH,SAAS/C,GAAIgD,EAAKvI,IAAUmF,SAC5C,GAEJyD,SAAU,CAAC3F,EAAGjD,EAAU,CAAC,IAAMyI,EAAKG,SAAS3F,EAAGsC,GAAIgD,EAAKvI,IACzD6I,OAAQ,CAAC5F,EAAGjD,EAAU,CAAC,IAAMyI,EAAKI,OAAO5F,EAAGsC,GAAIgD,EAAKvI,IACrDmI,OAAQ,CAACnD,EAAShF,EAAU,CAAC,IAAMyI,EAAKN,OAAOnD,EAASO,GAAIgD,EAAKvI,IACjEsI,SAAWtI,GAAYyI,EAAKH,SAAS/C,GAAIgD,EAAKvI,IAC9C8I,OAAQ,CAAC9D,EAAShF,EAAU,CAAC,IAAMyI,EAAKK,OAAO9D,EAASO,GAAIgD,EAAKvI,IACjE+I,YAAa,CAAC/D,EAAShF,EAAU,CAAC,IAAMyI,EAAKM,YAAY/D,EAASO,GAAIgD,EAAKvI,IAC3EoF,MAAO,CAAC4D,EAAMhE,EAAShF,EAAU,CAAC,IAAMyI,EAAKrD,MAAM4D,EAAMhE,EAASO,GAAIgD,EAAKvI,IAC3EsH,IAAKmB,EAAKnB,IACVC,SAAUA,IACZ,EAaC,MAAMwB,GAAc,CAAC/D,EAAShF,EAAU,CAAC,KAC5CiF,GAAmBD,GAGfhF,EAAQiJ,UAAY,mBAAmBtE,KAAKK,GAErC,CAACA,GAEL,GAAOA,IAElB,GAAU+D,YAAcA,GACxB,MACM9D,GAAsBD,IACxB,GAAuB,iBAAZA,EACP,MAAM,IAAIkE,UAAU,mBAExB,GAAIlE,EAAQ1M,OALW,MAMnB,MAAM,IAAI4Q,UAAU,sBACxB,EAcJ,GAAUJ,OADY,CAAC9D,EAAShF,EAAU,CAAC,IAAM,IAAImF,GAAUH,EAAShF,GAAS8I,SAUjF,GAAU1D,MARW,CAAC4D,EAAMhE,EAAShF,EAAU,CAAC,KAC5C,MAAMmJ,EAAK,IAAIhE,GAAUH,EAAShF,GAKlC,OAJAgJ,EAAOA,EAAKb,QAAO3C,GAAK2D,EAAG/D,MAAMI,KAC7B2D,EAAGnJ,QAAQoJ,SAAWJ,EAAK1Q,QAC3B0Q,EAAKtE,KAAKM,GAEPgE,CAAI,EAIf,MACMK,GAAY,0BACZC,GAAgBrG,GAAMA,EAAEC,QAAQ,2BAA4B,QAC3D,MAAMiC,GACTnF,QACAgI,IACAhD,QACAuE,qBACAC,SACAzF,OACAzG,QACAmM,MACAC,wBACAC,QACAC,QACAC,UACAC,OACAC,UACA1C,SACA2C,mBACAC,OACA,WAAAvB,CAAY1D,EAAShF,EAAU,CAAC,GAC5BiF,GAAmBD,GACnBhF,EAAUA,GAAW,CAAC,EACtB7I,KAAK6I,QAAUA,EACf7I,KAAK6N,QAAUA,EACf7N,KAAKkQ,SAAWrH,EAAQqH,UAAYJ,GACpC9P,KAAK4S,UAA8B,UAAlB5S,KAAKkQ,SACtBlQ,KAAKoS,uBACCvJ,EAAQuJ,uBAAuD,IAA/BvJ,EAAQkK,mBAC1C/S,KAAKoS,uBACLpS,KAAK6N,QAAU7N,KAAK6N,QAAQ9B,QAAQ,MAAO,MAE/C/L,KAAKuS,0BAA4B1J,EAAQ0J,wBACzCvS,KAAK8S,OAAS,KACd9S,KAAK4M,QAAS,EACd5M,KAAKqS,WAAaxJ,EAAQwJ,SAC1BrS,KAAKmG,SAAU,EACfnG,KAAKsS,OAAQ,EACbtS,KAAKwS,UAAY3J,EAAQ2J,QACzBxS,KAAK2S,SAAW3S,KAAK6I,QAAQ8J,OAC7B3S,KAAK6S,wBAC8BzR,IAA/ByH,EAAQgK,mBACFhK,EAAQgK,sBACL7S,KAAK4S,YAAa5S,KAAK2S,QACpC3S,KAAKyS,QAAU,GACfzS,KAAK0S,UAAY,GACjB1S,KAAK6Q,IAAM,GAEX7Q,KAAKgT,MACT,CACA,QAAAC,GACI,GAAIjT,KAAK6I,QAAQqK,eAAiBlT,KAAK6Q,IAAI1P,OAAS,EAChD,OAAO,EAEX,IAAK,MAAM0M,KAAW7N,KAAK6Q,IACvB,IAAK,MAAMsC,KAAQtF,EACf,GAAoB,iBAATsF,EACP,OAAO,EAGnB,OAAO,CACX,CACA,KAAAnP,IAASoP,GAAK,CACd,IAAAJ,GACI,MAAMnF,EAAU7N,KAAK6N,QACfhF,EAAU7I,KAAK6I,QAErB,IAAKA,EAAQkF,WAAmC,MAAtBF,EAAQvB,OAAO,GAErC,YADAtM,KAAKmG,SAAU,GAGnB,IAAK0H,EAED,YADA7N,KAAKsS,OAAQ,GAIjBtS,KAAKqT,cAELrT,KAAKyS,QAAU,IAAI,IAAIa,IAAItT,KAAK4R,gBAC5B/I,EAAQ7E,QACRhE,KAAKgE,MAAQ,IAAIuP,IAAS,GAAQtP,SAASsP,IAE/CvT,KAAKgE,MAAMhE,KAAK6N,QAAS7N,KAAKyS,SAU9B,MAAMe,EAAexT,KAAKyS,QAAQgB,KAAI3H,GAAK9L,KAAK0T,WAAW5H,KAC3D9L,KAAK0S,UAAY1S,KAAK2T,WAAWH,GACjCxT,KAAKgE,MAAMhE,KAAK6N,QAAS7N,KAAK0S,WAE9B,IAAI7B,EAAM7Q,KAAK0S,UAAUe,KAAI,CAAC3H,EAAGsH,EAAGQ,KAChC,GAAI5T,KAAK4S,WAAa5S,KAAK6S,mBAAoB,CAE3C,MAAMgB,IAAiB,KAAT/H,EAAE,IACH,KAATA,EAAE,IACQ,MAATA,EAAE,IAAeoG,GAAU1E,KAAK1B,EAAE,KAClCoG,GAAU1E,KAAK1B,EAAE,KAChBgI,EAAU,WAAWtG,KAAK1B,EAAE,IAClC,GAAI+H,EACA,MAAO,IAAI/H,EAAE2B,MAAM,EAAG,MAAO3B,EAAE2B,MAAM,GAAGgG,KAAIM,GAAM/T,KAAKmI,MAAM4L,MAE5D,GAAID,EACL,MAAO,CAAChI,EAAE,MAAOA,EAAE2B,MAAM,GAAGgG,KAAIM,GAAM/T,KAAKmI,MAAM4L,KAEzD,CACA,OAAOjI,EAAE2H,KAAIM,GAAM/T,KAAKmI,MAAM4L,IAAI,IAMtC,GAJA/T,KAAKgE,MAAMhE,KAAK6N,QAASgD,GAEzB7Q,KAAK6Q,IAAMA,EAAIG,QAAOlF,IAA2B,IAAtBA,EAAEkI,SAAQ,KAEjChU,KAAK4S,UACL,IAAK,IAAIpR,EAAI,EAAGA,EAAIxB,KAAK6Q,IAAI1P,OAAQK,IAAK,CACtC,MAAMoM,EAAI5N,KAAK6Q,IAAIrP,GACN,KAAToM,EAAE,IACO,KAATA,EAAE,IACuB,MAAzB5N,KAAK0S,UAAUlR,GAAG,IACF,iBAAToM,EAAE,IACT,YAAYJ,KAAKI,EAAE,MACnBA,EAAE,GAAK,IAEf,CAEJ5N,KAAKgE,MAAMhE,KAAK6N,QAAS7N,KAAK6Q,IAClC,CAMA,UAAA8C,CAAWjB,GAEP,GAAI1S,KAAK6I,QAAQoL,WACb,IAAK,IAAIzS,EAAI,EAAGA,EAAIkR,EAAUvR,OAAQK,IAClC,IAAK,IAAI0S,EAAI,EAAGA,EAAIxB,EAAUlR,GAAGL,OAAQ+S,IACb,OAApBxB,EAAUlR,GAAG0S,KACbxB,EAAUlR,GAAG0S,GAAK,KAKlC,MAAM,kBAAEC,EAAoB,GAAMnU,KAAK6I,QAavC,OAZIsL,GAAqB,GAErBzB,EAAY1S,KAAKoU,qBAAqB1B,GACtCA,EAAY1S,KAAKqU,sBAAsB3B,IAIvCA,EAFKyB,GAAqB,EAEdnU,KAAKsU,iBAAiB5B,GAGtB1S,KAAKuU,0BAA0B7B,GAExCA,CACX,CAEA,yBAAA6B,CAA0B7B,GACtB,OAAOA,EAAUe,KAAIe,IACjB,IAAIC,GAAM,EACV,MAAQ,KAAOA,EAAKD,EAAMR,QAAQ,KAAMS,EAAK,KAAK,CAC9C,IAAIjT,EAAIiT,EACR,KAAwB,OAAjBD,EAAMhT,EAAI,IACbA,IAEAA,IAAMiT,GACND,EAAME,OAAOD,EAAIjT,EAAIiT,EAE7B,CACA,OAAOD,CAAK,GAEpB,CAEA,gBAAAF,CAAiB5B,GACb,OAAOA,EAAUe,KAAIe,GAeO,KAdxBA,EAAQA,EAAM5D,QAAO,CAACC,EAAKsC,KACvB,MAAMwB,EAAO9D,EAAIA,EAAI1P,OAAS,GAC9B,MAAa,OAATgS,GAA0B,OAATwB,EACV9D,EAEE,OAATsC,GACIwB,GAAiB,OAATA,GAA0B,MAATA,GAAyB,OAATA,GACzC9D,EAAI3K,MACG2K,IAGfA,EAAItD,KAAK4F,GACFtC,EAAG,GACX,KACU1P,OAAe,CAAC,IAAMqT,GAE3C,CACA,oBAAAI,CAAqBJ,GACZK,MAAMC,QAAQN,KACfA,EAAQxU,KAAK0T,WAAWc,IAE5B,IAAIO,GAAe,EACnB,EAAG,CAGC,GAFAA,GAAe,GAEV/U,KAAKuS,wBAAyB,CAC/B,IAAK,IAAI/Q,EAAI,EAAGA,EAAIgT,EAAMrT,OAAS,EAAGK,IAAK,CACvC,MAAMoM,EAAI4G,EAAMhT,GAEN,IAANA,GAAiB,KAANoM,GAAyB,KAAb4G,EAAM,IAEvB,MAAN5G,GAAmB,KAANA,IACbmH,GAAe,EACfP,EAAME,OAAOlT,EAAG,GAChBA,IAER,CACiB,MAAbgT,EAAM,IACW,IAAjBA,EAAMrT,QACQ,MAAbqT,EAAM,IAA2B,KAAbA,EAAM,KAC3BO,GAAe,EACfP,EAAMtO,MAEd,CAEA,IAAI8O,EAAK,EACT,MAAQ,KAAOA,EAAKR,EAAMR,QAAQ,KAAMgB,EAAK,KAAK,CAC9C,MAAMpH,EAAI4G,EAAMQ,EAAK,GACjBpH,GAAW,MAANA,GAAmB,OAANA,GAAoB,OAANA,IAChCmH,GAAe,EACfP,EAAME,OAAOM,EAAK,EAAG,GACrBA,GAAM,EAEd,CACJ,OAASD,GACT,OAAwB,IAAjBP,EAAMrT,OAAe,CAAC,IAAMqT,CACvC,CAmBA,oBAAAJ,CAAqB1B,GACjB,IAAIqC,GAAe,EACnB,EAAG,CACCA,GAAe,EAEf,IAAK,IAAIP,KAAS9B,EAAW,CACzB,IAAI+B,GAAM,EACV,MAAQ,KAAOA,EAAKD,EAAMR,QAAQ,KAAMS,EAAK,KAAK,CAC9C,IAAIQ,EAAMR,EACV,KAA0B,OAAnBD,EAAMS,EAAM,IAEfA,IAIAA,EAAMR,GACND,EAAME,OAAOD,EAAK,EAAGQ,EAAMR,GAE/B,IAAIS,EAAOV,EAAMC,EAAK,GACtB,MAAM7G,EAAI4G,EAAMC,EAAK,GACfU,EAAKX,EAAMC,EAAK,GACtB,GAAa,OAATS,EACA,SACJ,IAAKtH,GACK,MAANA,GACM,OAANA,IACCuH,GACM,MAAPA,GACO,OAAPA,EACA,SAEJJ,GAAe,EAEfP,EAAME,OAAOD,EAAI,GACjB,MAAMW,EAAQZ,EAAM/G,MAAM,GAC1B2H,EAAMX,GAAM,KACZ/B,EAAUnF,KAAK6H,GACfX,GACJ,CAEA,IAAKzU,KAAKuS,wBAAyB,CAC/B,IAAK,IAAI/Q,EAAI,EAAGA,EAAIgT,EAAMrT,OAAS,EAAGK,IAAK,CACvC,MAAMoM,EAAI4G,EAAMhT,GAEN,IAANA,GAAiB,KAANoM,GAAyB,KAAb4G,EAAM,IAEvB,MAAN5G,GAAmB,KAANA,IACbmH,GAAe,EACfP,EAAME,OAAOlT,EAAG,GAChBA,IAER,CACiB,MAAbgT,EAAM,IACW,IAAjBA,EAAMrT,QACQ,MAAbqT,EAAM,IAA2B,KAAbA,EAAM,KAC3BO,GAAe,EACfP,EAAMtO,MAEd,CAEA,IAAI8O,EAAK,EACT,MAAQ,KAAOA,EAAKR,EAAMR,QAAQ,KAAMgB,EAAK,KAAK,CAC9C,MAAMpH,EAAI4G,EAAMQ,EAAK,GACrB,GAAIpH,GAAW,MAANA,GAAmB,OAANA,GAAoB,OAANA,EAAY,CAC5CmH,GAAe,EACf,MACMM,EADiB,IAAPL,GAA8B,OAAlBR,EAAMQ,EAAK,GACf,CAAC,KAAO,GAChCR,EAAME,OAAOM,EAAK,EAAG,KAAMK,GACN,IAAjBb,EAAMrT,QACNqT,EAAMjH,KAAK,IACfyH,GAAM,CACV,CACJ,CACJ,CACJ,OAASD,GACT,OAAOrC,CACX,CAQA,qBAAA2B,CAAsB3B,GAClB,IAAK,IAAIlR,EAAI,EAAGA,EAAIkR,EAAUvR,OAAS,EAAGK,IACtC,IAAK,IAAI0S,EAAI1S,EAAI,EAAG0S,EAAIxB,EAAUvR,OAAQ+S,IAAK,CAC3C,MAAMoB,EAAUtV,KAAKuV,WAAW7C,EAAUlR,GAAIkR,EAAUwB,IAAKlU,KAAKuS,yBAC7D+C,IAEL5C,EAAUlR,GAAK8T,EACf5C,EAAUwB,GAAK,GACnB,CAEJ,OAAOxB,EAAU1B,QAAOyD,GAAMA,EAAGtT,QACrC,CACA,UAAAoU,CAAWtE,EAAGC,EAAGsE,GAAe,GAC5B,IAAIC,EAAK,EACLC,EAAK,EACLC,EAAS,GACTC,EAAQ,GACZ,KAAOH,EAAKxE,EAAE9P,QAAUuU,EAAKxE,EAAE/P,QAC3B,GAAI8P,EAAEwE,KAAQvE,EAAEwE,GACZC,EAAOpI,KAAe,MAAVqI,EAAgB1E,EAAEwE,GAAMzE,EAAEwE,IACtCA,IACAC,SAEC,GAAIF,GAA0B,OAAVvE,EAAEwE,IAAgBvE,EAAEwE,KAAQzE,EAAEwE,EAAK,GACxDE,EAAOpI,KAAK0D,EAAEwE,IACdA,SAEC,GAAID,GAA0B,OAAVtE,EAAEwE,IAAgBzE,EAAEwE,KAAQvE,EAAEwE,EAAK,GACxDC,EAAOpI,KAAK2D,EAAEwE,IACdA,SAEC,GAAc,MAAVzE,EAAEwE,KACPvE,EAAEwE,KACD1V,KAAK6I,QAAQgN,KAAQ3E,EAAEwE,GAAIpI,WAAW,MAC7B,OAAV4D,EAAEwE,GAQD,IAAc,MAAVxE,EAAEwE,KACPzE,EAAEwE,KACDzV,KAAK6I,QAAQgN,KAAQ5E,EAAEwE,GAAInI,WAAW,MAC7B,OAAV2D,EAAEwE,GASF,OAAO,EARP,GAAc,MAAVG,EACA,OAAO,EACXA,EAAQ,IACRD,EAAOpI,KAAK2D,EAAEwE,IACdD,IACAC,GAIJ,KArBoB,CAChB,GAAc,MAAVE,EACA,OAAO,EACXA,EAAQ,IACRD,EAAOpI,KAAK0D,EAAEwE,IACdA,IACAC,GACJ,CAkBJ,OAAOzE,EAAE9P,SAAW+P,EAAE/P,QAAUwU,CACpC,CACA,WAAAtC,GACI,GAAIrT,KAAKqS,SACL,OACJ,MAAMxE,EAAU7N,KAAK6N,QACrB,IAAIjB,GAAS,EACTkJ,EAAe,EACnB,IAAK,IAAItU,EAAI,EAAGA,EAAIqM,EAAQ1M,QAAgC,MAAtB0M,EAAQvB,OAAO9K,GAAYA,IAC7DoL,GAAUA,EACVkJ,IAEAA,IACA9V,KAAK6N,QAAUA,EAAQJ,MAAMqI,IACjC9V,KAAK4M,OAASA,CAClB,CAMA,QAAAmJ,CAASC,EAAMnI,EAAS2E,GAAU,GAC9B,MAAM3J,EAAU7I,KAAK6I,QAGrB,GAAI7I,KAAK4S,UAAW,CAChB,MAAMqD,EAAsB,KAAZD,EAAK,IACL,KAAZA,EAAK,IACO,MAAZA,EAAK,IACc,iBAAZA,EAAK,IACZ,YAAYxI,KAAKwI,EAAK,IACpBE,EAA4B,KAAfrI,EAAQ,IACR,KAAfA,EAAQ,IACO,MAAfA,EAAQ,IACc,iBAAfA,EAAQ,IACf,YAAYL,KAAKK,EAAQ,IAC7B,GAAIoI,GAAWC,EAAY,CACvB,MAAMC,EAAKH,EAAK,GACVI,EAAKvI,EAAQ,GACfsI,EAAG1H,gBAAkB2H,EAAG3H,gBACxBuH,EAAK,GAAKI,EAElB,MACK,GAAIF,GAAiC,iBAAZF,EAAK,GAAiB,CAChD,MAAMI,EAAKvI,EAAQ,GACbsI,EAAKH,EAAK,GACZI,EAAG3H,gBAAkB0H,EAAG1H,gBACxBZ,EAAQ,GAAKsI,EACbtI,EAAUA,EAAQJ,MAAM,GAEhC,MACK,GAAIwI,GAAiC,iBAAfpI,EAAQ,GAAiB,CAChD,MAAMsI,EAAKH,EAAK,GACZG,EAAG1H,gBAAkBZ,EAAQ,GAAGY,gBAChCZ,EAAQ,GAAKsI,EACbH,EAAOA,EAAKvI,MAAM,GAE1B,CACJ,CAGA,MAAM,kBAAE0G,EAAoB,GAAMnU,KAAK6I,QACnCsL,GAAqB,IACrB6B,EAAOhW,KAAK4U,qBAAqBoB,IAErChW,KAAKgE,MAAM,WAAYhE,KAAM,CAAEgW,OAAMnI,YACrC7N,KAAKgE,MAAM,WAAYgS,EAAK7U,OAAQ0M,EAAQ1M,QAC5C,IAAK,IAAIkV,EAAK,EAAGC,EAAK,EAAGC,EAAKP,EAAK7U,OAAQqV,EAAK3I,EAAQ1M,OAAQkV,EAAKE,GAAMD,EAAKE,EAAIH,IAAMC,IAAM,CAC5FtW,KAAKgE,MAAM,iBACX,IAAI4J,EAAIC,EAAQyI,GACZjI,EAAI2H,EAAKK,GAKb,GAJArW,KAAKgE,MAAM6J,EAASD,EAAGS,IAIb,IAANT,EACA,OAAO,EAGX,GAAIA,IAAMwC,GAAU,CAChBpQ,KAAKgE,MAAM,WAAY,CAAC6J,EAASD,EAAGS,IAuBpC,IAAIoI,EAAKJ,EACLK,EAAKJ,EAAK,EACd,GAAII,IAAOF,EAAI,CAQX,IAPAxW,KAAKgE,MAAM,iBAOJqS,EAAKE,EAAIF,IACZ,GAAiB,MAAbL,EAAKK,IACQ,OAAbL,EAAKK,KACHxN,EAAQgN,KAA8B,MAAvBG,EAAKK,GAAI/J,OAAO,GACjC,OAAO,EAEf,OAAO,CACX,CAEA,KAAOmK,EAAKF,GAAI,CACZ,IAAII,EAAYX,EAAKS,GAGrB,GAFAzW,KAAKgE,MAAM,mBAAoBgS,EAAMS,EAAI5I,EAAS6I,EAAIC,GAElD3W,KAAK+V,SAASC,EAAKvI,MAAMgJ,GAAK5I,EAAQJ,MAAMiJ,GAAKlE,GAGjD,OAFAxS,KAAKgE,MAAM,wBAAyByS,EAAIF,EAAII,IAErC,EAKP,GAAkB,MAAdA,GACc,OAAdA,IACE9N,EAAQgN,KAA+B,MAAxBc,EAAUrK,OAAO,GAAa,CAC/CtM,KAAKgE,MAAM,gBAAiBgS,EAAMS,EAAI5I,EAAS6I,GAC/C,KACJ,CAEA1W,KAAKgE,MAAM,4CACXyS,GAER,CAIA,SAAIjE,IAEAxS,KAAKgE,MAAM,2BAA4BgS,EAAMS,EAAI5I,EAAS6I,GACtDD,IAAOF,GAMnB,CAIA,IAAIK,EASJ,GARiB,iBAANhJ,GACPgJ,EAAMvI,IAAMT,EACZ5N,KAAKgE,MAAM,eAAgB4J,EAAGS,EAAGuI,KAGjCA,EAAMhJ,EAAEJ,KAAKa,GACbrO,KAAKgE,MAAM,gBAAiB4J,EAAGS,EAAGuI,KAEjCA,EACD,OAAO,CACf,CAYA,GAAIP,IAAOE,GAAMD,IAAOE,EAGpB,OAAO,EAEN,GAAIH,IAAOE,EAIZ,OAAO/D,EAEN,GAAI8D,IAAOE,EAKZ,OAAOH,IAAOE,EAAK,GAAkB,KAAbP,EAAKK,GAK7B,MAAM,IAAI9J,MAAM,OAGxB,CACA,WAAAqF,GACI,OAAOA,GAAY5R,KAAK6N,QAAS7N,KAAK6I,QAC1C,CACA,KAAAV,CAAM0F,GACFC,GAAmBD,GACnB,MAAMhF,EAAU7I,KAAK6I,QAErB,GAAgB,OAAZgF,EACA,OAAOuC,GACX,GAAgB,KAAZvC,EACA,MAAO,GAGX,IAAIgJ,EACAC,EAAW,MACVD,EAAIhJ,EAAQI,MAAMgB,KACnB6H,EAAWjO,EAAQgN,IAAM1G,GAAcD,IAEjC2H,EAAIhJ,EAAQI,MAAMC,KACxB4I,GAAYjO,EAAQ8J,OACd9J,EAAQgN,IACJnH,GACAF,GACJ3F,EAAQgN,IACJtH,GACAJ,IAAgB0I,EAAE,KAEtBA,EAAIhJ,EAAQI,MAAMmB,KACxB0H,GAAYjO,EAAQ8J,OACd9J,EAAQgN,IACJpG,GACAJ,GACJxG,EAAQgN,IACJlG,GACAC,IAAYiH,IAEhBA,EAAIhJ,EAAQI,MAAMU,KACxBmI,EAAWjO,EAAQgN,IAAM/G,GAAqBF,IAExCiI,EAAIhJ,EAAQI,MAAMc,OACxB+H,EAAW9H,IAEf,IAAI+H,EAAK,GACL9D,GAAW,EACXtG,GAAW,EAEf,MAAMqK,EAAmB,GACnBC,EAAgB,GACtB,IAEIT,EAFAU,GAAY,EACZxK,GAAQ,EAKRyK,EAAuC,MAAtBtJ,EAAQvB,OAAO,GAChC8K,EAAiBvO,EAAQgN,KAAOsB,EACpC,MAKME,EAAmBzJ,GAAsB,MAAhBA,EAAEtB,OAAO,GAClC,GACAzD,EAAQgN,IACJ,iCACA,UACJyB,EAAiB,KACnB,GAAIJ,EAAW,CAGX,OAAQA,GACJ,IAAK,IACDH,GAAMrG,GACNuC,GAAW,EACX,MACJ,IAAK,IACD8D,GAAMtG,GACNwC,GAAW,EACX,MACJ,QACI8D,GAAM,KAAOG,EAGrBlX,KAAKgE,MAAM,uBAAwBkT,EAAWH,GAC9CG,GAAY,CAChB,GAEJ,IAAK,IAAWlK,EAAPxL,EAAI,EAAMA,EAAIqM,EAAQ1M,SAAW6L,EAAIa,EAAQvB,OAAO9K,IAAKA,IAG9D,GAFAxB,KAAKgE,MAAM,eAAgB6J,EAASrM,EAAGuV,EAAI/J,GAEvCL,EAAJ,CAII,GAAU,MAANK,EACA,OAAO,EAGP8D,GAAW9D,KACX+J,GAAM,MAEVA,GAAM/J,EACNL,GAAW,CAEf,MACA,OAAQK,GAGJ,IAAK,IACD,OAAO,EAGX,IAAK,KACDsK,IACA3K,GAAW,EACX,SAGJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD3M,KAAKgE,MAAM,6BAA8B6J,EAASrM,EAAGuV,EAAI/J,GAIzDhN,KAAKgE,MAAM,yBAA0BkT,GACrCI,IACAJ,EAAYlK,EAIRnE,EAAQ0G,OACR+H,IACJ,SACJ,IAAK,IAAK,CACN,IAAKJ,EAAW,CACZH,GAAM,MACN,QACJ,CACA,MAAMQ,EAAU,CACZ9X,KAAMyX,EACNM,MAAOhW,EAAI,EACXiW,QAASV,EAAG5V,OACZoP,KAAMD,GAAQ4G,GAAW3G,KACzBC,MAAOF,GAAQ4G,GAAW1G,OAE9BxQ,KAAKgE,MAAMhE,KAAK6N,QAAS,KAAM0J,GAC/BP,EAAiBzJ,KAAKgK,GAEtBR,GAAMQ,EAAQhH,KAEQ,IAAlBgH,EAAQC,OAAgC,MAAjBD,EAAQ9X,OAC/B0X,GAAiB,EACjBJ,GAAMM,EAAgBxJ,EAAQJ,MAAMjM,EAAI,KAE5CxB,KAAKgE,MAAM,eAAgBkT,EAAWH,GACtCG,GAAY,EACZ,QACJ,CACA,IAAK,IAAK,CACN,MAAMK,EAAUP,EAAiBA,EAAiB7V,OAAS,GAC3D,IAAKoW,EAAS,CACVR,GAAM,MACN,QACJ,CACAC,EAAiB9Q,MAEjBoR,IACArE,GAAW,EACXuD,EAAKe,EAGLR,GAAMP,EAAGhG,MACO,MAAZgG,EAAG/W,MACHwX,EAAc1J,KAAK7J,OAAOC,OAAO6S,EAAI,CAAEkB,MAAOX,EAAG5V,UAErD,QACJ,CACA,IAAK,IAAK,CACN,MAAMoW,EAAUP,EAAiBA,EAAiB7V,OAAS,GAC3D,IAAKoW,EAAS,CACVR,GAAM,MACN,QACJ,CACAO,IACAP,GAAM,IAEgB,IAAlBQ,EAAQC,OAAgC,MAAjBD,EAAQ9X,OAC/B0X,GAAiB,EACjBJ,GAAMM,EAAgBxJ,EAAQJ,MAAMjM,EAAI,KAE5C,QACJ,CAEA,IAAK,IAED8V,IACA,MAAOK,EAAKC,EAAWC,EAAUC,GAAS5L,GAAW2B,EAASrM,GAC1DqW,GACAd,GAAMY,EACNjL,EAAQA,GAASkL,EACjBpW,GAAKqW,EAAW,EAChB5E,EAAWA,GAAY6E,GAGvBf,GAAM,MAEV,SACJ,IAAK,IACDA,GAAM,KAAO/J,EACb,SACJ,QAEIsK,IACAP,GAAM5E,GAAanF,GAU/B,IAAKwJ,EAAKQ,EAAiB9Q,MAAOsQ,EAAIA,EAAKQ,EAAiB9Q,MAAO,CAC/D,IAAI6R,EACJA,EAAOhB,EAAGtJ,MAAM+I,EAAGiB,QAAUjB,EAAGjG,KAAKpP,QACrCnB,KAAKgE,MAAMhE,KAAK6N,QAAS,eAAgBkJ,EAAIP,GAE7CuB,EAAOA,EAAKhM,QAAQ,6BAA6B,CAACqH,EAAG4E,EAAIC,KAChDA,IAEDA,EAAK,MAWFD,EAAKA,EAAKC,EAAK,OAE1BjY,KAAKgE,MAAM,iBAAkB+T,EAAMA,EAAMvB,EAAIO,GAC7C,MAAM5S,EAAgB,MAAZqS,EAAG/W,KAAeiR,GAAmB,MAAZ8F,EAAG/W,KAAegR,GAAQ,KAAO+F,EAAG/W,KACvEwT,GAAW,EACX8D,EAAKA,EAAGtJ,MAAM,EAAG+I,EAAGiB,SAAWtT,EAAI,MAAQ4T,CAC/C,CAEAT,IACI3K,IAEAoK,GAAM,QAIV,MAAMmB,EAAkBnH,GAAmBgG,EAAGzK,OAAO,IAMrD,IAAK,IAAI6L,EAAIlB,EAAc9V,OAAS,EAAGgX,GAAK,EAAGA,IAAK,CAChD,MAAMC,EAAKnB,EAAckB,GACnBE,EAAWtB,EAAGtJ,MAAM,EAAG2K,EAAGX,SAC1Ba,EAAUvB,EAAGtJ,MAAM2K,EAAGX,QAASW,EAAGV,MAAQ,GAChD,IAAIa,EAAUxB,EAAGtJ,MAAM2K,EAAGV,OAC1B,MAAMc,EAASzB,EAAGtJ,MAAM2K,EAAGV,MAAQ,EAAGU,EAAGV,OAASa,EAI5CE,EAAoBJ,EAASpS,MAAM,KAAK9E,OACxCuX,EAAmBL,EAASpS,MAAM,KAAK9E,OAASsX,EACtD,IAAIE,EAAaJ,EACjB,IAAK,IAAI/W,EAAI,EAAGA,EAAIkX,EAAkBlX,IAClCmX,EAAaA,EAAW5M,QAAQ,WAAY,IAEhDwM,EAAUI,EAEV5B,EAAKsB,EAAWC,EAAUC,GADC,KAAZA,EAAiB,YAAc,IACDC,CACjD,CAiBA,GAbW,KAAPzB,GAAa9D,IACb8D,EAAK,QAAUA,GAEfmB,IACAnB,GA5OuBI,EACrB,GACAC,EACI,iCACA,WAwOgBL,IAGtBlO,EAAQ8J,QAAWM,GAAapK,EAAQ+P,kBACxC3F,EAAWpF,EAAQgL,gBAAkBhL,EAAQY,gBAK5CwE,EACD,OAAoB8D,EA/4BFhL,QAAQ,SAAU,MAi5BxC,MAAM+M,GAASjQ,EAAQ8J,OAAS,IAAM,KAAOjG,EAAQ,IAAM,IAC3D,IACI,MAAM0B,EAAM0I,EACN,CACEiC,MAAOlL,EACPmL,KAAMjC,EACNvJ,KAAMsJ,GAER,CACEiC,MAAOlL,EACPmL,KAAMjC,GAEd,OAAOrT,OAAOC,OAAO,IAAIsV,OAAO,IAAMlC,EAAK,IAAK+B,GAAQ1K,EAE5D,CACA,MAAO8K,GAOH,OADAlZ,KAAKgE,MAAM,iBAAkBkV,GACtB,IAAID,OAAO,KACtB,CAEJ,CACA,MAAAtH,GACI,GAAI3R,KAAK8S,SAA0B,IAAhB9S,KAAK8S,OACpB,OAAO9S,KAAK8S,OAOhB,MAAMjC,EAAM7Q,KAAK6Q,IACjB,IAAKA,EAAI1P,OAEL,OADAnB,KAAK8S,QAAS,EACP9S,KAAK8S,OAEhB,MAAMjK,EAAU7I,KAAK6I,QACfsQ,EAAUtQ,EAAQoL,WAClBvD,GACA7H,EAAQgN,IA5hCH,0CAGE,0BA4hCPiD,EAAQjQ,EAAQ8J,OAAS,IAAM,GAOrC,IAAIoE,EAAKlG,EACJ4C,KAAI5F,IACL,MAAMuL,EAAKvL,EAAQ4F,KAAI7F,GAAkB,iBAANA,EAC7BuE,GAAavE,GACbA,IAAMwC,GACFA,GACAxC,EAAEoL,OAuBZ,OAtBAI,EAAGtO,SAAQ,CAAC8C,EAAGpM,KACX,MAAM0T,EAAOkE,EAAG5X,EAAI,GACdmT,EAAOyE,EAAG5X,EAAI,GAChBoM,IAAMwC,IAAYuE,IAASvE,UAGlBhP,IAATuT,OACavT,IAAT8T,GAAsBA,IAAS9E,GAC/BgJ,EAAG5X,EAAI,GAAK,UAAY2X,EAAU,QAAUjE,EAG5CkE,EAAG5X,GAAK2X,OAGE/X,IAAT8T,EACLkE,EAAG5X,EAAI,GAAKmT,EAAO,UAAYwE,EAAU,KAEpCjE,IAAS9E,KACdgJ,EAAG5X,EAAI,GAAKmT,EAAO,aAAewE,EAAU,OAASjE,EACrDkE,EAAG5X,EAAI,GAAK4O,IAChB,IAEGgJ,EAAGpI,QAAOpD,GAAKA,IAAMwC,KAAU5M,KAAK,IAAI,IAE9CA,KAAK,KAGVuT,EAAK,OAASA,EAAK,KAEf/W,KAAK4M,SACLmK,EAAK,OAASA,EAAK,QACvB,IACI/W,KAAK8S,OAAS,IAAImG,OAAOlC,EAAI+B,EAEjC,CACA,MAAOO,GAEHrZ,KAAK8S,QAAS,CAClB,CAEA,OAAO9S,KAAK8S,MAChB,CACA,UAAAY,CAAW9F,GAKP,OAAI5N,KAAKuS,wBACE3E,EAAE3H,MAAM,KAEVjG,KAAK4S,WAAa,cAAcpF,KAAKI,GAEnC,CAAC,MAAOA,EAAE3H,MAAM,QAGhB2H,EAAE3H,MAAM,MAEvB,CACA,KAAAgI,CAAMI,EAAGmE,EAAUxS,KAAKwS,SAIpB,GAHAxS,KAAKgE,MAAM,QAASqK,EAAGrO,KAAK6N,SAGxB7N,KAAKmG,QACL,OAAO,EAEX,GAAInG,KAAKsS,MACL,MAAa,KAANjE,EAEX,GAAU,MAANA,GAAamE,EACb,OAAO,EAEX,MAAM3J,EAAU7I,KAAK6I,QAEjB7I,KAAK4S,YACLvE,EAAIA,EAAEpI,MAAM,MAAMzC,KAAK,MAG3B,MAAM8V,EAAKtZ,KAAK0T,WAAWrF,GAC3BrO,KAAKgE,MAAMhE,KAAK6N,QAAS,QAASyL,GAKlC,MAAMzI,EAAM7Q,KAAK6Q,IACjB7Q,KAAKgE,MAAMhE,KAAK6N,QAAS,MAAOgD,GAEhC,IAAI0I,EAAWD,EAAGA,EAAGnY,OAAS,GAC9B,IAAKoY,EACD,IAAK,IAAI/X,EAAI8X,EAAGnY,OAAS,GAAIoY,GAAY/X,GAAK,EAAGA,IAC7C+X,EAAWD,EAAG9X,GAGtB,IAAK,IAAIA,EAAI,EAAGA,EAAIqP,EAAI1P,OAAQK,IAAK,CACjC,MAAMqM,EAAUgD,EAAIrP,GACpB,IAAIwU,EAAOsD,EAKX,GAJIzQ,EAAQ2Q,WAAgC,IAAnB3L,EAAQ1M,SAC7B6U,EAAO,CAACuD,IAEAvZ,KAAK+V,SAASC,EAAMnI,EAAS2E,GAErC,QAAI3J,EAAQ4Q,aAGJzZ,KAAK4M,MAErB,CAGA,OAAI/D,EAAQ4Q,YAGLzZ,KAAK4M,MAChB,CACA,eAAOuE,CAASC,GACZ,OAAO,GAAUD,SAASC,GAAKpD,SACnC,EC/vCG,SAAS0L,GAAuB1T,GACnC,MAAM2T,EAAS,CAAC,EAChB,IAAK,MAAM9P,KAAO7D,EAAQqL,OACtBsI,EAAO9P,GAAO7D,EAAQqE,IAAIR,GAE9B,OAAO8P,CACX,CD+vCA,GAAU3L,UAAYA,GACtB,GAAU0D,OE7vCY,CAAC5F,GAAKsG,wBAAuB,GAAW,CAAC,IAIpDA,EACDtG,EAAEC,QAAQ,aAAc,QACxBD,EAAEC,QAAQ,eAAgB,QFwvCpC,GAAU0F,SGzvCc,CAAC3F,GAAKsG,wBAAuB,GAAW,CAAC,IACtDA,EACDtG,EAAEC,QAAQ,iBAAkB,MAC5BD,EAAEC,QAAQ,4BAA6B,QAAQA,QAAQ,aAAc,UCb3E6N,iCCFwBrN,MDG5B,SAAWqN,GACPA,EAAoB,MAAI,QACxBA,EAAqB,OAAI,SACzBA,EAAuB,SAAI,UAC9B,CAJD,CAIGA,KAAiBA,GAAe,CAAC,IEiB7B,MAaMC,GAAcxW,eAAAyW,EAA8CjR,GAAS,IAAAkR,EAAA,IAAvC,aAAEpX,EAAY,WAAEF,GAAYqX,EACnE,MAAM9U,EAAe,CAAC,GAAIrC,EAAcF,GAAYe,KAAK,KACnDwW,EAAWnR,EAAQmR,SAAW,gBAAHnW,OAAmBgF,EAAQmR,SAASC,cAAa,kBAAmB,GAC/FhV,QAAiBrD,EAAO6B,cAAcuB,EAActB,OAAOC,OAAO,CACpEC,OAAQ,SACRhB,KAAM,sPAAFiB,OAMiB,QANjBkW,EAMIlR,EAAQ8B,aAAK,IAAAoP,EAAAA,EAxBA,GAwBiB,oCAAAlW,OAC7BgF,EAAQqR,QAAU,EAAC,0BAAArW,OAC9BmW,EAAQ,kCAEPnR,IACGsR,QAAqBlV,EAASmV,OAC9BzE,QAAe0E,EAAAA,EAAAA,IAASF,GAE9B,OC1BG,SAAgClV,EAAUrC,EAAM0X,GAAa,GAChE,OAAOA,EACD,CACE1X,OACAoD,QAASf,EAASe,QAAU0T,GAAuBzU,EAASe,SAAW,CAAC,EACxEuU,OAAQtV,EAASsV,OACjBC,WAAYvV,EAASuV,YAEvB5X,CACV,CDiBW6X,CAAuBxV,EADjByV,GAAkB/E,GAAQ,IACO,EAClD,EAEM+E,GAAoB,SAAU/E,GAA4B,IAApB2E,EAAUpZ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAElD,MAAQyZ,aAAe1V,SAAU2V,IAAqBjF,EAEtD,OAAOiF,EAAcnH,KAAIoH,IAErB,MAAMtb,EAAQsb,EAAKC,SAASC,KAC5B,OFQD,SAA8Bxb,EAAOga,EAAUe,GAAa,GAE/D,MAAQU,gBAAiBC,EAAU,KAAMC,iBAAkBC,EAAU,IAAKC,aAAczY,EAAe,KAAM0Y,eAAgBC,EAAW,KAAMC,QAASC,EAAO,MAASjc,EACjKE,EAAOkD,GACe,iBAAjBA,QAC4B,IAA5BA,EAAa8Y,WAClB,YACA,OACArV,EAAO,CACTmT,WACAmC,SAAU,YAAcnC,GACxBoC,QAASV,EACTpb,KAAMkG,SAASoV,EAAS,IACxB1b,OACA+b,KAAsB,iBAATA,EAAoBA,EAAKzP,QAAQ,KAAM,IAAM,MAQ9D,MANa,SAATtM,IACA2G,EAAKwV,KAAON,GAAgC,iBAAbA,EAAwBA,EAASrV,MAAM,KAAK,GAAK,IAEhFqU,IACAlU,EAAK7G,MAAQA,GAEV6G,CACX,CE/BeyV,CAAqBtc,EAAOA,EAAMgD,GAAG+F,WAAYgS,EAAW,GAE3E,kBEgCA,MCtGoL,GDsGpL,CACAjb,KAAA,WAEAmH,WAAA,CACAsV,QAAA,EACAC,eAAA,IACAjV,SAAA,IACAkV,YAAA,EACAC,qBAAA,EACAC,uBAAAA,GAGA9S,WAAA,CACA+S,mBAAAA,EAAAA,IAGAlV,OAAA,CAAAmV,GAEAxZ,KAAAA,KACA,CACAqB,MAAA,GACAlB,SAAA,EACAsZ,MAAA,EAEA5Z,WAAA,KACAyX,OAAA,EACAoC,SAAA,GAEAC,cAAAA,OAEAT,QAAA,EACApS,SAAA,KAIA9B,SAAA,CACA4U,WAAAA,GACA,YAAAF,SAAAnb,OAAA,CACA,EACAsb,cAAAA,GACA,YAAA1Z,SAAA,SAAAmX,MACA,GAGAlX,QAAA,CACAmB,EAAA,KAEA,wBAAAuY,CAAAC,GACA,GAAAA,EACA,SE1HkCC,EAACja,EAAcF,EAAYoa,KACzD,MAAM7X,EAAe,CAAC,GAAIrC,EAAcF,GAAYe,KAAK,KACnDsZ,EAAaD,EAAKjX,cACxB,OAAOhE,EAAO6B,cAAcuB,EAAc,CACtCpB,OAAQ,YACRhB,KAAM,iLAAFiB,OAMUiZ,EAAU,mFAI1B,EF4GNF,CAAA,KAAAja,aAAA,KAAAF,WAAA,IAAAkD,KACA,OAAAoX,IACA7Y,EAAAA,EAAAA,IAAA6Y,EAAAva,UAAA2B,EAAAA,EAAAA,IAAA,8CACA,CAEA,EAOA,YAAA6Y,CAAAva,GACA,KAAAA,WAAAA,EACA,KAAAwa,aACA,KAAApD,aACA,EAKAqD,qBAAAA,GAOA,KAAAjZ,OAAA,KAAAoY,MAAA,KAAAtZ,SAGA,KAAA8W,aACA,EAKA,iBAAAA,GAEA,KAAA0C,cAAA,UAEA,IACA,KAAAxZ,SAAA,EACA,KAAAkB,MAAA,GAGA,cAAAkZ,EAAA,MAAAC,GG1K0B,SAASD,GAClC,MAAME,EAAa,IAAIC,gBACjBC,EAASF,EAAWE,OAgB1B,MAAO,CACNJ,QATa9Z,eAAema,EAAK3U,GAKjC,aAJuBsU,EACtBK,EACA9Z,OAAOC,OAAO,CAAE4Z,UAAU1U,GAG5B,EAICuU,MAAOA,IAAMC,EAAWD,QAE1B,CHoJAK,CAAA5D,IACA,KAAA0C,cAAAa,EAGA,MAAAxa,KAAA0Z,SAAAa,EAAA,CACAxa,aAAA,KAAAA,aACAF,WAAA,KAAAA,YACA,CAAAyX,OAAA,KAAAA,UAAA,CAAAtX,KAAA,IAEA,KAAAmB,OAAAC,MAAA,aAAAH,OAAAyY,EAAAnb,OAAA,cAAAmb,aAIAA,EAAAnb,OFzL6B,KE0L7B,KAAAkb,MAAA,GAIA,KAAAC,SAAA/O,QAAA+O,GAGA,KAAApC,QFjM6B,EEkM7B,OAAAjW,GACA,cAAAA,EAAAzB,QACA,OAEA,KAAAyB,OAAAE,EAAAA,EAAAA,IAAA,+CACAC,GAAAH,MAAA,kCAAAA,EACA,SACA,KAAAlB,SAAA,CACA,CACA,EAOA+B,YAAAA,CAAAqB,GACA,KAAAmW,SAAAoB,QAAAvX,EACA,EAOA3B,QAAAA,CAAAjC,GACA,MAAAob,EAAA,KAAArB,SAAAsB,WAAAzX,GAAAA,EAAA5G,MAAAgD,KAAAA,IACAob,GAAA,EACA,KAAArB,SAAA5H,OAAAiJ,EAAA,GAEAvZ,GAAAH,MAAA,iDAAA1B,EAEA,EAKA0a,UAAAA,GACA,KAAAhZ,MAAA,GACA,KAAAlB,SAAA,EACA,KAAAsZ,MAAA,EACA,KAAAnC,OAAA,EACA,KAAAoC,SAAA,EACA,oBI5PI,GAAU,CAAC,EAEf,GAAQxT,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCP1D,UAXgB,OACd,ICTW,WAAkB,IAAIpJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACmJ,WAAW,CAAC,CAAC/J,KAAK,qBAAqBgK,QAAQ,uBAAuBrI,MAAOjB,EAAI2c,mBAAoBpT,WAAW,uBAAuBlJ,YAAY,WAAWmJ,MAAM,CAAE,eAAgBxJ,EAAI0c,iBAAkB,CAACxc,EAAG,UAAUF,EAAII,GAAG,CAACC,YAAY,mBAAmBC,MAAM,CAAC,gBAAgBN,EAAIwH,aAAa,gBAAgBxH,EAAI4C,aAAa,QAAS,EAAK,YAAY5C,EAAI2J,SAAS,cAAc3J,EAAI0C,YAAYnC,GAAG,CAAC,IAAMP,EAAI+E,eAAe,UAAU/E,EAAImK,YAAW,IAAQnK,EAAIW,GAAG,KAAOX,EAAI0c,eAAy+C1c,EAAIa,KAA79C,EAAGb,EAAIyc,aAAezc,EAAIsc,KAAMpc,EAAG,iBAAiB,CAACG,YAAY,kBAAkBC,MAAM,CAAC,KAAON,EAAIoE,EAAE,WAAY,6CAA6CwF,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAC7J,EAAG,wBAAwB,EAAE8J,OAAM,IAAO,MAAK,EAAM,cAAc9J,EAAG,KAAKF,EAAI8d,GAAI9d,EAAIuc,UAAU,SAASnW,GAAS,OAAOlG,EAAG,UAAUF,EAAII,GAAG,CAAC0J,IAAI1D,EAAQ5G,MAAMgD,GAAGnC,YAAY,iBAAiBC,MAAM,CAAC,IAAM,KAAK,gBAAgBN,EAAIwH,aAAa,gBAAgBxH,EAAI4C,aAAa,QAAUwD,EAAQ5G,MAAMiD,QAAQ,cAAczC,EAAI0C,WAAW,YAAY1C,EAAIkL,gBAAgB9E,EAAQ5G,MAAM2L,WAAW5K,GAAG,CAAC,iBAAiB,SAASC,GAAQ,OAAOR,EAAI+d,KAAK3X,EAAQ5G,MAAO,UAAWgB,EAAO,EAAE,OAASR,EAAIyE,WAAW,UAAU2B,EAAQ5G,OAAM,GAAO,IAAG,GAAGQ,EAAIW,GAAG,KAAMX,EAAIgD,UAAYhD,EAAI0c,eAAgBxc,EAAG,MAAM,CAACG,YAAY,gCAAiCL,EAAIyc,aAAezc,EAAIsc,KAAMpc,EAAG,MAAM,CAACG,YAAY,kBAAkB,CAACL,EAAIW,GAAG,WAAWX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,qBAAqB,YAAapE,EAAIkE,MAAO,CAAChE,EAAG,iBAAiB,CAACG,YAAY,kBAAkBC,MAAM,CAAC,KAAON,EAAIkE,OAAO0F,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAC7J,EAAG,0BAA0B,EAAE8J,OAAM,IAAO,MAAK,EAAM,YAAYhK,EAAIW,GAAG,KAAKT,EAAG,WAAW,CAACG,YAAY,kBAAkBE,GAAG,CAAC,MAAQP,EAAI8Z,aAAalQ,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAC7J,EAAG,eAAe,EAAE8J,OAAM,IAAO,MAAK,EAAM,aAAa,CAAChK,EAAIW,GAAG,aAAaX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,UAAU,eAAepE,EAAIa,OAAgB,EAC/hE,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,QEUhCmd,EAAAA,GAAoBC,MAAK9b,EAAAA,EAAAA,OAGzB+b,EAAAA,GAAIC,MAAM,CACTtb,KAAIA,KACI,CACNmB,OAAMA,IAGRf,QAAS,CACRmB,EAAC,KACDgU,EAACA,EAAAA,sBCfCgG,OAAOC,MAAQD,OAAOC,IAAIC,UAC7B3a,OAAOC,OAAOwa,OAAOC,IAAK,CAAEC,SAAU,CAAC,IAIxC3a,OAAOC,OAAOwa,OAAOC,IAAIC,SAAU,CAAEC,KDctB,MAQd/M,WAAAA,GAAkD,IAAAgN,EAAA,IAAtC5b,EAAYzB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,QAAS2H,EAAO3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAW9C,OATA2H,EAAU,IACNA,EACH2V,UAAW,IACW,QAArBD,EAAI1V,EAAQ2V,iBAAS,IAAAD,EAAAA,EAAI,CAAC,EAC1B5b,iBAKK,IADMsb,EAAAA,GAAIQ,OAAOC,IACjB,CAAS7V,EACjB,KCjCDzE,GAAQJ,MAAM,wDC7Bd,SAAS2a,EAAS1N,EAAGC,EAAG0N,GAClB3N,aAAagI,SAAQhI,EAAI4N,EAAW5N,EAAG2N,IACvC1N,aAAa+H,SAAQ/H,EAAI2N,EAAW3N,EAAG0N,IAE3C,IAAIE,EAAIC,EAAM9N,EAAGC,EAAG0N,GAEpB,OAAOE,GAAK,CACVtH,MAAOsH,EAAE,GACTE,IAAKF,EAAE,GACPG,IAAKL,EAAInR,MAAM,EAAGqR,EAAE,IACpBI,KAAMN,EAAInR,MAAMqR,EAAE,GAAK7N,EAAE9P,OAAQ2d,EAAE,IACnC3Z,KAAMyZ,EAAInR,MAAMqR,EAAE,GAAK5N,EAAE/P,QAE7B,CAEA,SAAS0d,EAAWM,EAAKP,GACvB,IAAI/H,EAAI+H,EAAI3Q,MAAMkR,GAClB,OAAOtI,EAAIA,EAAE,GAAK,IACpB,CAGA,SAASkI,EAAM9N,EAAGC,EAAG0N,GACnB,IAAIQ,EAAMC,EAAKC,EAAMC,EAAO5J,EACxBF,EAAKmJ,EAAI5K,QAAQ/C,GACjByE,EAAKkJ,EAAI5K,QAAQ9C,EAAGuE,EAAK,GACzBjU,EAAIiU,EAER,GAAIA,GAAM,GAAKC,EAAK,EAAG,CACrB,GAAGzE,IAAIC,EACL,MAAO,CAACuE,EAAIC,GAKd,IAHA0J,EAAO,GACPE,EAAOV,EAAIzd,OAEJK,GAAK,IAAMmU,GACZnU,GAAKiU,GACP2J,EAAK7R,KAAK/L,GACViU,EAAKmJ,EAAI5K,QAAQ/C,EAAGzP,EAAI,IACA,GAAf4d,EAAKje,OACdwU,EAAS,CAAEyJ,EAAKlZ,MAAOwP,KAEvB2J,EAAMD,EAAKlZ,OACDoZ,IACRA,EAAOD,EACPE,EAAQ7J,GAGVA,EAAKkJ,EAAI5K,QAAQ9C,EAAG1P,EAAI,IAG1BA,EAAIiU,EAAKC,GAAMD,GAAM,EAAIA,EAAKC,EAG5B0J,EAAKje,SACPwU,EAAS,CAAE2J,EAAMC,GAErB,CAEA,OAAO5J,CACT,CA5DA6J,EAAOC,QAAUd,EAqBjBA,EAASI,MAAQA,mBCtBjB,IAAIJ,EAAW,EAAQ,MAEvBa,EAAOC,QA6DP,SAAmBb,GACjB,OAAKA,GASoB,OAArBA,EAAIc,OAAO,EAAG,KAChBd,EAAM,SAAWA,EAAIc,OAAO,IAGvBC,EA7DT,SAAsBf,GACpB,OAAOA,EAAI3Y,MAAM,QAAQzC,KAAKoc,GACnB3Z,MAAM,OAAOzC,KAAKqc,GAClB5Z,MAAM,OAAOzC,KAAKsc,GAClB7Z,MAAM,OAAOzC,KAAKuc,GAClB9Z,MAAM,OAAOzC,KAAKwc,EAC/B,CAuDgBC,CAAarB,IAAM,GAAMnL,IAAIyM,IAZlC,EAaX,EA1EA,IAAIN,EAAW,UAAUO,KAAKC,SAAS,KACnCP,EAAU,SAASM,KAAKC,SAAS,KACjCN,EAAW,UAAUK,KAAKC,SAAS,KACnCL,EAAW,UAAUI,KAAKC,SAAS,KACnCJ,EAAY,WAAWG,KAAKC,SAAS,KAEzC,SAASC,EAAQzB,GACf,OAAO7Y,SAAS6Y,EAAK,KAAOA,EACxB7Y,SAAS6Y,EAAK,IACdA,EAAI0B,WAAW,EACrB,CAUA,SAASJ,EAAetB,GACtB,OAAOA,EAAI3Y,MAAM2Z,GAAUpc,KAAK,MACrByC,MAAM4Z,GAASrc,KAAK,KACpByC,MAAM6Z,GAAUtc,KAAK,KACrByC,MAAM8Z,GAAUvc,KAAK,KACrByC,MAAM+Z,GAAWxc,KAAK,IACnC,CAMA,SAAS+c,EAAgB3B,GACvB,IAAKA,EACH,MAAO,CAAC,IAEV,IAAIpK,EAAQ,GACRqC,EAAI8H,EAAS,IAAK,IAAKC,GAE3B,IAAK/H,EACH,OAAO+H,EAAI3Y,MAAM,KAEnB,IAAIgZ,EAAMpI,EAAEoI,IACRC,EAAOrI,EAAEqI,KACT/Z,EAAO0R,EAAE1R,KACTyI,EAAIqR,EAAIhZ,MAAM,KAElB2H,EAAEA,EAAEzM,OAAO,IAAM,IAAM+d,EAAO,IAC9B,IAAIsB,EAAYD,EAAgBpb,GAQhC,OAPIA,EAAKhE,SACPyM,EAAEA,EAAEzM,OAAO,IAAMqf,EAAUC,QAC3B7S,EAAEL,KAAKmT,MAAM9S,EAAG4S,IAGlBhM,EAAMjH,KAAKmT,MAAMlM,EAAO5G,GAEjB4G,CACT,CAmBA,SAASmM,EAAQ/B,GACf,MAAO,IAAMA,EAAM,GACrB,CACA,SAASgC,EAASC,GAChB,MAAO,SAASrT,KAAKqT,EACvB,CAEA,SAASC,EAAItf,EAAGuf,GACd,OAAOvf,GAAKuf,CACd,CACA,SAASC,EAAIxf,EAAGuf,GACd,OAAOvf,GAAKuf,CACd,CAEA,SAASpB,EAAOf,EAAKqC,GACnB,IAAIC,EAAa,GAEbrK,EAAI8H,EAAS,IAAK,IAAKC,GAC3B,IAAK/H,EAAG,MAAO,CAAC+H,GAGhB,IAAIK,EAAMpI,EAAEoI,IACR9Z,EAAO0R,EAAE1R,KAAKhE,OACdwe,EAAO9I,EAAE1R,MAAM,GACf,CAAC,IAEL,GAAI,MAAMqI,KAAKqJ,EAAEoI,KACf,IAAK,IAAIkC,EAAI,EAAGA,EAAIhc,EAAKhE,OAAQggB,IAAK,CACpC,IAAIC,EAAYnC,EAAK,IAAMpI,EAAEqI,KAAO,IAAM/Z,EAAKgc,GAC/CD,EAAW3T,KAAK6T,EAClB,KACK,CACL,IAaIjJ,EAkBAkJ,EA/BAC,EAAoB,iCAAiC9T,KAAKqJ,EAAEqI,MAC5DqC,EAAkB,uCAAuC/T,KAAKqJ,EAAEqI,MAChEsC,EAAaF,GAAqBC,EAClCE,EAAY5K,EAAEqI,KAAKlL,QAAQ,MAAQ,EACvC,IAAKwN,IAAeC,EAElB,OAAI5K,EAAE1R,KAAK8I,MAAM,SAER0R,EADPf,EAAM/H,EAAEoI,IAAM,IAAMpI,EAAEqI,KAAOY,EAAWjJ,EAAE1R,MAGrC,CAACyZ,GAIV,GAAI4C,EACFrJ,EAAItB,EAAEqI,KAAKjZ,MAAM,aAGjB,GAAiB,KADjBkS,EAAIoI,EAAgB1J,EAAEqI,OAChB/d,QAGa,KADjBgX,EAAIwH,EAAOxH,EAAE,IAAI,GAAO1E,IAAIkN,IACtBxf,OACJ,OAAOgE,EAAKsO,KAAI,SAAS7F,GACvB,OAAOiJ,EAAEoI,IAAM9G,EAAE,GAAKvK,CACxB,IASN,GAAI4T,EAAY,CACd,IAAIE,EAAIrB,EAAQlI,EAAE,IACd4I,EAAIV,EAAQlI,EAAE,IACdwJ,EAAQxB,KAAKyB,IAAIzJ,EAAE,GAAGhX,OAAQgX,EAAE,GAAGhX,QACnC0gB,EAAmB,GAAZ1J,EAAEhX,OACTgf,KAAK2B,IAAIzB,EAAQlI,EAAE,KACnB,EACA3K,EAAOsT,EACGC,EAAIW,IAEhBG,IAAS,EACTrU,EAAOwT,GAET,IAAIe,EAAM5J,EAAE6J,KAAKpB,GAEjBS,EAAI,GAEJ,IAAK,IAAI7f,EAAIkgB,EAAGlU,EAAKhM,EAAGuf,GAAIvf,GAAKqgB,EAAM,CACrC,IAAI7U,EACJ,GAAIuU,EAEQ,QADVvU,EAAItN,OAAOuiB,aAAazgB,MAEtBwL,EAAI,SAGN,GADAA,EAAItN,OAAO8B,GACPugB,EAAK,CACP,IAAIG,EAAOP,EAAQ3U,EAAE7L,OACrB,GAAI+gB,EAAO,EAAG,CACZ,IAAIC,EAAI,IAAItN,MAAMqN,EAAO,GAAG1e,KAAK,KAE/BwJ,EADExL,EAAI,EACF,IAAM2gB,EAAInV,EAAES,MAAM,GAElB0U,EAAInV,CACZ,CACF,CAEFqU,EAAE9T,KAAKP,EACT,CACF,KAAO,CACLqU,EAAI,GAEJ,IAAK,IAAInN,EAAI,EAAGA,EAAIiE,EAAEhX,OAAQ+S,IAC5BmN,EAAE9T,KAAKmT,MAAMW,EAAG1B,EAAOxH,EAAEjE,IAAI,GAEjC,CAEA,IAASA,EAAI,EAAGA,EAAImN,EAAElgB,OAAQ+S,IAC5B,IAASiN,EAAI,EAAGA,EAAIhc,EAAKhE,OAAQggB,IAC3BC,EAAYnC,EAAMoC,EAAEnN,GAAK/O,EAAKgc,KAC7BF,GAASO,GAAcJ,IAC1BF,EAAW3T,KAAK6T,EAGxB,CAEA,OAAOF,CACT,oFCtMIkB,QAA0B,GAA4B,KAE1DA,EAAwB7U,KAAK,CAACiS,EAAOjd,GAAI,8rCAA+rC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,wDAAwD,MAAQ,GAAG,SAAW,udAAud,eAAiB,CAAC,+1CAAi2C,WAAa,MAExqG,4FCJI6f,QAA0B,GAA4B,KAE1DA,EAAwB7U,KAAK,CAACiS,EAAOjd,GAAI,kUAAmU,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,oDAAoD,MAAQ,GAAG,SAAW,wHAAwH,eAAiB,CAAC,uTAAuT,WAAa,MAE/5B,wCCLA,MAAM8f,EAAY,EAAQ,OACpBC,EAAY,EAAQ,OACpBC,EAAa,EAAQ,MAE3B/C,EAAOC,QAAU,CACf6C,UAAWA,EACXE,aAAcH,EACdE,WAAYA,2BCAd,SAASE,EAAQC,GAAmV,OAAtOD,EAArD,mBAAXpS,QAAoD,iBAApBA,OAAOsS,SAAmC,SAAiBD,GAAO,cAAcA,CAAK,EAAsB,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXrS,QAAyBqS,EAAInR,cAAgBlB,QAAUqS,IAAQrS,OAAOuS,UAAY,gBAAkBF,CAAK,EAAYD,EAAQC,EAAM,CAUzX,SAASG,EAAiBC,GAAS,IAAIC,EAAwB,mBAARC,IAAqB,IAAIA,SAAQ5hB,EAA8nB,OAAnnByhB,EAAmB,SAA0BC,GAAS,GAAc,OAAVA,IAMlIhZ,EANuKgZ,GAMjG,IAAzDtb,SAASc,SAAS2a,KAAKnZ,GAAIkK,QAAQ,kBAN+H,OAAO8O,EAMjN,IAA2BhZ,EAN6L,GAAqB,mBAAVgZ,EAAwB,MAAM,IAAI/Q,UAAU,sDAAyD,QAAsB,IAAXgR,EAAwB,CAAE,GAAIA,EAAOG,IAAIJ,GAAQ,OAAOC,EAAO1Y,IAAIyY,GAAQC,EAAOlS,IAAIiS,EAAOK,EAAU,CAAE,SAASA,IAAY,OAAOC,EAAWN,EAAO5hB,UAAWmiB,EAAgBrjB,MAAMuR,YAAc,CAAkJ,OAAhJ4R,EAAQP,UAAYlf,OAAO4f,OAAOR,EAAMF,UAAW,CAAErR,YAAa,CAAEvQ,MAAOmiB,EAASI,YAAY,EAAOC,UAAU,EAAMC,cAAc,KAAkBC,EAAgBP,EAASL,EAAQ,EAAUD,EAAiBC,EAAQ,CAEtvB,SAASM,EAAWO,EAAQpQ,EAAMuP,GAAqV,OAAhQM,EAEvH,WAAuC,GAAuB,oBAAZQ,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,mBAAVC,MAAsB,OAAO,EAAM,IAAiF,OAA3Epe,KAAKid,UAAUta,SAAS2a,KAAKW,QAAQC,UAAUle,KAAM,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOoX,GAAK,OAAO,CAAO,CAAE,CAFpRiH,GAA4CJ,QAAQC,UAAiC,SAAoBF,EAAQpQ,EAAMuP,GAAS,IAAI7R,EAAI,CAAC,MAAOA,EAAE1D,KAAKmT,MAAMzP,EAAGsC,GAAO,IAAsD0Q,EAAW,IAA/Czc,SAAS0c,KAAKxD,MAAMiD,EAAQ1S,IAA6F,OAAnD6R,GAAOY,EAAgBO,EAAUnB,EAAMF,WAAmBqB,CAAU,EAAYb,EAAW1C,MAAM,KAAMxf,UAAY,CAMja,SAASwiB,EAAgBS,EAAGvW,GAA+G,OAA1G8V,EAAkBhgB,OAAO0gB,gBAAkB,SAAyBD,EAAGvW,GAAsB,OAAjBuW,EAAEE,UAAYzW,EAAUuW,CAAG,EAAUT,EAAgBS,EAAGvW,EAAI,CAEzK,SAASyV,EAAgBc,GAAwJ,OAAnJd,EAAkB3f,OAAO0gB,eAAiB1gB,OAAO4gB,eAAiB,SAAyBH,GAAK,OAAOA,EAAEE,WAAa3gB,OAAO4gB,eAAeH,EAAI,EAAUd,EAAgBc,EAAI,CAE5M,IAGII,EAA4C,SAAUC,GAGxD,SAASD,EAA6Bha,GACpC,IAAIka,EAMJ,OAjCJ,SAAyBR,EAAUS,GAAe,KAAMT,aAAoBS,GAAgB,MAAM,IAAI3S,UAAU,oCAAwC,CA6BpJ4S,CAAgB3kB,KAAMukB,IAEtBE,EA7BJ,SAAoCG,EAAM3B,GAAQ,OAAIA,GAA2B,WAAlBR,EAAQQ,IAAsC,mBAATA,EAEpG,SAAgC2B,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIC,eAAe,6DAAgE,OAAOD,CAAM,CAFnBE,CAAuBF,GAAtC3B,CAA6C,CA6BpK8B,CAA2B/kB,KAAMqjB,EAAgBkB,GAA8BtB,KAAKjjB,KAAMuK,KAC5FlL,KAAO,+BACNolB,CACT,CAEA,OA9BF,SAAmBO,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIlT,UAAU,sDAAyDiT,EAASpC,UAAYlf,OAAO4f,OAAO2B,GAAcA,EAAWrC,UAAW,CAAErR,YAAa,CAAEvQ,MAAOgkB,EAAUxB,UAAU,EAAMC,cAAc,KAAewB,GAAYvB,EAAgBsB,EAAUC,EAAa,CAkB9XC,CAAUX,EAA8BC,GAYjCD,CACT,CAdgD,CAc9C1B,EAAiBtW,QA6LnB,SAAS4Y,EAASC,EAAQC,GAoCxB,IAnCA,IAAIjb,EAAWlJ,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,WAAa,EAC5FokB,EAAWD,EAAKpf,MA/MD,KAgNf9E,EAASmkB,EAASnkB,OAElBokB,EAAQ,SAAeC,GACzB,IAAIC,EAAiBH,EAASE,GAE9B,IAAKJ,EACH,MAAO,CACLM,OAAG,GAIP,GA5NiB,MA4NbD,EAAmC,CACrC,GAAI5Q,MAAMC,QAAQsQ,GAChB,MAAO,CACLM,EAAGN,EAAO3R,KAAI,SAAUzS,EAAO2c,GAC7B,IAAIgI,EAAoBL,EAAS7X,MAAM+X,EAAM,GAE7C,OAAIG,EAAkBxkB,OAAS,EACtBgkB,EAASnkB,EAAO2kB,EAAkBniB,KAlOlC,KAkOwD4G,GAExDA,EAASgb,EAAQzH,EAAO2H,EAAUE,EAE7C,KAGF,IAAII,EAAaN,EAAS7X,MAAM,EAAG+X,GAAKhiB,KAzO3B,KA0Ob,MAAM,IAAI+I,MAAM,uBAAuB1I,OAAO+hB,EAAY,qBAE9D,CACER,EAAShb,EAASgb,EAAQK,EAAgBH,EAAUE,EAExD,EAESA,EAAM,EAAGA,EAAMrkB,EAAQqkB,IAAO,CACrC,IAAIK,EAAON,EAAMC,GAEjB,GAAsB,WAAlB/C,EAAQoD,GAAoB,OAAOA,EAAKH,CAC9C,CAEA,OAAON,CACT,CAEA,SAASU,EAAcR,EAAU3H,GAC/B,OAAO2H,EAASnkB,SAAWwc,EAAQ,CACrC,CA1OA6B,EAAOC,QAAU,CACf5O,IAkGF,SAA2BuU,EAAQW,EAAU/kB,GAC3C,GAAuB,UAAnByhB,EAAQ2C,IAAkC,OAAXA,EACjC,OAAOA,EAGT,QAAuB,IAAZW,EACT,OAAOX,EAGT,GAAuB,iBAAZW,EAET,OADAX,EAAOW,GAAY/kB,EACZokB,EAAOW,GAGhB,IACE,OAAOZ,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,EAAiBX,EAAU3H,GACtG,GAAIqI,IAAkBpC,QAAQU,eAAe,CAAC,GAC5C,MAAM,IAAIC,EAA6B,yCAGzC,IAAKyB,EAAcC,GAAkB,CACnC,IAAIC,EAAmBpmB,OAAOqmB,UAAUrmB,OAAOwlB,EAAS3H,EAAQ,KAC5DyI,EA5IS,MA4IiBd,EAAS3H,EAAQ,GAG7CqI,EAAcC,GADZC,GAAoBE,EACW,GAEA,CAAC,CAEtC,CAMA,OAJIN,EAAcR,EAAU3H,KAC1BqI,EAAcC,GAAmBjlB,GAG5BglB,EAAcC,EACvB,GACF,CAAE,MAAOI,GACP,GAAIA,aAAe9B,EAEjB,MAAM8B,EAEN,OAAOjB,CAEX,CACF,EA9IE/a,IAqBF,SAA2B+a,EAAQW,GACjC,GAAuB,UAAnBtD,EAAQ2C,IAAkC,OAAXA,EACjC,OAAOA,EAGT,QAAuB,IAAZW,EACT,OAAOX,EAGT,GAAuB,iBAAZW,EACT,OAAOX,EAAOW,GAGhB,IACE,OAAOZ,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,GAC3E,OAAOD,EAAcC,EACvB,GACF,CAAE,MAAOI,GACP,OAAOjB,CACT,CACF,EAxCElC,IAqDF,SAA2BkC,EAAQW,GACjC,IAAIld,EAAU3H,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,GAAuB,UAAnBuhB,EAAQ2C,IAAkC,OAAXA,EACjC,OAAO,EAGT,QAAuB,IAAZW,EACT,OAAO,EAGT,GAAuB,iBAAZA,EACT,OAAOA,KAAYX,EAGrB,IACE,IAAIlC,GAAM,EAYV,OAXAiC,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,EAAiBX,EAAU3H,GAC/F,IAAImI,EAAcR,EAAU3H,GAO1B,OAAOqI,GAAiBA,EAAcC,GALpC/C,EADEra,EAAQyd,IACJN,EAAcO,eAAeN,GAE7BA,KAAmBD,CAK/B,IACO9C,CACT,CAAE,MAAOmD,GACP,OAAO,CACT,CACF,EApFEG,OAAQ,SAAgBpB,EAAQW,EAAUld,GACxC,OAAO7I,KAAKkjB,IAAIkC,EAAQW,EAAUld,GAAW,CAC3Cyd,KAAK,GAET,EACAG,KAoJF,SAA4BrB,EAAQW,EAAUW,GAC5C,IAAI7d,EAAU3H,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,GAAuB,UAAnBuhB,EAAQ2C,IAAkC,OAAXA,EACjC,OAAO,EAGT,QAAuB,IAAZW,EACT,OAAO,EAGT,IACE,IAAIU,GAAO,EACPE,GAAa,EAOjB,OANAxB,EAASC,EAAQW,GAAU,SAA6BC,EAAeC,EAAiBX,EAAU3H,GAGhG,OAFA8I,EAAOA,GAAQT,IAAkBU,KAAkBV,GAAiBA,EAAcC,KAAqBS,EACvGC,EAAab,EAAcR,EAAU3H,IAAqC,WAA3B8E,EAAQuD,IAA+BC,KAAmBD,EAClGA,GAAiBA,EAAcC,EACxC,IAEIpd,EAAQ+d,UACHH,GAAQE,EAERF,CAEX,CAAE,MAAOJ,GACP,OAAO,CACT,CACF,EA/KE9B,6BAA8BA,gDCtC5BsC,EAAO,EAAQ,OACfC,EAAW,SAAUpF,GACvB,MAAoB,iBAANA,CAChB,EAOA,SAASqF,EAAevS,EAAOwS,GAE7B,IADA,IAAIC,EAAM,GACDzlB,EAAI,EAAGA,EAAIgT,EAAMrT,OAAQK,IAAK,CACrC,IAAIoM,EAAI4G,EAAMhT,GAGToM,GAAW,MAANA,IAGA,OAANA,EACEqZ,EAAI9lB,QAAkC,OAAxB8lB,EAAIA,EAAI9lB,OAAS,GACjC8lB,EAAI/gB,MACK8gB,GACTC,EAAI1Z,KAAK,MAGX0Z,EAAI1Z,KAAKK,GAEb,CAEA,OAAOqZ,CACT,CAIA,IAAIC,EACA,gEACAC,EAAQ,CAAC,EAGb,SAASC,EAAe7N,GACtB,OAAO2N,EAAYG,KAAK9N,GAAU9L,MAAM,EAC1C,CAKA0Z,EAAMG,QAAU,WAId,IAHA,IAAIC,EAAe,GACfC,GAAmB,EAEdhmB,EAAIN,UAAUC,OAAS,EAAGK,IAAM,IAAMgmB,EAAkBhmB,IAAK,CACpE,IAAI6jB,EAAQ7jB,GAAK,EAAKN,UAAUM,GAAKuO,EAAQ0X,MAG7C,IAAKX,EAASzB,GACZ,MAAM,IAAItT,UAAU,6CACVsT,IAIZkC,EAAelC,EAAO,IAAMkC,EAC5BC,EAAsC,MAAnBnC,EAAK/Y,OAAO,GACjC,CASA,OAASkb,EAAmB,IAAM,KAHlCD,EAAeR,EAAeQ,EAAathB,MAAM,MAClBuhB,GAAkBhkB,KAAK,OAEG,GAC3D,EAIA2jB,EAAMO,UAAY,SAASrC,GACzB,IAAIsC,EAAaR,EAAMQ,WAAWtC,GAC9BuC,EAAoC,MAApBvC,EAAK3F,QAAQ,GAYjC,OATA2F,EAAO0B,EAAe1B,EAAKpf,MAAM,MAAO0hB,GAAYnkB,KAAK,OAE3CmkB,IACZtC,EAAO,KAELA,GAAQuC,IACVvC,GAAQ,MAGFsC,EAAa,IAAM,IAAMtC,CACnC,EAGA8B,EAAMQ,WAAa,SAAStC,GAC1B,MAA0B,MAAnBA,EAAK/Y,OAAO,EACrB,EAGA6a,EAAM3jB,KAAO,WAEX,IADA,IAAI6hB,EAAO,GACF7jB,EAAI,EAAGA,EAAIN,UAAUC,OAAQK,IAAK,CACzC,IAAIqmB,EAAU3mB,UAAUM,GACxB,IAAKslB,EAASe,GACZ,MAAM,IAAI9V,UAAU,0CAElB8V,IAIAxC,GAHGA,EAGK,IAAMwC,EAFNA,EAKd,CACA,OAAOV,EAAMO,UAAUrC,EACzB,EAKA8B,EAAMW,SAAW,SAASC,EAAMC,GAI9B,SAAS/f,EAAKggB,GAEZ,IADA,IAAIzQ,EAAQ,EACLA,EAAQyQ,EAAI9mB,QACE,KAAf8mB,EAAIzQ,GADiBA,KAK3B,IADA,IAAIwH,EAAMiJ,EAAI9mB,OAAS,EAChB6d,GAAO,GACK,KAAbiJ,EAAIjJ,GADOA,KAIjB,OAAIxH,EAAQwH,EAAY,GACjBiJ,EAAIxa,MAAM+J,EAAOwH,EAAM,EAChC,CAhBA+I,EAAOZ,EAAMG,QAAQS,GAAMrI,OAAO,GAClCsI,EAAKb,EAAMG,QAAQU,GAAItI,OAAO,GAsB9B,IALA,IAAIwI,EAAYjgB,EAAK8f,EAAK9hB,MAAM,MAC5BkiB,EAAUlgB,EAAK+f,EAAG/hB,MAAM,MAExB9E,EAASgf,KAAKiI,IAAIF,EAAU/mB,OAAQgnB,EAAQhnB,QAC5CknB,EAAkBlnB,EACbK,EAAI,EAAGA,EAAIL,EAAQK,IAC1B,GAAI0mB,EAAU1mB,KAAO2mB,EAAQ3mB,GAAI,CAC/B6mB,EAAkB7mB,EAClB,KACF,CAGF,IAAI8mB,EAAc,GAClB,IAAS9mB,EAAI6mB,EAAiB7mB,EAAI0mB,EAAU/mB,OAAQK,IAClD8mB,EAAY/a,KAAK,MAKnB,OAFA+a,EAAcA,EAAYzkB,OAAOskB,EAAQ1a,MAAM4a,KAE5B7kB,KAAK,IAC1B,EAGA2jB,EAAMoB,UAAY,SAASlD,GACzB,OAAOA,CACT,EAGA8B,EAAMqB,QAAU,SAASnD,GACvB,IAAI1P,EAASyR,EAAe/B,GACxBoD,EAAO9S,EAAO,GACd+S,EAAM/S,EAAO,GAEjB,OAAK8S,GAASC,GAKVA,IAEFA,EAAMA,EAAIhJ,OAAO,EAAGgJ,EAAIvnB,OAAS,IAG5BsnB,EAAOC,GARL,GASX,EAGAvB,EAAMzL,SAAW,SAAS2J,EAAMjX,GAC9B,IAAIC,EAAI+Y,EAAe/B,GAAM,GAK7B,OAHIjX,GAAOC,EAAEqR,QAAQ,EAAItR,EAAIjN,UAAYiN,IACvCC,EAAIA,EAAEqR,OAAO,EAAGrR,EAAElN,OAASiN,EAAIjN,SAE1BkN,CACT,EAGA8Y,EAAMwB,QAAU,SAAStD,GACvB,OAAO+B,EAAe/B,GAAM,EAC9B,EAGA8B,EAAMyB,OAAS,SAASC,GACtB,IAAKhC,EAAKiC,SAASD,GACjB,MAAM,IAAI9W,UACN,wDAA0D8W,GAIhE,IAAIJ,EAAOI,EAAWJ,MAAQ,GAE9B,IAAK3B,EAAS2B,GACZ,MAAM,IAAI1W,UACN,+DACO8W,EAAWJ,MAMxB,OAFUI,EAAWH,IAAMG,EAAWH,IAAMvB,EAAMhX,IAAM,KAC7C0Y,EAAWE,MAAQ,GAEhC,EAGA5B,EAAMhf,MAAQ,SAAS6gB,GACrB,IAAKlC,EAASkC,GACZ,MAAM,IAAIjX,UACN,uDAAyDiX,GAG/D,IAAIC,EAAW7B,EAAe4B,GAC9B,IAAKC,GAAgC,IAApBA,EAAS9nB,OACxB,MAAM,IAAI4Q,UAAU,iBAAmBiX,EAAa,KAMtD,OAJAC,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAEtB,CACLR,KAAMQ,EAAS,GACfP,IAAKO,EAAS,GAAKA,EAAS,GAAGxb,MAAM,EAAGwb,EAAS,GAAG9nB,OAAS,GAC7D4nB,KAAME,EAAS,GACf7a,IAAK6a,EAAS,GACd5pB,KAAM4pB,EAAS,GAAGxb,MAAM,EAAGwb,EAAS,GAAG9nB,OAAS8nB,EAAS,GAAG9nB,QAEhE,EAGAgmB,EAAMhX,IAAM,IACZgX,EAAM+B,UAAY,IAEhB1J,EAAOC,QAAU0H,IChRfgC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBjoB,IAAjBkoB,EACH,OAAOA,EAAa7J,QAGrB,IAAID,EAAS2J,EAAyBE,GAAY,CACjD9mB,GAAI8mB,EACJE,QAAQ,EACR9J,QAAS,CAAC,GAUX,OANA+J,EAAoBH,GAAUpG,KAAKzD,EAAOC,QAASD,EAAQA,EAAOC,QAAS2J,GAG3E5J,EAAO+J,QAAS,EAGT/J,EAAOC,OACf,CAGA2J,EAAoBvS,EAAI2S,ErD5BpBtqB,EAAW,GACfkqB,EAAoBK,EAAI,CAAC9T,EAAQ+T,EAAU5f,EAAI6f,KAC9C,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAASroB,EAAI,EAAGA,EAAItC,EAASiC,OAAQK,IAAK,CACrCkoB,EAAWxqB,EAASsC,GAAG,GACvBsI,EAAK5K,EAASsC,GAAG,GACjBmoB,EAAWzqB,EAASsC,GAAG,GAE3B,IAJA,IAGIsoB,GAAY,EACP5V,EAAI,EAAGA,EAAIwV,EAASvoB,OAAQ+S,MACpB,EAAXyV,GAAsBC,GAAgBD,IAAajmB,OAAO2N,KAAK+X,EAAoBK,GAAGM,OAAOlgB,GAASuf,EAAoBK,EAAE5f,GAAK6f,EAASxV,MAC9IwV,EAAShV,OAAOR,IAAK,IAErB4V,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACb5qB,EAASwV,OAAOlT,IAAK,GACrB,IAAIsd,EAAIhV,SACE1I,IAAN0d,IAAiBnJ,EAASmJ,EAC/B,CACD,CACA,OAAOnJ,CArBP,CAJCgU,EAAWA,GAAY,EACvB,IAAI,IAAInoB,EAAItC,EAASiC,OAAQK,EAAI,GAAKtC,EAASsC,EAAI,GAAG,GAAKmoB,EAAUnoB,IAAKtC,EAASsC,GAAKtC,EAASsC,EAAI,GACrGtC,EAASsC,GAAK,CAACkoB,EAAU5f,EAAI6f,EAuBjB,EsD3BdP,EAAoBjR,EAAKqH,IACxB,IAAIwK,EAASxK,GAAUA,EAAOyK,WAC7B,IAAOzK,EAAiB,QACxB,IAAM,EAEP,OADA4J,EAAoBc,EAAEF,EAAQ,CAAE/Y,EAAG+Y,IAC5BA,CAAM,ECLdZ,EAAoBc,EAAI,CAACzK,EAAS0K,KACjC,IAAI,IAAItgB,KAAOsgB,EACXf,EAAoBjF,EAAEgG,EAAYtgB,KAASuf,EAAoBjF,EAAE1E,EAAS5V,IAC5EnG,OAAO0mB,eAAe3K,EAAS5V,EAAK,CAAE0Z,YAAY,EAAMlZ,IAAK8f,EAAWtgB,IAE1E,ECNDuf,EAAoB/a,EAAI,CAAC,EAGzB+a,EAAoBrM,EAAKsN,GACjBC,QAAQC,IAAI7mB,OAAO2N,KAAK+X,EAAoB/a,GAAGuC,QAAO,CAAC4Z,EAAU3gB,KACvEuf,EAAoB/a,EAAExE,GAAKwgB,EAASG,GAC7BA,IACL,KCNJpB,EAAoBjc,EAAKkd,GAEZA,EAAU,IAAMA,EAAU,SAAW,CAAC,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,wBAAwBA,GCH9IjB,EAAoBqB,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAO1qB,MAAQ,IAAIwH,SAAS,cAAb,EAChB,CAAE,MAAOuV,GACR,GAAsB,iBAAXoB,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBiL,EAAoBjF,EAAI,CAACzB,EAAK3H,IAAUrX,OAAOkf,UAAU2D,eAAetD,KAAKP,EAAK3H,G1DA9E5b,EAAa,CAAC,EACdC,EAAoB,aAExBgqB,EAAoBuB,EAAI,CAACnN,EAAKnB,EAAMxS,EAAKwgB,KACxC,GAAGlrB,EAAWqe,GAAQre,EAAWqe,GAAKjQ,KAAK8O,OAA3C,CACA,IAAIuO,EAAQC,EACZ,QAAWzpB,IAARyI,EAEF,IADA,IAAIihB,EAAUC,SAASC,qBAAqB,UACpCxpB,EAAI,EAAGA,EAAIspB,EAAQ3pB,OAAQK,IAAK,CACvC,IAAIsK,EAAIgf,EAAQtpB,GAChB,GAAGsK,EAAEmf,aAAa,QAAUzN,GAAO1R,EAAEmf,aAAa,iBAAmB7rB,EAAoByK,EAAK,CAAE+gB,EAAS9e,EAAG,KAAO,CACpH,CAEG8e,IACHC,GAAa,GACbD,EAASG,SAASG,cAAc,WAEzBC,QAAU,QACjBP,EAAOQ,QAAU,IACbhC,EAAoBiC,IACvBT,EAAOU,aAAa,QAASlC,EAAoBiC,IAElDT,EAAOU,aAAa,eAAgBlsB,EAAoByK,GAExD+gB,EAAOjT,IAAM6F,GAEdre,EAAWqe,GAAO,CAACnB,GACnB,IAAIkP,EAAmB,CAAC5W,EAAM6W,KAE7BZ,EAAOa,QAAUb,EAAOc,OAAS,KACjC/mB,aAAaymB,GACb,IAAIO,EAAUxsB,EAAWqe,GAIzB,UAHOre,EAAWqe,GAClBoN,EAAOgB,YAAchB,EAAOgB,WAAWC,YAAYjB,GACnDe,GAAWA,EAAQ7gB,SAAShB,GAAQA,EAAG0hB,KACpC7W,EAAM,OAAOA,EAAK6W,EAAM,EAExBJ,EAAU7mB,WAAWgnB,EAAiBrH,KAAK,UAAM9iB,EAAW,CAAE3B,KAAM,UAAWqsB,OAAQlB,IAAW,MACtGA,EAAOa,QAAUF,EAAiBrH,KAAK,KAAM0G,EAAOa,SACpDb,EAAOc,OAASH,EAAiBrH,KAAK,KAAM0G,EAAOc,QACnDb,GAAcE,SAASgB,KAAKC,YAAYpB,EApCkB,CAoCX,E2DvChDxB,EAAoBtK,EAAKW,IACH,oBAAXpP,QAA0BA,OAAO4b,aAC1CvoB,OAAO0mB,eAAe3K,EAASpP,OAAO4b,YAAa,CAAEjrB,MAAO,WAE7D0C,OAAO0mB,eAAe3K,EAAS,aAAc,CAAEze,OAAO,GAAO,ECL9DooB,EAAoB8C,IAAO1M,IAC1BA,EAAO2M,MAAQ,GACV3M,EAAO4M,WAAU5M,EAAO4M,SAAW,IACjC5M,GCHR4J,EAAoBlV,EAAI,WCAxB,IAAImY,EACAjD,EAAoBqB,EAAE6B,gBAAeD,EAAYjD,EAAoBqB,EAAE8B,SAAW,IACtF,IAAIxB,EAAW3B,EAAoBqB,EAAEM,SACrC,IAAKsB,GAAatB,IACbA,EAASyB,gBACZH,EAAYtB,EAASyB,cAAc7U,MAC/B0U,GAAW,CACf,IAAIvB,EAAUC,EAASC,qBAAqB,UAC5C,GAAGF,EAAQ3pB,OAEV,IADA,IAAIK,EAAIspB,EAAQ3pB,OAAS,EAClBK,GAAK,KAAO6qB,IAAc,aAAa7e,KAAK6e,KAAaA,EAAYvB,EAAQtpB,KAAKmW,GAE3F,CAID,IAAK0U,EAAW,MAAM,IAAI9f,MAAM,yDAChC8f,EAAYA,EAAUtgB,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFqd,EAAoBxb,EAAIye,YClBxBjD,EAAoBlY,EAAI6Z,SAAS0B,SAAW7H,KAAK2H,SAASG,KAK1D,IAAIC,EAAkB,CACrB,KAAM,GAGPvD,EAAoB/a,EAAE6F,EAAI,CAACmW,EAASG,KAElC,IAAIoC,EAAqBxD,EAAoBjF,EAAEwI,EAAiBtC,GAAWsC,EAAgBtC,QAAWjpB,EACtG,GAA0B,IAAvBwrB,EAGF,GAAGA,EACFpC,EAASjd,KAAKqf,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAIvC,SAAQ,CAAChD,EAASwF,IAAYF,EAAqBD,EAAgBtC,GAAW,CAAC/C,EAASwF,KAC1GtC,EAASjd,KAAKqf,EAAmB,GAAKC,GAGtC,IAAIrP,EAAM4L,EAAoBxb,EAAIwb,EAAoBjc,EAAEkd,GAEpDpmB,EAAQ,IAAIsI,MAgBhB6c,EAAoBuB,EAAEnN,GAfFgO,IACnB,GAAGpC,EAAoBjF,EAAEwI,EAAiBtC,KAEf,KAD1BuC,EAAqBD,EAAgBtC,MACRsC,EAAgBtC,QAAWjpB,GACrDwrB,GAAoB,CACtB,IAAIG,EAAYvB,IAAyB,SAAfA,EAAM/rB,KAAkB,UAAY+rB,EAAM/rB,MAChEutB,EAAUxB,GAASA,EAAMM,QAAUN,EAAMM,OAAOnU,IACpD1T,EAAMzB,QAAU,iBAAmB6nB,EAAU,cAAgB0C,EAAY,KAAOC,EAAU,IAC1F/oB,EAAM5E,KAAO,iBACb4E,EAAMxE,KAAOstB,EACb9oB,EAAMkZ,QAAU6P,EAChBJ,EAAmB,GAAG3oB,EACvB,CACD,GAEwC,SAAWomB,EAASA,EAE/D,CACD,EAWFjB,EAAoBK,EAAEvV,EAAKmW,GAA0C,IAA7BsC,EAAgBtC,GAGxD,IAAI4C,EAAuB,CAACC,EAA4BtqB,KACvD,IAKIymB,EAAUgB,EALVX,EAAW9mB,EAAK,GAChBuqB,EAAcvqB,EAAK,GACnBwqB,EAAUxqB,EAAK,GAGIpB,EAAI,EAC3B,GAAGkoB,EAAS1H,MAAMzf,GAAgC,IAAxBoqB,EAAgBpqB,KAAa,CACtD,IAAI8mB,KAAY8D,EACZ/D,EAAoBjF,EAAEgJ,EAAa9D,KACrCD,EAAoBvS,EAAEwS,GAAY8D,EAAY9D,IAGhD,GAAG+D,EAAS,IAAIzX,EAASyX,EAAQhE,EAClC,CAEA,IADG8D,GAA4BA,EAA2BtqB,GACrDpB,EAAIkoB,EAASvoB,OAAQK,IACzB6oB,EAAUX,EAASloB,GAChB4nB,EAAoBjF,EAAEwI,EAAiBtC,IAAYsC,EAAgBtC,IACrEsC,EAAgBtC,GAAS,KAE1BsC,EAAgBtC,GAAW,EAE5B,OAAOjB,EAAoBK,EAAE9T,EAAO,EAGjC0X,EAAqBzI,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FyI,EAAmBviB,QAAQmiB,EAAqB/I,KAAK,KAAM,IAC3DmJ,EAAmB9f,KAAO0f,EAAqB/I,KAAK,KAAMmJ,EAAmB9f,KAAK2W,KAAKmJ,QCvFvFjE,EAAoBiC,QAAKjqB,ECGzB,IAAIksB,EAAsBlE,EAAoBK,OAAEroB,EAAW,CAAC,OAAO,IAAOgoB,EAAoB,OAC9FkE,EAAsBlE,EAAoBK,EAAE6D","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/Refresh.vue?0940","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=template&id=7301d745","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/MessageReplyText.vue?2121","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=template&id=5b37a4cf","webpack:///nextcloud/node_modules/vue-material-design-icons/AlertCircleOutline.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/AlertCircleOutline.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/AlertCircleOutline.vue?730b","webpack:///nextcloud/node_modules/vue-material-design-icons/AlertCircleOutline.vue?vue&type=template&id=4aed4486","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/logger.js","webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?65e8","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack:///nextcloud/apps/comments/src/mixins/CommentView.ts","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/brace-expressions.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/index.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/headers.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/escape.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/unescape.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/dav.js","webpack:///nextcloud/node_modules/layerr/dist/layerr.js","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/node_modules/webdav/dist/node/response.js","webpack:///nextcloud/apps/comments/src/views/Comments.vue","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/services/ReadComments.ts","webpack:///nextcloud/apps/comments/src/utils/cancelableRequest.js","webpack://nextcloud/./apps/comments/src/views/Comments.vue?75b7","webpack://nextcloud/./apps/comments/src/views/Comments.vue?f45b","webpack://nextcloud/./apps/comments/src/views/Comments.vue?0e41","webpack:///nextcloud/apps/comments/src/services/CommentsInstance.js","webpack:///nextcloud/apps/comments/src/comments-app.js","webpack:///nextcloud/node_modules/balanced-match/index.js","webpack:///nextcloud/node_modules/brace-expansion/index.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=style&index=0&id=af5e82dc&prod&lang=scss&scoped=true","webpack:///nextcloud/node_modules/fast-xml-parser/src/fxp.js","webpack:///nextcloud/node_modules/nested-property/dist/nested-property.js","webpack:///nextcloud/node_modules/path-posix/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon refresh-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"RefreshIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Refresh.vue?vue&type=template&id=7301d745\"\nimport script from \"./Refresh.vue?vue&type=script&lang=js\"\nexport * from \"./Refresh.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon refresh-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon message-reply-text-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MessageReplyTextIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import { render, staticRenderFns } from \"./MessageReplyText.vue?vue&type=template&id=5b37a4cf\"\nimport script from \"./MessageReplyText.vue?vue&type=script&lang=js\"\nexport * from \"./MessageReplyText.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon message-reply-text-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./AlertCircleOutline.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./AlertCircleOutline.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon alert-circle-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AlertCircleOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import { render, staticRenderFns } from \"./AlertCircleOutline.vue?vue&type=template&id=4aed4486\"\nimport script from \"./AlertCircleOutline.vue?vue&type=script&lang=js\"\nexport * from \"./AlertCircleOutline.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon alert-circle-outline-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted),expression:\"!deleted\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":true,\"icon\":\"icon-rename\"},on:{\"click\":_vm.onEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true,\"icon\":\"icon-delete\"},on:{\"click\":_vm.onDeleteWithUndo}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":_vm.onEditCancel}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('NcDateTime',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp,\"ignore-seconds\":true}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('form',{staticClass:\"comment__editor\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"comment__editor-group\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"label\":_vm.editor ? _vm.t('comments', 'New comment') : _vm.t('comments', 'Edit comment'),\"placeholder\":_vm.t('comments', 'Write a comment …'),\"value\":_vm.localMessage,\"user-data\":_vm.userData,\"aria-describedby\":\"tab-comments__editor-description\"},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('div',{staticClass:\"comment__submit\"},[_c('NcButton',{attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('span',{staticClass:\"icon-loading-small\"}):_c('ArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,2357784758)})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__editor-description\",attrs:{\"id\":\"tab-comments__editor-description\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', '@ for mentions, : for emoji, / for smart picker'))+\"\\n\\t\\t\\t\")])]):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath())\n\n// set CSRF token header\nconst setHeaders = (token) => {\n client.setHeaders({\n // Add this so the server knows it is an request from the browser\n 'X-Requested-With': 'XMLHttpRequest',\n // Inject user auth\n requesttoken: token ?? '',\n })\n}\n\n// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders)\nsetHeaders(getRequestToken())\n\nexport default client\n","/**\n * @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @author Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport logger from '../logger.js'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tresourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'files',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.resourceType, this.resourceId, this.id, message)\n\t\t\t\tlogger.debug('Comment edited', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.deleted = true\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.resourceType, this.resourceId, this.id)\n\t\t\t\tlogger.debug('Comment deleted', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.resourceType, this.resourceId, message)\n\t\t\t\tlogger.debug('New comment posted', { resourceType: this.resourceType, resourceId: this.resourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(resourceType, resourceId, commentId, message) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(resourceType, resourceId, commentId) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(resourceType, resourceId, message) {\n\tconst resourcePath = ['', resourceType, resourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + resourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: resourceType,\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from resource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = resourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\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 - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else\n\t\t\t\t\t\ticon=\"icon-close\"\n\t\t\t\t\t\t@click=\"onEditCancel\">\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<NcDateTime v-else-if=\"creationDateTime\"\n\t\t\t\t\tclass=\"comment__timestamp\"\n\t\t\t\t\t:timestamp=\"timestamp\"\n\t\t\t\t\t:ignore-seconds=\"true\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<form v-if=\"editor || editing\" class=\"comment__editor\" @submit.prevent>\n\t\t\t\t<div class=\"comment__editor-group\">\n\t\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t\t:label=\"editor ? t('comments', 'New comment') : t('comments', 'Edit comment')\"\n\t\t\t\t\t\t:placeholder=\"t('comments', 'Write a comment …')\"\n\t\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t\taria-describedby=\"tab-comments__editor-description\"\n\t\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t\t<div class=\"comment__submit\">\n\t\t\t\t\t\t<NcButton type=\"tertiary-no-background\"\n\t\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<span v-if=\"loading\" class=\"icon-loading-small\" />\n\t\t\t\t\t\t\t\t<ArrowRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"tab-comments__editor-description\" class=\"comment__editor-description\">\n\t\t\t\t\t{{ t('comments', '@ for mentions, : for emoji, / for smart picker') }}\n\t\t\t\t</div>\n\t\t\t</form>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t\t<!-- eslint-enable vue/no-v-html-->\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\n\nimport CommentMixin from '../mixins/CommentMixin.js'\n\n// Dynamic loading\nconst NcRichContenteditable = () => import('@nextcloud/vue/dist/Components/NcRichContenteditable.js')\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tArrowRight,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tNcDateTime,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t\tsubmitted: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\t/**\n\t\t * Timestamp of the creation time (in ms UNIX time)\n\t\t */\n\t\ttimestamp() {\n\t\t\treturn Date.parse(this.creationDateTime)\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t\tthis.submitted = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true\";\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=e4ab9720&scoped=true\"\nimport script from \"./Comment.vue?vue&type=script&lang=js\"\nexport * from \"./Comment.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e4ab9720\",\n null\n \n)\n\nexport default component.exports","import axios from '@nextcloud/axios';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n props: {\n resourceId: {\n type: Number,\n required: true,\n },\n resourceType: {\n type: String,\n default: 'files',\n },\n },\n data() {\n return {\n editorData: {\n actorDisplayName: getCurrentUser().displayName,\n actorId: getCurrentUser().uid,\n key: 'editor',\n },\n userData: {},\n };\n },\n methods: {\n /**\n * Autocomplete @mentions\n *\n * @param {string} search the query\n * @param {Function} callback the callback to process the results with\n */\n async autoComplete(search, callback) {\n const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n params: {\n search,\n itemType: 'files',\n itemId: this.resourceId,\n sorter: 'commenters|share-recipients',\n limit: loadState('comments', 'maxAutoCompleteResults'),\n },\n });\n // Save user data so it can be used by the editor to replace mentions\n data.ocs.data.forEach(user => { this.userData[user.id] = user; });\n return callback(Object.values(this.userData));\n },\n /**\n * Make sure we have all mentions as Array of objects\n *\n * @param mentions the mentions list\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genMentionsData(mentions) {\n Object.values(mentions)\n .flat()\n .forEach(mention => {\n this.userData[mention.mentionId] = {\n // TODO: support groups\n icon: 'icon-user',\n id: mention.mentionId,\n label: mention.mentionDisplayName,\n source: 'users',\n primary: getCurrentUser()?.uid === mention.mentionId,\n };\n });\n return this.userData;\n },\n },\n});\n","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","import expand from 'brace-expansion';\nimport { parseClass } from './brace-expressions.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\nexport default minimatch;\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\nconst plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' },\n};\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = (s) => s.split('').reduce((set, c) => {\n set[c] = true;\n return set;\n}, {});\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!');\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(');\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\nconst MAX_PATTERN_LENGTH = 1024 * 64;\nconst assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globUnescape = (s) => s.replace(/\\\\(.)/g, '$1');\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (!matched)\n continue;\n globParts[i] = matched;\n globParts[j] = [];\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // a UNC pattern like //?/c:/* can match a path like c:/x\n // and vice versa\n if (this.isWindows) {\n const fileUNC = file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n typeof file[3] === 'string' &&\n /^[a-z]:$/i.test(file[3]);\n const patternUNC = pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n if (fileUNC && patternUNC) {\n const fd = file[3];\n const pd = pattern[3];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n file[3] = pd;\n }\n }\n else if (patternUNC && typeof file[0] === 'string') {\n const pd = pattern[3];\n const fd = file[0];\n if (pd.toLowerCase() === fd.toLowerCase()) {\n pattern[3] = fd;\n pattern = pattern.slice(3);\n }\n }\n else if (fileUNC && typeof pattern[0] === 'string') {\n const fd = file[3];\n if (fd.toLowerCase() === pattern[0].toLowerCase()) {\n pattern[0] = fd;\n file = file.slice(3);\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n let re = '';\n let hasMagic = false;\n let escaping = false;\n // ? => one single character\n const patternListStack = [];\n const negativeLists = [];\n let stateChar = false;\n let uflag = false;\n let pl;\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set. However, if the pattern\n // starts with ., then traversal patterns can match.\n let dotTravAllowed = pattern.charAt(0) === '.';\n let dotFileAllowed = options.dot || dotTravAllowed;\n const patternStart = () => dotTravAllowed\n ? ''\n : dotFileAllowed\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const subPatternStart = (p) => p.charAt(0) === '.'\n ? ''\n : options.dot\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const clearStateChar = () => {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star;\n hasMagic = true;\n break;\n case '?':\n re += qmark;\n hasMagic = true;\n break;\n default:\n re += '\\\\' + stateChar;\n break;\n }\n this.debug('clearStateChar %j %j', stateChar, re);\n stateChar = false;\n }\n };\n for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c);\n // skip over any that are escaped.\n if (escaping) {\n // completely not allowed, even escaped.\n // should be impossible.\n /* c8 ignore start */\n if (c === '/') {\n return false;\n }\n /* c8 ignore stop */\n if (reSpecials[c]) {\n re += '\\\\';\n }\n re += c;\n escaping = false;\n continue;\n }\n switch (c) {\n // Should already be path-split by now.\n /* c8 ignore start */\n case '/': {\n return false;\n }\n /* c8 ignore stop */\n case '\\\\':\n clearStateChar();\n escaping = true;\n continue;\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c);\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n this.debug('call clearStateChar %j', stateChar);\n clearStateChar();\n stateChar = c;\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext)\n clearStateChar();\n continue;\n case '(': {\n if (!stateChar) {\n re += '\\\\(';\n continue;\n }\n const plEntry = {\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close,\n };\n this.debug(this.pattern, '\\t', plEntry);\n patternListStack.push(plEntry);\n // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n re += plEntry.open;\n // next entry starts with a dot maybe?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n this.debug('plType %j %j', stateChar, re);\n stateChar = false;\n continue;\n }\n case ')': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\)';\n continue;\n }\n patternListStack.pop();\n // closing an extglob\n clearStateChar();\n hasMagic = true;\n pl = plEntry;\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close;\n if (pl.type === '!') {\n negativeLists.push(Object.assign(pl, { reEnd: re.length }));\n }\n continue;\n }\n case '|': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\|';\n continue;\n }\n clearStateChar();\n re += '|';\n // next subpattern can start with a dot?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n continue;\n }\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar();\n const [src, needUflag, consumed, magic] = parseClass(pattern, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n }\n else {\n re += '\\\\[';\n }\n continue;\n case ']':\n re += '\\\\' + c;\n continue;\n default:\n // swallow any state char that wasn't consumed\n clearStateChar();\n re += regExpEscape(c);\n break;\n } // switch\n } // for\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n let tail;\n tail = re.slice(pl.reStart + pl.open.length);\n this.debug(this.pattern, 'setting tail', re, pl);\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\';\n // should already be done\n /* c8 ignore start */\n }\n /* c8 ignore stop */\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|';\n });\n this.debug('tail=%j\\n %s', tail, tail, pl, re);\n const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\\\' + pl.type;\n hasMagic = true;\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail;\n }\n // handle trailing things that only matter at the very end.\n clearStateChar();\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\';\n }\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n const addPatternStart = addPatternStartSet[re.charAt(0)];\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (let n = negativeLists.length - 1; n > -1; n--) {\n const nl = negativeLists[n];\n const nlBefore = re.slice(0, nl.reStart);\n const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);\n let nlAfter = re.slice(nl.reEnd);\n const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n const closeParensBefore = nlBefore.split(')').length;\n const openParensBefore = nlBefore.split('(').length - closeParensBefore;\n let cleanAfter = nlAfter;\n for (let i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '');\n }\n nlAfter = cleanAfter;\n const dollar = nlAfter === '' ? '(?:$|\\\\/)' : '';\n re = nlBefore + nlFirst + nlAfter + dollar + nlLast;\n }\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re;\n }\n if (addPatternStart) {\n re = patternStart() + re;\n }\n // if it's nocase, and the lcase/uppercase don't match, it's magic\n if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {\n hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();\n }\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(re);\n }\n const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n try {\n const ext = fastTest\n ? {\n _glob: pattern,\n _src: re,\n test: fastTest,\n }\n : {\n _glob: pattern,\n _src: re,\n };\n return Object.assign(new RegExp('^' + re + '$', flags), ext);\n /* c8 ignore start */\n }\n catch (er) {\n // should be impossible\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n this.debug('invalid regexp', er);\n return new RegExp('$.');\n }\n /* c8 ignore stop */\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = options.nocase ? 'i' : '';\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src);\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n return pp.filter(p => p !== GLOBSTAR).join('/');\n })\n .join('|');\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$';\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').*$';\n try {\n this.regexp = new RegExp(re, flags);\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","export function convertResponseHeaders(headers) {\n const output = {};\n for (const key of headers.keys()) {\n output[key] = headers.get(key);\n }\n return output;\n}\nexport function mergeHeaders(...headerPayloads) {\n if (headerPayloads.length === 0)\n return {};\n const headerKeys = {};\n return headerPayloads.reduce((output, headers) => {\n Object.keys(headers).forEach(header => {\n const lowerHeader = header.toLowerCase();\n if (headerKeys.hasOwnProperty(lowerHeader)) {\n output[headerKeys[lowerHeader]] = headers[header];\n }\n else {\n headerKeys[lowerHeader] = header;\n output[header] = headers[header];\n }\n });\n return output;\n }, {});\n}\n","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","import path from \"path-posix\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport nestedProp from \"nested-property\";\nimport { encodePath, normalisePath } from \"./path.js\";\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Array\"] = \"array\";\n PropertyType[\"Object\"] = \"object\";\n PropertyType[\"Original\"] = \"original\";\n})(PropertyType || (PropertyType = {}));\nfunction getParser() {\n return new XMLParser({\n removeNSPrefix: true,\n numberParseOptions: {\n hex: true,\n leadingZeros: false\n }\n // // We don't use the processors here as decoding is done manually\n // // later on - decoding early would break some path checks.\n // attributeValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val)),\n // tagValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val))\n });\n}\nfunction getPropertyOfType(obj, prop, type = PropertyType.Original) {\n const val = nestedProp.get(obj, prop);\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n }\n else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n return val;\n}\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n // Only either status OR propstat is allowed\n if (output.status) {\n nestedProp.set(output, \"status\", getPropertyOfType(output, \"status\", PropertyType.Object));\n }\n else {\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", PropertyType.Object));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", PropertyType.Object));\n }\n return output;\n}\nfunction normaliseResult(result) {\n const { multistatus } = result;\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n const output = {\n multistatus: Array.isArray(multistatus) ? multistatus[0] : multistatus\n };\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", PropertyType.Array));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n/**\n * Parse an XML response from a WebDAV service,\n * converting it to an internal DAV result\n * @param xml The raw XML string\n * @returns A parsed and processed DAV result\n */\nexport function parseXML(xml) {\n return new Promise(resolve => {\n const result = getParser().parse(xml);\n resolve(normaliseResult(result));\n });\n}\nexport function prepareFileFromProps(props, filename, isDetailed = false) {\n // Last modified time, raw size, item type and mime\n const { getlastmodified: lastMod = null, getcontentlength: rawSize = \"0\", resourcetype: resourceType = null, getcontenttype: mimeType = null, getetag: etag = null } = props;\n const type = resourceType &&\n typeof resourceType === \"object\" &&\n typeof resourceType.collection !== \"undefined\"\n ? \"directory\"\n : \"file\";\n const stat = {\n filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n if (isDetailed) {\n stat.props = props;\n }\n return stat;\n}\n/**\n * Parse a DAV result for file stats\n * @param result The resulting DAV response\n * @param filename The filename that was stat'd\n * @param isDetailed Whether or not the raw props of\n * the resource should be returned\n * @returns A file stat result\n */\nexport function parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n try {\n // should be a propstat response, if not the if below will throw an error\n if (result.multistatus.response[0].propstat) {\n responseItem = result.multistatus.response[0];\n }\n }\n catch (e) {\n /* ignore */\n }\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n const { propstat: { prop: props, status: statusLine } } = responseItem;\n // As defined in https://tools.ietf.org/html/rfc2068#section-6.1\n const [_, statusCodeStr, statusText] = statusLine.split(\" \", 3);\n const statusCode = parseInt(statusCodeStr, 10);\n if (statusCode >= 400) {\n const err = new Error(`Invalid response: ${statusCode} ${statusText}`);\n err.status = statusCode;\n throw err;\n }\n const filePath = normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n/**\n * Parse a DAV result for a search request\n *\n * @param result The resulting DAV response\n * @param searchArbiter The collection path that was searched\n * @param isDetailed Whether or not the raw props of the resource should be returned\n */\nexport function parseSearch(result, searchArbiter, isDetailed) {\n const response = {\n truncated: false,\n results: []\n };\n response.truncated = result.multistatus.response.some(v => {\n return ((v.status || v.propstat?.status).split(\" \", 3)?.[1] === \"507\" &&\n v.href.replace(/\\/$/, \"\").endsWith(encodePath(searchArbiter).replace(/\\/$/, \"\")));\n });\n result.multistatus.response.forEach(result => {\n if (result.propstat === undefined) {\n return;\n }\n const filename = result.href.split(\"/\").map(decodeURIComponent).join(\"/\");\n response.results.push(prepareFileFromProps(result.propstat.prop, filename, isDetailed));\n });\n return response;\n}\n/**\n * Translate a disk quota indicator to a recognised\n * value (includes \"unlimited\" and \"unknown\")\n * @param value The quota indicator, eg. \"-3\"\n * @returns The value in bytes, or another indicator\n */\nexport function translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n case \"-2\":\n /* falls-through */\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n default:\n return parseInt(value, 10);\n }\n}\n","import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = \"Layerr\";\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause) ? err._cause : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack;\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n cause() {\n return Layerr.cause(this);\n }\n toString() {\n let output = this.name || this.constructor.name || this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { parseXML } from 'webdav';\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from 'webdav/dist/node/response.js';\nimport { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js';\nimport client from './DavClient.js';\nexport const DEFAULT_LIMIT = 20;\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.resourceType the resource type\n * @param {number} data.resourceId the resource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @param {number} [options.limit] the pagination limit, defaults to 20\n * @param {Date} [options.datetime] optional date to query\n * @return {{data: object[]}} the comments list\n */\nexport const getComments = async function ({ resourceType, resourceId }, options) {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const datetime = options.datetime ? `<oc:datetime>${options.datetime.toISOString()}</oc:datetime>` : '';\n const response = await client.customRequest(resourcePath, Object.assign({\n method: 'REPORT',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${options.limit ?? DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t\t${datetime}\n\t\t\t</oc:filter-comments>`,\n }, options));\n const responseData = await response.text();\n const result = await parseXML(responseData);\n const stat = getDirectoryFiles(result, true);\n return processResponsePayload(response, stat, true);\n};\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function (result, isDetailed = false) {\n // Extract the response items (directory contents)\n const { multistatus: { response: responseItems }, } = result;\n // Map all items to a consistent output structure (results)\n return responseItems.map(item => {\n // Each item should contain a stat object\n const props = item.propstat.prop;\n return prepareFileFromProps(props, props.id.toString(), isDetailed);\n });\n};\n","import minimatch from \"minimatch\";\nimport { convertResponseHeaders } from \"./tools/headers.js\";\nexport function createErrorFromResponse(response, prefix = \"\") {\n const err = new Error(`${prefix}Invalid response: ${response.status} ${response.statusText}`);\n err.status = response.status;\n err.response = response;\n return err;\n}\nexport function handleResponseCode(context, response) {\n const { status } = response;\n if (status === 401 && context.digest)\n return response;\n if (status >= 400) {\n const err = createErrorFromResponse(response);\n throw err;\n }\n return response;\n}\nexport function processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, { matchBase: true }));\n}\n/**\n * Process a response payload (eg. from `customRequest`) and\n * prepare it for further processing. Exposed for custom\n * request handling.\n * @param response The response for a request\n * @param data The data returned\n * @param isDetailed Whether or not a detailed result is\n * requested\n * @returns The response data, or a detailed response object\n * if required\n */\nexport function processResponsePayload(response, data, isDetailed = false) {\n return isDetailed\n ? {\n data,\n headers: response.headers ? convertResponseHeaders(response.headers) : {},\n status: response.status,\n statusText: response.statusText\n }\n : data;\n}\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\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 - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-element-visibility=\"onVisibilityChange\"\n\t\tclass=\"comments\"\n\t\t:class=\"{ 'icon-loading': isFirstLoading }\">\n\t\t<!-- Editor -->\n\t\t<Comment v-bind=\"editorData\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:resource-type=\"resourceType\"\n\t\t\t:editor=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t:resource-id=\"resourceId\"\n\t\t\tclass=\"comments__writer\"\n\t\t\t@new=\"onNewComment\" />\n\n\t\t<template v-if=\"!isFirstLoading\">\n\t\t\t<NcEmptyContent v-if=\"!hasComments && done\"\n\t\t\t\tclass=\"comments__empty\"\n\t\t\t\t:name=\"t('comments', 'No comments yet, start the conversation!')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<MessageReplyTextIcon />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<ul v-else>\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<Comment v-for=\"comment in comments\"\n\t\t\t\t\t:key=\"comment.props.id\"\n\t\t\t\t\ttag=\"li\"\n\t\t\t\t\tv-bind=\"comment.props\"\n\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t:resource-type=\"resourceType\"\n\t\t\t\t\t:message.sync=\"comment.props.message\"\n\t\t\t\t\t:resource-id=\"resourceId\"\n\t\t\t\t\t:user-data=\"genMentionsData(comment.props.mentions)\"\n\t\t\t\t\tclass=\"comments__list\"\n\t\t\t\t\t@delete=\"onDelete\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Loading more message -->\n\t\t\t<div v-if=\"loading && !isFirstLoading\" class=\"comments__info icon-loading\" />\n\n\t\t\t<div v-else-if=\"hasComments && done\" class=\"comments__info\">\n\t\t\t\t{{ t('comments', 'No more messages') }}\n\t\t\t</div>\n\n\t\t\t<!-- Error message -->\n\t\t\t<template v-else-if=\"error\">\n\t\t\t\t<NcEmptyContent class=\"comments__error\" :name=\"error\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AlertCircleOutlineIcon />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t\t<NcButton class=\"comments__retry\" @click=\"getComments\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<RefreshIcon />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('comments', 'Retry') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport { vElementVisibility } from '@vueuse/components'\n\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\nimport MessageReplyTextIcon from 'vue-material-design-icons/MessageReplyText.vue'\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\n\nimport Comment from '../components/Comment.vue'\nimport CommentView from '../mixins/CommentView'\nimport cancelableRequest from '../utils/cancelableRequest.js'\nimport { getComments, DEFAULT_LIMIT } from '../services/GetComments.ts'\nimport { markCommentsAsRead } from '../services/ReadComments.ts'\n\nexport default {\n\tname: 'Comments',\n\n\tcomponents: {\n\t\tComment,\n\t\tNcEmptyContent,\n\t\tNcButton,\n\t\tRefreshIcon,\n\t\tMessageReplyTextIcon,\n\t\tAlertCircleOutlineIcon,\n\t},\n\n\tdirectives: {\n\t\tvElementVisibility,\n\t},\n\n\tmixins: [CommentView],\n\n\tdata() {\n\t\treturn {\n\t\t\terror: '',\n\t\t\tloading: false,\n\t\t\tdone: false,\n\n\t\t\tresourceId: null,\n\t\t\toffset: 0,\n\t\t\tcomments: [],\n\n\t\t\tcancelRequest: () => {},\n\n\t\t\tComment,\n\t\t\tuserData: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasComments() {\n\t\t\treturn this.comments.length > 0\n\t\t},\n\t\tisFirstLoading() {\n\t\t\treturn this.loading && this.offset === 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tasync onVisibilityChange(isVisible) {\n\t\t\tif (isVisible) {\n\t\t\t\ttry {\n\t\t\t\t\tawait markCommentsAsRead(this.resourceType, this.resourceId, new Date())\n\t\t\t\t} catch (e) {\n\t\t\t\t\tshowError(e.message || t('comments', 'Failed to mark comments as read'))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update current resourceId and fetch new data\n\t\t *\n\t\t * @param {number} resourceId the current resourceId (fileId...)\n\t\t */\n\t\tasync update(resourceId) {\n\t\t\tthis.resourceId = resourceId\n\t\t\tthis.resetState()\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Ran when the bottom of the tab is reached\n\t\t */\n\t\tonScrollBottomReached() {\n\t\t\t/**\n\t\t\t * Do not fetch more if we:\n\t\t\t * - are showing an error\n\t\t\t * - already fetched everything\n\t\t\t * - are currently loading\n\t\t\t */\n\t\t\tif (this.error || this.done || this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getComments() {\n\t\t\t// Cancel any ongoing request\n\t\t\tthis.cancelRequest('cancel')\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.error = ''\n\n\t\t\t\t// Init cancellable request\n\t\t\t\tconst { request, abort } = cancelableRequest(getComments)\n\t\t\t\tthis.cancelRequest = abort\n\n\t\t\t\t// Fetch comments\n\t\t\t\tconst { data: comments } = await request({\n\t\t\t\t\tresourceType: this.resourceType,\n\t\t\t\t\tresourceId: this.resourceId,\n\t\t\t\t}, { offset: this.offset }) || { data: [] }\n\n\t\t\t\tthis.logger.debug(`Processed ${comments.length} comments`, { comments })\n\n\t\t\t\t// We received less than the requested amount,\n\t\t\t\t// we're done fetching comments\n\t\t\t\tif (comments.length < DEFAULT_LIMIT) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t// Insert results\n\t\t\t\tthis.comments.push(...comments)\n\n\t\t\t\t// Increase offset for next fetch\n\t\t\t\tthis.offset += DEFAULT_LIMIT\n\t\t\t} catch (error) {\n\t\t\t\tif (error.message === 'cancel') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.error = t('comments', 'Unable to load the comments list')\n\t\t\t\tconsole.error('Error loading the comments list', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add newly created comment to the list\n\t\t *\n\t\t * @param {object} comment the new comment\n\t\t */\n\t\tonNewComment(comment) {\n\t\t\tthis.comments.unshift(comment)\n\t\t},\n\n\t\t/**\n\t\t * Remove deleted comment from the list\n\t\t *\n\t\t * @param {number} id the deleted comment\n\t\t */\n\t\tonDelete(id) {\n\t\t\tconst index = this.comments.findIndex(comment => comment.props.id === id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.comments.splice(index, 1)\n\t\t\t} else {\n\t\t\t\tconsole.error('Could not find the deleted comment in the list', id)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.error = ''\n\t\t\tthis.loading = false\n\t\t\tthis.done = false\n\t\t\tthis.offset = 0\n\t\t\tthis.comments = []\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.comments {\n\tmin-height: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty,\n\t&__error {\n\t\tflex: 1 0;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport client from './DavClient.js';\n/**\n * Mark comments older than the date timestamp as read\n *\n * @param resourceType the resource type\n * @param resourceId the resource ID\n * @param date the date object\n */\nexport const markCommentsAsRead = (resourceType, resourceId, date) => {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const readMarker = date.toUTCString();\n return client.customRequest(resourcePath, {\n method: 'PROPPATCH',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:readMarker>${readMarker}</oc:readMarker>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n });\n};\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {Function} request the axios promise request\n * @return {object}\n */\nconst cancelableRequest = function(request) {\n\tconst controller = new AbortController()\n\tconst signal = controller.signal\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\tconst response = await request(\n\t\t\turl,\n\t\t\tObject.assign({ signal }, options)\n\t\t)\n\t\treturn response\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tabort: () => controller.abort(),\n\t}\n}\n\nexport default cancelableRequest\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=af5e82dc&prod&lang=scss&scoped=true\";\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=af5e82dc&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comments.vue?vue&type=template&id=af5e82dc&scoped=true\"\nimport script from \"./Comments.vue?vue&type=script&lang=js\"\nexport * from \"./Comments.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comments.vue?vue&type=style&index=0&id=af5e82dc&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"af5e82dc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"element-visibility\",rawName:\"v-element-visibility\",value:(_vm.onVisibilityChange),expression:\"onVisibilityChange\"}],staticClass:\"comments\",class:{ 'icon-loading': _vm.isFirstLoading }},[_c('Comment',_vm._b({staticClass:\"comments__writer\",attrs:{\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"editor\":true,\"user-data\":_vm.userData,\"resource-id\":_vm.resourceId},on:{\"new\":_vm.onNewComment}},'Comment',_vm.editorData,false)),_vm._v(\" \"),(!_vm.isFirstLoading)?[(!_vm.hasComments && _vm.done)?_c('NcEmptyContent',{staticClass:\"comments__empty\",attrs:{\"name\":_vm.t('comments', 'No comments yet, start the conversation!')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('MessageReplyTextIcon')]},proxy:true}],null,false,1033639148)}):_c('ul',_vm._l((_vm.comments),function(comment){return _c('Comment',_vm._b({key:comment.props.id,staticClass:\"comments__list\",attrs:{\"tag\":\"li\",\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"message\":comment.props.message,\"resource-id\":_vm.resourceId,\"user-data\":_vm.genMentionsData(comment.props.mentions)},on:{\"update:message\":function($event){return _vm.$set(comment.props, \"message\", $event)},\"delete\":_vm.onDelete}},'Comment',comment.props,false))}),1),_vm._v(\" \"),(_vm.loading && !_vm.isFirstLoading)?_c('div',{staticClass:\"comments__info icon-loading\"}):(_vm.hasComments && _vm.done)?_c('div',{staticClass:\"comments__info\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('comments', 'No more messages'))+\"\\n\\t\\t\")]):(_vm.error)?[_c('NcEmptyContent',{staticClass:\"comments__error\",attrs:{\"name\":_vm.error},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlertCircleOutlineIcon')]},proxy:true}],null,false,66050004)}),_vm._v(\" \"),_c('NcButton',{staticClass:\"comments__retry\",on:{\"click\":_vm.getComments},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('RefreshIcon')]},proxy:true}],null,false,3924573781)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Retry'))+\"\\n\\t\\t\\t\")])]:_vm._e()]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { getRequestToken } from '@nextcloud/auth'\nimport Vue from 'vue'\nimport CommentsApp from '../views/Comments.vue'\nimport logger from '../logger.js'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\n// Add translates functions\nVue.mixin({\n\tdata() {\n\t\treturn {\n\t\t\tlogger,\n\t\t}\n\t},\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\nexport default class CommentInstance {\n\n\t/**\n\t * Initialize a new Comments instance for the desired type\n\t *\n\t * @param {string} resourceType the comments endpoint type\n\t * @param {object} options the vue options (propsData, parent, el...)\n\t */\n\tconstructor(resourceType = 'files', options = {}) {\n\t\t// Merge options and set `resourceType` property\n\t\toptions = {\n\t\t\t...options,\n\t\t\tpropsData: {\n\t\t\t\t...(options.propsData ?? {}),\n\t\t\t\tresourceType,\n\t\t\t},\n\t\t}\n\t\t// Init Comments component\n\t\tconst View = Vue.extend(CommentsApp)\n\t\treturn new View(options)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport CommentsInstance from './services/CommentsInstance.js'\n\n// Init Comments\nif (window.OCA && !window.OCA.Comments) {\n\tObject.assign(window.OCA, { Comments: {} })\n}\n\n// Init Comments App view\nObject.assign(window.OCA.Comments, { View: CommentsInstance })\nconsole.debug('OCA.Comments.View initialized')\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\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, `.comment[data-v-e4ab9720]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-e4ab9720]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-e4ab9720]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-e4ab9720]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-e4ab9720]{margin-left:10px !important}.comment__author[data-v-e4ab9720]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-e4ab9720],.comment__timestamp[data-v-e4ab9720]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-e4ab9720]{position:relative}.comment__editor-description[data-v-e4ab9720]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-e4ab9720]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-e4ab9720]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-e4ab9720]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-e4ab9720]{min-height:44px;margin:0;padding:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 8px;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__editor-group {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__editor-description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-block: var(--default-grid-baseline);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\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, `.comments[data-v-af5e82dc]{min-height:100%;display:flex;flex-direction:column}.comments__empty[data-v-af5e82dc],.comments__error[data-v-af5e82dc]{flex:1 0}.comments__retry[data-v-af5e82dc]{margin:0 auto}.comments__info[data-v-af5e82dc]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/views/Comments.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,eAAA,CACA,YAAA,CACA,qBAAA,CAEA,oEAEC,QAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA\",\"sourcesContent\":[\"\\n.comments {\\n\\tmin-height: 100%;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__empty,\\n\\t&__error {\\n\\t\\tflex: 1 0;\\n\\t}\\n\\n\\t&__retry {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__info {\\n\\t\\theight: 60px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\ttext-align: center;\\n\\t\\tline-height: 60px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"5528\":\"110b147bc8680f8c83f4\",\"7185\":\"7500f3fc5f25407c56b1\",\"9891\":\"11f7c532881a4e9da7b7\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 7062;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t7062: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(512)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","name","emits","props","title","type","String","fillColor","default","size","Number","_vm","this","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","getRootPath","generateRemoteUrl","decodeHtmlEntities","value","passes","arguments","length","undefined","parser","DOMParser","decoded","i","parseFromString","documentElement","textContent","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","getLoggerBuilder","setApp","detectUser","build","id","message","resourceId","required","resourceType","data","deleted","editing","loading","methods","onEdit","onEditCancel","updateLocalMessage","onEditComment","async","commentId","commentPath","join","customRequest","Object","assign","method","concat","EditComment","logger","debug","error","showError","t","console","onDeleteWithUndo","timeOutDelete","setTimeout","onDelete","TOAST_UNDO_TIMEOUT","showUndo","clearTimeout","deleteFile","DeleteComment","onNewComment","newComment","resourcePath","response","axios","post","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","Date","toUTCString","objectType","verb","parseInt","headers","split","pop","comment","stat","details","NewComment","localMessage","components","ArrowRight","NcActionButton","NcActions","NcActionSeparator","NcAvatar","NcButton","NcDateTime","NcRichContenteditable","mixins","RichEditorMixin","CommentMixin","inheritAttrs","editor","Boolean","autoComplete","Function","tag","expanded","submitted","computed","isOwnComment","renderedContent","isEmptyMessage","renderContent","trim","timestamp","parse","watch","beforeMount","toString","onSubmit","$nextTick","$refs","$el","focus","onExpand","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","directives","rawName","expression","class","preventDefault","ref","userData","scopedSlots","_u","key","fn","proxy","domProps","defineComponent","editorData","search","callback","get","generateOcsUrl","params","itemType","itemId","sorter","limit","loadState","ocs","forEach","user","values","genMentionsData","mentions","flat","mention","_getCurrentUser","mentionId","icon","label","mentionDisplayName","source","primary","posixClasses","braceEscape","s","replace","rangesToString","ranges","parseClass","glob","position","pos","charAt","Error","negs","sawStart","uflag","escaping","negate","endPos","rangeStart","WHILE","c","cls","unip","u","neg","entries","startsWith","push","test","slice","sranges","snegs","p","pattern","assertValidPattern","nocomment","Minimatch","match","starDotExtRE","starDotExtTest","ext","f","endsWith","starDotExtTestDot","starDotExtTestNocase","toLowerCase","starDotExtTestNocaseDot","starDotStarRE","starDotStarTest","includes","starDotStarTestDot","dotStarRE","dotStarTest","starRE","starTest","starTestDot","qmarksRE","qmarksTestNocase","$0","noext","qmarksTestNoExt","qmarksTestNocaseDot","qmarksTestNoExtDot","qmarksTestDot","qmarksTest","len","defaultPlatform","process","env","__MINIMATCH_TESTING_PLATFORM__","platform","sep","GLOBSTAR","Symbol","plTypes","open","close","qmark","star","charSet","reduce","set","reSpecials","addPatternStartSet","filter","a","b","defaults","def","keys","orig","constructor","super","unescape","escape","makeRe","braceExpand","list","nobrace","TypeError","mm","nonull","globMagic","regExpEscape","windowsPathsNoEscape","nonegate","empty","preserveMultipleSlashes","partial","globSet","globParts","nocase","isWindows","windowsNoMagicRoot","regexp","allowWindowsEscape","make","hasMagic","magicalBraces","part","_","parseNegate","Set","args","rawGlobParts","map","slashSplit","preprocess","__","isUNC","isDrive","ss","indexOf","noglobstar","j","optimizationLevel","firstPhasePreProcess","secondPhasePreProcess","levelOneOptimize","adjascentGlobstarOptimize","parts","gs","splice","prev","levelTwoFileOptimize","Array","isArray","didSomething","dd","gss","next","p2","other","splin","matched","partsMatch","emptyGSMatch","ai","bi","result","which","dot","negateOffset","matchOne","file","fileUNC","patternUNC","fd","pd","fi","pi","fl","pl","fr","pr","swallowee","hit","m","fastTest","re","patternListStack","negativeLists","stateChar","dotTravAllowed","dotFileAllowed","subPatternStart","clearStateChar","plEntry","start","reStart","reEnd","src","needUflag","consumed","magic","tail","$1","$2","addPatternStart","n","nl","nlBefore","nlFirst","nlAfter","nlLast","closeParensBefore","openParensBefore","cleanAfter","nocaseMagicOnly","toUpperCase","flags","_glob","_src","RegExp","er","twoStar","pp","ex","ff","filename","matchBase","flipNegate","convertResponseHeaders","output","PropertyType","getComments","_ref","_options$limit","datetime","toISOString","offset","responseData","text","parseXML","isDetailed","status","statusText","processResponsePayload","getDirectoryFiles","multistatus","responseItems","item","propstat","prop","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","getcontenttype","mimeType","getetag","etag","collection","basename","lastmod","mime","prepareFileFromProps","Comment","NcEmptyContent","RefreshIcon","MessageReplyTextIcon","AlertCircleOutlineIcon","vElementVisibility","CommentView","done","comments","cancelRequest","hasComments","isFirstLoading","onVisibilityChange","isVisible","markCommentsAsRead","date","readMarker","e","update","resetState","onScrollBottomReached","request","abort","controller","AbortController","signal","url","cancelableRequest","unshift","index","findIndex","_l","$set","__webpack_nonce__","btoa","Vue","mixin","window","OCA","Comments","View","_options$propsData","propsData","extend","CommentsApp","balanced","str","maybeMatch","r","range","end","pre","body","reg","begs","beg","left","right","module","exports","substr","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","Math","random","numeric","charCodeAt","parseCommaParts","postParts","shift","apply","embrace","isPadded","el","lte","y","gte","isTop","expansions","k","expansion","N","isNumericSequence","isAlphaSequence","isSequence","isOptions","x","width","max","incr","abs","pad","some","fromCharCode","need","z","___CSS_LOADER_EXPORT___","validator","XMLParser","XMLBuilder","XMLValidator","_typeof","obj","iterator","prototype","_wrapNativeSuper","Class","_cache","Map","call","has","Wrapper","_construct","_getPrototypeOf","create","enumerable","writable","configurable","_setPrototypeOf","Parent","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","instance","bind","o","setPrototypeOf","__proto__","getPrototypeOf","ObjectPrototypeMutationError","_Error","_this","Constructor","_classCallCheck","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","_inherits","traverse","object","path","segments","_loop","idx","currentSegment","v","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","isInteger","nextPropIsArrayWildcard","err","own","hasOwnProperty","hasOwn","isIn","objectInPath","pathExists","validPath","util","isString","normalizeArray","allowAboveRoot","res","splitPathRe","posix","posixSplitPath","exec","resolve","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","relative","from","to","arr","fromParts","toParts","min","samePartsLength","outputParts","_makeLong","dirname","root","dir","extname","format","pathObject","isObject","base","pathString","allParts","delimiter","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","d","definition","defineProperty","chunkId","Promise","all","promises","g","globalThis","l","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","event","onerror","onload","doneFns","parentNode","removeChild","target","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","location","currentScript","baseURI","href","installedChunks","installedChunkData","promise","reject","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"comments-comments-app.js?v=77922e17dedbb714452f","mappings":";UAAIA,ECAAC,EACAC,kHCmBJ,MCpB0G,EDoB1G,CACEC,KAAM,cACNC,MAAO,CAAC,SACRC,MAAO,CACLC,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,qBEff,SAXgB,OACd,GCRW,WAAkB,IAAIG,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAOF,EAAII,GAAG,CAACC,YAAY,oCAAoCC,MAAM,CAAC,eAAcN,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOc,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,MAAM,QAASD,EAAO,IAAI,OAAOR,EAAIU,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAON,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACI,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,uNAAuN,CAAEN,EAAS,MAAEE,EAAG,QAAQ,CAACF,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIP,UAAUO,EAAIa,UACnuB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBmF,ECoBnH,CACEvB,KAAM,uBACNC,MAAO,CAAC,SACRC,MAAO,CACLC,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,MCff,GAXgB,OACd,GCRW,WAAkB,IAAIG,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAOF,EAAII,GAAG,CAACC,YAAY,+CAA+CC,MAAM,CAAC,eAAcN,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOc,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,MAAM,QAASD,EAAO,IAAI,OAAOR,EAAIU,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAON,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACI,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,sHAAsH,CAAEN,EAAS,MAAEE,EAAG,QAAQ,CAACF,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIP,UAAUO,EAAIa,UAC7oB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBqF,ECoBrH,CACEvB,KAAM,yBACNC,MAAO,CAAC,SACRC,MAAO,CACLC,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,MCff,GAXgB,OACd,GCRW,WAAkB,IAAIG,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAOF,EAAII,GAAG,CAACC,YAAY,iDAAiDC,MAAM,CAAC,eAAcN,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOc,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,MAAM,QAASD,EAAO,IAAI,OAAOR,EAAIU,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAON,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACI,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,wLAAwL,CAAEN,EAAS,MAAEE,EAAG,QAAQ,CAACF,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIP,UAAUO,EAAIa,UACjtB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBhC,0FCwBA,MAAMC,EAAc,WACnB,OAAOC,EAAAA,EAAAA,IAAkB,eAC1B,ECAO,SAASC,EAAmBC,GAAmB,IAAZC,EAAMC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAClD,MAAMG,EAAS,IAAIC,UACnB,IAAIC,EAAUP,EACd,IAAK,IAAIQ,EAAI,EAAGA,EAAIP,EAAQO,IAC3BD,EAAUF,EAAOI,gBAAgBF,EAAS,aAAaG,gBAAgBC,YAExE,OAAOJ,CACR,2BCNA,MAAMK,GAASC,EAAAA,EAAAA,IAAahB,KAGtBiB,EAAcC,IAClBH,EAAOE,WAAW,CAEhB,mBAAoB,iBAEpBE,aAAcD,QAAAA,EAAS,IACvB,GAIJE,EAAAA,EAAAA,IAAqBH,GACrBA,GAAWI,EAAAA,EAAAA,OAEX,UCnBA,GAAeC,WAAAA,MACbC,OAAO,YACPC,aACAC,uBCCF,SACC/C,MAAO,CACNgD,GAAI,CACH9C,KAAMK,OACNF,QAAS,MAEV4C,QAAS,CACR/C,KAAMC,OACNE,QAAS,IAEV6C,WAAY,CACXhD,KAAM,CAACC,OAAQI,QACf4C,UAAU,GAEXC,aAAc,CACblD,KAAMC,OACNE,QAAS,UAIXgD,KAAIA,KACI,CACNC,SAAS,EACTC,SAAS,EACTC,SAAS,IAIXC,QAAS,CAERC,MAAAA,GACCjD,KAAK8C,SAAU,CAChB,EACAI,YAAAA,GACClD,KAAK8C,SAAU,EAEf9C,KAAKmD,mBAAmBnD,KAAKwC,QAC9B,EACA,mBAAMY,CAAcZ,GACnBxC,KAAK+C,SAAU,EACf,UCpCYM,eAAeV,EAAcF,EAAYa,EAAWd,GAClE,MAAMe,EAAc,CAAC,GAAIZ,EAAcF,EAAYa,GAAWE,KAAK,KAEnE,aAAa5B,EAAO6B,cAAcF,EAAaG,OAAOC,OAAO,CAC5DC,OAAQ,YACRhB,KAAM,8KAAFiB,OAMarB,EAAO,iFAK1B,CDqBUsB,CAAY9D,KAAK2C,aAAc3C,KAAKyC,WAAYzC,KAAKuC,GAAIC,GAC/DuB,EAAOC,MAAM,iBAAkB,CAAErB,aAAc3C,KAAK2C,aAAcF,WAAYzC,KAAKyC,WAAYF,GAAIvC,KAAKuC,GAAIC,YAC5GxC,KAAKQ,MAAM,iBAAkBgC,GAC7BxC,KAAK8C,SAAU,CAChB,CAAE,MAAOmB,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,uDACxBC,EAAQH,MAAMA,EACf,CAAE,QACDjE,KAAK+C,SAAU,CAChB,CACD,EAGAsB,gBAAAA,GACCrE,KAAK6C,SAAU,EACf,MAAMyB,EAAgBC,WAAWvE,KAAKwE,SAAUC,EAAAA,KAChDC,EAAAA,EAAAA,IAASP,EAAE,WAAY,oBAAoB,KAC1CQ,aAAaL,GACbtE,KAAK6C,SAAU,CAAK,GAEtB,EACA,cAAM2B,GACL,UE5DYnB,eAAeV,EAAcF,EAAYa,GACvD,MAAMC,EAAc,CAAC,GAAIZ,EAAcF,EAAYa,GAAWE,KAAK,WAG7D5B,EAAOgD,WAAWrB,EACzB,CFwDUsB,CAAc7E,KAAK2C,aAAc3C,KAAKyC,WAAYzC,KAAKuC,IAC7DwB,EAAOC,MAAM,kBAAmB,CAAErB,aAAc3C,KAAK2C,aAAcF,WAAYzC,KAAKyC,WAAYF,GAAIvC,KAAKuC,KACzGvC,KAAKQ,MAAM,SAAUR,KAAKuC,GAC3B,CAAE,MAAO0B,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,yDACxBC,EAAQH,MAAMA,GACdjE,KAAK6C,SAAU,CAChB,CACD,EAGA,kBAAMiC,CAAatC,GAClBxC,KAAK+C,SAAU,EACf,IACC,MAAMgC,QGtEK1B,eAAeV,EAAcF,EAAYD,GACvD,MAAMwC,EAAe,CAAC,GAAIrC,EAAcF,GAAYe,KAAK,KAEnDyB,QAAiBC,EAAAA,EAAMC,KAAKtE,IAAgBmE,EAAc,CAC/DI,kBAAkBC,EAAAA,EAAAA,MAAiBC,YACnCC,SAASF,EAAAA,EAAAA,MAAiBG,IAC1BC,UAAW,QACXC,kBAAmB,IAAIC,MAAQC,cAC/BpD,UACAqD,WAAYlD,EACZmD,KAAM,YAKDvC,EAAcyB,EAAe,IADjBe,SAASd,EAASe,QAAQ,oBAAoBC,MAAM,KAAKC,OAIrEC,QAAgBvE,EAAOwE,KAAK7C,EAAa,CAC9C8C,SAAS,IAGJ9G,EAAQ4G,EAAQvD,KAAKrD,MAO3B,OAHAA,EAAM6F,iBAAmBrE,EAAmBxB,EAAM6F,iBAAkB,GACpE7F,EAAMiD,QAAUzB,EAAmBxB,EAAMiD,QAAS,GAE3C2D,EAAQvD,IAChB,CHwC6B0D,CAAWtG,KAAK2C,aAAc3C,KAAKyC,WAAYD,GACxEuB,EAAOC,MAAM,qBAAsB,CAAErB,aAAc3C,KAAK2C,aAAcF,WAAYzC,KAAKyC,WAAYsC,eACnG/E,KAAKQ,MAAM,MAAOuE,GAGlB/E,KAAKQ,MAAM,iBAAkB,IAC7BR,KAAKuG,aAAe,EACrB,CAAE,MAAOtC,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,yDACxBC,EAAQH,MAAMA,EACf,CAAE,QACDjE,KAAK+C,SAAU,CAChB,CACD,IIvHiL,ECsInL,CACA1D,KAAA,UAEAmH,WAAA,CACAC,WAAA,IACAC,eAAA,IACAC,UAAA,IACAC,kBAAA,IACAC,SAAA,IACAC,SAAA,IACAC,WAAA,IACAC,sBAbAA,IAAA,0DAeAC,OAAA,CAAAC,EAAAA,GAAAC,GAEAC,cAAA,EAEA7H,MAAA,CACA6F,iBAAA,CACA3F,KAAAC,OACAgD,UAAA,GAEA6C,QAAA,CACA9F,KAAAC,OACAgD,UAAA,GAEAgD,iBAAA,CACAjG,KAAAC,OACAE,QAAA,MAMAyH,OAAA,CACA5H,KAAA6H,QACA1H,SAAA,GAMA2H,aAAA,CACA9H,KAAA+H,SACA9E,UAAA,GAGA+E,IAAA,CACAhI,KAAAC,OACAE,QAAA,QAIAgD,KAAAA,KACA,CACA8E,UAAA,EAGAnB,aAAA,GACAoB,WAAA,IAIAC,SAAA,CAOAC,YAAAA,GACA,OAAAxC,EAAAA,EAAAA,MAAAG,MAAA,KAAAD,OACA,EAOAuC,eAAAA,GACA,YAAAC,eACA,GAEA,KAAAC,cAAA,KAAAzB,aACA,EAEAwB,cAAAA,GACA,YAAAxB,cAAA,UAAAA,aAAA0B,MACA,EAKAC,SAAAA,GACA,OAAAvC,KAAAwC,MAAA,KAAAzC,iBACA,GAGA0C,MAAA,CAEA5F,OAAAA,CAAAA,GACA,KAAAW,mBAAAX,EACA,GAGA6F,WAAAA,GAEA,KAAAlF,mBAAA,KAAAX,QACA,EAEAQ,QAAA,CACAmB,EAAA,KAOAhB,kBAAAA,CAAAX,GACA,KAAA+D,aAAA/D,EAAA8F,WACA,KAAAX,WAAA,CACA,EAKAY,QAAAA,GAEA,aAAAhC,aAAA0B,OAIA,YAAAZ,QACA,KAAAvC,aAAA,KAAAyB,aAAA0B,aACA,KAAAO,WAAA,KAEA,KAAAC,MAAApB,OAAAqB,IAAAC,OAAA,UAIA,KAAAvF,cAAA,KAAAmD,aAAA0B,OACA,EAEAW,QAAAA,GACA,KAAAlB,UAAA,CACA,2IC5QImB,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,OCP1D,SAXgB,OACd,GZTW,WAAkB,IAAIpJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAGF,EAAI0H,IAAI,CAAC2B,WAAW,CAAC,CAAC/J,KAAK,OAAOgK,QAAQ,SAASrI,OAAQjB,EAAI8C,QAASyG,WAAW,aAAa7B,IAAI,YAAYrH,YAAY,UAAUmJ,MAAM,CAAC,mBAAoBxJ,EAAIgD,UAAU,CAAC9C,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,WAAW,CAACG,YAAY,kBAAkBC,MAAM,CAAC,eAAeN,EAAIqF,iBAAiB,KAAOrF,EAAIwF,QAAQ,KAAO,OAAO,GAAGxF,EAAIW,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACH,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACL,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIqF,qBAAqBrF,EAAIW,GAAG,KAAMX,EAAI8H,cAAgB9H,EAAIwC,KAAOxC,EAAIgD,QAAS9C,EAAG,YAAY,CAACG,YAAY,oBAAoB,CAAGL,EAAI+C,QAAyb7C,EAAG,iBAAiB,CAACI,MAAM,CAAC,KAAO,cAAcC,GAAG,CAAC,MAAQP,EAAImD,eAAe,CAACnD,EAAIW,GAAG,eAAeX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,gBAAgB,gBAAhkB,CAAClE,EAAG,iBAAiB,CAACI,MAAM,CAAC,qBAAoB,EAAK,KAAO,eAAeC,GAAG,CAAC,MAAQP,EAAIkD,SAAS,CAAClD,EAAIW,GAAG,iBAAiBX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,iBAAiB,kBAAkBpE,EAAIW,GAAG,KAAKT,EAAG,qBAAqBF,EAAIW,GAAG,KAAKT,EAAG,iBAAiB,CAACI,MAAM,CAAC,qBAAoB,EAAK,KAAO,eAAeC,GAAG,CAAC,MAAQP,EAAIsE,mBAAmB,CAACtE,EAAIW,GAAG,iBAAiBX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,mBAAmB,oBAAoL,GAAGpE,EAAIa,KAAKb,EAAIW,GAAG,KAAMX,EAAIwC,IAAMxC,EAAIgD,QAAS9C,EAAG,MAAM,CAACG,YAAY,uCAAwCL,EAAI2F,iBAAkBzF,EAAG,aAAa,CAACG,YAAY,qBAAqBC,MAAM,CAAC,UAAYN,EAAImI,UAAU,kBAAiB,KAAQnI,EAAIa,MAAM,GAAGb,EAAIW,GAAG,KAAMX,EAAIsH,QAAUtH,EAAI+C,QAAS7C,EAAG,OAAO,CAACG,YAAY,kBAAkBE,GAAG,CAAC,OAAS,SAASC,GAAQA,EAAOiJ,gBAAiB,IAAI,CAACvJ,EAAG,MAAM,CAACG,YAAY,yBAAyB,CAACH,EAAG,wBAAwB,CAACwJ,IAAI,SAASpJ,MAAM,CAAC,gBAAgBN,EAAIwH,aAAa,iBAAmBxH,EAAIgD,QAAQ,MAAQhD,EAAIsH,OAAStH,EAAIoE,EAAE,WAAY,eAAiBpE,EAAIoE,EAAE,WAAY,gBAAgB,YAAcpE,EAAIoE,EAAE,WAAY,qBAAqB,MAAQpE,EAAIwG,aAAa,YAAYxG,EAAI2J,SAAS,mBAAmB,oCAAoCpJ,GAAG,CAAC,eAAeP,EAAIoD,mBAAmB,OAASpD,EAAIwI,YAAYxI,EAAIW,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACH,EAAG,WAAW,CAACI,MAAM,CAAC,KAAO,yBAAyB,cAAc,SAAS,aAAaN,EAAIoE,EAAE,WAAY,gBAAgB,SAAWpE,EAAIgI,gBAAgBzH,GAAG,CAAC,MAAQP,EAAIwI,UAAUoB,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAE/J,EAAIgD,QAAS9C,EAAG,OAAO,CAACG,YAAY,uBAAuBH,EAAG,aAAa,CAACI,MAAM,CAAC,KAAO,MAAM,EAAE0J,OAAM,IAAO,MAAK,EAAM,eAAe,IAAI,GAAGhK,EAAIW,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,8BAA8BC,MAAM,CAAC,GAAK,qCAAqC,CAACN,EAAIW,GAAG,aAAaX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,oDAAoD,gBAAgBlE,EAAG,MAAM,CAACG,YAAY,mBAAmBmJ,MAAM,CAAC,6BAA8BxJ,EAAI2H,UAAUsC,SAAS,CAAC,UAAYjK,EAAIY,GAAGZ,EAAI+H,kBAAkBxH,GAAG,CAAC,MAAQP,EAAI6I,eAC56F,GACsB,IYUpB,EACA,KACA,WACA,MAI8B,uBCdhC,SAAeqB,EAAAA,EAAAA,IAAgB,CAC3B1K,MAAO,CACHkD,WAAY,CACRhD,KAAMK,OACN4C,UAAU,GAEdC,aAAc,CACVlD,KAAMC,OACNE,QAAS,UAGjBgD,KAAIA,KACO,CACHsH,WAAY,CACR9E,kBAAkBC,EAAAA,EAAAA,MAAiBC,YACnCC,SAASF,EAAAA,EAAAA,MAAiBG,IAC1BqE,IAAK,UAETH,SAAU,CAAC,IAGnB1G,QAAS,CAOL,kBAAMuE,CAAa4C,EAAQC,GACvB,MAAM,KAAExH,SAAesC,EAAAA,EAAMmF,KAAIC,EAAAA,EAAAA,IAAe,yBAA0B,CACtEC,OAAQ,CACJJ,SACAK,SAAU,QACVC,OAAQzK,KAAKyC,WACbiI,OAAQ,8BACRC,OAAOC,EAAAA,EAAAA,GAAU,WAAY,6BAKrC,OADAhI,EAAKiI,IAAIjI,KAAKkI,SAAQC,IAAU/K,KAAK0J,SAASqB,EAAKxI,IAAMwI,CAAI,IACtDX,EAAS1G,OAAOsH,OAAOhL,KAAK0J,UACvC,EAOAuB,eAAAA,CAAgBC,GAaZ,OAZAxH,OAAOsH,OAAOE,GACTC,OACAL,SAAQM,IAAW,IAAAC,EACpBrL,KAAK0J,SAAS0B,EAAQE,WAAa,CAE/BC,KAAM,YACNhJ,GAAI6I,EAAQE,UACZE,MAAOJ,EAAQK,mBACfC,OAAQ,QACRC,SAAyB,QAAhBN,GAAAhG,EAAAA,EAAAA,aAAgB,IAAAgG,OAAA,EAAhBA,EAAkB7F,OAAQ4F,EAAQE,UAC9C,IAEEtL,KAAK0J,QAChB,qBChER,MAAMkC,GAAe,CACjB,YAAa,CAAC,wBAAwB,GACtC,YAAa,CAAC,iBAAiB,GAC/B,YAAa,CAAC,eAAyB,GACvC,YAAa,CAAC,cAAc,GAC5B,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,gBAAgB,GAAM,GACpC,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,UAAU,GACxB,YAAa,CAAC,UAAU,GACxB,YAAa,CAAC,yBAAyB,GACvC,YAAa,CAAC,WAAW,GACzB,WAAY,CAAC,+BAA+B,GAC5C,aAAc,CAAC,aAAa,IAI1BC,GAAeC,GAAMA,EAAEC,QAAQ,YAAa,QAI5CC,GAAkBC,GAAWA,EAAOzI,KAAK,IAOlC0I,GAAa,CAACC,EAAMC,KAC7B,MAAMC,EAAMD,EAEZ,GAAyB,MAArBD,EAAKG,OAAOD,GACZ,MAAM,IAAIE,MAAM,6BAGpB,MAAMN,EAAS,GACTO,EAAO,GACb,IAAIhL,EAAI6K,EAAM,EACVI,GAAW,EACXC,GAAQ,EACRC,GAAW,EACXC,GAAS,EACTC,EAASR,EACTS,EAAa,GACjBC,EAAO,KAAOvL,EAAI2K,EAAKhL,QAAQ,CAC3B,MAAM6L,EAAIb,EAAKG,OAAO9K,GACtB,GAAW,MAANwL,GAAmB,MAANA,GAAcxL,IAAM6K,EAAM,EAA5C,CAKA,GAAU,MAANW,GAAaP,IAAaE,EAAU,CACpCE,EAASrL,EAAI,EACb,KACJ,CAEA,GADAiL,GAAW,EACD,OAANO,GACKL,EADT,CAQA,GAAU,MAANK,IAAcL,EAEd,IAAK,MAAOM,GAAMC,EAAMC,EAAGC,MAAS1J,OAAO2J,QAAQzB,IAC/C,GAAIO,EAAKmB,WAAWL,EAAKzL,GAAI,CAEzB,GAAIsL,EACA,MAAO,CAAC,MAAM,EAAOX,EAAKhL,OAASkL,GAAK,GAE5C7K,GAAKyL,EAAI9L,OACLiM,EACAZ,EAAKe,KAAKL,GAEVjB,EAAOsB,KAAKL,GAChBR,EAAQA,GAASS,EACjB,SAASJ,CACb,CAIRJ,GAAW,EACPG,GAGIE,EAAIF,EACJb,EAAOsB,KAAK1B,GAAYiB,GAAc,IAAMjB,GAAYmB,IAEnDA,IAAMF,GACXb,EAAOsB,KAAK1B,GAAYmB,IAE5BF,EAAa,GACbtL,KAKA2K,EAAKmB,WAAW,KAAM9L,EAAI,IAC1ByK,EAAOsB,KAAK1B,GAAYmB,EAAI,MAC5BxL,GAAK,GAGL2K,EAAKmB,WAAW,IAAK9L,EAAI,IACzBsL,EAAaE,EACbxL,GAAK,IAITyK,EAAOsB,KAAK1B,GAAYmB,IACxBxL,IAhDA,MALQmL,GAAW,EACXnL,GATR,MAHIoL,GAAS,EACTpL,GAgER,CACA,GAAIqL,EAASrL,EAGT,MAAO,CAAC,IAAI,EAAO,GAAG,GAI1B,IAAKyK,EAAO9K,SAAWqL,EAAKrL,OACxB,MAAO,CAAC,MAAM,EAAOgL,EAAKhL,OAASkL,GAAK,GAM5C,GAAoB,IAAhBG,EAAKrL,QACa,IAAlB8K,EAAO9K,QACP,SAASqM,KAAKvB,EAAO,MACpBW,EAAQ,CAET,MAAO,EAjHOd,EAgHiB,IAArBG,EAAO,GAAG9K,OAAe8K,EAAO,GAAGwB,OAAO,GAAKxB,EAAO,GAhH5CH,EAAEC,QAAQ,2BAA4B,UAiHjC,EAAOc,EAASR,GAAK,EAClD,CAlHiB,IAACP,EAmHlB,MAAM4B,EAAU,KAAOd,EAAS,IAAM,IAAMZ,GAAeC,GAAU,IAC/D0B,EAAQ,KAAOf,EAAS,GAAK,KAAOZ,GAAeQ,GAAQ,IAMjE,MAAO,CALMP,EAAO9K,QAAUqL,EAAKrL,OAC7B,IAAMuM,EAAU,IAAMC,EAAQ,IAC9B1B,EAAO9K,OACHuM,EACAC,EACIjB,EAAOG,EAASR,GAAK,EAAK,8BC7IrC,MAAM,GAAY,CAACuB,EAAGC,EAAShF,EAAU,CAAC,KAC7CiF,GAAmBD,MAEdhF,EAAQkF,WAAmC,MAAtBF,EAAQvB,OAAO,KAGlC,IAAI0B,GAAUH,EAAShF,GAASoF,MAAML,IAI3CM,GAAe,wBACfC,GAAkBC,GAASC,IAAOA,EAAEf,WAAW,MAAQe,EAAEC,SAASF,GAClEG,GAAqBH,GAASC,GAAMA,EAAEC,SAASF,GAC/CI,GAAwBJ,IAC1BA,EAAMA,EAAIK,cACFJ,IAAOA,EAAEf,WAAW,MAAQe,EAAEI,cAAcH,SAASF,IAE3DM,GAA2BN,IAC7BA,EAAMA,EAAIK,cACFJ,GAAMA,EAAEI,cAAcH,SAASF,IAErCO,GAAgB,aAChBC,GAAmBP,IAAOA,EAAEf,WAAW,MAAQe,EAAEQ,SAAS,KAC1DC,GAAsBT,GAAY,MAANA,GAAmB,OAANA,GAAcA,EAAEQ,SAAS,KAClEE,GAAY,UACZC,GAAeX,GAAY,MAANA,GAAmB,OAANA,GAAcA,EAAEf,WAAW,KAC7D2B,GAAS,QACTC,GAAYb,GAAmB,IAAbA,EAAElN,SAAiBkN,EAAEf,WAAW,KAClD6B,GAAed,GAAmB,IAAbA,EAAElN,QAAsB,MAANkN,GAAmB,OAANA,EACpDe,GAAW,yBACXC,GAAmB,EAAEC,EAAIlB,EAAM,OACjC,MAAMmB,EAAQC,GAAgB,CAACF,IAC/B,OAAKlB,GAELA,EAAMA,EAAIK,cACFJ,GAAMkB,EAAMlB,IAAMA,EAAEI,cAAcH,SAASF,IAFxCmB,CAE4C,EAErDE,GAAsB,EAAEH,EAAIlB,EAAM,OACpC,MAAMmB,EAAQG,GAAmB,CAACJ,IAClC,OAAKlB,GAELA,EAAMA,EAAIK,cACFJ,GAAMkB,EAAMlB,IAAMA,EAAEI,cAAcH,SAASF,IAFxCmB,CAE4C,EAErDI,GAAgB,EAAEL,EAAIlB,EAAM,OAC9B,MAAMmB,EAAQG,GAAmB,CAACJ,IAClC,OAAQlB,EAAeC,GAAMkB,EAAMlB,IAAMA,EAAEC,SAASF,GAAtCmB,CAA0C,EAEtDK,GAAa,EAAEN,EAAIlB,EAAM,OAC3B,MAAMmB,EAAQC,GAAgB,CAACF,IAC/B,OAAQlB,EAAeC,GAAMkB,EAAMlB,IAAMA,EAAEC,SAASF,GAAtCmB,CAA0C,EAEtDC,GAAkB,EAAEF,MACtB,MAAMO,EAAMP,EAAGnO,OACf,OAAQkN,GAAMA,EAAElN,SAAW0O,IAAQxB,EAAEf,WAAW,IAAI,EAElDoC,GAAqB,EAAEJ,MACzB,MAAMO,EAAMP,EAAGnO,OACf,OAAQkN,GAAMA,EAAElN,SAAW0O,GAAa,MAANxB,GAAmB,OAANA,CAAU,EAGvDyB,GAAsC,iBAAZC,IAAwBA,GAC1B,iBAAhBA,GAAQC,KACdD,GAAQC,KACRD,GAAQC,IAAIC,gCACZF,GAAQG,SACV,QAON,GAAUC,IAD6B,UAApBL,GAJD,KACA,IAKX,MAAMM,GAAWC,OAAO,eAC/B,GAAUD,SAAWA,GACrB,MAAME,GAAU,CACZ,IAAK,CAAEC,KAAM,YAAaC,MAAO,aACjC,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAIzBC,GAAQ,OAERC,GAAOD,GAAQ,KASfE,GAAW7E,GAAMA,EAAE7F,MAAM,IAAI2K,QAAO,CAACC,EAAK7D,KAC5C6D,EAAI7D,IAAK,EACF6D,IACR,CAAC,GAEEC,GAAaH,GAAQ,mBAErBI,GAAqBJ,GAAQ,OAEnC,GAAUK,OADY,CAACnD,EAAShF,EAAU,CAAC,IAAO+E,GAAM,GAAUA,EAAGC,EAAShF,GAE9E,MAAMuF,GAAM,CAAC6C,EAAGC,EAAI,CAAC,IAAMxN,OAAOC,OAAO,CAAC,EAAGsN,EAAGC,GA2BhD,GAAUC,SA1BeC,IACrB,IAAKA,GAAsB,iBAARA,IAAqB1N,OAAO2N,KAAKD,GAAKjQ,OACrD,OAAO,GAEX,MAAMmQ,EAAO,GAEb,OAAO5N,OAAOC,QADJ,CAACiK,EAAGC,EAAShF,EAAU,CAAC,IAAMyI,EAAK1D,EAAGC,EAASO,GAAIgD,EAAKvI,KAC1C,CACpBmF,UAAW,cAAwBsD,EAAKtD,UACpC,WAAAuD,CAAY1D,EAAShF,EAAU,CAAC,GAC5B2I,MAAM3D,EAASO,GAAIgD,EAAKvI,GAC5B,CACA,eAAOsI,CAAStI,GACZ,OAAOyI,EAAKH,SAAS/C,GAAIgD,EAAKvI,IAAUmF,SAC5C,GAEJyD,SAAU,CAAC3F,EAAGjD,EAAU,CAAC,IAAMyI,EAAKG,SAAS3F,EAAGsC,GAAIgD,EAAKvI,IACzD6I,OAAQ,CAAC5F,EAAGjD,EAAU,CAAC,IAAMyI,EAAKI,OAAO5F,EAAGsC,GAAIgD,EAAKvI,IACrDmI,OAAQ,CAACnD,EAAShF,EAAU,CAAC,IAAMyI,EAAKN,OAAOnD,EAASO,GAAIgD,EAAKvI,IACjEsI,SAAWtI,GAAYyI,EAAKH,SAAS/C,GAAIgD,EAAKvI,IAC9C8I,OAAQ,CAAC9D,EAAShF,EAAU,CAAC,IAAMyI,EAAKK,OAAO9D,EAASO,GAAIgD,EAAKvI,IACjE+I,YAAa,CAAC/D,EAAShF,EAAU,CAAC,IAAMyI,EAAKM,YAAY/D,EAASO,GAAIgD,EAAKvI,IAC3EoF,MAAO,CAAC4D,EAAMhE,EAAShF,EAAU,CAAC,IAAMyI,EAAKrD,MAAM4D,EAAMhE,EAASO,GAAIgD,EAAKvI,IAC3EsH,IAAKmB,EAAKnB,IACVC,SAAUA,IACZ,EAaC,MAAMwB,GAAc,CAAC/D,EAAShF,EAAU,CAAC,KAC5CiF,GAAmBD,GAGfhF,EAAQiJ,UAAY,mBAAmBtE,KAAKK,GAErC,CAACA,GAEL,GAAOA,IAElB,GAAU+D,YAAcA,GACxB,MACM9D,GAAsBD,IACxB,GAAuB,iBAAZA,EACP,MAAM,IAAIkE,UAAU,mBAExB,GAAIlE,EAAQ1M,OALW,MAMnB,MAAM,IAAI4Q,UAAU,sBACxB,EAcJ,GAAUJ,OADY,CAAC9D,EAAShF,EAAU,CAAC,IAAM,IAAImF,GAAUH,EAAShF,GAAS8I,SAUjF,GAAU1D,MARW,CAAC4D,EAAMhE,EAAShF,EAAU,CAAC,KAC5C,MAAMmJ,EAAK,IAAIhE,GAAUH,EAAShF,GAKlC,OAJAgJ,EAAOA,EAAKb,QAAO3C,GAAK2D,EAAG/D,MAAMI,KAC7B2D,EAAGnJ,QAAQoJ,SAAWJ,EAAK1Q,QAC3B0Q,EAAKtE,KAAKM,GAEPgE,CAAI,EAIf,MACMK,GAAY,0BACZC,GAAgBrG,GAAMA,EAAEC,QAAQ,2BAA4B,QAC3D,MAAMiC,GACTnF,QACAgI,IACAhD,QACAuE,qBACAC,SACAzF,OACAzG,QACAmM,MACAC,wBACAC,QACAC,QACAC,UACAC,OACAC,UACA1C,SACA2C,mBACAC,OACA,WAAAvB,CAAY1D,EAAShF,EAAU,CAAC,GAC5BiF,GAAmBD,GACnBhF,EAAUA,GAAW,CAAC,EACtB7I,KAAK6I,QAAUA,EACf7I,KAAK6N,QAAUA,EACf7N,KAAKkQ,SAAWrH,EAAQqH,UAAYJ,GACpC9P,KAAK4S,UAA8B,UAAlB5S,KAAKkQ,SACtBlQ,KAAKoS,uBACCvJ,EAAQuJ,uBAAuD,IAA/BvJ,EAAQkK,mBAC1C/S,KAAKoS,uBACLpS,KAAK6N,QAAU7N,KAAK6N,QAAQ9B,QAAQ,MAAO,MAE/C/L,KAAKuS,0BAA4B1J,EAAQ0J,wBACzCvS,KAAK8S,OAAS,KACd9S,KAAK4M,QAAS,EACd5M,KAAKqS,WAAaxJ,EAAQwJ,SAC1BrS,KAAKmG,SAAU,EACfnG,KAAKsS,OAAQ,EACbtS,KAAKwS,UAAY3J,EAAQ2J,QACzBxS,KAAK2S,SAAW3S,KAAK6I,QAAQ8J,OAC7B3S,KAAK6S,wBAC8BzR,IAA/ByH,EAAQgK,mBACFhK,EAAQgK,sBACL7S,KAAK4S,YAAa5S,KAAK2S,QACpC3S,KAAKyS,QAAU,GACfzS,KAAK0S,UAAY,GACjB1S,KAAK6Q,IAAM,GAEX7Q,KAAKgT,MACT,CACA,QAAAC,GACI,GAAIjT,KAAK6I,QAAQqK,eAAiBlT,KAAK6Q,IAAI1P,OAAS,EAChD,OAAO,EAEX,IAAK,MAAM0M,KAAW7N,KAAK6Q,IACvB,IAAK,MAAMsC,KAAQtF,EACf,GAAoB,iBAATsF,EACP,OAAO,EAGnB,OAAO,CACX,CACA,KAAAnP,IAASoP,GAAK,CACd,IAAAJ,GACI,MAAMnF,EAAU7N,KAAK6N,QACfhF,EAAU7I,KAAK6I,QAErB,IAAKA,EAAQkF,WAAmC,MAAtBF,EAAQvB,OAAO,GAErC,YADAtM,KAAKmG,SAAU,GAGnB,IAAK0H,EAED,YADA7N,KAAKsS,OAAQ,GAIjBtS,KAAKqT,cAELrT,KAAKyS,QAAU,IAAI,IAAIa,IAAItT,KAAK4R,gBAC5B/I,EAAQ7E,QACRhE,KAAKgE,MAAQ,IAAIuP,IAAS,GAAQtP,SAASsP,IAE/CvT,KAAKgE,MAAMhE,KAAK6N,QAAS7N,KAAKyS,SAU9B,MAAMe,EAAexT,KAAKyS,QAAQgB,KAAI3H,GAAK9L,KAAK0T,WAAW5H,KAC3D9L,KAAK0S,UAAY1S,KAAK2T,WAAWH,GACjCxT,KAAKgE,MAAMhE,KAAK6N,QAAS7N,KAAK0S,WAE9B,IAAI7B,EAAM7Q,KAAK0S,UAAUe,KAAI,CAAC3H,EAAGsH,EAAGQ,KAChC,GAAI5T,KAAK4S,WAAa5S,KAAK6S,mBAAoB,CAE3C,MAAMgB,IAAiB,KAAT/H,EAAE,IACH,KAATA,EAAE,IACQ,MAATA,EAAE,IAAeoG,GAAU1E,KAAK1B,EAAE,KAClCoG,GAAU1E,KAAK1B,EAAE,KAChBgI,EAAU,WAAWtG,KAAK1B,EAAE,IAClC,GAAI+H,EACA,MAAO,IAAI/H,EAAE2B,MAAM,EAAG,MAAO3B,EAAE2B,MAAM,GAAGgG,KAAIM,GAAM/T,KAAKmI,MAAM4L,MAE5D,GAAID,EACL,MAAO,CAAChI,EAAE,MAAOA,EAAE2B,MAAM,GAAGgG,KAAIM,GAAM/T,KAAKmI,MAAM4L,KAEzD,CACA,OAAOjI,EAAE2H,KAAIM,GAAM/T,KAAKmI,MAAM4L,IAAI,IAMtC,GAJA/T,KAAKgE,MAAMhE,KAAK6N,QAASgD,GAEzB7Q,KAAK6Q,IAAMA,EAAIG,QAAOlF,IAA2B,IAAtBA,EAAEkI,SAAQ,KAEjChU,KAAK4S,UACL,IAAK,IAAIpR,EAAI,EAAGA,EAAIxB,KAAK6Q,IAAI1P,OAAQK,IAAK,CACtC,MAAMoM,EAAI5N,KAAK6Q,IAAIrP,GACN,KAAToM,EAAE,IACO,KAATA,EAAE,IACuB,MAAzB5N,KAAK0S,UAAUlR,GAAG,IACF,iBAAToM,EAAE,IACT,YAAYJ,KAAKI,EAAE,MACnBA,EAAE,GAAK,IAEf,CAEJ5N,KAAKgE,MAAMhE,KAAK6N,QAAS7N,KAAK6Q,IAClC,CAMA,UAAA8C,CAAWjB,GAEP,GAAI1S,KAAK6I,QAAQoL,WACb,IAAK,IAAIzS,EAAI,EAAGA,EAAIkR,EAAUvR,OAAQK,IAClC,IAAK,IAAI0S,EAAI,EAAGA,EAAIxB,EAAUlR,GAAGL,OAAQ+S,IACb,OAApBxB,EAAUlR,GAAG0S,KACbxB,EAAUlR,GAAG0S,GAAK,KAKlC,MAAM,kBAAEC,EAAoB,GAAMnU,KAAK6I,QAavC,OAZIsL,GAAqB,GAErBzB,EAAY1S,KAAKoU,qBAAqB1B,GACtCA,EAAY1S,KAAKqU,sBAAsB3B,IAIvCA,EAFKyB,GAAqB,EAEdnU,KAAKsU,iBAAiB5B,GAGtB1S,KAAKuU,0BAA0B7B,GAExCA,CACX,CAEA,yBAAA6B,CAA0B7B,GACtB,OAAOA,EAAUe,KAAIe,IACjB,IAAIC,GAAM,EACV,MAAQ,KAAOA,EAAKD,EAAMR,QAAQ,KAAMS,EAAK,KAAK,CAC9C,IAAIjT,EAAIiT,EACR,KAAwB,OAAjBD,EAAMhT,EAAI,IACbA,IAEAA,IAAMiT,GACND,EAAME,OAAOD,EAAIjT,EAAIiT,EAE7B,CACA,OAAOD,CAAK,GAEpB,CAEA,gBAAAF,CAAiB5B,GACb,OAAOA,EAAUe,KAAIe,GAeO,KAdxBA,EAAQA,EAAM5D,QAAO,CAACC,EAAKsC,KACvB,MAAMwB,EAAO9D,EAAIA,EAAI1P,OAAS,GAC9B,MAAa,OAATgS,GAA0B,OAATwB,EACV9D,EAEE,OAATsC,GACIwB,GAAiB,OAATA,GAA0B,MAATA,GAAyB,OAATA,GACzC9D,EAAI3K,MACG2K,IAGfA,EAAItD,KAAK4F,GACFtC,EAAG,GACX,KACU1P,OAAe,CAAC,IAAMqT,GAE3C,CACA,oBAAAI,CAAqBJ,GACZK,MAAMC,QAAQN,KACfA,EAAQxU,KAAK0T,WAAWc,IAE5B,IAAIO,GAAe,EACnB,EAAG,CAGC,GAFAA,GAAe,GAEV/U,KAAKuS,wBAAyB,CAC/B,IAAK,IAAI/Q,EAAI,EAAGA,EAAIgT,EAAMrT,OAAS,EAAGK,IAAK,CACvC,MAAMoM,EAAI4G,EAAMhT,GAEN,IAANA,GAAiB,KAANoM,GAAyB,KAAb4G,EAAM,IAEvB,MAAN5G,GAAmB,KAANA,IACbmH,GAAe,EACfP,EAAME,OAAOlT,EAAG,GAChBA,IAER,CACiB,MAAbgT,EAAM,IACW,IAAjBA,EAAMrT,QACQ,MAAbqT,EAAM,IAA2B,KAAbA,EAAM,KAC3BO,GAAe,EACfP,EAAMtO,MAEd,CAEA,IAAI8O,EAAK,EACT,MAAQ,KAAOA,EAAKR,EAAMR,QAAQ,KAAMgB,EAAK,KAAK,CAC9C,MAAMpH,EAAI4G,EAAMQ,EAAK,GACjBpH,GAAW,MAANA,GAAmB,OAANA,GAAoB,OAANA,IAChCmH,GAAe,EACfP,EAAME,OAAOM,EAAK,EAAG,GACrBA,GAAM,EAEd,CACJ,OAASD,GACT,OAAwB,IAAjBP,EAAMrT,OAAe,CAAC,IAAMqT,CACvC,CAmBA,oBAAAJ,CAAqB1B,GACjB,IAAIqC,GAAe,EACnB,EAAG,CACCA,GAAe,EAEf,IAAK,IAAIP,KAAS9B,EAAW,CACzB,IAAI+B,GAAM,EACV,MAAQ,KAAOA,EAAKD,EAAMR,QAAQ,KAAMS,EAAK,KAAK,CAC9C,IAAIQ,EAAMR,EACV,KAA0B,OAAnBD,EAAMS,EAAM,IAEfA,IAIAA,EAAMR,GACND,EAAME,OAAOD,EAAK,EAAGQ,EAAMR,GAE/B,IAAIS,EAAOV,EAAMC,EAAK,GACtB,MAAM7G,EAAI4G,EAAMC,EAAK,GACfU,EAAKX,EAAMC,EAAK,GACtB,GAAa,OAATS,EACA,SACJ,IAAKtH,GACK,MAANA,GACM,OAANA,IACCuH,GACM,MAAPA,GACO,OAAPA,EACA,SAEJJ,GAAe,EAEfP,EAAME,OAAOD,EAAI,GACjB,MAAMW,EAAQZ,EAAM/G,MAAM,GAC1B2H,EAAMX,GAAM,KACZ/B,EAAUnF,KAAK6H,GACfX,GACJ,CAEA,IAAKzU,KAAKuS,wBAAyB,CAC/B,IAAK,IAAI/Q,EAAI,EAAGA,EAAIgT,EAAMrT,OAAS,EAAGK,IAAK,CACvC,MAAMoM,EAAI4G,EAAMhT,GAEN,IAANA,GAAiB,KAANoM,GAAyB,KAAb4G,EAAM,IAEvB,MAAN5G,GAAmB,KAANA,IACbmH,GAAe,EACfP,EAAME,OAAOlT,EAAG,GAChBA,IAER,CACiB,MAAbgT,EAAM,IACW,IAAjBA,EAAMrT,QACQ,MAAbqT,EAAM,IAA2B,KAAbA,EAAM,KAC3BO,GAAe,EACfP,EAAMtO,MAEd,CAEA,IAAI8O,EAAK,EACT,MAAQ,KAAOA,EAAKR,EAAMR,QAAQ,KAAMgB,EAAK,KAAK,CAC9C,MAAMpH,EAAI4G,EAAMQ,EAAK,GACrB,GAAIpH,GAAW,MAANA,GAAmB,OAANA,GAAoB,OAANA,EAAY,CAC5CmH,GAAe,EACf,MACMM,EADiB,IAAPL,GAA8B,OAAlBR,EAAMQ,EAAK,GACf,CAAC,KAAO,GAChCR,EAAME,OAAOM,EAAK,EAAG,KAAMK,GACN,IAAjBb,EAAMrT,QACNqT,EAAMjH,KAAK,IACfyH,GAAM,CACV,CACJ,CACJ,CACJ,OAASD,GACT,OAAOrC,CACX,CAQA,qBAAA2B,CAAsB3B,GAClB,IAAK,IAAIlR,EAAI,EAAGA,EAAIkR,EAAUvR,OAAS,EAAGK,IACtC,IAAK,IAAI0S,EAAI1S,EAAI,EAAG0S,EAAIxB,EAAUvR,OAAQ+S,IAAK,CAC3C,MAAMoB,EAAUtV,KAAKuV,WAAW7C,EAAUlR,GAAIkR,EAAUwB,IAAKlU,KAAKuS,yBAC7D+C,IAEL5C,EAAUlR,GAAK8T,EACf5C,EAAUwB,GAAK,GACnB,CAEJ,OAAOxB,EAAU1B,QAAOyD,GAAMA,EAAGtT,QACrC,CACA,UAAAoU,CAAWtE,EAAGC,EAAGsE,GAAe,GAC5B,IAAIC,EAAK,EACLC,EAAK,EACLC,EAAS,GACTC,EAAQ,GACZ,KAAOH,EAAKxE,EAAE9P,QAAUuU,EAAKxE,EAAE/P,QAC3B,GAAI8P,EAAEwE,KAAQvE,EAAEwE,GACZC,EAAOpI,KAAe,MAAVqI,EAAgB1E,EAAEwE,GAAMzE,EAAEwE,IACtCA,IACAC,SAEC,GAAIF,GAA0B,OAAVvE,EAAEwE,IAAgBvE,EAAEwE,KAAQzE,EAAEwE,EAAK,GACxDE,EAAOpI,KAAK0D,EAAEwE,IACdA,SAEC,GAAID,GAA0B,OAAVtE,EAAEwE,IAAgBzE,EAAEwE,KAAQvE,EAAEwE,EAAK,GACxDC,EAAOpI,KAAK2D,EAAEwE,IACdA,SAEC,GAAc,MAAVzE,EAAEwE,KACPvE,EAAEwE,KACD1V,KAAK6I,QAAQgN,KAAQ3E,EAAEwE,GAAIpI,WAAW,MAC7B,OAAV4D,EAAEwE,GAQD,IAAc,MAAVxE,EAAEwE,KACPzE,EAAEwE,KACDzV,KAAK6I,QAAQgN,KAAQ5E,EAAEwE,GAAInI,WAAW,MAC7B,OAAV2D,EAAEwE,GASF,OAAO,EARP,GAAc,MAAVG,EACA,OAAO,EACXA,EAAQ,IACRD,EAAOpI,KAAK2D,EAAEwE,IACdD,IACAC,GAIJ,KArBoB,CAChB,GAAc,MAAVE,EACA,OAAO,EACXA,EAAQ,IACRD,EAAOpI,KAAK0D,EAAEwE,IACdA,IACAC,GACJ,CAkBJ,OAAOzE,EAAE9P,SAAW+P,EAAE/P,QAAUwU,CACpC,CACA,WAAAtC,GACI,GAAIrT,KAAKqS,SACL,OACJ,MAAMxE,EAAU7N,KAAK6N,QACrB,IAAIjB,GAAS,EACTkJ,EAAe,EACnB,IAAK,IAAItU,EAAI,EAAGA,EAAIqM,EAAQ1M,QAAgC,MAAtB0M,EAAQvB,OAAO9K,GAAYA,IAC7DoL,GAAUA,EACVkJ,IAEAA,IACA9V,KAAK6N,QAAUA,EAAQJ,MAAMqI,IACjC9V,KAAK4M,OAASA,CAClB,CAMA,QAAAmJ,CAASC,EAAMnI,EAAS2E,GAAU,GAC9B,MAAM3J,EAAU7I,KAAK6I,QAGrB,GAAI7I,KAAK4S,UAAW,CAChB,MAAMqD,EAAsB,KAAZD,EAAK,IACL,KAAZA,EAAK,IACO,MAAZA,EAAK,IACc,iBAAZA,EAAK,IACZ,YAAYxI,KAAKwI,EAAK,IACpBE,EAA4B,KAAfrI,EAAQ,IACR,KAAfA,EAAQ,IACO,MAAfA,EAAQ,IACc,iBAAfA,EAAQ,IACf,YAAYL,KAAKK,EAAQ,IAC7B,GAAIoI,GAAWC,EAAY,CACvB,MAAMC,EAAKH,EAAK,GACVI,EAAKvI,EAAQ,GACfsI,EAAG1H,gBAAkB2H,EAAG3H,gBACxBuH,EAAK,GAAKI,EAElB,MACK,GAAIF,GAAiC,iBAAZF,EAAK,GAAiB,CAChD,MAAMI,EAAKvI,EAAQ,GACbsI,EAAKH,EAAK,GACZI,EAAG3H,gBAAkB0H,EAAG1H,gBACxBZ,EAAQ,GAAKsI,EACbtI,EAAUA,EAAQJ,MAAM,GAEhC,MACK,GAAIwI,GAAiC,iBAAfpI,EAAQ,GAAiB,CAChD,MAAMsI,EAAKH,EAAK,GACZG,EAAG1H,gBAAkBZ,EAAQ,GAAGY,gBAChCZ,EAAQ,GAAKsI,EACbH,EAAOA,EAAKvI,MAAM,GAE1B,CACJ,CAGA,MAAM,kBAAE0G,EAAoB,GAAMnU,KAAK6I,QACnCsL,GAAqB,IACrB6B,EAAOhW,KAAK4U,qBAAqBoB,IAErChW,KAAKgE,MAAM,WAAYhE,KAAM,CAAEgW,OAAMnI,YACrC7N,KAAKgE,MAAM,WAAYgS,EAAK7U,OAAQ0M,EAAQ1M,QAC5C,IAAK,IAAIkV,EAAK,EAAGC,EAAK,EAAGC,EAAKP,EAAK7U,OAAQqV,EAAK3I,EAAQ1M,OAAQkV,EAAKE,GAAMD,EAAKE,EAAIH,IAAMC,IAAM,CAC5FtW,KAAKgE,MAAM,iBACX,IAAI4J,EAAIC,EAAQyI,GACZjI,EAAI2H,EAAKK,GAKb,GAJArW,KAAKgE,MAAM6J,EAASD,EAAGS,IAIb,IAANT,EACA,OAAO,EAGX,GAAIA,IAAMwC,GAAU,CAChBpQ,KAAKgE,MAAM,WAAY,CAAC6J,EAASD,EAAGS,IAuBpC,IAAIoI,EAAKJ,EACLK,EAAKJ,EAAK,EACd,GAAII,IAAOF,EAAI,CAQX,IAPAxW,KAAKgE,MAAM,iBAOJqS,EAAKE,EAAIF,IACZ,GAAiB,MAAbL,EAAKK,IACQ,OAAbL,EAAKK,KACHxN,EAAQgN,KAA8B,MAAvBG,EAAKK,GAAI/J,OAAO,GACjC,OAAO,EAEf,OAAO,CACX,CAEA,KAAOmK,EAAKF,GAAI,CACZ,IAAII,EAAYX,EAAKS,GAGrB,GAFAzW,KAAKgE,MAAM,mBAAoBgS,EAAMS,EAAI5I,EAAS6I,EAAIC,GAElD3W,KAAK+V,SAASC,EAAKvI,MAAMgJ,GAAK5I,EAAQJ,MAAMiJ,GAAKlE,GAGjD,OAFAxS,KAAKgE,MAAM,wBAAyByS,EAAIF,EAAII,IAErC,EAKP,GAAkB,MAAdA,GACc,OAAdA,IACE9N,EAAQgN,KAA+B,MAAxBc,EAAUrK,OAAO,GAAa,CAC/CtM,KAAKgE,MAAM,gBAAiBgS,EAAMS,EAAI5I,EAAS6I,GAC/C,KACJ,CAEA1W,KAAKgE,MAAM,4CACXyS,GAER,CAIA,SAAIjE,IAEAxS,KAAKgE,MAAM,2BAA4BgS,EAAMS,EAAI5I,EAAS6I,GACtDD,IAAOF,GAMnB,CAIA,IAAIK,EASJ,GARiB,iBAANhJ,GACPgJ,EAAMvI,IAAMT,EACZ5N,KAAKgE,MAAM,eAAgB4J,EAAGS,EAAGuI,KAGjCA,EAAMhJ,EAAEJ,KAAKa,GACbrO,KAAKgE,MAAM,gBAAiB4J,EAAGS,EAAGuI,KAEjCA,EACD,OAAO,CACf,CAYA,GAAIP,IAAOE,GAAMD,IAAOE,EAGpB,OAAO,EAEN,GAAIH,IAAOE,EAIZ,OAAO/D,EAEN,GAAI8D,IAAOE,EAKZ,OAAOH,IAAOE,EAAK,GAAkB,KAAbP,EAAKK,GAK7B,MAAM,IAAI9J,MAAM,OAGxB,CACA,WAAAqF,GACI,OAAOA,GAAY5R,KAAK6N,QAAS7N,KAAK6I,QAC1C,CACA,KAAAV,CAAM0F,GACFC,GAAmBD,GACnB,MAAMhF,EAAU7I,KAAK6I,QAErB,GAAgB,OAAZgF,EACA,OAAOuC,GACX,GAAgB,KAAZvC,EACA,MAAO,GAGX,IAAIgJ,EACAC,EAAW,MACVD,EAAIhJ,EAAQI,MAAMgB,KACnB6H,EAAWjO,EAAQgN,IAAM1G,GAAcD,IAEjC2H,EAAIhJ,EAAQI,MAAMC,KACxB4I,GAAYjO,EAAQ8J,OACd9J,EAAQgN,IACJnH,GACAF,GACJ3F,EAAQgN,IACJtH,GACAJ,IAAgB0I,EAAE,KAEtBA,EAAIhJ,EAAQI,MAAMmB,KACxB0H,GAAYjO,EAAQ8J,OACd9J,EAAQgN,IACJpG,GACAJ,GACJxG,EAAQgN,IACJlG,GACAC,IAAYiH,IAEhBA,EAAIhJ,EAAQI,MAAMU,KACxBmI,EAAWjO,EAAQgN,IAAM/G,GAAqBF,IAExCiI,EAAIhJ,EAAQI,MAAMc,OACxB+H,EAAW9H,IAEf,IAAI+H,EAAK,GACL9D,GAAW,EACXtG,GAAW,EAEf,MAAMqK,EAAmB,GACnBC,EAAgB,GACtB,IAEIT,EAFAU,GAAY,EACZxK,GAAQ,EAKRyK,EAAuC,MAAtBtJ,EAAQvB,OAAO,GAChC8K,EAAiBvO,EAAQgN,KAAOsB,EACpC,MAKME,EAAmBzJ,GAAsB,MAAhBA,EAAEtB,OAAO,GAClC,GACAzD,EAAQgN,IACJ,iCACA,UACJyB,EAAiB,KACnB,GAAIJ,EAAW,CAGX,OAAQA,GACJ,IAAK,IACDH,GAAMrG,GACNuC,GAAW,EACX,MACJ,IAAK,IACD8D,GAAMtG,GACNwC,GAAW,EACX,MACJ,QACI8D,GAAM,KAAOG,EAGrBlX,KAAKgE,MAAM,uBAAwBkT,EAAWH,GAC9CG,GAAY,CAChB,GAEJ,IAAK,IAAWlK,EAAPxL,EAAI,EAAMA,EAAIqM,EAAQ1M,SAAW6L,EAAIa,EAAQvB,OAAO9K,IAAKA,IAG9D,GAFAxB,KAAKgE,MAAM,eAAgB6J,EAASrM,EAAGuV,EAAI/J,GAEvCL,EAAJ,CAII,GAAU,MAANK,EACA,OAAO,EAGP8D,GAAW9D,KACX+J,GAAM,MAEVA,GAAM/J,EACNL,GAAW,CAEf,MACA,OAAQK,GAGJ,IAAK,IACD,OAAO,EAGX,IAAK,KACDsK,IACA3K,GAAW,EACX,SAGJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD3M,KAAKgE,MAAM,6BAA8B6J,EAASrM,EAAGuV,EAAI/J,GAIzDhN,KAAKgE,MAAM,yBAA0BkT,GACrCI,IACAJ,EAAYlK,EAIRnE,EAAQ0G,OACR+H,IACJ,SACJ,IAAK,IAAK,CACN,IAAKJ,EAAW,CACZH,GAAM,MACN,QACJ,CACA,MAAMQ,EAAU,CACZ9X,KAAMyX,EACNM,MAAOhW,EAAI,EACXiW,QAASV,EAAG5V,OACZoP,KAAMD,GAAQ4G,GAAW3G,KACzBC,MAAOF,GAAQ4G,GAAW1G,OAE9BxQ,KAAKgE,MAAMhE,KAAK6N,QAAS,KAAM0J,GAC/BP,EAAiBzJ,KAAKgK,GAEtBR,GAAMQ,EAAQhH,KAEQ,IAAlBgH,EAAQC,OAAgC,MAAjBD,EAAQ9X,OAC/B0X,GAAiB,EACjBJ,GAAMM,EAAgBxJ,EAAQJ,MAAMjM,EAAI,KAE5CxB,KAAKgE,MAAM,eAAgBkT,EAAWH,GACtCG,GAAY,EACZ,QACJ,CACA,IAAK,IAAK,CACN,MAAMK,EAAUP,EAAiBA,EAAiB7V,OAAS,GAC3D,IAAKoW,EAAS,CACVR,GAAM,MACN,QACJ,CACAC,EAAiB9Q,MAEjBoR,IACArE,GAAW,EACXuD,EAAKe,EAGLR,GAAMP,EAAGhG,MACO,MAAZgG,EAAG/W,MACHwX,EAAc1J,KAAK7J,OAAOC,OAAO6S,EAAI,CAAEkB,MAAOX,EAAG5V,UAErD,QACJ,CACA,IAAK,IAAK,CACN,MAAMoW,EAAUP,EAAiBA,EAAiB7V,OAAS,GAC3D,IAAKoW,EAAS,CACVR,GAAM,MACN,QACJ,CACAO,IACAP,GAAM,IAEgB,IAAlBQ,EAAQC,OAAgC,MAAjBD,EAAQ9X,OAC/B0X,GAAiB,EACjBJ,GAAMM,EAAgBxJ,EAAQJ,MAAMjM,EAAI,KAE5C,QACJ,CAEA,IAAK,IAED8V,IACA,MAAOK,EAAKC,EAAWC,EAAUC,GAAS5L,GAAW2B,EAASrM,GAC1DqW,GACAd,GAAMY,EACNjL,EAAQA,GAASkL,EACjBpW,GAAKqW,EAAW,EAChB5E,EAAWA,GAAY6E,GAGvBf,GAAM,MAEV,SACJ,IAAK,IACDA,GAAM,KAAO/J,EACb,SACJ,QAEIsK,IACAP,GAAM5E,GAAanF,GAU/B,IAAKwJ,EAAKQ,EAAiB9Q,MAAOsQ,EAAIA,EAAKQ,EAAiB9Q,MAAO,CAC/D,IAAI6R,EACJA,EAAOhB,EAAGtJ,MAAM+I,EAAGiB,QAAUjB,EAAGjG,KAAKpP,QACrCnB,KAAKgE,MAAMhE,KAAK6N,QAAS,eAAgBkJ,EAAIP,GAE7CuB,EAAOA,EAAKhM,QAAQ,6BAA6B,CAACqH,EAAG4E,EAAIC,KAChDA,IAEDA,EAAK,MAWFD,EAAKA,EAAKC,EAAK,OAE1BjY,KAAKgE,MAAM,iBAAkB+T,EAAMA,EAAMvB,EAAIO,GAC7C,MAAM5S,EAAgB,MAAZqS,EAAG/W,KAAeiR,GAAmB,MAAZ8F,EAAG/W,KAAegR,GAAQ,KAAO+F,EAAG/W,KACvEwT,GAAW,EACX8D,EAAKA,EAAGtJ,MAAM,EAAG+I,EAAGiB,SAAWtT,EAAI,MAAQ4T,CAC/C,CAEAT,IACI3K,IAEAoK,GAAM,QAIV,MAAMmB,EAAkBnH,GAAmBgG,EAAGzK,OAAO,IAMrD,IAAK,IAAI6L,EAAIlB,EAAc9V,OAAS,EAAGgX,GAAK,EAAGA,IAAK,CAChD,MAAMC,EAAKnB,EAAckB,GACnBE,EAAWtB,EAAGtJ,MAAM,EAAG2K,EAAGX,SAC1Ba,EAAUvB,EAAGtJ,MAAM2K,EAAGX,QAASW,EAAGV,MAAQ,GAChD,IAAIa,EAAUxB,EAAGtJ,MAAM2K,EAAGV,OAC1B,MAAMc,EAASzB,EAAGtJ,MAAM2K,EAAGV,MAAQ,EAAGU,EAAGV,OAASa,EAI5CE,EAAoBJ,EAASpS,MAAM,KAAK9E,OACxCuX,EAAmBL,EAASpS,MAAM,KAAK9E,OAASsX,EACtD,IAAIE,EAAaJ,EACjB,IAAK,IAAI/W,EAAI,EAAGA,EAAIkX,EAAkBlX,IAClCmX,EAAaA,EAAW5M,QAAQ,WAAY,IAEhDwM,EAAUI,EAEV5B,EAAKsB,EAAWC,EAAUC,GADC,KAAZA,EAAiB,YAAc,IACDC,CACjD,CAiBA,GAbW,KAAPzB,GAAa9D,IACb8D,EAAK,QAAUA,GAEfmB,IACAnB,GA5OuBI,EACrB,GACAC,EACI,iCACA,WAwOgBL,IAGtBlO,EAAQ8J,QAAWM,GAAapK,EAAQ+P,kBACxC3F,EAAWpF,EAAQgL,gBAAkBhL,EAAQY,gBAK5CwE,EACD,OAAoB8D,EA/4BFhL,QAAQ,SAAU,MAi5BxC,MAAM+M,GAASjQ,EAAQ8J,OAAS,IAAM,KAAOjG,EAAQ,IAAM,IAC3D,IACI,MAAM0B,EAAM0I,EACN,CACEiC,MAAOlL,EACPmL,KAAMjC,EACNvJ,KAAMsJ,GAER,CACEiC,MAAOlL,EACPmL,KAAMjC,GAEd,OAAOrT,OAAOC,OAAO,IAAIsV,OAAO,IAAMlC,EAAK,IAAK+B,GAAQ1K,EAE5D,CACA,MAAO8K,GAOH,OADAlZ,KAAKgE,MAAM,iBAAkBkV,GACtB,IAAID,OAAO,KACtB,CAEJ,CACA,MAAAtH,GACI,GAAI3R,KAAK8S,SAA0B,IAAhB9S,KAAK8S,OACpB,OAAO9S,KAAK8S,OAOhB,MAAMjC,EAAM7Q,KAAK6Q,IACjB,IAAKA,EAAI1P,OAEL,OADAnB,KAAK8S,QAAS,EACP9S,KAAK8S,OAEhB,MAAMjK,EAAU7I,KAAK6I,QACfsQ,EAAUtQ,EAAQoL,WAClBvD,GACA7H,EAAQgN,IA5hCH,0CAGE,0BA4hCPiD,EAAQjQ,EAAQ8J,OAAS,IAAM,GAOrC,IAAIoE,EAAKlG,EACJ4C,KAAI5F,IACL,MAAMuL,EAAKvL,EAAQ4F,KAAI7F,GAAkB,iBAANA,EAC7BuE,GAAavE,GACbA,IAAMwC,GACFA,GACAxC,EAAEoL,OAuBZ,OAtBAI,EAAGtO,SAAQ,CAAC8C,EAAGpM,KACX,MAAM0T,EAAOkE,EAAG5X,EAAI,GACdmT,EAAOyE,EAAG5X,EAAI,GAChBoM,IAAMwC,IAAYuE,IAASvE,UAGlBhP,IAATuT,OACavT,IAAT8T,GAAsBA,IAAS9E,GAC/BgJ,EAAG5X,EAAI,GAAK,UAAY2X,EAAU,QAAUjE,EAG5CkE,EAAG5X,GAAK2X,OAGE/X,IAAT8T,EACLkE,EAAG5X,EAAI,GAAKmT,EAAO,UAAYwE,EAAU,KAEpCjE,IAAS9E,KACdgJ,EAAG5X,EAAI,GAAKmT,EAAO,aAAewE,EAAU,OAASjE,EACrDkE,EAAG5X,EAAI,GAAK4O,IAChB,IAEGgJ,EAAGpI,QAAOpD,GAAKA,IAAMwC,KAAU5M,KAAK,IAAI,IAE9CA,KAAK,KAGVuT,EAAK,OAASA,EAAK,KAEf/W,KAAK4M,SACLmK,EAAK,OAASA,EAAK,QACvB,IACI/W,KAAK8S,OAAS,IAAImG,OAAOlC,EAAI+B,EAEjC,CACA,MAAOO,GAEHrZ,KAAK8S,QAAS,CAClB,CAEA,OAAO9S,KAAK8S,MAChB,CACA,UAAAY,CAAW9F,GAKP,OAAI5N,KAAKuS,wBACE3E,EAAE3H,MAAM,KAEVjG,KAAK4S,WAAa,cAAcpF,KAAKI,GAEnC,CAAC,MAAOA,EAAE3H,MAAM,QAGhB2H,EAAE3H,MAAM,MAEvB,CACA,KAAAgI,CAAMI,EAAGmE,EAAUxS,KAAKwS,SAIpB,GAHAxS,KAAKgE,MAAM,QAASqK,EAAGrO,KAAK6N,SAGxB7N,KAAKmG,QACL,OAAO,EAEX,GAAInG,KAAKsS,MACL,MAAa,KAANjE,EAEX,GAAU,MAANA,GAAamE,EACb,OAAO,EAEX,MAAM3J,EAAU7I,KAAK6I,QAEjB7I,KAAK4S,YACLvE,EAAIA,EAAEpI,MAAM,MAAMzC,KAAK,MAG3B,MAAM8V,EAAKtZ,KAAK0T,WAAWrF,GAC3BrO,KAAKgE,MAAMhE,KAAK6N,QAAS,QAASyL,GAKlC,MAAMzI,EAAM7Q,KAAK6Q,IACjB7Q,KAAKgE,MAAMhE,KAAK6N,QAAS,MAAOgD,GAEhC,IAAI0I,EAAWD,EAAGA,EAAGnY,OAAS,GAC9B,IAAKoY,EACD,IAAK,IAAI/X,EAAI8X,EAAGnY,OAAS,GAAIoY,GAAY/X,GAAK,EAAGA,IAC7C+X,EAAWD,EAAG9X,GAGtB,IAAK,IAAIA,EAAI,EAAGA,EAAIqP,EAAI1P,OAAQK,IAAK,CACjC,MAAMqM,EAAUgD,EAAIrP,GACpB,IAAIwU,EAAOsD,EAKX,GAJIzQ,EAAQ2Q,WAAgC,IAAnB3L,EAAQ1M,SAC7B6U,EAAO,CAACuD,IAEAvZ,KAAK+V,SAASC,EAAMnI,EAAS2E,GAErC,QAAI3J,EAAQ4Q,aAGJzZ,KAAK4M,MAErB,CAGA,OAAI/D,EAAQ4Q,YAGLzZ,KAAK4M,MAChB,CACA,eAAOuE,CAASC,GACZ,OAAO,GAAUD,SAASC,GAAKpD,SACnC,EC/vCG,SAAS0L,GAAuB1T,GACnC,MAAM2T,EAAS,CAAC,EAChB,IAAK,MAAM9P,KAAO7D,EAAQqL,OACtBsI,EAAO9P,GAAO7D,EAAQqE,IAAIR,GAE9B,OAAO8P,CACX,CD+vCA,GAAU3L,UAAYA,GACtB,GAAU0D,OE7vCY,CAAC5F,GAAKsG,wBAAuB,GAAW,CAAC,IAIpDA,EACDtG,EAAEC,QAAQ,aAAc,QACxBD,EAAEC,QAAQ,eAAgB,QFwvCpC,GAAU0F,SGzvCc,CAAC3F,GAAKsG,wBAAuB,GAAW,CAAC,IACtDA,EACDtG,EAAEC,QAAQ,iBAAkB,MAC5BD,EAAEC,QAAQ,4BAA6B,QAAQA,QAAQ,aAAc,UCb3E6N,iCCFwBrN,MDG5B,SAAWqN,GACPA,EAAoB,MAAI,QACxBA,EAAqB,OAAI,SACzBA,EAAuB,SAAI,UAC9B,CAJD,CAIGA,KAAiBA,GAAe,CAAC,IEiB7B,MAaMC,GAAcxW,eAAAyW,EAA8CjR,GAAS,IAAAkR,EAAA,IAAvC,aAAEpX,EAAY,WAAEF,GAAYqX,EACnE,MAAM9U,EAAe,CAAC,GAAIrC,EAAcF,GAAYe,KAAK,KACnDwW,EAAWnR,EAAQmR,SAAW,gBAAHnW,OAAmBgF,EAAQmR,SAASC,cAAa,kBAAmB,GAC/FhV,QAAiBrD,EAAO6B,cAAcuB,EAActB,OAAOC,OAAO,CACpEC,OAAQ,SACRhB,KAAM,sPAAFiB,OAMiB,QANjBkW,EAMIlR,EAAQ8B,aAAK,IAAAoP,EAAAA,EAxBA,GAwBiB,oCAAAlW,OAC7BgF,EAAQqR,QAAU,EAAC,0BAAArW,OAC9BmW,EAAQ,kCAEPnR,IACGsR,QAAqBlV,EAASmV,OAC9BzE,QAAe0E,EAAAA,EAAAA,IAASF,GAE9B,OC1BG,SAAgClV,EAAUrC,EAAM0X,GAAa,GAChE,OAAOA,EACD,CACE1X,OACAoD,QAASf,EAASe,QAAU0T,GAAuBzU,EAASe,SAAW,CAAC,EACxEuU,OAAQtV,EAASsV,OACjBC,WAAYvV,EAASuV,YAEvB5X,CACV,CDiBW6X,CAAuBxV,EADjByV,GAAkB/E,GAAQ,IACO,EAClD,EAEM+E,GAAoB,SAAU/E,GAA4B,IAApB2E,EAAUpZ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAElD,MAAQyZ,aAAe1V,SAAU2V,IAAqBjF,EAEtD,OAAOiF,EAAcnH,KAAIoH,IAErB,MAAMtb,EAAQsb,EAAKC,SAASC,KAC5B,OFQD,SAA8Bxb,EAAOga,EAAUe,GAAa,GAE/D,MAAQU,gBAAiBC,EAAU,KAAMC,iBAAkBC,EAAU,IAAKC,aAAczY,EAAe,KAAM0Y,eAAgBC,EAAW,KAAMC,QAASC,EAAO,MAASjc,EACjKE,EAAOkD,GACe,iBAAjBA,QAC4B,IAA5BA,EAAa8Y,WAClB,YACA,OACArV,EAAO,CACTmT,WACAmC,SAAU,YAAcnC,GACxBoC,QAASV,EACTpb,KAAMkG,SAASoV,EAAS,IACxB1b,OACA+b,KAAsB,iBAATA,EAAoBA,EAAKzP,QAAQ,KAAM,IAAM,MAQ9D,MANa,SAATtM,IACA2G,EAAKwV,KAAON,GAAgC,iBAAbA,EAAwBA,EAASrV,MAAM,KAAK,GAAK,IAEhFqU,IACAlU,EAAK7G,MAAQA,GAEV6G,CACX,CE/BeyV,CAAqBtc,EAAOA,EAAMgD,GAAG+F,WAAYgS,EAAW,GAE3E,kBEgCA,MCtGoL,GDsGpL,CACAjb,KAAA,WAEAmH,WAAA,CACAsV,QAAA,EACAC,eAAA,IACAjV,SAAA,IACAkV,YAAA,EACAC,qBAAA,EACAC,uBAAAA,GAGA9S,WAAA,CACA+S,kBAAAA,EAAAA,IAGAlV,OAAA,CAAAmV,GAEAxZ,IAAAA,GACA,OACAqB,MAAA,GACAlB,SAAA,EACAsZ,MAAA,EAEAC,kBAAA,KAAA7Z,WACAyX,OAAA,EACAqC,SAAA,GAEAC,cAAAA,OAEAV,QAAA,EACApS,SAAA,GAEA,EAEA9B,SAAA,CACA6U,WAAAA,GACA,YAAAF,SAAApb,OAAA,CACA,EACAub,cAAAA,GACA,YAAA3Z,SAAA,SAAAmX,MACA,GAGA9R,MAAA,CACA3F,UAAAA,GACA,KAAA6Z,kBAAA,KAAA7Z,UACA,GAGAO,QAAA,CACAmB,EAAA,KAEA,wBAAAwY,CAAAC,GACA,GAAAA,EACA,SEhIkCC,EAACla,EAAcF,EAAYqa,KACzD,MAAM9X,EAAe,CAAC,GAAIrC,EAAcF,GAAYe,KAAK,KACnDuZ,EAAaD,EAAKlX,cACxB,OAAOhE,EAAO6B,cAAcuB,EAAc,CACtCpB,OAAQ,YACRhB,KAAM,iLAAFiB,OAMUkZ,EAAU,mFAI1B,EFkHNF,CAAA,KAAAla,aAAA,KAAA2Z,kBAAA,IAAA3W,KACA,OAAAqX,IACA9Y,EAAAA,EAAAA,IAAA8Y,EAAAxa,UAAA2B,EAAAA,EAAAA,IAAA,8CACA,CAEA,EAOA,YAAA8Y,CAAAxa,GACA,KAAA6Z,kBAAA7Z,EACA,KAAAya,aACA,KAAArD,aACA,EAKAsD,qBAAAA,GAOA,KAAAlZ,OAAA,KAAAoY,MAAA,KAAAtZ,SAGA,KAAA8W,aACA,EAKA,iBAAAA,GAEA,KAAA2C,cAAA,UAEA,IACA,KAAAzZ,SAAA,EACA,KAAAkB,MAAA,GAGA,cAAAmZ,EAAA,MAAAC,GGhL0B,SAASD,GAClC,MAAME,EAAa,IAAIC,gBACjBC,EAASF,EAAWE,OAgB1B,MAAO,CACNJ,QATa/Z,eAAeoa,EAAK5U,GAKjC,aAJuBuU,EACtBK,EACA/Z,OAAOC,OAAO,CAAE6Z,UAAU3U,GAG5B,EAICwU,MAAOA,IAAMC,EAAWD,QAE1B,CH0JAK,CAAA7D,IACA,KAAA2C,cAAAa,EAGA,MAAAza,KAAA2Z,SAAAa,EAAA,CACAza,aAAA,KAAAA,aACAF,WAAA,KAAA6Z,mBACA,CAAApC,OAAA,KAAAA,UAAA,CAAAtX,KAAA,IAEA,KAAAmB,OAAAC,MAAA,aAAAH,OAAA0Y,EAAApb,OAAA,cAAAob,aAIAA,EAAApb,OF/L6B,KEgM7B,KAAAkb,MAAA,GAIA,KAAAE,SAAAhP,QAAAgP,GAGA,KAAArC,QFvM6B,EEwM7B,OAAAjW,GACA,cAAAA,EAAAzB,QACA,OAEA,KAAAyB,OAAAE,EAAAA,EAAAA,IAAA,+CACAC,GAAAH,MAAA,kCAAAA,EACA,SACA,KAAAlB,SAAA,CACA,CACA,EAOA+B,YAAAA,CAAAqB,GACA,KAAAoW,SAAAoB,QAAAxX,EACA,EAOA3B,QAAAA,CAAAjC,GACA,MAAAqb,EAAA,KAAArB,SAAAsB,WAAA1X,GAAAA,EAAA5G,MAAAgD,KAAAA,IACAqb,GAAA,EACA,KAAArB,SAAA7H,OAAAkJ,EAAA,GAEAxZ,GAAAH,MAAA,iDAAA1B,EAEA,EAKA2a,UAAAA,GACA,KAAAjZ,MAAA,GACA,KAAAlB,SAAA,EACA,KAAAsZ,MAAA,EACA,KAAAnC,OAAA,EACA,KAAAqC,SAAA,EACA,oBIlQI,GAAU,CAAC,EAEf,GAAQzT,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCP1D,UAXgB,OACd,ICTW,WAAkB,IAAIpJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACmJ,WAAW,CAAC,CAAC/J,KAAK,qBAAqBgK,QAAQ,uBAAuBrI,MAAOjB,EAAI4c,mBAAoBrT,WAAW,uBAAuBlJ,YAAY,WAAWmJ,MAAM,CAAE,eAAgBxJ,EAAI2c,iBAAkB,CAACzc,EAAG,UAAUF,EAAII,GAAG,CAACC,YAAY,mBAAmBC,MAAM,CAAC,gBAAgBN,EAAIwH,aAAa,gBAAgBxH,EAAI4C,aAAa,QAAS,EAAK,YAAY5C,EAAI2J,SAAS,cAAc3J,EAAIuc,mBAAmBhc,GAAG,CAAC,IAAMP,EAAI+E,eAAe,UAAU/E,EAAImK,YAAW,IAAQnK,EAAIW,GAAG,KAAOX,EAAI2c,eAAg/C3c,EAAIa,KAAp+C,EAAGb,EAAI0c,aAAe1c,EAAIsc,KAAMpc,EAAG,iBAAiB,CAACG,YAAY,kBAAkBC,MAAM,CAAC,KAAON,EAAIoE,EAAE,WAAY,6CAA6CwF,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAC7J,EAAG,wBAAwB,EAAE8J,OAAM,IAAO,MAAK,EAAM,cAAc9J,EAAG,KAAKF,EAAI+d,GAAI/d,EAAIwc,UAAU,SAASpW,GAAS,OAAOlG,EAAG,UAAUF,EAAII,GAAG,CAAC0J,IAAI1D,EAAQ5G,MAAMgD,GAAGnC,YAAY,iBAAiBC,MAAM,CAAC,IAAM,KAAK,gBAAgBN,EAAIwH,aAAa,gBAAgBxH,EAAI4C,aAAa,QAAUwD,EAAQ5G,MAAMiD,QAAQ,cAAczC,EAAIuc,kBAAkB,YAAYvc,EAAIkL,gBAAgB9E,EAAQ5G,MAAM2L,WAAW5K,GAAG,CAAC,iBAAiB,SAASC,GAAQ,OAAOR,EAAIge,KAAK5X,EAAQ5G,MAAO,UAAWgB,EAAO,EAAE,OAASR,EAAIyE,WAAW,UAAU2B,EAAQ5G,OAAM,GAAO,IAAG,GAAGQ,EAAIW,GAAG,KAAMX,EAAIgD,UAAYhD,EAAI2c,eAAgBzc,EAAG,MAAM,CAACG,YAAY,gCAAiCL,EAAI0c,aAAe1c,EAAIsc,KAAMpc,EAAG,MAAM,CAACG,YAAY,kBAAkB,CAACL,EAAIW,GAAG,WAAWX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,qBAAqB,YAAapE,EAAIkE,MAAO,CAAChE,EAAG,iBAAiB,CAACG,YAAY,kBAAkBC,MAAM,CAAC,KAAON,EAAIkE,OAAO0F,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAC7J,EAAG,0BAA0B,EAAE8J,OAAM,IAAO,MAAK,EAAM,YAAYhK,EAAIW,GAAG,KAAKT,EAAG,WAAW,CAACG,YAAY,kBAAkBE,GAAG,CAAC,MAAQP,EAAI8Z,aAAalQ,YAAY5J,EAAI6J,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAAC7J,EAAG,eAAe,EAAE8J,OAAM,IAAO,MAAK,EAAM,aAAa,CAAChK,EAAIW,GAAG,aAAaX,EAAIY,GAAGZ,EAAIoE,EAAE,WAAY,UAAU,eAAepE,EAAIa,OAAgB,EAC7iE,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,QEUhCod,EAAAA,GAAoBC,MAAK/b,EAAAA,EAAAA,OAGzBgc,EAAAA,GAAIC,MAAM,CACTvb,KAAIA,KACI,CACNmB,OAAMA,IAGRf,QAAS,CACRmB,EAAC,KACDgU,EAACA,EAAAA,sBCfCiG,OAAOC,MAAQD,OAAOC,IAAIC,UAC7B5a,OAAOC,OAAOya,OAAOC,IAAK,CAAEC,SAAU,CAAC,IAIxC5a,OAAOC,OAAOya,OAAOC,IAAIC,SAAU,CAAEC,KDctB,MAQdhN,WAAAA,GAAkD,IAAAiN,EAAA,IAAtC7b,EAAYzB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,QAAS2H,EAAO3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAW9C,OATA2H,EAAU,IACNA,EACH4V,UAAW,IACW,QAArBD,EAAI3V,EAAQ4V,iBAAS,IAAAD,EAAAA,EAAI,CAAC,EAC1B7b,iBAKK,IADMub,EAAAA,GAAIQ,OAAOC,IACjB,CAAS9V,EACjB,KCjCDzE,GAAQJ,MAAM,wDC7Bd,SAAS4a,EAAS3N,EAAGC,EAAG2N,GAClB5N,aAAagI,SAAQhI,EAAI6N,EAAW7N,EAAG4N,IACvC3N,aAAa+H,SAAQ/H,EAAI4N,EAAW5N,EAAG2N,IAE3C,IAAIE,EAAIC,EAAM/N,EAAGC,EAAG2N,GAEpB,OAAOE,GAAK,CACVvH,MAAOuH,EAAE,GACTE,IAAKF,EAAE,GACPG,IAAKL,EAAIpR,MAAM,EAAGsR,EAAE,IACpBI,KAAMN,EAAIpR,MAAMsR,EAAE,GAAK9N,EAAE9P,OAAQ4d,EAAE,IACnC5Z,KAAM0Z,EAAIpR,MAAMsR,EAAE,GAAK7N,EAAE/P,QAE7B,CAEA,SAAS2d,EAAWM,EAAKP,GACvB,IAAIhI,EAAIgI,EAAI5Q,MAAMmR,GAClB,OAAOvI,EAAIA,EAAE,GAAK,IACpB,CAGA,SAASmI,EAAM/N,EAAGC,EAAG2N,GACnB,IAAIQ,EAAMC,EAAKC,EAAMC,EAAO7J,EACxBF,EAAKoJ,EAAI7K,QAAQ/C,GACjByE,EAAKmJ,EAAI7K,QAAQ9C,EAAGuE,EAAK,GACzBjU,EAAIiU,EAER,GAAIA,GAAM,GAAKC,EAAK,EAAG,CACrB,GAAGzE,IAAIC,EACL,MAAO,CAACuE,EAAIC,GAKd,IAHA2J,EAAO,GACPE,EAAOV,EAAI1d,OAEJK,GAAK,IAAMmU,GACZnU,GAAKiU,GACP4J,EAAK9R,KAAK/L,GACViU,EAAKoJ,EAAI7K,QAAQ/C,EAAGzP,EAAI,IACA,GAAf6d,EAAKle,OACdwU,EAAS,CAAE0J,EAAKnZ,MAAOwP,KAEvB4J,EAAMD,EAAKnZ,OACDqZ,IACRA,EAAOD,EACPE,EAAQ9J,GAGVA,EAAKmJ,EAAI7K,QAAQ9C,EAAG1P,EAAI,IAG1BA,EAAIiU,EAAKC,GAAMD,GAAM,EAAIA,EAAKC,EAG5B2J,EAAKle,SACPwU,EAAS,CAAE4J,EAAMC,GAErB,CAEA,OAAO7J,CACT,CA5DA8J,EAAOC,QAAUd,EAqBjBA,EAASI,MAAQA,mBCtBjB,IAAIJ,EAAW,EAAQ,MAEvBa,EAAOC,QA6DP,SAAmBb,GACjB,OAAKA,GASoB,OAArBA,EAAIc,OAAO,EAAG,KAChBd,EAAM,SAAWA,EAAIc,OAAO,IAGvBC,EA7DT,SAAsBf,GACpB,OAAOA,EAAI5Y,MAAM,QAAQzC,KAAKqc,GACnB5Z,MAAM,OAAOzC,KAAKsc,GAClB7Z,MAAM,OAAOzC,KAAKuc,GAClB9Z,MAAM,OAAOzC,KAAKwc,GAClB/Z,MAAM,OAAOzC,KAAKyc,EAC/B,CAuDgBC,CAAarB,IAAM,GAAMpL,IAAI0M,IAZlC,EAaX,EA1EA,IAAIN,EAAW,UAAUO,KAAKC,SAAS,KACnCP,EAAU,SAASM,KAAKC,SAAS,KACjCN,EAAW,UAAUK,KAAKC,SAAS,KACnCL,EAAW,UAAUI,KAAKC,SAAS,KACnCJ,EAAY,WAAWG,KAAKC,SAAS,KAEzC,SAASC,EAAQzB,GACf,OAAO9Y,SAAS8Y,EAAK,KAAOA,EACxB9Y,SAAS8Y,EAAK,IACdA,EAAI0B,WAAW,EACrB,CAUA,SAASJ,EAAetB,GACtB,OAAOA,EAAI5Y,MAAM4Z,GAAUrc,KAAK,MACrByC,MAAM6Z,GAAStc,KAAK,KACpByC,MAAM8Z,GAAUvc,KAAK,KACrByC,MAAM+Z,GAAUxc,KAAK,KACrByC,MAAMga,GAAWzc,KAAK,IACnC,CAMA,SAASgd,EAAgB3B,GACvB,IAAKA,EACH,MAAO,CAAC,IAEV,IAAIrK,EAAQ,GACRqC,EAAI+H,EAAS,IAAK,IAAKC,GAE3B,IAAKhI,EACH,OAAOgI,EAAI5Y,MAAM,KAEnB,IAAIiZ,EAAMrI,EAAEqI,IACRC,EAAOtI,EAAEsI,KACTha,EAAO0R,EAAE1R,KACTyI,EAAIsR,EAAIjZ,MAAM,KAElB2H,EAAEA,EAAEzM,OAAO,IAAM,IAAMge,EAAO,IAC9B,IAAIsB,EAAYD,EAAgBrb,GAQhC,OAPIA,EAAKhE,SACPyM,EAAEA,EAAEzM,OAAO,IAAMsf,EAAUC,QAC3B9S,EAAEL,KAAKoT,MAAM/S,EAAG6S,IAGlBjM,EAAMjH,KAAKoT,MAAMnM,EAAO5G,GAEjB4G,CACT,CAmBA,SAASoM,EAAQ/B,GACf,MAAO,IAAMA,EAAM,GACrB,CACA,SAASgC,EAASC,GAChB,MAAO,SAAStT,KAAKsT,EACvB,CAEA,SAASC,EAAIvf,EAAGwf,GACd,OAAOxf,GAAKwf,CACd,CACA,SAASC,EAAIzf,EAAGwf,GACd,OAAOxf,GAAKwf,CACd,CAEA,SAASpB,EAAOf,EAAKqC,GACnB,IAAIC,EAAa,GAEbtK,EAAI+H,EAAS,IAAK,IAAKC,GAC3B,IAAKhI,EAAG,MAAO,CAACgI,GAGhB,IAAIK,EAAMrI,EAAEqI,IACR/Z,EAAO0R,EAAE1R,KAAKhE,OACdye,EAAO/I,EAAE1R,MAAM,GACf,CAAC,IAEL,GAAI,MAAMqI,KAAKqJ,EAAEqI,KACf,IAAK,IAAIkC,EAAI,EAAGA,EAAIjc,EAAKhE,OAAQigB,IAAK,CACpC,IAAIC,EAAYnC,EAAK,IAAMrI,EAAEsI,KAAO,IAAMha,EAAKic,GAC/CD,EAAW5T,KAAK8T,EAClB,KACK,CACL,IAaIlJ,EAkBAmJ,EA/BAC,EAAoB,iCAAiC/T,KAAKqJ,EAAEsI,MAC5DqC,EAAkB,uCAAuChU,KAAKqJ,EAAEsI,MAChEsC,EAAaF,GAAqBC,EAClCE,EAAY7K,EAAEsI,KAAKnL,QAAQ,MAAQ,EACvC,IAAKyN,IAAeC,EAElB,OAAI7K,EAAE1R,KAAK8I,MAAM,SAER2R,EADPf,EAAMhI,EAAEqI,IAAM,IAAMrI,EAAEsI,KAAOY,EAAWlJ,EAAE1R,MAGrC,CAAC0Z,GAIV,GAAI4C,EACFtJ,EAAItB,EAAEsI,KAAKlZ,MAAM,aAGjB,GAAiB,KADjBkS,EAAIqI,EAAgB3J,EAAEsI,OAChBhe,QAGa,KADjBgX,EAAIyH,EAAOzH,EAAE,IAAI,GAAO1E,IAAImN,IACtBzf,OACJ,OAAOgE,EAAKsO,KAAI,SAAS7F,GACvB,OAAOiJ,EAAEqI,IAAM/G,EAAE,GAAKvK,CACxB,IASN,GAAI6T,EAAY,CACd,IAAIE,EAAIrB,EAAQnI,EAAE,IACd6I,EAAIV,EAAQnI,EAAE,IACdyJ,EAAQxB,KAAKyB,IAAI1J,EAAE,GAAGhX,OAAQgX,EAAE,GAAGhX,QACnC2gB,EAAmB,GAAZ3J,EAAEhX,OACTif,KAAK2B,IAAIzB,EAAQnI,EAAE,KACnB,EACA3K,EAAOuT,EACGC,EAAIW,IAEhBG,IAAS,EACTtU,EAAOyT,GAET,IAAIe,EAAM7J,EAAE8J,KAAKpB,GAEjBS,EAAI,GAEJ,IAAK,IAAI9f,EAAImgB,EAAGnU,EAAKhM,EAAGwf,GAAIxf,GAAKsgB,EAAM,CACrC,IAAI9U,EACJ,GAAIwU,EAEQ,QADVxU,EAAItN,OAAOwiB,aAAa1gB,MAEtBwL,EAAI,SAGN,GADAA,EAAItN,OAAO8B,GACPwgB,EAAK,CACP,IAAIG,EAAOP,EAAQ5U,EAAE7L,OACrB,GAAIghB,EAAO,EAAG,CACZ,IAAIC,EAAI,IAAIvN,MAAMsN,EAAO,GAAG3e,KAAK,KAE/BwJ,EADExL,EAAI,EACF,IAAM4gB,EAAIpV,EAAES,MAAM,GAElB2U,EAAIpV,CACZ,CACF,CAEFsU,EAAE/T,KAAKP,EACT,CACF,KAAO,CACLsU,EAAI,GAEJ,IAAK,IAAIpN,EAAI,EAAGA,EAAIiE,EAAEhX,OAAQ+S,IAC5BoN,EAAE/T,KAAKoT,MAAMW,EAAG1B,EAAOzH,EAAEjE,IAAI,GAEjC,CAEA,IAASA,EAAI,EAAGA,EAAIoN,EAAEngB,OAAQ+S,IAC5B,IAASkN,EAAI,EAAGA,EAAIjc,EAAKhE,OAAQigB,IAC3BC,EAAYnC,EAAMoC,EAAEpN,GAAK/O,EAAKic,KAC7BF,GAASO,GAAcJ,IAC1BF,EAAW5T,KAAK8T,EAGxB,CAEA,OAAOF,CACT,oFCtMIkB,QAA0B,GAA4B,KAE1DA,EAAwB9U,KAAK,CAACkS,EAAOld,GAAI,8rCAA+rC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,wDAAwD,MAAQ,GAAG,SAAW,udAAud,eAAiB,CAAC,+1CAAi2C,WAAa,MAExqG,4FCJI8f,QAA0B,GAA4B,KAE1DA,EAAwB9U,KAAK,CAACkS,EAAOld,GAAI,kUAAmU,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,oDAAoD,MAAQ,GAAG,SAAW,wHAAwH,eAAiB,CAAC,uTAAuT,WAAa,MAE/5B,wCCLA,MAAM+f,EAAY,EAAQ,OACpBC,EAAY,EAAQ,OACpBC,EAAa,EAAQ,MAE3B/C,EAAOC,QAAU,CACf6C,UAAWA,EACXE,aAAcH,EACdE,WAAYA,2BCAd,SAASE,EAAQC,GAAmV,OAAtOD,EAArD,mBAAXrS,QAAoD,iBAApBA,OAAOuS,SAAmC,SAAiBD,GAAO,cAAcA,CAAK,EAAsB,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXtS,QAAyBsS,EAAIpR,cAAgBlB,QAAUsS,IAAQtS,OAAOwS,UAAY,gBAAkBF,CAAK,EAAYD,EAAQC,EAAM,CAUzX,SAASG,EAAiBC,GAAS,IAAIC,EAAwB,mBAARC,IAAqB,IAAIA,SAAQ7hB,EAA8nB,OAAnnB0hB,EAAmB,SAA0BC,GAAS,GAAc,OAAVA,IAMlIjZ,EANuKiZ,GAMjG,IAAzDvb,SAASc,SAAS4a,KAAKpZ,GAAIkK,QAAQ,kBAN+H,OAAO+O,EAMjN,IAA2BjZ,EAN6L,GAAqB,mBAAViZ,EAAwB,MAAM,IAAIhR,UAAU,sDAAyD,QAAsB,IAAXiR,EAAwB,CAAE,GAAIA,EAAOG,IAAIJ,GAAQ,OAAOC,EAAO3Y,IAAI0Y,GAAQC,EAAOnS,IAAIkS,EAAOK,EAAU,CAAE,SAASA,IAAY,OAAOC,EAAWN,EAAO7hB,UAAWoiB,EAAgBtjB,MAAMuR,YAAc,CAAkJ,OAAhJ6R,EAAQP,UAAYnf,OAAO6f,OAAOR,EAAMF,UAAW,CAAEtR,YAAa,CAAEvQ,MAAOoiB,EAASI,YAAY,EAAOC,UAAU,EAAMC,cAAc,KAAkBC,EAAgBP,EAASL,EAAQ,EAAUD,EAAiBC,EAAQ,CAEtvB,SAASM,EAAWO,EAAQrQ,EAAMwP,GAAqV,OAAhQM,EAEvH,WAAuC,GAAuB,oBAAZQ,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,mBAAVC,MAAsB,OAAO,EAAM,IAAiF,OAA3Ere,KAAKkd,UAAUva,SAAS4a,KAAKW,QAAQC,UAAUne,KAAM,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOqX,GAAK,OAAO,CAAO,CAAE,CAFpRiH,GAA4CJ,QAAQC,UAAiC,SAAoBF,EAAQrQ,EAAMwP,GAAS,IAAI9R,EAAI,CAAC,MAAOA,EAAE1D,KAAKoT,MAAM1P,EAAGsC,GAAO,IAAsD2Q,EAAW,IAA/C1c,SAAS2c,KAAKxD,MAAMiD,EAAQ3S,IAA6F,OAAnD8R,GAAOY,EAAgBO,EAAUnB,EAAMF,WAAmBqB,CAAU,EAAYb,EAAW1C,MAAM,KAAMzf,UAAY,CAMja,SAASyiB,EAAgBS,EAAGxW,GAA+G,OAA1G+V,EAAkBjgB,OAAO2gB,gBAAkB,SAAyBD,EAAGxW,GAAsB,OAAjBwW,EAAEE,UAAY1W,EAAUwW,CAAG,EAAUT,EAAgBS,EAAGxW,EAAI,CAEzK,SAAS0V,EAAgBc,GAAwJ,OAAnJd,EAAkB5f,OAAO2gB,eAAiB3gB,OAAO6gB,eAAiB,SAAyBH,GAAK,OAAOA,EAAEE,WAAa5gB,OAAO6gB,eAAeH,EAAI,EAAUd,EAAgBc,EAAI,CAE5M,IAGII,EAA4C,SAAUC,GAGxD,SAASD,EAA6Bja,GACpC,IAAIma,EAMJ,OAjCJ,SAAyBR,EAAUS,GAAe,KAAMT,aAAoBS,GAAgB,MAAM,IAAI5S,UAAU,oCAAwC,CA6BpJ6S,CAAgB5kB,KAAMwkB,IAEtBE,EA7BJ,SAAoCG,EAAM3B,GAAQ,OAAIA,GAA2B,WAAlBR,EAAQQ,IAAsC,mBAATA,EAEpG,SAAgC2B,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIC,eAAe,6DAAgE,OAAOD,CAAM,CAFnBE,CAAuBF,GAAtC3B,CAA6C,CA6BpK8B,CAA2BhlB,KAAMsjB,EAAgBkB,GAA8BtB,KAAKljB,KAAMuK,KAC5FlL,KAAO,+BACNqlB,CACT,CAEA,OA9BF,SAAmBO,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAInT,UAAU,sDAAyDkT,EAASpC,UAAYnf,OAAO6f,OAAO2B,GAAcA,EAAWrC,UAAW,CAAEtR,YAAa,CAAEvQ,MAAOikB,EAAUxB,UAAU,EAAMC,cAAc,KAAewB,GAAYvB,EAAgBsB,EAAUC,EAAa,CAkB9XC,CAAUX,EAA8BC,GAYjCD,CACT,CAdgD,CAc9C1B,EAAiBvW,QA6LnB,SAAS6Y,EAASC,EAAQC,GAoCxB,IAnCA,IAAIlb,EAAWlJ,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,WAAa,EAC5FqkB,EAAWD,EAAKrf,MA/MD,KAgNf9E,EAASokB,EAASpkB,OAElBqkB,EAAQ,SAAeC,GACzB,IAAIC,EAAiBH,EAASE,GAE9B,IAAKJ,EACH,MAAO,CACLM,OAAG,GAIP,GA5NiB,MA4NbD,EAAmC,CACrC,GAAI7Q,MAAMC,QAAQuQ,GAChB,MAAO,CACLM,EAAGN,EAAO5R,KAAI,SAAUzS,EAAO4c,GAC7B,IAAIgI,EAAoBL,EAAS9X,MAAMgY,EAAM,GAE7C,OAAIG,EAAkBzkB,OAAS,EACtBikB,EAASpkB,EAAO4kB,EAAkBpiB,KAlOlC,KAkOwD4G,GAExDA,EAASib,EAAQzH,EAAO2H,EAAUE,EAE7C,KAGF,IAAII,EAAaN,EAAS9X,MAAM,EAAGgY,GAAKjiB,KAzO3B,KA0Ob,MAAM,IAAI+I,MAAM,uBAAuB1I,OAAOgiB,EAAY,qBAE9D,CACER,EAASjb,EAASib,EAAQK,EAAgBH,EAAUE,EAExD,EAESA,EAAM,EAAGA,EAAMtkB,EAAQskB,IAAO,CACrC,IAAIK,EAAON,EAAMC,GAEjB,GAAsB,WAAlB/C,EAAQoD,GAAoB,OAAOA,EAAKH,CAC9C,CAEA,OAAON,CACT,CAEA,SAASU,EAAcR,EAAU3H,GAC/B,OAAO2H,EAASpkB,SAAWyc,EAAQ,CACrC,CA1OA6B,EAAOC,QAAU,CACf7O,IAkGF,SAA2BwU,EAAQW,EAAUhlB,GAC3C,GAAuB,UAAnB0hB,EAAQ2C,IAAkC,OAAXA,EACjC,OAAOA,EAGT,QAAuB,IAAZW,EACT,OAAOX,EAGT,GAAuB,iBAAZW,EAET,OADAX,EAAOW,GAAYhlB,EACZqkB,EAAOW,GAGhB,IACE,OAAOZ,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,EAAiBX,EAAU3H,GACtG,GAAIqI,IAAkBpC,QAAQU,eAAe,CAAC,GAC5C,MAAM,IAAIC,EAA6B,yCAGzC,IAAKyB,EAAcC,GAAkB,CACnC,IAAIC,EAAmBrmB,OAAOsmB,UAAUtmB,OAAOylB,EAAS3H,EAAQ,KAC5DyI,EA5IS,MA4IiBd,EAAS3H,EAAQ,GAG7CqI,EAAcC,GADZC,GAAoBE,EACW,GAEA,CAAC,CAEtC,CAMA,OAJIN,EAAcR,EAAU3H,KAC1BqI,EAAcC,GAAmBllB,GAG5BilB,EAAcC,EACvB,GACF,CAAE,MAAOI,GACP,GAAIA,aAAe9B,EAEjB,MAAM8B,EAEN,OAAOjB,CAEX,CACF,EA9IEhb,IAqBF,SAA2Bgb,EAAQW,GACjC,GAAuB,UAAnBtD,EAAQ2C,IAAkC,OAAXA,EACjC,OAAOA,EAGT,QAAuB,IAAZW,EACT,OAAOX,EAGT,GAAuB,iBAAZW,EACT,OAAOX,EAAOW,GAGhB,IACE,OAAOZ,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,GAC3E,OAAOD,EAAcC,EACvB,GACF,CAAE,MAAOI,GACP,OAAOjB,CACT,CACF,EAxCElC,IAqDF,SAA2BkC,EAAQW,GACjC,IAAInd,EAAU3H,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,GAAuB,UAAnBwhB,EAAQ2C,IAAkC,OAAXA,EACjC,OAAO,EAGT,QAAuB,IAAZW,EACT,OAAO,EAGT,GAAuB,iBAAZA,EACT,OAAOA,KAAYX,EAGrB,IACE,IAAIlC,GAAM,EAYV,OAXAiC,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,EAAiBX,EAAU3H,GAC/F,IAAImI,EAAcR,EAAU3H,GAO1B,OAAOqI,GAAiBA,EAAcC,GALpC/C,EADEta,EAAQ0d,IACJN,EAAcO,eAAeN,GAE7BA,KAAmBD,CAK/B,IACO9C,CACT,CAAE,MAAOmD,GACP,OAAO,CACT,CACF,EApFEG,OAAQ,SAAgBpB,EAAQW,EAAUnd,GACxC,OAAO7I,KAAKmjB,IAAIkC,EAAQW,EAAUnd,GAAW,CAC3C0d,KAAK,GAET,EACAG,KAoJF,SAA4BrB,EAAQW,EAAUW,GAC5C,IAAI9d,EAAU3H,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,GAAuB,UAAnBwhB,EAAQ2C,IAAkC,OAAXA,EACjC,OAAO,EAGT,QAAuB,IAAZW,EACT,OAAO,EAGT,IACE,IAAIU,GAAO,EACPE,GAAa,EAOjB,OANAxB,EAASC,EAAQW,GAAU,SAA6BC,EAAeC,EAAiBX,EAAU3H,GAGhG,OAFA8I,EAAOA,GAAQT,IAAkBU,KAAkBV,GAAiBA,EAAcC,KAAqBS,EACvGC,EAAab,EAAcR,EAAU3H,IAAqC,WAA3B8E,EAAQuD,IAA+BC,KAAmBD,EAClGA,GAAiBA,EAAcC,EACxC,IAEIrd,EAAQge,UACHH,GAAQE,EAERF,CAEX,CAAE,MAAOJ,GACP,OAAO,CACT,CACF,EA/KE9B,6BAA8BA,gDCtC5BsC,EAAO,EAAQ,OACfC,EAAW,SAAUpF,GACvB,MAAoB,iBAANA,CAChB,EAOA,SAASqF,EAAexS,EAAOyS,GAE7B,IADA,IAAIC,EAAM,GACD1lB,EAAI,EAAGA,EAAIgT,EAAMrT,OAAQK,IAAK,CACrC,IAAIoM,EAAI4G,EAAMhT,GAGToM,GAAW,MAANA,IAGA,OAANA,EACEsZ,EAAI/lB,QAAkC,OAAxB+lB,EAAIA,EAAI/lB,OAAS,GACjC+lB,EAAIhhB,MACK+gB,GACTC,EAAI3Z,KAAK,MAGX2Z,EAAI3Z,KAAKK,GAEb,CAEA,OAAOsZ,CACT,CAIA,IAAIC,EACA,gEACAC,EAAQ,CAAC,EAGb,SAASC,EAAe9N,GACtB,OAAO4N,EAAYG,KAAK/N,GAAU9L,MAAM,EAC1C,CAKA2Z,EAAMG,QAAU,WAId,IAHA,IAAIC,EAAe,GACfC,GAAmB,EAEdjmB,EAAIN,UAAUC,OAAS,EAAGK,IAAM,IAAMimB,EAAkBjmB,IAAK,CACpE,IAAI8jB,EAAQ9jB,GAAK,EAAKN,UAAUM,GAAKuO,EAAQ2X,MAG7C,IAAKX,EAASzB,GACZ,MAAM,IAAIvT,UAAU,6CACVuT,IAIZkC,EAAelC,EAAO,IAAMkC,EAC5BC,EAAsC,MAAnBnC,EAAKhZ,OAAO,GACjC,CASA,OAASmb,EAAmB,IAAM,KAHlCD,EAAeR,EAAeQ,EAAavhB,MAAM,MAClBwhB,GAAkBjkB,KAAK,OAEG,GAC3D,EAIA4jB,EAAMO,UAAY,SAASrC,GACzB,IAAIsC,EAAaR,EAAMQ,WAAWtC,GAC9BuC,EAAoC,MAApBvC,EAAK3F,QAAQ,GAYjC,OATA2F,EAAO0B,EAAe1B,EAAKrf,MAAM,MAAO2hB,GAAYpkB,KAAK,OAE3CokB,IACZtC,EAAO,KAELA,GAAQuC,IACVvC,GAAQ,MAGFsC,EAAa,IAAM,IAAMtC,CACnC,EAGA8B,EAAMQ,WAAa,SAAStC,GAC1B,MAA0B,MAAnBA,EAAKhZ,OAAO,EACrB,EAGA8a,EAAM5jB,KAAO,WAEX,IADA,IAAI8hB,EAAO,GACF9jB,EAAI,EAAGA,EAAIN,UAAUC,OAAQK,IAAK,CACzC,IAAIsmB,EAAU5mB,UAAUM,GACxB,IAAKulB,EAASe,GACZ,MAAM,IAAI/V,UAAU,0CAElB+V,IAIAxC,GAHGA,EAGK,IAAMwC,EAFNA,EAKd,CACA,OAAOV,EAAMO,UAAUrC,EACzB,EAKA8B,EAAMW,SAAW,SAASC,EAAMC,GAI9B,SAAShgB,EAAKigB,GAEZ,IADA,IAAI1Q,EAAQ,EACLA,EAAQ0Q,EAAI/mB,QACE,KAAf+mB,EAAI1Q,GADiBA,KAK3B,IADA,IAAIyH,EAAMiJ,EAAI/mB,OAAS,EAChB8d,GAAO,GACK,KAAbiJ,EAAIjJ,GADOA,KAIjB,OAAIzH,EAAQyH,EAAY,GACjBiJ,EAAIza,MAAM+J,EAAOyH,EAAM,EAChC,CAhBA+I,EAAOZ,EAAMG,QAAQS,GAAMrI,OAAO,GAClCsI,EAAKb,EAAMG,QAAQU,GAAItI,OAAO,GAsB9B,IALA,IAAIwI,EAAYlgB,EAAK+f,EAAK/hB,MAAM,MAC5BmiB,EAAUngB,EAAKggB,EAAGhiB,MAAM,MAExB9E,EAASif,KAAKiI,IAAIF,EAAUhnB,OAAQinB,EAAQjnB,QAC5CmnB,EAAkBnnB,EACbK,EAAI,EAAGA,EAAIL,EAAQK,IAC1B,GAAI2mB,EAAU3mB,KAAO4mB,EAAQ5mB,GAAI,CAC/B8mB,EAAkB9mB,EAClB,KACF,CAGF,IAAI+mB,EAAc,GAClB,IAAS/mB,EAAI8mB,EAAiB9mB,EAAI2mB,EAAUhnB,OAAQK,IAClD+mB,EAAYhb,KAAK,MAKnB,OAFAgb,EAAcA,EAAY1kB,OAAOukB,EAAQ3a,MAAM6a,KAE5B9kB,KAAK,IAC1B,EAGA4jB,EAAMoB,UAAY,SAASlD,GACzB,OAAOA,CACT,EAGA8B,EAAMqB,QAAU,SAASnD,GACvB,IAAI3P,EAAS0R,EAAe/B,GACxBoD,EAAO/S,EAAO,GACdgT,EAAMhT,EAAO,GAEjB,OAAK+S,GAASC,GAKVA,IAEFA,EAAMA,EAAIhJ,OAAO,EAAGgJ,EAAIxnB,OAAS,IAG5BunB,EAAOC,GARL,GASX,EAGAvB,EAAM1L,SAAW,SAAS4J,EAAMlX,GAC9B,IAAIC,EAAIgZ,EAAe/B,GAAM,GAK7B,OAHIlX,GAAOC,EAAEsR,QAAQ,EAAIvR,EAAIjN,UAAYiN,IACvCC,EAAIA,EAAEsR,OAAO,EAAGtR,EAAElN,OAASiN,EAAIjN,SAE1BkN,CACT,EAGA+Y,EAAMwB,QAAU,SAAStD,GACvB,OAAO+B,EAAe/B,GAAM,EAC9B,EAGA8B,EAAMyB,OAAS,SAASC,GACtB,IAAKhC,EAAKiC,SAASD,GACjB,MAAM,IAAI/W,UACN,wDAA0D+W,GAIhE,IAAIJ,EAAOI,EAAWJ,MAAQ,GAE9B,IAAK3B,EAAS2B,GACZ,MAAM,IAAI3W,UACN,+DACO+W,EAAWJ,MAMxB,OAFUI,EAAWH,IAAMG,EAAWH,IAAMvB,EAAMjX,IAAM,KAC7C2Y,EAAWE,MAAQ,GAEhC,EAGA5B,EAAMjf,MAAQ,SAAS8gB,GACrB,IAAKlC,EAASkC,GACZ,MAAM,IAAIlX,UACN,uDAAyDkX,GAG/D,IAAIC,EAAW7B,EAAe4B,GAC9B,IAAKC,GAAgC,IAApBA,EAAS/nB,OACxB,MAAM,IAAI4Q,UAAU,iBAAmBkX,EAAa,KAMtD,OAJAC,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAEtB,CACLR,KAAMQ,EAAS,GACfP,IAAKO,EAAS,GAAKA,EAAS,GAAGzb,MAAM,EAAGyb,EAAS,GAAG/nB,OAAS,GAC7D6nB,KAAME,EAAS,GACf9a,IAAK8a,EAAS,GACd7pB,KAAM6pB,EAAS,GAAGzb,MAAM,EAAGyb,EAAS,GAAG/nB,OAAS+nB,EAAS,GAAG/nB,QAEhE,EAGAimB,EAAMjX,IAAM,IACZiX,EAAM+B,UAAY,IAEhB1J,EAAOC,QAAU0H,IChRfgC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBloB,IAAjBmoB,EACH,OAAOA,EAAa7J,QAGrB,IAAID,EAAS2J,EAAyBE,GAAY,CACjD/mB,GAAI+mB,EACJE,QAAQ,EACR9J,QAAS,CAAC,GAUX,OANA+J,EAAoBH,GAAUpG,KAAKzD,EAAOC,QAASD,EAAQA,EAAOC,QAAS2J,GAG3E5J,EAAO+J,QAAS,EAGT/J,EAAOC,OACf,CAGA2J,EAAoBxS,EAAI4S,ErD5BpBvqB,EAAW,GACfmqB,EAAoBK,EAAI,CAAC/T,EAAQgU,EAAU7f,EAAI8f,KAC9C,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAAStoB,EAAI,EAAGA,EAAItC,EAASiC,OAAQK,IAAK,CACrCmoB,EAAWzqB,EAASsC,GAAG,GACvBsI,EAAK5K,EAASsC,GAAG,GACjBooB,EAAW1qB,EAASsC,GAAG,GAE3B,IAJA,IAGIuoB,GAAY,EACP7V,EAAI,EAAGA,EAAIyV,EAASxoB,OAAQ+S,MACpB,EAAX0V,GAAsBC,GAAgBD,IAAalmB,OAAO2N,KAAKgY,EAAoBK,GAAGM,OAAOngB,GAASwf,EAAoBK,EAAE7f,GAAK8f,EAASzV,MAC9IyV,EAASjV,OAAOR,IAAK,IAErB6V,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACb7qB,EAASwV,OAAOlT,IAAK,GACrB,IAAIud,EAAIjV,SACE1I,IAAN2d,IAAiBpJ,EAASoJ,EAC/B,CACD,CACA,OAAOpJ,CArBP,CAJCiU,EAAWA,GAAY,EACvB,IAAI,IAAIpoB,EAAItC,EAASiC,OAAQK,EAAI,GAAKtC,EAASsC,EAAI,GAAG,GAAKooB,EAAUpoB,IAAKtC,EAASsC,GAAKtC,EAASsC,EAAI,GACrGtC,EAASsC,GAAK,CAACmoB,EAAU7f,EAAI8f,EAuBjB,EsD3BdP,EAAoBlR,EAAKsH,IACxB,IAAIwK,EAASxK,GAAUA,EAAOyK,WAC7B,IAAOzK,EAAiB,QACxB,IAAM,EAEP,OADA4J,EAAoBc,EAAEF,EAAQ,CAAEhZ,EAAGgZ,IAC5BA,CAAM,ECLdZ,EAAoBc,EAAI,CAACzK,EAAS0K,KACjC,IAAI,IAAIvgB,KAAOugB,EACXf,EAAoBjF,EAAEgG,EAAYvgB,KAASwf,EAAoBjF,EAAE1E,EAAS7V,IAC5EnG,OAAO2mB,eAAe3K,EAAS7V,EAAK,CAAE2Z,YAAY,EAAMnZ,IAAK+f,EAAWvgB,IAE1E,ECNDwf,EAAoBhb,EAAI,CAAC,EAGzBgb,EAAoBrM,EAAKsN,GACjBC,QAAQC,IAAI9mB,OAAO2N,KAAKgY,EAAoBhb,GAAGuC,QAAO,CAAC6Z,EAAU5gB,KACvEwf,EAAoBhb,EAAExE,GAAKygB,EAASG,GAC7BA,IACL,KCNJpB,EAAoBlc,EAAKmd,GAEZA,EAAU,IAAMA,EAAU,SAAW,CAAC,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,wBAAwBA,GCH9IjB,EAAoBqB,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAO3qB,MAAQ,IAAIwH,SAAS,cAAb,EAChB,CAAE,MAAOwV,GACR,GAAsB,iBAAXoB,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBiL,EAAoBjF,EAAI,CAACzB,EAAK5H,IAAUrX,OAAOmf,UAAU2D,eAAetD,KAAKP,EAAK5H,G1DA9E5b,EAAa,CAAC,EACdC,EAAoB,aAExBiqB,EAAoBuB,EAAI,CAACnN,EAAKpB,EAAMxS,EAAKygB,KACxC,GAAGnrB,EAAWse,GAAQte,EAAWse,GAAKlQ,KAAK8O,OAA3C,CACA,IAAIwO,EAAQC,EACZ,QAAW1pB,IAARyI,EAEF,IADA,IAAIkhB,EAAUC,SAASC,qBAAqB,UACpCzpB,EAAI,EAAGA,EAAIupB,EAAQ5pB,OAAQK,IAAK,CACvC,IAAIsK,EAAIif,EAAQvpB,GAChB,GAAGsK,EAAEof,aAAa,QAAUzN,GAAO3R,EAAEof,aAAa,iBAAmB9rB,EAAoByK,EAAK,CAAEghB,EAAS/e,EAAG,KAAO,CACpH,CAEG+e,IACHC,GAAa,GACbD,EAASG,SAASG,cAAc,WAEzBC,QAAU,QACjBP,EAAOQ,QAAU,IACbhC,EAAoBiC,IACvBT,EAAOU,aAAa,QAASlC,EAAoBiC,IAElDT,EAAOU,aAAa,eAAgBnsB,EAAoByK,GAExDghB,EAAOlT,IAAM8F,GAEdte,EAAWse,GAAO,CAACpB,GACnB,IAAImP,EAAmB,CAAC7W,EAAM8W,KAE7BZ,EAAOa,QAAUb,EAAOc,OAAS,KACjChnB,aAAa0mB,GACb,IAAIO,EAAUzsB,EAAWse,GAIzB,UAHOte,EAAWse,GAClBoN,EAAOgB,YAAchB,EAAOgB,WAAWC,YAAYjB,GACnDe,GAAWA,EAAQ9gB,SAAShB,GAAQA,EAAG2hB,KACpC9W,EAAM,OAAOA,EAAK8W,EAAM,EAExBJ,EAAU9mB,WAAWinB,EAAiBrH,KAAK,UAAM/iB,EAAW,CAAE3B,KAAM,UAAWssB,OAAQlB,IAAW,MACtGA,EAAOa,QAAUF,EAAiBrH,KAAK,KAAM0G,EAAOa,SACpDb,EAAOc,OAASH,EAAiBrH,KAAK,KAAM0G,EAAOc,QACnDb,GAAcE,SAASgB,KAAKC,YAAYpB,EApCkB,CAoCX,E2DvChDxB,EAAoBtK,EAAKW,IACH,oBAAXrP,QAA0BA,OAAO6b,aAC1CxoB,OAAO2mB,eAAe3K,EAASrP,OAAO6b,YAAa,CAAElrB,MAAO,WAE7D0C,OAAO2mB,eAAe3K,EAAS,aAAc,CAAE1e,OAAO,GAAO,ECL9DqoB,EAAoB8C,IAAO1M,IAC1BA,EAAO2M,MAAQ,GACV3M,EAAO4M,WAAU5M,EAAO4M,SAAW,IACjC5M,GCHR4J,EAAoBnV,EAAI,WCAxB,IAAIoY,EACAjD,EAAoBqB,EAAE6B,gBAAeD,EAAYjD,EAAoBqB,EAAE8B,SAAW,IACtF,IAAIxB,EAAW3B,EAAoBqB,EAAEM,SACrC,IAAKsB,GAAatB,IACbA,EAASyB,gBACZH,EAAYtB,EAASyB,cAAc9U,MAC/B2U,GAAW,CACf,IAAIvB,EAAUC,EAASC,qBAAqB,UAC5C,GAAGF,EAAQ5pB,OAEV,IADA,IAAIK,EAAIupB,EAAQ5pB,OAAS,EAClBK,GAAK,KAAO8qB,IAAc,aAAa9e,KAAK8e,KAAaA,EAAYvB,EAAQvpB,KAAKmW,GAE3F,CAID,IAAK2U,EAAW,MAAM,IAAI/f,MAAM,yDAChC+f,EAAYA,EAAUvgB,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFsd,EAAoBzb,EAAI0e,YClBxBjD,EAAoBnY,EAAI8Z,SAAS0B,SAAW7H,KAAK2H,SAASG,KAK1D,IAAIC,EAAkB,CACrB,KAAM,GAGPvD,EAAoBhb,EAAE6F,EAAI,CAACoW,EAASG,KAElC,IAAIoC,EAAqBxD,EAAoBjF,EAAEwI,EAAiBtC,GAAWsC,EAAgBtC,QAAWlpB,EACtG,GAA0B,IAAvByrB,EAGF,GAAGA,EACFpC,EAASld,KAAKsf,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAIvC,SAAQ,CAAChD,EAASwF,IAAYF,EAAqBD,EAAgBtC,GAAW,CAAC/C,EAASwF,KAC1GtC,EAASld,KAAKsf,EAAmB,GAAKC,GAGtC,IAAIrP,EAAM4L,EAAoBzb,EAAIyb,EAAoBlc,EAAEmd,GAEpDrmB,EAAQ,IAAIsI,MAgBhB8c,EAAoBuB,EAAEnN,GAfFgO,IACnB,GAAGpC,EAAoBjF,EAAEwI,EAAiBtC,KAEf,KAD1BuC,EAAqBD,EAAgBtC,MACRsC,EAAgBtC,QAAWlpB,GACrDyrB,GAAoB,CACtB,IAAIG,EAAYvB,IAAyB,SAAfA,EAAMhsB,KAAkB,UAAYgsB,EAAMhsB,MAChEwtB,EAAUxB,GAASA,EAAMM,QAAUN,EAAMM,OAAOpU,IACpD1T,EAAMzB,QAAU,iBAAmB8nB,EAAU,cAAgB0C,EAAY,KAAOC,EAAU,IAC1FhpB,EAAM5E,KAAO,iBACb4E,EAAMxE,KAAOutB,EACb/oB,EAAMmZ,QAAU6P,EAChBJ,EAAmB,GAAG5oB,EACvB,CACD,GAEwC,SAAWqmB,EAASA,EAE/D,CACD,EAWFjB,EAAoBK,EAAExV,EAAKoW,GAA0C,IAA7BsC,EAAgBtC,GAGxD,IAAI4C,EAAuB,CAACC,EAA4BvqB,KACvD,IAKI0mB,EAAUgB,EALVX,EAAW/mB,EAAK,GAChBwqB,EAAcxqB,EAAK,GACnByqB,EAAUzqB,EAAK,GAGIpB,EAAI,EAC3B,GAAGmoB,EAAS1H,MAAM1f,GAAgC,IAAxBqqB,EAAgBrqB,KAAa,CACtD,IAAI+mB,KAAY8D,EACZ/D,EAAoBjF,EAAEgJ,EAAa9D,KACrCD,EAAoBxS,EAAEyS,GAAY8D,EAAY9D,IAGhD,GAAG+D,EAAS,IAAI1X,EAAS0X,EAAQhE,EAClC,CAEA,IADG8D,GAA4BA,EAA2BvqB,GACrDpB,EAAImoB,EAASxoB,OAAQK,IACzB8oB,EAAUX,EAASnoB,GAChB6nB,EAAoBjF,EAAEwI,EAAiBtC,IAAYsC,EAAgBtC,IACrEsC,EAAgBtC,GAAS,KAE1BsC,EAAgBtC,GAAW,EAE5B,OAAOjB,EAAoBK,EAAE/T,EAAO,EAGjC2X,EAAqBzI,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FyI,EAAmBxiB,QAAQoiB,EAAqB/I,KAAK,KAAM,IAC3DmJ,EAAmB/f,KAAO2f,EAAqB/I,KAAK,KAAMmJ,EAAmB/f,KAAK4W,KAAKmJ,QCvFvFjE,EAAoBiC,QAAKlqB,ECGzB,IAAImsB,EAAsBlE,EAAoBK,OAAEtoB,EAAW,CAAC,OAAO,IAAOioB,EAAoB,SAC9FkE,EAAsBlE,EAAoBK,EAAE6D","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/Refresh.vue?0940","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=template&id=7301d745","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/MessageReplyText.vue?2121","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=template&id=5b37a4cf","webpack:///nextcloud/node_modules/vue-material-design-icons/AlertCircleOutline.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/AlertCircleOutline.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/AlertCircleOutline.vue?730b","webpack:///nextcloud/node_modules/vue-material-design-icons/AlertCircleOutline.vue?vue&type=template&id=4aed4486","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/logger.js","webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?65e8","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack:///nextcloud/apps/comments/src/mixins/CommentView.ts","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/brace-expressions.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/index.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/headers.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/escape.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/unescape.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/dav.js","webpack:///nextcloud/node_modules/layerr/dist/layerr.js","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/node_modules/webdav/dist/node/response.js","webpack:///nextcloud/apps/comments/src/views/Comments.vue","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/services/ReadComments.ts","webpack:///nextcloud/apps/comments/src/utils/cancelableRequest.js","webpack://nextcloud/./apps/comments/src/views/Comments.vue?4fea","webpack://nextcloud/./apps/comments/src/views/Comments.vue?f45b","webpack://nextcloud/./apps/comments/src/views/Comments.vue?0e41","webpack:///nextcloud/apps/comments/src/services/CommentsInstance.js","webpack:///nextcloud/apps/comments/src/comments-app.js","webpack:///nextcloud/node_modules/balanced-match/index.js","webpack:///nextcloud/node_modules/brace-expansion/index.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=style&index=0&id=5b932050&prod&lang=scss&scoped=true","webpack:///nextcloud/node_modules/fast-xml-parser/src/fxp.js","webpack:///nextcloud/node_modules/nested-property/dist/nested-property.js","webpack:///nextcloud/node_modules/path-posix/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon refresh-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"RefreshIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Refresh.vue?vue&type=template&id=7301d745\"\nimport script from \"./Refresh.vue?vue&type=script&lang=js\"\nexport * from \"./Refresh.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon refresh-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon message-reply-text-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MessageReplyTextIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import { render, staticRenderFns } from \"./MessageReplyText.vue?vue&type=template&id=5b37a4cf\"\nimport script from \"./MessageReplyText.vue?vue&type=script&lang=js\"\nexport * from \"./MessageReplyText.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon message-reply-text-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./AlertCircleOutline.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./AlertCircleOutline.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon alert-circle-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AlertCircleOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import { render, staticRenderFns } from \"./AlertCircleOutline.vue?vue&type=template&id=4aed4486\"\nimport script from \"./AlertCircleOutline.vue?vue&type=script&lang=js\"\nexport * from \"./AlertCircleOutline.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon alert-circle-outline-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted),expression:\"!deleted\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":true,\"icon\":\"icon-rename\"},on:{\"click\":_vm.onEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true,\"icon\":\"icon-delete\"},on:{\"click\":_vm.onDeleteWithUndo}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":_vm.onEditCancel}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('NcDateTime',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp,\"ignore-seconds\":true}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('form',{staticClass:\"comment__editor\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"comment__editor-group\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"label\":_vm.editor ? _vm.t('comments', 'New comment') : _vm.t('comments', 'Edit comment'),\"placeholder\":_vm.t('comments', 'Write a comment …'),\"value\":_vm.localMessage,\"user-data\":_vm.userData,\"aria-describedby\":\"tab-comments__editor-description\"},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('div',{staticClass:\"comment__submit\"},[_c('NcButton',{attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('span',{staticClass:\"icon-loading-small\"}):_c('ArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,2357784758)})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__editor-description\",attrs:{\"id\":\"tab-comments__editor-description\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', '@ for mentions, : for emoji, / for smart picker'))+\"\\n\\t\\t\\t\")])]):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath())\n\n// set CSRF token header\nconst setHeaders = (token) => {\n client.setHeaders({\n // Add this so the server knows it is an request from the browser\n 'X-Requested-With': 'XMLHttpRequest',\n // Inject user auth\n requesttoken: token ?? '',\n })\n}\n\n// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders)\nsetHeaders(getRequestToken())\n\nexport default client\n","/**\n * @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @author Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport logger from '../logger.js'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tresourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'files',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.resourceType, this.resourceId, this.id, message)\n\t\t\t\tlogger.debug('Comment edited', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.deleted = true\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.resourceType, this.resourceId, this.id)\n\t\t\t\tlogger.debug('Comment deleted', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.resourceType, this.resourceId, message)\n\t\t\t\tlogger.debug('New comment posted', { resourceType: this.resourceType, resourceId: this.resourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(resourceType, resourceId, commentId, message) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(resourceType, resourceId, commentId) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(resourceType, resourceId, message) {\n\tconst resourcePath = ['', resourceType, resourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + resourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: resourceType,\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from resource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = resourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\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 - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else\n\t\t\t\t\t\ticon=\"icon-close\"\n\t\t\t\t\t\t@click=\"onEditCancel\">\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<NcDateTime v-else-if=\"creationDateTime\"\n\t\t\t\t\tclass=\"comment__timestamp\"\n\t\t\t\t\t:timestamp=\"timestamp\"\n\t\t\t\t\t:ignore-seconds=\"true\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<form v-if=\"editor || editing\" class=\"comment__editor\" @submit.prevent>\n\t\t\t\t<div class=\"comment__editor-group\">\n\t\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t\t:label=\"editor ? t('comments', 'New comment') : t('comments', 'Edit comment')\"\n\t\t\t\t\t\t:placeholder=\"t('comments', 'Write a comment …')\"\n\t\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t\taria-describedby=\"tab-comments__editor-description\"\n\t\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t\t<div class=\"comment__submit\">\n\t\t\t\t\t\t<NcButton type=\"tertiary-no-background\"\n\t\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<span v-if=\"loading\" class=\"icon-loading-small\" />\n\t\t\t\t\t\t\t\t<ArrowRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"tab-comments__editor-description\" class=\"comment__editor-description\">\n\t\t\t\t\t{{ t('comments', '@ for mentions, : for emoji, / for smart picker') }}\n\t\t\t\t</div>\n\t\t\t</form>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t\t<!-- eslint-enable vue/no-v-html-->\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\n\nimport CommentMixin from '../mixins/CommentMixin.js'\n\n// Dynamic loading\nconst NcRichContenteditable = () => import('@nextcloud/vue/dist/Components/NcRichContenteditable.js')\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tArrowRight,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tNcDateTime,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t\tsubmitted: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\t/**\n\t\t * Timestamp of the creation time (in ms UNIX time)\n\t\t */\n\t\ttimestamp() {\n\t\t\treturn Date.parse(this.creationDateTime)\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t\tthis.submitted = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true\";\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=e4ab9720&scoped=true\"\nimport script from \"./Comment.vue?vue&type=script&lang=js\"\nexport * from \"./Comment.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=e4ab9720&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e4ab9720\",\n null\n \n)\n\nexport default component.exports","import axios from '@nextcloud/axios';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n props: {\n resourceId: {\n type: Number,\n required: true,\n },\n resourceType: {\n type: String,\n default: 'files',\n },\n },\n data() {\n return {\n editorData: {\n actorDisplayName: getCurrentUser().displayName,\n actorId: getCurrentUser().uid,\n key: 'editor',\n },\n userData: {},\n };\n },\n methods: {\n /**\n * Autocomplete @mentions\n *\n * @param {string} search the query\n * @param {Function} callback the callback to process the results with\n */\n async autoComplete(search, callback) {\n const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n params: {\n search,\n itemType: 'files',\n itemId: this.resourceId,\n sorter: 'commenters|share-recipients',\n limit: loadState('comments', 'maxAutoCompleteResults'),\n },\n });\n // Save user data so it can be used by the editor to replace mentions\n data.ocs.data.forEach(user => { this.userData[user.id] = user; });\n return callback(Object.values(this.userData));\n },\n /**\n * Make sure we have all mentions as Array of objects\n *\n * @param mentions the mentions list\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genMentionsData(mentions) {\n Object.values(mentions)\n .flat()\n .forEach(mention => {\n this.userData[mention.mentionId] = {\n // TODO: support groups\n icon: 'icon-user',\n id: mention.mentionId,\n label: mention.mentionDisplayName,\n source: 'users',\n primary: getCurrentUser()?.uid === mention.mentionId,\n };\n });\n return this.userData;\n },\n },\n});\n","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","import expand from 'brace-expansion';\nimport { parseClass } from './brace-expressions.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\nexport default minimatch;\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\nconst plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' },\n};\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = (s) => s.split('').reduce((set, c) => {\n set[c] = true;\n return set;\n}, {});\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!');\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(');\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\nconst MAX_PATTERN_LENGTH = 1024 * 64;\nconst assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globUnescape = (s) => s.replace(/\\\\(.)/g, '$1');\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (!matched)\n continue;\n globParts[i] = matched;\n globParts[j] = [];\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // a UNC pattern like //?/c:/* can match a path like c:/x\n // and vice versa\n if (this.isWindows) {\n const fileUNC = file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n typeof file[3] === 'string' &&\n /^[a-z]:$/i.test(file[3]);\n const patternUNC = pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n if (fileUNC && patternUNC) {\n const fd = file[3];\n const pd = pattern[3];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n file[3] = pd;\n }\n }\n else if (patternUNC && typeof file[0] === 'string') {\n const pd = pattern[3];\n const fd = file[0];\n if (pd.toLowerCase() === fd.toLowerCase()) {\n pattern[3] = fd;\n pattern = pattern.slice(3);\n }\n }\n else if (fileUNC && typeof pattern[0] === 'string') {\n const fd = file[3];\n if (fd.toLowerCase() === pattern[0].toLowerCase()) {\n pattern[0] = fd;\n file = file.slice(3);\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n let re = '';\n let hasMagic = false;\n let escaping = false;\n // ? => one single character\n const patternListStack = [];\n const negativeLists = [];\n let stateChar = false;\n let uflag = false;\n let pl;\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set. However, if the pattern\n // starts with ., then traversal patterns can match.\n let dotTravAllowed = pattern.charAt(0) === '.';\n let dotFileAllowed = options.dot || dotTravAllowed;\n const patternStart = () => dotTravAllowed\n ? ''\n : dotFileAllowed\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const subPatternStart = (p) => p.charAt(0) === '.'\n ? ''\n : options.dot\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const clearStateChar = () => {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star;\n hasMagic = true;\n break;\n case '?':\n re += qmark;\n hasMagic = true;\n break;\n default:\n re += '\\\\' + stateChar;\n break;\n }\n this.debug('clearStateChar %j %j', stateChar, re);\n stateChar = false;\n }\n };\n for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c);\n // skip over any that are escaped.\n if (escaping) {\n // completely not allowed, even escaped.\n // should be impossible.\n /* c8 ignore start */\n if (c === '/') {\n return false;\n }\n /* c8 ignore stop */\n if (reSpecials[c]) {\n re += '\\\\';\n }\n re += c;\n escaping = false;\n continue;\n }\n switch (c) {\n // Should already be path-split by now.\n /* c8 ignore start */\n case '/': {\n return false;\n }\n /* c8 ignore stop */\n case '\\\\':\n clearStateChar();\n escaping = true;\n continue;\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c);\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n this.debug('call clearStateChar %j', stateChar);\n clearStateChar();\n stateChar = c;\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext)\n clearStateChar();\n continue;\n case '(': {\n if (!stateChar) {\n re += '\\\\(';\n continue;\n }\n const plEntry = {\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close,\n };\n this.debug(this.pattern, '\\t', plEntry);\n patternListStack.push(plEntry);\n // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n re += plEntry.open;\n // next entry starts with a dot maybe?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n this.debug('plType %j %j', stateChar, re);\n stateChar = false;\n continue;\n }\n case ')': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\)';\n continue;\n }\n patternListStack.pop();\n // closing an extglob\n clearStateChar();\n hasMagic = true;\n pl = plEntry;\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close;\n if (pl.type === '!') {\n negativeLists.push(Object.assign(pl, { reEnd: re.length }));\n }\n continue;\n }\n case '|': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\|';\n continue;\n }\n clearStateChar();\n re += '|';\n // next subpattern can start with a dot?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n continue;\n }\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar();\n const [src, needUflag, consumed, magic] = parseClass(pattern, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n }\n else {\n re += '\\\\[';\n }\n continue;\n case ']':\n re += '\\\\' + c;\n continue;\n default:\n // swallow any state char that wasn't consumed\n clearStateChar();\n re += regExpEscape(c);\n break;\n } // switch\n } // for\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n let tail;\n tail = re.slice(pl.reStart + pl.open.length);\n this.debug(this.pattern, 'setting tail', re, pl);\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\';\n // should already be done\n /* c8 ignore start */\n }\n /* c8 ignore stop */\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|';\n });\n this.debug('tail=%j\\n %s', tail, tail, pl, re);\n const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\\\' + pl.type;\n hasMagic = true;\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail;\n }\n // handle trailing things that only matter at the very end.\n clearStateChar();\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\';\n }\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n const addPatternStart = addPatternStartSet[re.charAt(0)];\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (let n = negativeLists.length - 1; n > -1; n--) {\n const nl = negativeLists[n];\n const nlBefore = re.slice(0, nl.reStart);\n const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);\n let nlAfter = re.slice(nl.reEnd);\n const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n const closeParensBefore = nlBefore.split(')').length;\n const openParensBefore = nlBefore.split('(').length - closeParensBefore;\n let cleanAfter = nlAfter;\n for (let i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '');\n }\n nlAfter = cleanAfter;\n const dollar = nlAfter === '' ? '(?:$|\\\\/)' : '';\n re = nlBefore + nlFirst + nlAfter + dollar + nlLast;\n }\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re;\n }\n if (addPatternStart) {\n re = patternStart() + re;\n }\n // if it's nocase, and the lcase/uppercase don't match, it's magic\n if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {\n hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();\n }\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(re);\n }\n const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n try {\n const ext = fastTest\n ? {\n _glob: pattern,\n _src: re,\n test: fastTest,\n }\n : {\n _glob: pattern,\n _src: re,\n };\n return Object.assign(new RegExp('^' + re + '$', flags), ext);\n /* c8 ignore start */\n }\n catch (er) {\n // should be impossible\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n this.debug('invalid regexp', er);\n return new RegExp('$.');\n }\n /* c8 ignore stop */\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = options.nocase ? 'i' : '';\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src);\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n return pp.filter(p => p !== GLOBSTAR).join('/');\n })\n .join('|');\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$';\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').*$';\n try {\n this.regexp = new RegExp(re, flags);\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","export function convertResponseHeaders(headers) {\n const output = {};\n for (const key of headers.keys()) {\n output[key] = headers.get(key);\n }\n return output;\n}\nexport function mergeHeaders(...headerPayloads) {\n if (headerPayloads.length === 0)\n return {};\n const headerKeys = {};\n return headerPayloads.reduce((output, headers) => {\n Object.keys(headers).forEach(header => {\n const lowerHeader = header.toLowerCase();\n if (headerKeys.hasOwnProperty(lowerHeader)) {\n output[headerKeys[lowerHeader]] = headers[header];\n }\n else {\n headerKeys[lowerHeader] = header;\n output[header] = headers[header];\n }\n });\n return output;\n }, {});\n}\n","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","import path from \"path-posix\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport nestedProp from \"nested-property\";\nimport { encodePath, normalisePath } from \"./path.js\";\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Array\"] = \"array\";\n PropertyType[\"Object\"] = \"object\";\n PropertyType[\"Original\"] = \"original\";\n})(PropertyType || (PropertyType = {}));\nfunction getParser() {\n return new XMLParser({\n removeNSPrefix: true,\n numberParseOptions: {\n hex: true,\n leadingZeros: false\n }\n // // We don't use the processors here as decoding is done manually\n // // later on - decoding early would break some path checks.\n // attributeValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val)),\n // tagValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val))\n });\n}\nfunction getPropertyOfType(obj, prop, type = PropertyType.Original) {\n const val = nestedProp.get(obj, prop);\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n }\n else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n return val;\n}\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n // Only either status OR propstat is allowed\n if (output.status) {\n nestedProp.set(output, \"status\", getPropertyOfType(output, \"status\", PropertyType.Object));\n }\n else {\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", PropertyType.Object));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", PropertyType.Object));\n }\n return output;\n}\nfunction normaliseResult(result) {\n const { multistatus } = result;\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n const output = {\n multistatus: Array.isArray(multistatus) ? multistatus[0] : multistatus\n };\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", PropertyType.Array));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n/**\n * Parse an XML response from a WebDAV service,\n * converting it to an internal DAV result\n * @param xml The raw XML string\n * @returns A parsed and processed DAV result\n */\nexport function parseXML(xml) {\n return new Promise(resolve => {\n const result = getParser().parse(xml);\n resolve(normaliseResult(result));\n });\n}\nexport function prepareFileFromProps(props, filename, isDetailed = false) {\n // Last modified time, raw size, item type and mime\n const { getlastmodified: lastMod = null, getcontentlength: rawSize = \"0\", resourcetype: resourceType = null, getcontenttype: mimeType = null, getetag: etag = null } = props;\n const type = resourceType &&\n typeof resourceType === \"object\" &&\n typeof resourceType.collection !== \"undefined\"\n ? \"directory\"\n : \"file\";\n const stat = {\n filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n if (isDetailed) {\n stat.props = props;\n }\n return stat;\n}\n/**\n * Parse a DAV result for file stats\n * @param result The resulting DAV response\n * @param filename The filename that was stat'd\n * @param isDetailed Whether or not the raw props of\n * the resource should be returned\n * @returns A file stat result\n */\nexport function parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n try {\n // should be a propstat response, if not the if below will throw an error\n if (result.multistatus.response[0].propstat) {\n responseItem = result.multistatus.response[0];\n }\n }\n catch (e) {\n /* ignore */\n }\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n const { propstat: { prop: props, status: statusLine } } = responseItem;\n // As defined in https://tools.ietf.org/html/rfc2068#section-6.1\n const [_, statusCodeStr, statusText] = statusLine.split(\" \", 3);\n const statusCode = parseInt(statusCodeStr, 10);\n if (statusCode >= 400) {\n const err = new Error(`Invalid response: ${statusCode} ${statusText}`);\n err.status = statusCode;\n throw err;\n }\n const filePath = normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n/**\n * Parse a DAV result for a search request\n *\n * @param result The resulting DAV response\n * @param searchArbiter The collection path that was searched\n * @param isDetailed Whether or not the raw props of the resource should be returned\n */\nexport function parseSearch(result, searchArbiter, isDetailed) {\n const response = {\n truncated: false,\n results: []\n };\n response.truncated = result.multistatus.response.some(v => {\n return ((v.status || v.propstat?.status).split(\" \", 3)?.[1] === \"507\" &&\n v.href.replace(/\\/$/, \"\").endsWith(encodePath(searchArbiter).replace(/\\/$/, \"\")));\n });\n result.multistatus.response.forEach(result => {\n if (result.propstat === undefined) {\n return;\n }\n const filename = result.href.split(\"/\").map(decodeURIComponent).join(\"/\");\n response.results.push(prepareFileFromProps(result.propstat.prop, filename, isDetailed));\n });\n return response;\n}\n/**\n * Translate a disk quota indicator to a recognised\n * value (includes \"unlimited\" and \"unknown\")\n * @param value The quota indicator, eg. \"-3\"\n * @returns The value in bytes, or another indicator\n */\nexport function translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n case \"-2\":\n /* falls-through */\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n default:\n return parseInt(value, 10);\n }\n}\n","import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = \"Layerr\";\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause) ? err._cause : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack;\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n cause() {\n return Layerr.cause(this);\n }\n toString() {\n let output = this.name || this.constructor.name || this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { parseXML } from 'webdav';\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from 'webdav/dist/node/response.js';\nimport { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js';\nimport client from './DavClient.js';\nexport const DEFAULT_LIMIT = 20;\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.resourceType the resource type\n * @param {number} data.resourceId the resource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @param {number} [options.limit] the pagination limit, defaults to 20\n * @param {Date} [options.datetime] optional date to query\n * @return {{data: object[]}} the comments list\n */\nexport const getComments = async function ({ resourceType, resourceId }, options) {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const datetime = options.datetime ? `<oc:datetime>${options.datetime.toISOString()}</oc:datetime>` : '';\n const response = await client.customRequest(resourcePath, Object.assign({\n method: 'REPORT',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${options.limit ?? DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t\t${datetime}\n\t\t\t</oc:filter-comments>`,\n }, options));\n const responseData = await response.text();\n const result = await parseXML(responseData);\n const stat = getDirectoryFiles(result, true);\n return processResponsePayload(response, stat, true);\n};\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function (result, isDetailed = false) {\n // Extract the response items (directory contents)\n const { multistatus: { response: responseItems }, } = result;\n // Map all items to a consistent output structure (results)\n return responseItems.map(item => {\n // Each item should contain a stat object\n const props = item.propstat.prop;\n return prepareFileFromProps(props, props.id.toString(), isDetailed);\n });\n};\n","import minimatch from \"minimatch\";\nimport { convertResponseHeaders } from \"./tools/headers.js\";\nexport function createErrorFromResponse(response, prefix = \"\") {\n const err = new Error(`${prefix}Invalid response: ${response.status} ${response.statusText}`);\n err.status = response.status;\n err.response = response;\n return err;\n}\nexport function handleResponseCode(context, response) {\n const { status } = response;\n if (status === 401 && context.digest)\n return response;\n if (status >= 400) {\n const err = createErrorFromResponse(response);\n throw err;\n }\n return response;\n}\nexport function processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, { matchBase: true }));\n}\n/**\n * Process a response payload (eg. from `customRequest`) and\n * prepare it for further processing. Exposed for custom\n * request handling.\n * @param response The response for a request\n * @param data The data returned\n * @param isDetailed Whether or not a detailed result is\n * requested\n * @returns The response data, or a detailed response object\n * if required\n */\nexport function processResponsePayload(response, data, isDetailed = false) {\n return isDetailed\n ? {\n data,\n headers: response.headers ? convertResponseHeaders(response.headers) : {},\n status: response.status,\n statusText: response.statusText\n }\n : data;\n}\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\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 - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-element-visibility=\"onVisibilityChange\"\n\t\tclass=\"comments\"\n\t\t:class=\"{ 'icon-loading': isFirstLoading }\">\n\t\t<!-- Editor -->\n\t\t<Comment v-bind=\"editorData\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:resource-type=\"resourceType\"\n\t\t\t:editor=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t:resource-id=\"currentResourceId\"\n\t\t\tclass=\"comments__writer\"\n\t\t\t@new=\"onNewComment\" />\n\n\t\t<template v-if=\"!isFirstLoading\">\n\t\t\t<NcEmptyContent v-if=\"!hasComments && done\"\n\t\t\t\tclass=\"comments__empty\"\n\t\t\t\t:name=\"t('comments', 'No comments yet, start the conversation!')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<MessageReplyTextIcon />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<ul v-else>\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<Comment v-for=\"comment in comments\"\n\t\t\t\t\t:key=\"comment.props.id\"\n\t\t\t\t\ttag=\"li\"\n\t\t\t\t\tv-bind=\"comment.props\"\n\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t:resource-type=\"resourceType\"\n\t\t\t\t\t:message.sync=\"comment.props.message\"\n\t\t\t\t\t:resource-id=\"currentResourceId\"\n\t\t\t\t\t:user-data=\"genMentionsData(comment.props.mentions)\"\n\t\t\t\t\tclass=\"comments__list\"\n\t\t\t\t\t@delete=\"onDelete\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Loading more message -->\n\t\t\t<div v-if=\"loading && !isFirstLoading\" class=\"comments__info icon-loading\" />\n\n\t\t\t<div v-else-if=\"hasComments && done\" class=\"comments__info\">\n\t\t\t\t{{ t('comments', 'No more messages') }}\n\t\t\t</div>\n\n\t\t\t<!-- Error message -->\n\t\t\t<template v-else-if=\"error\">\n\t\t\t\t<NcEmptyContent class=\"comments__error\" :name=\"error\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AlertCircleOutlineIcon />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t\t<NcButton class=\"comments__retry\" @click=\"getComments\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<RefreshIcon />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('comments', 'Retry') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport { vElementVisibility as elementVisibility } from '@vueuse/components'\n\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\nimport MessageReplyTextIcon from 'vue-material-design-icons/MessageReplyText.vue'\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\n\nimport Comment from '../components/Comment.vue'\nimport CommentView from '../mixins/CommentView'\nimport cancelableRequest from '../utils/cancelableRequest.js'\nimport { getComments, DEFAULT_LIMIT } from '../services/GetComments.ts'\nimport { markCommentsAsRead } from '../services/ReadComments.ts'\n\nexport default {\n\tname: 'Comments',\n\n\tcomponents: {\n\t\tComment,\n\t\tNcEmptyContent,\n\t\tNcButton,\n\t\tRefreshIcon,\n\t\tMessageReplyTextIcon,\n\t\tAlertCircleOutlineIcon,\n\t},\n\n\tdirectives: {\n\t\telementVisibility,\n\t},\n\n\tmixins: [CommentView],\n\n\tdata() {\n\t\treturn {\n\t\t\terror: '',\n\t\t\tloading: false,\n\t\t\tdone: false,\n\n\t\t\tcurrentResourceId: this.resourceId,\n\t\t\toffset: 0,\n\t\t\tcomments: [],\n\n\t\t\tcancelRequest: () => {},\n\n\t\t\tComment,\n\t\t\tuserData: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasComments() {\n\t\t\treturn this.comments.length > 0\n\t\t},\n\t\tisFirstLoading() {\n\t\t\treturn this.loading && this.offset === 0\n\t\t},\n\t},\n\n\twatch: {\n\t\tresourceId() {\n\t\t\tthis.currentResourceId = this.resourceId\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tasync onVisibilityChange(isVisible) {\n\t\t\tif (isVisible) {\n\t\t\t\ttry {\n\t\t\t\t\tawait markCommentsAsRead(this.resourceType, this.currentResourceId, new Date())\n\t\t\t\t} catch (e) {\n\t\t\t\t\tshowError(e.message || t('comments', 'Failed to mark comments as read'))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update current resourceId and fetch new data\n\t\t *\n\t\t * @param {number} resourceId the current resourceId (fileId...)\n\t\t */\n\t\tasync update(resourceId) {\n\t\t\tthis.currentResourceId = resourceId\n\t\t\tthis.resetState()\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Ran when the bottom of the tab is reached\n\t\t */\n\t\tonScrollBottomReached() {\n\t\t\t/**\n\t\t\t * Do not fetch more if we:\n\t\t\t * - are showing an error\n\t\t\t * - already fetched everything\n\t\t\t * - are currently loading\n\t\t\t */\n\t\t\tif (this.error || this.done || this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getComments() {\n\t\t\t// Cancel any ongoing request\n\t\t\tthis.cancelRequest('cancel')\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.error = ''\n\n\t\t\t\t// Init cancellable request\n\t\t\t\tconst { request, abort } = cancelableRequest(getComments)\n\t\t\t\tthis.cancelRequest = abort\n\n\t\t\t\t// Fetch comments\n\t\t\t\tconst { data: comments } = await request({\n\t\t\t\t\tresourceType: this.resourceType,\n\t\t\t\t\tresourceId: this.currentResourceId,\n\t\t\t\t}, { offset: this.offset }) || { data: [] }\n\n\t\t\t\tthis.logger.debug(`Processed ${comments.length} comments`, { comments })\n\n\t\t\t\t// We received less than the requested amount,\n\t\t\t\t// we're done fetching comments\n\t\t\t\tif (comments.length < DEFAULT_LIMIT) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t// Insert results\n\t\t\t\tthis.comments.push(...comments)\n\n\t\t\t\t// Increase offset for next fetch\n\t\t\t\tthis.offset += DEFAULT_LIMIT\n\t\t\t} catch (error) {\n\t\t\t\tif (error.message === 'cancel') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.error = t('comments', 'Unable to load the comments list')\n\t\t\t\tconsole.error('Error loading the comments list', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add newly created comment to the list\n\t\t *\n\t\t * @param {object} comment the new comment\n\t\t */\n\t\tonNewComment(comment) {\n\t\t\tthis.comments.unshift(comment)\n\t\t},\n\n\t\t/**\n\t\t * Remove deleted comment from the list\n\t\t *\n\t\t * @param {number} id the deleted comment\n\t\t */\n\t\tonDelete(id) {\n\t\t\tconst index = this.comments.findIndex(comment => comment.props.id === id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.comments.splice(index, 1)\n\t\t\t} else {\n\t\t\t\tconsole.error('Could not find the deleted comment in the list', id)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.error = ''\n\t\t\tthis.loading = false\n\t\t\tthis.done = false\n\t\t\tthis.offset = 0\n\t\t\tthis.comments = []\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.comments {\n\tmin-height: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty,\n\t&__error {\n\t\tflex: 1 0;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport client from './DavClient.js';\n/**\n * Mark comments older than the date timestamp as read\n *\n * @param resourceType the resource type\n * @param resourceId the resource ID\n * @param date the date object\n */\nexport const markCommentsAsRead = (resourceType, resourceId, date) => {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const readMarker = date.toUTCString();\n return client.customRequest(resourcePath, {\n method: 'PROPPATCH',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:readMarker>${readMarker}</oc:readMarker>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n });\n};\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {Function} request the axios promise request\n * @return {object}\n */\nconst cancelableRequest = function(request) {\n\tconst controller = new AbortController()\n\tconst signal = controller.signal\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\tconst response = await request(\n\t\t\turl,\n\t\t\tObject.assign({ signal }, options)\n\t\t)\n\t\treturn response\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tabort: () => controller.abort(),\n\t}\n}\n\nexport default cancelableRequest\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=5b932050&prod&lang=scss&scoped=true\";\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!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=5b932050&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comments.vue?vue&type=template&id=5b932050&scoped=true\"\nimport script from \"./Comments.vue?vue&type=script&lang=js\"\nexport * from \"./Comments.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comments.vue?vue&type=style&index=0&id=5b932050&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b932050\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"element-visibility\",rawName:\"v-element-visibility\",value:(_vm.onVisibilityChange),expression:\"onVisibilityChange\"}],staticClass:\"comments\",class:{ 'icon-loading': _vm.isFirstLoading }},[_c('Comment',_vm._b({staticClass:\"comments__writer\",attrs:{\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"editor\":true,\"user-data\":_vm.userData,\"resource-id\":_vm.currentResourceId},on:{\"new\":_vm.onNewComment}},'Comment',_vm.editorData,false)),_vm._v(\" \"),(!_vm.isFirstLoading)?[(!_vm.hasComments && _vm.done)?_c('NcEmptyContent',{staticClass:\"comments__empty\",attrs:{\"name\":_vm.t('comments', 'No comments yet, start the conversation!')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('MessageReplyTextIcon')]},proxy:true}],null,false,1033639148)}):_c('ul',_vm._l((_vm.comments),function(comment){return _c('Comment',_vm._b({key:comment.props.id,staticClass:\"comments__list\",attrs:{\"tag\":\"li\",\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"message\":comment.props.message,\"resource-id\":_vm.currentResourceId,\"user-data\":_vm.genMentionsData(comment.props.mentions)},on:{\"update:message\":function($event){return _vm.$set(comment.props, \"message\", $event)},\"delete\":_vm.onDelete}},'Comment',comment.props,false))}),1),_vm._v(\" \"),(_vm.loading && !_vm.isFirstLoading)?_c('div',{staticClass:\"comments__info icon-loading\"}):(_vm.hasComments && _vm.done)?_c('div',{staticClass:\"comments__info\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('comments', 'No more messages'))+\"\\n\\t\\t\")]):(_vm.error)?[_c('NcEmptyContent',{staticClass:\"comments__error\",attrs:{\"name\":_vm.error},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlertCircleOutlineIcon')]},proxy:true}],null,false,66050004)}),_vm._v(\" \"),_c('NcButton',{staticClass:\"comments__retry\",on:{\"click\":_vm.getComments},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('RefreshIcon')]},proxy:true}],null,false,3924573781)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Retry'))+\"\\n\\t\\t\\t\")])]:_vm._e()]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { getRequestToken } from '@nextcloud/auth'\nimport Vue from 'vue'\nimport CommentsApp from '../views/Comments.vue'\nimport logger from '../logger.js'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\n// Add translates functions\nVue.mixin({\n\tdata() {\n\t\treturn {\n\t\t\tlogger,\n\t\t}\n\t},\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\nexport default class CommentInstance {\n\n\t/**\n\t * Initialize a new Comments instance for the desired type\n\t *\n\t * @param {string} resourceType the comments endpoint type\n\t * @param {object} options the vue options (propsData, parent, el...)\n\t */\n\tconstructor(resourceType = 'files', options = {}) {\n\t\t// Merge options and set `resourceType` property\n\t\toptions = {\n\t\t\t...options,\n\t\t\tpropsData: {\n\t\t\t\t...(options.propsData ?? {}),\n\t\t\t\tresourceType,\n\t\t\t},\n\t\t}\n\t\t// Init Comments component\n\t\tconst View = Vue.extend(CommentsApp)\n\t\treturn new View(options)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\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 * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport CommentsInstance from './services/CommentsInstance.js'\n\n// Init Comments\nif (window.OCA && !window.OCA.Comments) {\n\tObject.assign(window.OCA, { Comments: {} })\n}\n\n// Init Comments App view\nObject.assign(window.OCA.Comments, { View: CommentsInstance })\nconsole.debug('OCA.Comments.View initialized')\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\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, `.comment[data-v-e4ab9720]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-e4ab9720]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-e4ab9720]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-e4ab9720]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-e4ab9720]{margin-left:10px !important}.comment__author[data-v-e4ab9720]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-e4ab9720],.comment__timestamp[data-v-e4ab9720]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-e4ab9720]{position:relative}.comment__editor-description[data-v-e4ab9720]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-e4ab9720]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-e4ab9720]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-e4ab9720]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-e4ab9720]{min-height:44px;margin:0;padding:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 8px;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__editor-group {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__editor-description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-block: var(--default-grid-baseline);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\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, `.comments[data-v-5b932050]{min-height:100%;display:flex;flex-direction:column}.comments__empty[data-v-5b932050],.comments__error[data-v-5b932050]{flex:1 0}.comments__retry[data-v-5b932050]{margin:0 auto}.comments__info[data-v-5b932050]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/views/Comments.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,eAAA,CACA,YAAA,CACA,qBAAA,CAEA,oEAEC,QAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA\",\"sourcesContent\":[\"\\n.comments {\\n\\tmin-height: 100%;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__empty,\\n\\t&__error {\\n\\t\\tflex: 1 0;\\n\\t}\\n\\n\\t&__retry {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__info {\\n\\t\\theight: 60px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\ttext-align: center;\\n\\t\\tline-height: 60px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"5528\":\"110b147bc8680f8c83f4\",\"7185\":\"7500f3fc5f25407c56b1\",\"9891\":\"11f7c532881a4e9da7b7\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 7062;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t7062: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(67192)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","name","emits","props","title","type","String","fillColor","default","size","Number","_vm","this","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","getRootPath","generateRemoteUrl","decodeHtmlEntities","value","passes","arguments","length","undefined","parser","DOMParser","decoded","i","parseFromString","documentElement","textContent","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","getLoggerBuilder","setApp","detectUser","build","id","message","resourceId","required","resourceType","data","deleted","editing","loading","methods","onEdit","onEditCancel","updateLocalMessage","onEditComment","async","commentId","commentPath","join","customRequest","Object","assign","method","concat","EditComment","logger","debug","error","showError","t","console","onDeleteWithUndo","timeOutDelete","setTimeout","onDelete","TOAST_UNDO_TIMEOUT","showUndo","clearTimeout","deleteFile","DeleteComment","onNewComment","newComment","resourcePath","response","axios","post","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","Date","toUTCString","objectType","verb","parseInt","headers","split","pop","comment","stat","details","NewComment","localMessage","components","ArrowRight","NcActionButton","NcActions","NcActionSeparator","NcAvatar","NcButton","NcDateTime","NcRichContenteditable","mixins","RichEditorMixin","CommentMixin","inheritAttrs","editor","Boolean","autoComplete","Function","tag","expanded","submitted","computed","isOwnComment","renderedContent","isEmptyMessage","renderContent","trim","timestamp","parse","watch","beforeMount","toString","onSubmit","$nextTick","$refs","$el","focus","onExpand","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","directives","rawName","expression","class","preventDefault","ref","userData","scopedSlots","_u","key","fn","proxy","domProps","defineComponent","editorData","search","callback","get","generateOcsUrl","params","itemType","itemId","sorter","limit","loadState","ocs","forEach","user","values","genMentionsData","mentions","flat","mention","_getCurrentUser","mentionId","icon","label","mentionDisplayName","source","primary","posixClasses","braceEscape","s","replace","rangesToString","ranges","parseClass","glob","position","pos","charAt","Error","negs","sawStart","uflag","escaping","negate","endPos","rangeStart","WHILE","c","cls","unip","u","neg","entries","startsWith","push","test","slice","sranges","snegs","p","pattern","assertValidPattern","nocomment","Minimatch","match","starDotExtRE","starDotExtTest","ext","f","endsWith","starDotExtTestDot","starDotExtTestNocase","toLowerCase","starDotExtTestNocaseDot","starDotStarRE","starDotStarTest","includes","starDotStarTestDot","dotStarRE","dotStarTest","starRE","starTest","starTestDot","qmarksRE","qmarksTestNocase","$0","noext","qmarksTestNoExt","qmarksTestNocaseDot","qmarksTestNoExtDot","qmarksTestDot","qmarksTest","len","defaultPlatform","process","env","__MINIMATCH_TESTING_PLATFORM__","platform","sep","GLOBSTAR","Symbol","plTypes","open","close","qmark","star","charSet","reduce","set","reSpecials","addPatternStartSet","filter","a","b","defaults","def","keys","orig","constructor","super","unescape","escape","makeRe","braceExpand","list","nobrace","TypeError","mm","nonull","globMagic","regExpEscape","windowsPathsNoEscape","nonegate","empty","preserveMultipleSlashes","partial","globSet","globParts","nocase","isWindows","windowsNoMagicRoot","regexp","allowWindowsEscape","make","hasMagic","magicalBraces","part","_","parseNegate","Set","args","rawGlobParts","map","slashSplit","preprocess","__","isUNC","isDrive","ss","indexOf","noglobstar","j","optimizationLevel","firstPhasePreProcess","secondPhasePreProcess","levelOneOptimize","adjascentGlobstarOptimize","parts","gs","splice","prev","levelTwoFileOptimize","Array","isArray","didSomething","dd","gss","next","p2","other","splin","matched","partsMatch","emptyGSMatch","ai","bi","result","which","dot","negateOffset","matchOne","file","fileUNC","patternUNC","fd","pd","fi","pi","fl","pl","fr","pr","swallowee","hit","m","fastTest","re","patternListStack","negativeLists","stateChar","dotTravAllowed","dotFileAllowed","subPatternStart","clearStateChar","plEntry","start","reStart","reEnd","src","needUflag","consumed","magic","tail","$1","$2","addPatternStart","n","nl","nlBefore","nlFirst","nlAfter","nlLast","closeParensBefore","openParensBefore","cleanAfter","nocaseMagicOnly","toUpperCase","flags","_glob","_src","RegExp","er","twoStar","pp","ex","ff","filename","matchBase","flipNegate","convertResponseHeaders","output","PropertyType","getComments","_ref","_options$limit","datetime","toISOString","offset","responseData","text","parseXML","isDetailed","status","statusText","processResponsePayload","getDirectoryFiles","multistatus","responseItems","item","propstat","prop","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","getcontenttype","mimeType","getetag","etag","collection","basename","lastmod","mime","prepareFileFromProps","Comment","NcEmptyContent","RefreshIcon","MessageReplyTextIcon","AlertCircleOutlineIcon","elementVisibility","CommentView","done","currentResourceId","comments","cancelRequest","hasComments","isFirstLoading","onVisibilityChange","isVisible","markCommentsAsRead","date","readMarker","e","update","resetState","onScrollBottomReached","request","abort","controller","AbortController","signal","url","cancelableRequest","unshift","index","findIndex","_l","$set","__webpack_nonce__","btoa","Vue","mixin","window","OCA","Comments","View","_options$propsData","propsData","extend","CommentsApp","balanced","str","maybeMatch","r","range","end","pre","body","reg","begs","beg","left","right","module","exports","substr","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","Math","random","numeric","charCodeAt","parseCommaParts","postParts","shift","apply","embrace","isPadded","el","lte","y","gte","isTop","expansions","k","expansion","N","isNumericSequence","isAlphaSequence","isSequence","isOptions","x","width","max","incr","abs","pad","some","fromCharCode","need","z","___CSS_LOADER_EXPORT___","validator","XMLParser","XMLBuilder","XMLValidator","_typeof","obj","iterator","prototype","_wrapNativeSuper","Class","_cache","Map","call","has","Wrapper","_construct","_getPrototypeOf","create","enumerable","writable","configurable","_setPrototypeOf","Parent","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","instance","bind","o","setPrototypeOf","__proto__","getPrototypeOf","ObjectPrototypeMutationError","_Error","_this","Constructor","_classCallCheck","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","_inherits","traverse","object","path","segments","_loop","idx","currentSegment","v","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","isInteger","nextPropIsArrayWildcard","err","own","hasOwnProperty","hasOwn","isIn","objectInPath","pathExists","validPath","util","isString","normalizeArray","allowAboveRoot","res","splitPathRe","posix","posixSplitPath","exec","resolve","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","relative","from","to","arr","fromParts","toParts","min","samePartsLength","outputParts","_makeLong","dirname","root","dir","extname","format","pathObject","isObject","base","pathString","allParts","delimiter","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","d","definition","defineProperty","chunkId","Promise","all","promises","g","globalThis","l","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","event","onerror","onload","doneFns","parentNode","removeChild","target","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","location","currentScript","baseURI","href","installedChunks","installedChunkData","promise","reject","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file