@rushobservability/rum-sdk 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +61 -2
  2. package/dist/index.d.ts +123 -14
  3. package/dist/index.js +1 -60
  4. package/dist/index.js.map +1 -1
  5. package/dist/rush-rum.global.js +2 -0
  6. package/dist/rush-rum.global.js.map +1 -0
  7. package/package.json +15 -5
  8. package/dist/browser.d.ts +0 -11
  9. package/dist/browser.d.ts.map +0 -1
  10. package/dist/browser.js +0 -63
  11. package/dist/browser.js.map +0 -1
  12. package/dist/core.d.ts +0 -16
  13. package/dist/core.d.ts.map +0 -1
  14. package/dist/core.js +0 -178
  15. package/dist/core.js.map +0 -1
  16. package/dist/errors.d.ts +0 -2
  17. package/dist/errors.d.ts.map +0 -1
  18. package/dist/errors.js +0 -32
  19. package/dist/errors.js.map +0 -1
  20. package/dist/index.d.ts.map +0 -1
  21. package/dist/interactions.d.ts +0 -2
  22. package/dist/interactions.d.ts.map +0 -1
  23. package/dist/interactions.js +0 -31
  24. package/dist/interactions.js.map +0 -1
  25. package/dist/pageview.d.ts +0 -2
  26. package/dist/pageview.d.ts.map +0 -1
  27. package/dist/pageview.js +0 -55
  28. package/dist/pageview.js.map +0 -1
  29. package/dist/replay.d.ts +0 -9
  30. package/dist/replay.d.ts.map +0 -1
  31. package/dist/replay.js +0 -62
  32. package/dist/replay.js.map +0 -1
  33. package/dist/resources.d.ts +0 -2
  34. package/dist/resources.d.ts.map +0 -1
  35. package/dist/resources.js +0 -101
  36. package/dist/resources.js.map +0 -1
  37. package/dist/session.d.ts +0 -9
  38. package/dist/session.d.ts.map +0 -1
  39. package/dist/session.js +0 -67
  40. package/dist/session.js.map +0 -1
  41. package/dist/types.d.ts +0 -78
  42. package/dist/types.d.ts.map +0 -1
  43. package/dist/types.js +0 -2
  44. package/dist/types.js.map +0 -1
  45. package/dist/vitals.d.ts +0 -2
  46. package/dist/vitals.d.ts.map +0 -1
  47. package/dist/vitals.js +0 -22
  48. package/dist/vitals.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/web-vitals/dist/web-vitals.js","../src/session.ts","../src/browser.ts","../src/transport.ts","../src/core.ts","../src/vitals.ts","../src/frustration.ts","../src/errors.ts","../src/pageview.ts","../src/interactions.ts","../src/resources.ts","../src/perf.ts","../src/bootstrap.ts","../src/global.ts"],"names":["web_vitals_exports","__export","L","b","$","N","_","J","w","S","ee","j","G","Q","e","n","t","r","i","o","a","c","u","s","d","l","p","v","m","h","g","y","T","E","C","A","I","P","M","k","F","D","x","R","B","H","q","O","z","K","U","V","W","X","Y","Z","init_web_vitals","__esmMin","SESSION_KEY","SESSION_TS_KEY","SESSION_SAMPLED_KEY","generateId","getSessionId","stored","ts","now","id","isSessionSampled","sampleRate","sampled","detectBrowser","ua","browserName","browserVersion","osName","osVersion","deviceType","BUFFER_KEY","isOnline","sleep","ms","resolve","backoffDelay","attempt","ceiling","readBuffer","raw","parsed","writeBuffer","batches","persistBatch","url","body","total","dropped","canCompress","gzip","stream","buf","sendOnce","compress","headers","payload","res","sendBatch","drainBuffer","batch","MAX_BATCH","FLUSH_INTERVAL_MS","MAX_QUEUE","config","queue","flushTimer","browserInfo","sampledIn","initialized","userOverride","globalAttributes","onVisibility","onPageHide","onOnline","configure","cfg","startFlushTimer","setupBeaconFlush","setupOnlineDrain","setUserOverride","user","setGlobalAttrs","attrs","clearGlobalAttrs","applyGlobalAttributes","event","existing","getConfig","isInitialized","sanitizeUrl","end","nowNs","pushEvent","result","flush","buildMeta","bi","userId","endpoint","events","beaconFlush","xhr","destroy","initVitals","onLCP","onCLS","onINP","onFCP","onTTFB","report","name","metric","lastClick","recordClick","target","getLastClick","ERROR_CLICK_WINDOW_MS","bound","onError","onRejection","maybeEmitErrorClick","last","initErrors","reason","message","stack","errorType","destroyErrors","patched","initPageViews","trackPageView","origPush","origReplace","args","generateTraceId","bytes","generateSpanId","traceId","spanId","getNavigationLoadTime","entries","INTERACTIVE_SELECTORS","RAGE_WINDOW_MS","RAGE_THRESHOLD","DEAD_WINDOW_MS","clickListener","rageTarget","rageTimes","deadWatchers","describeTarget","el","tag","classes","text","detectRageClick","detectDeadClick","changed","startUrl","observer","onScroll","timer","cleanup","navigated","watcher","initInteractions","interactive","descriptor","destroyInteractions","initResources","patchFetch","patchXHR","shouldTraceOrigin","re","origFetch","input","init","start","response","durationMs","err","origOpen","origSend","method","rest","started","longTaskObserver","loafObserver","supports","type","initPerformance","list","entry","destroyPerformance","makeRushRUM","replay","attributes","global_default"],"mappings":"qCAAA,IAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,IAAAA,EAAAA,CAAA,EAAA,CAAAC,EAAAA,CAAAD,EAAAA,CAAA,mBAAAE,EAAAA,CAAA,aAAA,CAAA,IAAAC,EAAAA,CAAA,aAAA,CAAA,IAAAC,EAAAA,CAAA,aAAA,CAAA,IAAAC,EAAAA,CAAA,aAAA,CAAA,IAAAC,GAAA,cAAA,CAAA,IAAAC,EAAAA,CAAA,KAAA,CAAA,IAAAC,EAAAA,CAAA,KAAA,CAAA,IAAAC,EAAAA,CAAA,KAAA,CAAA,IAAAC,EAAAA,CAAA,UAAAC,EAAAA,CAAA,KAAA,CAAA,IAAAC,EAAAA,CAAA,MAAA,CAAA,IAAAC,EAAAA,CAAAA,CAAAA,CAAA,IAAIC,EAAAA,CAAEC,CAAAA,CAAEC,EAAEC,EAAAA,CAAEC,CAAAA,CAAEC,EAAAA,CAAKC,CAAAA,CAAgGC,EAAAA,CAAsLC,CAAAA,CAAuD,CAAA,CAAuWC,CAAAA,CAA+PC,EAA4NC,EAAAA,CAA2GC,CAAAA,CAAoHC,CAAAA,CAAyDC,CAAAA,CAAKC,EAAAA,CAAqFC,CAAAA,CAA4GC,EAAAA,CAAoGC,EAAAA,CAA0GC,GAA+HC,CAAAA,CAA4G/B,EAAAA,CAAaM,EAAAA,CAAmaP,EAAAA,CAAWM,EAAAA,CAA+f2B,EAAAA,CAAIC,EAAAA,CAAMC,CAAAA,CAAIC,GAAwIC,EAAAA,CAAyDC,EAAAA,CAAmHC,CAAAA,CAAKC,CAAAA,CAAUC,GAAIC,EAAAA,CAA4EC,EAAAA,CAAKC,EAAAA,CAAgiBC,EAAAA,CAA0I1C,GAAYM,EAAAA,CAAwjBL,EAAAA,CAAa0C,EAAAA,CAAKpC,EAAAA,CAAwnBL,EAAAA,CAAa0C,EAAAA,CAA2KpC,EAAAA,CAAsOqC,CAAAA,CAA0BC,GAAWC,EAAAA,CAAoEC,EAAAA,CAA2MC,EAAAA,CAAqWC,EAAAA,CAA0GnD,EAAAA,CAAYM,EAAAA,CAA97M8C,EAAAA,CAAAC,EAAAA,CAAA,KAActC,EAAAA,CAAE,EAAA,CAAGC,CAAAA,CAAE,SAAS,CAAA,CAAE,CAAC,gBAAA,CAAiB,UAAA,EAAY,SAASL,CAAAA,CAAE,CAACA,CAAAA,CAAE,SAAA,GAAYI,EAAAA,CAAEJ,CAAAA,CAAE,SAAA,CAAU,CAAA,CAAEA,CAAC,CAAA,EAAE,CAAA,EAAG,IAAE,EAAC,CAAA,CAAEM,EAAAA,CAAE,UAAU,CAAC,IAAI,CAAA,CAAE,IAAA,CAAK,WAAA,EAAa,WAAA,CAAY,gBAAA,EAAkB,WAAA,CAAY,gBAAA,CAAiB,YAAY,EAAE,CAAC,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,aAAA,CAAc,CAAA,EAAG,CAAA,CAAE,cAAc,WAAA,CAAY,GAAA,EAAI,CAAE,OAAO,CAAC,CAAA,CAAEC,CAAAA,CAAE,UAAU,CAAC,IAAI,CAAA,CAAED,EAAAA,EAAE,CAAE,OAAO,CAAA,EAAG,CAAA,CAAE,eAAA,EAAiB,CAAC,EAAE,CAAA,CAAE,SAAS,CAAA,CAAEN,CAAAA,CAAE,CAAC,IAAIC,CAAAA,CAAEK,EAAAA,GAAI,CAAA,CAAE,UAAA,CAAW,OAAAF,EAAAA,EAAG,CAAA,CAAE,CAAA,CAAE,oBAAA,CAAqBH,CAAAA,GAAI,SAAS,YAAA,EAAcM,CAAAA,EAAE,CAAE,CAAA,CAAE,CAAA,CAAE,WAAA,CAAY,QAAA,CAAS,YAAA,CAAa,EAAE,SAAA,CAAUN,CAAAA,CAAE,IAAA,GAAO,CAAA,CAAEA,CAAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,CAAA,CAAA,CAAU,CAAC,IAAA,CAAK,CAAA,CAAE,KAAA,CAAeD,CAAAA,GAAT,MAAA,CAAW,EAAA,CAAGA,EAAE,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,EAAC,CAAE,EAAA,CAAG,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI,CAAE,GAAG,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,cAAc,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAI,CAAA,CAAE,cAAA,CAAe,CAAC,CAAC,CAAA,CAAEQ,CAAAA,CAAE,SAAS,CAAA,CAAER,CAAAA,CAAEC,CAAAA,CAAE,CAAC,GAAG,CAAC,GAAG,mBAAA,CAAoB,mBAAA,CAAoB,QAAA,CAAS,CAAC,CAAA,CAAE,CAAC,IAAI,EAAE,IAAI,mBAAA,EAAqB,SAASF,CAAAA,CAAE,CAAC,OAAA,CAAQ,OAAA,EAAQ,CAAE,MAAM,UAAU,CAACC,CAAAA,CAAED,CAAAA,CAAE,UAAA,EAAY,EAAC,CAAA,GAAG,CAAA,EAAE,CAAE,OAAO,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,KAAK,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,CAAA,CAAEE,CAAAA,EAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,KAAS,CAAC,CAAC,CAAA,CAAEQ,CAAAA,CAAE,SAAS,CAAA,CAAET,EAAEC,CAAAA,CAAE,CAAA,CAAE,CAAC,IAAIE,CAAAA,CAAEC,CAAAA,CAAE,OAAO,SAASC,EAAE,CAACL,CAAAA,CAAE,KAAA,EAAO,CAAA,GAAIK,CAAAA,EAAG,CAAA,CAAA,GAAA,CAAMD,CAAAA,CAAEJ,CAAAA,CAAE,OAAOG,CAAAA,EAAG,CAAA,CAAA,GAAcA,CAAAA,GAAT,MAAA,CAAA,GAAcA,CAAAA,CAAEH,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAMI,CAAAA,CAAEJ,CAAAA,CAAE,MAAA,CAAA,CAAO,SAASD,CAAAA,CAAEC,CAAAA,CAAE,CAAC,OAAOD,EAAEC,CAAAA,CAAE,CAAC,CAAA,CAAE,MAAA,CAAOD,CAAAA,CAAEC,CAAAA,CAAE,CAAC,CAAA,CAAE,oBAAoB,MAAM,CAAA,EAAEA,CAAAA,CAAE,KAAA,CAAMC,CAAC,CAAA,CAAE,CAAA,CAAED,CAAC,GAAE,CAAC,CAAA,CAAEU,EAAAA,CAAE,SAAS,CAAA,CAAE,CAAC,qBAAA,EAAuB,UAAU,CAAC,OAAO,qBAAA,EAAuB,UAAU,CAAC,OAAO,CAAA,EAAG,CAAA,EAAG,IAAG,CAAA,CAAEC,CAAAA,CAAE,SAAS,CAAA,CAAE,CAAC,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,UAAU,CAAY,QAAA,CAAS,eAAA,GAApB,QAAA,EAAqC,CAAA,GAAG,CAAA,GAAG,CAAA,CAAEC,CAAAA,CAAE,SAAS,CAAA,CAAE,CAAC,IAAIZ,CAAAA,CAAE,KAAA,CAAG,OAAO,UAAU,CAACA,CAAAA,GAAI,CAAA,EAAE,CAAEA,CAAAA,CAAE,IAAA,EAAG,CAAC,EAAEa,CAAAA,CAAE,EAAA,CAAGC,EAAAA,CAAE,UAAU,CAAC,OAAiB,QAAA,CAAS,eAAA,GAApB,UAAqC,QAAA,CAAS,YAAA,CAAa,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAEC,CAAAA,CAAE,SAAS,CAAA,CAAE,CAAY,QAAA,CAAS,eAAA,GAApB,QAAA,EAAqCF,CAAAA,CAAE,EAAA,GAAKA,CAAAA,CAAuB,CAAA,CAAE,IAAA,GAAvB,mBAA4B,CAAA,CAAE,SAAA,CAAU,CAAA,CAAEI,EAAAA,IAAI,CAAA,CAAED,EAAAA,CAAE,UAAU,CAAC,iBAAiB,kBAAA,CAAmBD,CAAAA,CAAE,IAAE,CAAA,CAAE,gBAAA,CAAiB,oBAAA,CAAqBA,CAAAA,CAAE,IAAE,EAAC,CAAA,CAAEE,EAAAA,CAAE,UAAU,CAAC,mBAAA,CAAoB,kBAAA,CAAmBF,CAAAA,CAAE,IAAE,EAAE,mBAAA,CAAoB,oBAAA,CAAqBA,CAAAA,CAAE,IAAE,EAAC,CAAA,CAAEG,EAAAA,CAAE,UAAU,CAAC,OAAOL,CAAAA,CAAE,CAAA,GAAIA,CAAAA,CAAEC,EAAAA,EAAE,CAAEE,EAAAA,EAAE,CAAEX,GAAG,UAAU,CAAC,UAAA,EAAY,UAAU,CAACQ,CAAAA,CAAEC,EAAAA,EAAE,CAAEE,KAAG,CAAA,EAAG,CAAC,EAAC,CAAA,EAAE,CAAA,CAAG,CAAC,IAAI,iBAAiB,CAAC,OAAOH,CAAC,CAAC,CAAC,CAAA,CAAEM,CAAAA,CAAE,SAAS,EAAE,CAAC,QAAA,CAAS,YAAA,CAAa,gBAAA,CAAiB,sBAAsB,UAAU,CAAC,OAAO,CAAA,EAAG,CAAA,EAAG,IAAE,CAAA,CAAE,CAAA,GAAG,CAAA,CAAE/B,EAAAA,CAAE,CAAC,KAAK,GAAG,CAAA,CAAEM,EAAAA,CAAE,SAAS,CAAA,CAAEM,CAAAA,CAAE,CAACA,CAAAA,CAAEA,GAAG,EAAC,CAAEmB,CAAAA,EAAG,UAAU,CAAC,IAAIlB,CAAAA,CAAE,CAAA,CAAEiB,IAAE,CAAEf,CAAAA,CAAE,CAAA,CAAE,KAAK,CAAA,CAAEC,CAAAA,CAAEI,CAAAA,CAAE,OAAA,EAAS,SAAST,CAAAA,CAAE,CAACA,CAAAA,CAAE,OAAA,EAAS,SAASA,CAAAA,CAAE,CAA4BA,CAAAA,CAAE,OAA7B,wBAAA,GAAoCK,CAAAA,CAAE,UAAA,EAAW,CAAEL,CAAAA,CAAE,SAAA,CAAU,CAAA,CAAE,eAAA,GAAkBI,EAAE,KAAA,CAAM,IAAA,CAAK,GAAA,CAAIJ,CAAAA,CAAE,SAAA,CAAUQ,CAAAA,EAAE,CAAE,CAAC,EAAEJ,CAAAA,CAAE,OAAA,CAAQ,IAAA,CAAKJ,CAAC,EAAEE,CAAAA,CAAE,IAAE,CAAA,CAAA,EAAG,CAAA,GAAG,CAAA,EAAE,CAAEG,CAAAA,GAAIH,CAAAA,CAAEQ,CAAAA,CAAE,CAAA,CAAEN,CAAAA,CAAEf,EAAAA,CAAEY,EAAE,gBAAgB,CAAA,CAAEK,CAAAA,EAAG,SAASH,CAAAA,CAAE,CAACC,CAAAA,CAAE,CAAA,CAAE,KAAK,CAAA,CAAEF,CAAAA,CAAEQ,CAAAA,CAAE,CAAA,CAAEN,CAAAA,CAAEf,EAAAA,CAAEY,CAAAA,CAAE,gBAAgB,EAAEU,EAAAA,EAAG,UAAU,CAACP,CAAAA,CAAE,KAAA,CAAM,WAAA,CAAY,GAAA,EAAI,CAAED,EAAE,SAAA,CAAUD,CAAAA,CAAE,IAAE,EAAC,CAAA,GAAG,CAAA,EAAE,EAAE,IAAG,CAAA,CAAEd,EAAAA,CAAE,CAAC,EAAA,CAAG,GAAG,CAAA,CAAEM,EAAAA,CAAE,SAAS,CAAA,CAAEO,CAAAA,CAAE,CAACA,CAAAA,CAAEA,CAAAA,EAAG,EAAC,CAAEN,EAAAA,CAAEkB,GAAG,UAAU,CAAC,IAAIX,CAAAA,CAAE,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAEE,EAAE,CAAA,CAAEC,CAAAA,CAAE,EAAC,CAAEE,CAAAA,CAAE,SAASP,CAAAA,CAAE,CAACA,EAAE,OAAA,EAAS,SAASA,CAAAA,CAAE,CAAC,GAAG,CAACA,CAAAA,CAAE,cAAA,CAAe,CAAC,IAAIC,EAAAA,CAAEI,CAAAA,CAAE,CAAC,CAAA,CAAEH,EAAAA,CAAEG,CAAAA,CAAEA,CAAAA,CAAE,OAAO,CAAC,CAAA,CAAED,CAAAA,EAAGJ,CAAAA,CAAE,SAAA,CAAUE,EAAAA,CAAE,SAAA,CAAU,GAAA,EAAKF,EAAE,SAAA,CAAUC,EAAAA,CAAE,SAAA,CAAU,GAAA,EAAKG,CAAAA,EAAGJ,CAAAA,CAAE,KAAA,CAAMK,CAAAA,CAAE,KAAKL,CAAC,CAAA,GAAII,CAAAA,CAAEJ,CAAAA,CAAE,KAAA,CAAMK,CAAAA,CAAE,CAACL,CAAC,GAAE,CAAC,CAAA,EAAE,CAAEI,CAAAA,CAAE,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAMA,EAAE,CAAA,CAAE,OAAA,CAAQC,CAAAA,CAAEH,CAAAA,IAAI,CAAA,CAAEM,CAAAA,CAAEC,CAAAA,CAAE,cAAA,CAAeF,CAAC,CAAA,CAAEC,CAAAA,GAAIN,CAAAA,CAAEQ,CAAAA,CAAE,CAAA,CAAE,CAAA,CAAEtB,EAAAA,CAAEa,CAAAA,CAAE,gBAAgB,CAAA,CAAEW,CAAAA,EAAG,UAAU,CAACL,CAAAA,CAAEC,CAAAA,CAAE,WAAA,EAAa,EAAEN,CAAAA,CAAE,IAAE,EAAC,CAAA,EAAE,CAAEI,CAAAA,EAAG,UAAU,CAACF,EAAE,CAAA,CAAE,CAAA,CAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAEF,CAAAA,CAAEQ,CAAAA,CAAE,EAAE,CAAA,CAAEtB,EAAAA,CAAEa,CAAAA,CAAE,gBAAgB,CAAA,CAAEU,EAAAA,EAAG,UAAU,CAAC,OAAOT,CAAAA,EAAG,CAAA,GAAG,CAAA,EAAE,CAAE,UAAA,CAAWA,CAAAA,CAAE,CAAC,CAAA,EAAE,CAAA,EAAG,EAAC,CAAA,CAAEmB,EAAAA,CAAE,CAAA,CAAEC,EAAAA,CAAE,IAAIC,CAAAA,CAAE,CAAA,CAAEC,EAAAA,CAAE,SAAS,EAAE,CAAC,CAAA,CAAE,OAAA,EAAS,SAASxB,EAAE,CAACA,CAAAA,CAAE,aAAA,GAAgBsB,EAAAA,CAAE,IAAA,CAAK,GAAA,CAAIA,EAAAA,CAAEtB,CAAAA,CAAE,aAAa,CAAA,CAAEuB,CAAAA,CAAE,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAEvB,CAAAA,CAAE,aAAa,CAAA,CAAEqB,GAAEE,CAAAA,CAAAA,CAAGA,CAAAA,CAAED,EAAAA,EAAG,CAAA,CAAE,CAAA,CAAE,CAAA,EAAE,CAAA,GAAG,EAAEG,EAAAA,CAAE,UAAU,CAAC,OAAOzB,EAAAA,CAAEqB,EAAAA,CAAE,WAAA,CAAY,gBAAA,EAAkB,CAAC,CAAA,CAAEK,EAAAA,CAAE,UAAU,CAAC,kBAAA,GAAqB,WAAA,EAAa1B,EAAAA,GAAIA,EAAAA,CAAES,EAAE,OAAA,CAAQe,EAAAA,CAAE,CAAC,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAG,iBAAA,CAAkB,CAAC,CAAC,CAAA,EAAE,CAAA,CAAEG,CAAAA,CAAE,EAAC,CAAEC,CAAAA,CAAE,IAAI,IAAIC,EAAAA,CAAE,CAAA,CAAEC,EAAAA,CAAE,UAAU,CAAC,IAAI,CAAA,CAAE,IAAA,CAAK,GAAA,CAAIH,EAAE,MAAA,CAAO,CAAA,CAAE,IAAA,CAAK,KAAA,CAAA,CAAOF,EAAAA,EAAE,CAAEI,EAAAA,EAAG,EAAE,CAAC,CAAA,CAAE,OAAOF,CAAAA,CAAE,CAAC,CAAC,CAAA,CAAEI,EAAAA,CAAE,GAAGC,EAAAA,CAAE,SAAS,CAAA,CAAE,CAAC,GAAGD,EAAAA,CAAE,OAAA,EAAS,SAAS9B,EAAE,CAAC,OAAOA,CAAAA,CAAE,CAAC,CAAC,CAAA,EAAE,CAAE,CAAA,CAAE,eAA+B,CAAA,CAAE,SAAA,GAAlB,aAAA,CAA4B,CAAC,IAAIA,CAAAA,CAAE0B,CAAAA,CAAEA,CAAAA,CAAE,OAAO,CAAC,CAAA,CAAEzB,CAAAA,CAAE0B,CAAAA,CAAE,GAAA,CAAI,CAAA,CAAE,aAAa,CAAA,CAAE,GAAG1B,CAAAA,EAAGyB,CAAAA,CAAE,MAAA,CAAO,EAAA,EAAI,CAAA,CAAE,QAAA,CAAS1B,CAAAA,CAAE,OAAA,CAAQ,CAAC,GAAGC,CAAAA,CAAE,CAAA,CAAE,QAAA,CAASA,EAAE,OAAA,EAASA,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAEA,CAAAA,CAAE,OAAA,CAAQ,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,QAAA,GAAWA,CAAAA,CAAE,SAAS,CAAA,CAAE,SAAA,GAAYA,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,SAAA,EAAWA,CAAAA,CAAE,QAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,KAAM,CAAC,IAAI,CAAA,CAAE,CAAC,EAAA,CAAG,EAAE,aAAA,CAAc,OAAA,CAAQ,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAC,EAAE0B,CAAAA,CAAE,GAAA,CAAI,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,CAAED,CAAAA,CAAE,IAAA,CAAK,CAAC,EAAC,CAACA,CAAAA,CAAE,IAAA,EAAM,SAAS3B,CAAAA,CAAEC,CAAAA,CAAE,CAAC,OAAOA,CAAAA,CAAE,OAAA,CAAQD,CAAAA,CAAE,OAAO,CAAA,EAAE,CAAE2B,CAAAA,CAAE,MAAA,CAAO,IAAIA,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAA,CAAE,SAAS,SAAS3B,CAAAA,CAAE,CAAC,OAAO4B,EAAE,MAAA,CAAO5B,CAAAA,CAAE,EAAE,CAAC,CAAA,GAAG,CAAC,CAAC,EAAEiC,EAAAA,CAAE,SAAS,CAAA,CAAE,CAAC,IAAIhC,CAAAA,CAAE,IAAA,CAAK,mBAAA,EAAqB,KAAK,UAAA,CAAWC,CAAAA,CAAE,EAAA,CAAG,OAAO,CAAA,CAAEW,CAAAA,CAAE,CAAC,CAAA,CAAa,SAAS,eAAA,GAApB,QAAA,CAAoC,CAAA,EAAE,EAAGX,CAAAA,CAAED,CAAAA,CAAE,CAAC,CAAA,CAAEW,EAAE,CAAC,CAAA,CAAA,CAAGV,CAAC,CAAA,CAAEX,EAAAA,CAAE,CAAC,GAAA,CAAI,GAAG,EAAEM,EAAAA,CAAE,SAAS,CAAA,CAAEI,CAAAA,CAAE,CAAC,wBAAA,GAA2B,IAAA,EAAM,eAAA,GAAkB,uBAAuB,SAAA,GAAYA,CAAAA,CAAEA,CAAAA,EAAG,EAAC,CAAEmB,CAAAA,EAAG,UAAU,CAAC,IAAIlB,CAAAA,CAAEwB,EAAAA,EAAE,CAAE,IAAI,EAAEtB,CAAAA,CAAE,CAAA,CAAE,KAAK,CAAA,CAAEC,EAAE,SAASL,CAAAA,CAAE,CAACiC,EAAAA,EAAG,UAAU,CAACjC,CAAAA,CAAE,OAAA,CAAQgC,EAAC,CAAA,CAAE,IAAI/B,CAAAA,CAAE6B,EAAAA,EAAE,CAAE7B,CAAAA,EAAGA,CAAAA,CAAE,OAAA,GAAUG,EAAE,KAAA,GAAQA,CAAAA,CAAE,KAAA,CAAMH,CAAAA,CAAE,OAAA,CAAQG,CAAAA,CAAE,OAAA,CAAQH,CAAAA,CAAE,QAAQ,CAAA,EAAE,EAAE,CAAA,GAAG,EAAEM,CAAAA,CAAEE,CAAAA,CAAE,OAAA,CAAQJ,CAAAA,CAAE,CAAC,iBAAA,CAAA,CAA0BH,CAAAA,CAAED,CAAAA,CAAE,iBAAA,IAAZ,IAAA,EAAyCC,CAAAA,GAAT,MAAA,CAAWA,CAAAA,CAAE,EAAE,CAAC,CAAA,CAAE,CAAA,CAAEQ,CAAAA,CAAE,CAAA,CAAEN,CAAAA,CAAEb,EAAAA,CAAEU,CAAAA,CAAE,gBAAgB,CAAA,CAAEM,CAAAA,GAAIA,CAAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,IAAE,CAAC,CAAA,CAAEK,CAAAA,EAAG,UAAU,CAACP,CAAAA,CAAEE,CAAAA,CAAE,WAAA,EAAa,EAAE,CAAA,CAAE,IAAE,EAAC,CAAA,EAAE,CAAED,CAAAA,EAAG,UAAU,CAACuB,GAAEJ,EAAAA,EAAE,CAAEE,CAAAA,CAAE,MAAA,CAAO,CAAA,CAAEC,CAAAA,CAAE,KAAA,EAAM,CAAExB,EAAE,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA,CAAEM,CAAAA,CAAE,CAAA,CAAEN,CAAAA,CAAEb,EAAAA,CAAEU,EAAE,gBAAgB,EAAC,CAAA,EAAE,EAAE,CAAA,EAAE,EAAE,CAAA,CAAET,EAAAA,CAAE,CAAC,IAAA,CAAK,GAAG,CAAA,CAAE0C,EAAAA,CAAE,EAAC,CAAEpC,EAAAA,CAAE,SAAS,EAAEG,CAAAA,CAAE,CAACA,CAAAA,CAAEA,CAAAA,EAAG,EAAC,CAAEmB,CAAAA,EAAG,UAAU,CAAC,IAAIlB,CAAAA,CAAE,CAAA,CAAEiB,EAAAA,EAAE,CAAEf,CAAAA,CAAE,CAAA,CAAE,KAAK,EAAEC,CAAAA,CAAE,SAASL,CAAAA,CAAE,CAACC,EAAE,gBAAA,GAAmBD,CAAAA,CAAEA,CAAAA,CAAE,KAAA,CAAM,EAAE,CAAA,CAAA,CAAGA,CAAAA,CAAE,OAAA,EAAS,SAASA,CAAAA,CAAE,CAACA,CAAAA,CAAE,SAAA,CAAU,EAAE,eAAA,GAAkBI,CAAAA,CAAE,KAAA,CAAM,IAAA,CAAK,GAAA,CAAIJ,CAAAA,CAAE,SAAA,CAAUQ,CAAAA,GAAI,CAAC,CAAA,CAAEJ,CAAAA,CAAE,OAAA,CAAQ,CAACJ,CAAC,CAAA,CAAEE,CAAAA,IAAI,CAAA,GAAG,CAAA,CAAEK,CAAAA,CAAEE,CAAAA,CAAE,0BAAA,CAA2BJ,CAAC,CAAA,CAAE,GAAGE,CAAAA,CAAE,CAACL,CAAAA,CAAEQ,CAAAA,CAAE,CAAA,CAAEN,CAAAA,CAAEZ,EAAAA,CAAES,CAAAA,CAAE,gBAAgB,CAAA,CAAE,IAAIa,CAAAA,CAAED,CAAAA,EAAG,UAAU,CAACqB,EAAAA,CAAE9B,CAAAA,CAAE,EAAE,CAAA,GAAIC,CAAAA,CAAEE,CAAAA,CAAE,WAAA,EAAa,CAAA,CAAEA,CAAAA,CAAE,UAAA,GAAa2B,EAAAA,CAAE9B,CAAAA,CAAE,EAAE,CAAA,CAAE,KAAGF,CAAAA,CAAE,IAAE,CAAA,EAAE,CAAA,GAAI,CAAC,SAAA,CAAU,OAAO,CAAA,CAAE,OAAA,EAAS,SAASF,CAAAA,CAAE,CAAC,iBAAiBA,CAAAA,EAAG,UAAU,CAAC,OAAOiC,EAAAA,CAAEnB,CAAC,CAAC,CAAA,EAAG,CAAC,IAAA,CAAK,IAAA,CAAG,OAAA,CAAQ,IAAE,CAAC,EAAC,CAAA,EAAE,CAAEF,EAAEE,CAAC,CAAA,CAAER,CAAAA,EAAG,SAASH,CAAAA,CAAE,CAACC,CAAAA,CAAE,CAAA,CAAE,KAAK,CAAA,CAAEF,CAAAA,CAAEQ,CAAAA,CAAE,CAAA,CAAEN,CAAAA,CAAEZ,EAAAA,CAAES,CAAAA,CAAE,gBAAgB,EAAEU,EAAAA,EAAG,UAAU,CAACP,CAAAA,CAAE,KAAA,CAAM,WAAA,CAAY,GAAA,EAAI,CAAED,EAAE,SAAA,CAAU+B,EAAAA,CAAE9B,CAAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAGF,CAAAA,CAAE,IAAE,EAAC,CAAA,GAAG,CAAA,GAAG,CAAC,CAAA,GAAG,CAAA,CAAET,EAAAA,CAAE,CAAC,GAAA,CAAI,IAAI,CAAA,CAAE0C,EAAAA,CAAE,SAAS,CAAA,CAAElC,CAAAA,CAAE,CAAC,SAAS,YAAA,CAAamB,CAAAA,EAAG,UAAU,CAAC,OAAO,CAAA,CAAEnB,CAAC,CAAC,GAAE,CAAe,QAAA,CAAS,UAAA,GAAtB,UAAA,CAAiC,gBAAA,CAAiB,MAAA,EAAQ,UAAU,CAAC,OAAO,CAAA,CAAEA,CAAC,CAAC,CAAA,EAAG,IAAE,CAAA,CAAE,UAAA,CAAWA,CAAAA,CAAE,CAAC,EAAC,CAAA,CAAEF,EAAAA,CAAE,SAAS,CAAA,CAAEE,CAAAA,CAAE,CAACA,CAAAA,CAAEA,GAAG,EAAC,CAAE,IAAIC,CAAAA,CAAE,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA,CAAEQ,EAAE,CAAA,CAAER,CAAAA,CAAET,EAAAA,CAAEQ,CAAAA,CAAE,gBAAgB,CAAA,CAAEkC,EAAAA,EAAG,UAAU,CAAC,IAAI/B,CAAAA,CAAEG,EAAAA,EAAE,CAAEH,IAAIF,CAAAA,CAAE,KAAA,CAAM,IAAA,CAAK,GAAA,CAAIE,EAAE,aAAA,CAAcI,CAAAA,EAAE,CAAE,CAAC,CAAA,CAAEN,CAAAA,CAAE,OAAA,CAAQ,CAACE,CAAC,CAAA,CAAE,CAAA,CAAE,IAAE,CAAA,CAAEE,CAAAA,EAAG,UAAU,CAACJ,CAAAA,CAAE,EAAE,MAAA,CAAO,CAAC,CAAA,CAAA,CAAG,CAAA,CAAEQ,CAAAA,CAAE,CAAA,CAAER,CAAAA,CAAET,EAAAA,CAAEQ,EAAE,gBAAgB,CAAA,EAAG,IAAE,EAAC,CAAA,EAAE,EAAE,CAAA,GAAG,EAAEmC,CAAAA,CAAE,CAAC,OAAA,CAAQ,IAAA,CAAG,OAAA,CAAQ,IAAE,CAAA,CAAEC,EAAAA,CAAE,IAAI,IAAA,CAAKC,EAAAA,CAAE,SAAS,CAAA,CAAElC,CAAAA,CAAE,CAACH,CAAAA,GAAIA,CAAAA,CAAEG,EAAEF,CAAAA,CAAE,CAAA,CAAEC,EAAAA,CAAE,IAAI,IAAA,CAAKsC,EAAAA,CAAE,mBAAmB,CAAA,CAAEF,IAAE,EAAE,CAAA,CAAEA,EAAAA,CAAE,UAAU,CAAC,GAAGrC,CAAAA,EAAG,CAAA,EAAGA,CAAAA,CAAEC,GAAEkC,EAAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,SAAA,CAAU,aAAA,CAAc,IAAA,CAAKpC,EAAE,IAAA,CAAK,MAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,UAAA,CAAWA,CAAAA,CAAE,UAAA,CAAW,SAAA,CAAUA,EAAE,SAAA,CAAU,eAAA,CAAgBA,CAAAA,CAAE,SAAA,CAAUC,CAAC,CAAA,CAAEE,CAAAA,CAAE,OAAA,EAAS,SAASH,CAAAA,CAAE,CAACA,CAAAA,CAAE,CAAC,EAAC,CAAA,EAAE,CAAEG,CAAAA,CAAE,GAAE,CAAC,CAAA,CAAEoC,EAAAA,CAAE,SAAS,CAAA,CAAE,CAAC,GAAG,EAAE,UAAA,CAAW,CAAC,IAAIvC,CAAAA,CAAAA,CAAG,CAAA,CAAE,SAAA,CAAU,IAAA,CAAK,IAAI,KAAK,WAAA,CAAY,GAAA,EAAI,EAAG,CAAA,CAAE,SAAA,CAAyB,CAAA,CAAE,IAAA,EAAjB,aAAA,CAAA,CAAsB,SAASD,CAAAA,CAAEC,CAAAA,CAAE,CAAC,IAAIC,EAAE,UAAU,CAACoC,EAAAA,CAAEtC,CAAAA,CAAEC,CAAC,CAAA,CAAEG,CAAAA,GAAG,CAAA,CAAED,CAAAA,CAAE,UAAU,CAACC,CAAAA,GAAG,CAAA,CAAEA,CAAAA,CAAE,UAAU,CAAC,mBAAA,CAAoB,WAAA,CAAYF,CAAAA,CAAEkC,CAAC,EAAE,mBAAA,CAAoB,eAAA,CAAgBjC,CAAAA,CAAEiC,CAAC,EAAC,CAAA,CAAE,gBAAA,CAAiB,WAAA,CAAYlC,EAAEkC,CAAC,CAAA,CAAE,gBAAA,CAAiB,eAAA,CAAgBjC,CAAAA,CAAEiC,CAAC,EAAC,CAAA,EAAEnC,EAAE,CAAC,CAAA,CAAEqC,EAAAA,CAAErC,CAAAA,CAAE,CAAC,EAAC,CAAC,CAAA,CAAEwC,GAAE,SAAS,CAAA,CAAE,CAAC,CAAC,WAAA,CAAY,SAAA,CAAU,YAAA,CAAa,aAAa,EAAE,OAAA,EAAS,SAASxC,CAAAA,CAAE,CAAC,OAAO,CAAA,CAAEA,CAAAA,CAAEuC,EAAAA,CAAEJ,CAAC,CAAC,CAAA,GAAG,CAAA,CAAE9C,GAAE,CAAC,GAAA,CAAI,GAAG,CAAA,CAAEM,GAAG,SAAS,CAAA,CAAEO,CAAAA,CAAE,CAACA,CAAAA,CAAEA,CAAAA,EAAG,EAAC,CAAEiB,GAAG,UAAU,CAAC,IAAIf,CAAAA,CAAEE,CAAAA,CAAEY,EAAAA,EAAE,CAAEX,CAAAA,CAAE,EAAE,KAAK,CAAA,CAAEG,CAAAA,CAAE,SAASX,CAAAA,CAAE,CAACA,CAAAA,CAAE,SAAA,CAAUO,EAAE,eAAA,GAAkBC,CAAAA,CAAE,KAAA,CAAMR,CAAAA,CAAE,gBAAgBA,CAAAA,CAAE,SAAA,CAAUQ,CAAAA,CAAE,OAAA,CAAQ,KAAKR,CAAC,CAAA,CAAEK,CAAAA,CAAE,IAAE,CAAA,EAAE,CAAA,CAAES,CAAAA,CAAE,SAASd,EAAE,CAACA,CAAAA,CAAE,OAAA,CAAQW,CAAC,EAAC,CAAA,CAAEI,CAAAA,CAAEN,CAAAA,CAAE,cAAcK,CAAC,CAAA,CAAET,CAAAA,CAAEK,CAAAA,CAAE,CAAA,CAAEF,CAAAA,CAAElB,EAAAA,CAAEa,CAAAA,CAAE,gBAAgB,CAAA,CAAEY,CAAAA,GAAIH,CAAAA,CAAEC,CAAAA,EAAG,UAAU,CAACC,CAAAA,CAAEC,CAAAA,CAAE,WAAA,EAAa,CAAA,CAAEA,CAAAA,CAAE,UAAA,GAAY,CAAA,EAAG,CAAA,CAAET,CAAAA,EAAG,UAAU,CAAC,IAAIA,CAAAA,CAAEE,CAAAA,CAAE,CAAA,CAAE,KAAK,CAAA,CAAEH,CAAAA,CAAEK,EAAE,CAAA,CAAEF,CAAAA,CAAElB,EAAAA,CAAEa,CAAAA,CAAE,gBAAgB,CAAA,CAAEC,CAAAA,CAAE,GAAGF,CAAAA,CAAE,EAAA,CAAGD,CAAAA,CAAE,IAAA,CAAKwC,EAAAA,CAAE,gBAAgB,CAAA,CAAEnC,CAAAA,CAAEK,EAAEP,CAAAA,CAAE,IAAA,CAAKE,CAAC,CAAA,CAAEiC,EAAAA,GAAG,CAAA,EAAE,EAAE,IAAG,EAAA,CAAA,CAAA,CCA72N,IAAMK,EAAAA,CAAc,cAAA,CACdC,CAAAA,CAAiB,cAAA,CACjBC,CAAAA,CAAsB,eAG5B,SAASC,EAAAA,EAAqB,CAC5B,OAAI,OAAO,MAAA,CAAW,GAAA,EAAe,MAAA,CAAO,WACnC,MAAA,CAAO,UAAA,EAAW,CAEpB,sCAAA,CAAuC,QAAQ,OAAA,CAAUxC,CAAAA,EAAM,CACpE,IAAMJ,EAAK,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CAAM,CAAA,CAEjC,OAAA,CADUI,CAAAA,GAAM,GAAA,CAAMJ,EAAKA,CAAAA,CAAI,CAAA,CAAO,CAAA,EAC7B,QAAA,CAAS,EAAE,CACtB,CAAC,CACH,CAEO,SAAS6C,CAAAA,EAAuB,CACrC,GAAI,CACF,IAAMC,CAAAA,CAAS,cAAA,CAAe,QAAQL,EAAW,CAAA,CAC3CM,CAAAA,CAAK,cAAA,CAAe,OAAA,CAAQL,CAAc,CAAA,CAC1CM,CAAAA,CAAM,KAAK,GAAA,EAAI,CAErB,GAAIF,CAAAA,EAAUC,CAAAA,EAAMC,CAAAA,CAAM,MAAA,CAAOD,CAAE,EAAI,IAAA,CACrC,OAAA,cAAA,CAAe,OAAA,CAAQL,CAAAA,CAAgB,MAAA,CAAOM,CAAG,CAAC,CAAA,CAC3CF,EAGT,IAAMG,CAAAA,CAAKL,EAAAA,EAAW,CACtB,OAAA,cAAA,CAAe,OAAA,CAAQH,EAAAA,CAAaQ,CAAE,EACtC,cAAA,CAAe,OAAA,CAAQP,CAAAA,CAAgB,MAAA,CAAOM,CAAG,CAAC,CAAA,CAElD,cAAA,CAAe,UAAA,CAAWL,CAAmB,CAAA,CACtCM,CACT,CAAA,KAAQ,CAEN,OAAOL,EAAAA,EACT,CACF,CAOO,SAASM,EAAAA,CAAiBC,CAAAA,CAA6B,CAC5D,GAAIA,CAAAA,EAAc,CAAA,CAAG,OAAO,MAC5B,GAAIA,CAAAA,EAAc,CAAA,CAAG,OAAO,MAAA,CAC5B,GAAI,CAEFN,CAAAA,GACA,IAAMC,CAAAA,CAAS,cAAA,CAAe,OAAA,CAAQH,CAAmB,CAAA,CACzD,GAAIG,CAAAA,GAAW,KAAM,OAAOA,CAAAA,GAAW,GAAA,CACvC,IAAMM,CAAAA,CAAU,IAAA,CAAK,MAAA,EAAO,CAAID,EAChC,OAAA,cAAA,CAAe,OAAA,CAAQR,CAAAA,CAAqBS,CAAAA,CAAU,GAAA,CAAM,GAAG,CAAA,CACxDA,CACT,MAAQ,CAEN,OAAO,IAAA,CAAK,MAAA,EAAO,CAAID,CACzB,CACF,CCjDO,SAASE,EAAAA,EAA6B,CAC3C,IAAMC,CAAAA,CAAK,UAAU,SAAA,CAEjBC,CAAAA,CAAc,SAAA,CACdC,CAAAA,CAAiB,GAEjBF,CAAAA,CAAG,QAAA,CAAS,UAAU,CAAA,EACxBC,CAAAA,CAAc,SAAA,CACdC,CAAAA,CAAiBF,CAAAA,CAAG,MAAM,UAAU,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,GAAK,EAAA,EAClDA,CAAAA,CAAG,QAAA,CAAS,MAAM,CAAA,EAC3BC,CAAAA,CAAc,MAAA,CACdC,CAAAA,CAAiBF,EAAG,KAAA,CAAM,MAAM,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAK,EAAA,EAC9CA,CAAAA,CAAG,QAAA,CAAS,SAAS,CAAA,EAC9BC,CAAAA,CAAc,QAAA,CACdC,EAAiBF,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA,EAAK,EAAA,EACjDA,CAAAA,CAAG,QAAA,CAAS,SAAS,CAAA,EAAK,CAACA,EAAG,QAAA,CAAS,QAAQ,CAAA,GACxDC,CAAAA,CAAc,SACdC,CAAAA,CAAiBF,CAAAA,CAAG,KAAA,CAAM,UAAU,EAAE,CAAC,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAK,EAAA,CAAA,CAG7D,IAAIG,CAAAA,CAAS,SAAA,CACTC,CAAAA,CAAY,EAAA,CAGZJ,CAAAA,CAAG,QAAA,CAAS,SAAS,CAAA,EACvBG,EAAS,SAAA,CAETC,CAAAA,CADUJ,CAAAA,CAAG,KAAA,CAAM,uBAAuB,CAAA,GAC1B,CAAC,CAAA,EAAK,IACbA,CAAAA,CAAG,QAAA,CAAS,SAAS,CAAA,EAC9BG,CAAAA,CAAS,SAAA,CAETC,CAAAA,CADUJ,CAAAA,CAAG,MAAM,uBAAuB,CAAA,GAC1B,CAAC,CAAA,EAAK,EAAA,EACb,kBAAA,CAAmB,IAAA,CAAKA,CAAE,GACnCG,CAAAA,CAAS,KAAA,CAETC,CAAAA,CADUJ,CAAAA,CAAG,KAAA,CAAM,cAAc,CAAA,GACjB,CAAC,GAAG,OAAA,CAAQ,GAAA,CAAK,GAAG,CAAA,EAAK,EAAA,EAChCA,CAAAA,CAAG,QAAA,CAAS,UAAU,GAC/BG,CAAAA,CAAS,OAAA,CAETC,CAAAA,CADUJ,CAAAA,CAAG,MAAM,+BAA+B,CAAA,GAClC,CAAC,CAAA,EAAG,QAAQ,IAAA,CAAM,GAAG,CAAA,EAAK,EAAA,EACjCA,CAAAA,CAAG,QAAA,CAAS,OAAO,CAAA,GAC5BG,EAAS,OAAA,CAAA,CAGX,IAAIE,CAAAA,CAA8C,SAAA,CAClD,OAAI,sBAAA,CAAuB,IAAA,CAAKL,CAAE,EAChCK,CAAAA,CAAa,QAAA,CACJ,iCAAA,CAAkC,IAAA,CAAKL,CAAE,CAAA,GAClDK,CAAAA,CAAa,QAAA,CAAA,CAGR,CACL,WAAA,CAAAJ,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,WAAA,CAAa,MAAA,CAAO,MAAA,CAAO,KAAA,CAC3B,YAAA,CAAc,MAAA,CAAO,MAAA,CAAO,MAC9B,CACF,CC3DA,IAAMC,CAAAA,CAAa,iBAAA,CAenB,SAASC,EAAAA,EAAoB,CAC3B,OAAO,OAAO,SAAA,CAAc,GAAA,EAAe,SAAA,CAAU,MAAA,GAAW,KAClE,CAEA,SAASC,GAAMC,CAAAA,CAA2B,CACxC,OAAO,IAAI,QAASC,CAAAA,EAAY,UAAA,CAAWA,CAAAA,CAASD,CAAE,CAAC,CACzD,CAGA,SAASE,EAAAA,CAAaC,CAAAA,CAAyB,CAC7C,IAAMC,CAAAA,CAAU,IAAkB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGD,CAAO,CAAA,CACrD,OAAO,IAAA,CAAK,MAAA,GAAWC,CACzB,CAIA,SAASC,EAAAA,EAA+B,CACtC,GAAI,CACF,IAAMC,EAAM,YAAA,CAAa,OAAA,CAAQT,CAAU,CAAA,CAC3C,GAAI,CAACS,CAAAA,CAAK,OAAO,EAAC,CAClB,IAAMC,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMD,CAAG,CAAA,CAC7B,OAAO,MAAM,OAAA,CAAQC,CAAM,CAAA,CAAKA,CAAAA,CAA8B,EAChE,CAAA,KAAQ,CACN,OAAO,EACT,CACF,CAEA,SAASC,EAAAA,CAAYC,CAAAA,CAAiC,CACpD,GAAI,CACF,GAAIA,CAAAA,CAAQ,MAAA,GAAW,EAAG,CACxB,YAAA,CAAa,UAAA,CAAWZ,CAAU,EAClC,MACF,CACA,YAAA,CAAa,OAAA,CAAQA,CAAAA,CAAY,IAAA,CAAK,SAAA,CAAUY,CAAO,CAAC,EAC1D,CAAA,KAAQ,CAER,CACF,CAGA,SAASC,CAAAA,CAAaC,CAAAA,CAAaC,EAAoB,CACrD,GAAI,CACF,IAAMH,CAAAA,CAAUJ,EAAAA,EAAW,CAG3B,IAFAI,EAAQ,IAAA,CAAK,CAAE,GAAA,CAAAE,CAAAA,CAAK,KAAAC,CAAAA,CAAM,EAAA,CAAI,IAAA,CAAK,GAAA,EAAM,CAAC,CAAA,CAEnCH,CAAAA,CAAQ,MAAA,CAAS,EAAA,EAAoBA,CAAAA,CAAQ,KAAA,EAAM,CAC1D,IAAII,CAAAA,CAAQJ,CAAAA,CAAQ,MAAA,CAAO,CAAC1E,CAAAA,CAAGZ,CAAAA,GAAMY,CAAAA,CAAIZ,CAAAA,CAAE,KAAK,MAAA,CAAQ,CAAC,CAAA,CACzD,KAAOsF,CAAAA,CAAQ,MAAA,CAAS,CAAA,EAAKI,CAAAA,CAAQ,KAAkB,CACrD,IAAMC,CAAAA,CAAUL,CAAAA,CAAQ,OAAM,CAC9BI,CAAAA,EAASC,CAAAA,CAAQ,IAAA,CAAK,OACxB,CACAN,EAAAA,CAAYC,CAAO,EACrB,CAAA,KAAQ,CAER,CACF,CAIA,SAASM,EAAAA,EAAuB,CAC9B,OAAO,OAAO,iBAAA,CAAsB,GAAA,EAAe,OAAO,QAAA,CAAa,GACzE,CAEA,eAAeC,EAAAA,CAAKJ,CAAAA,CAA6B,CAC/C,IAAMK,CAAAA,CAAS,IAAI,KAAK,CAACL,CAAI,CAAC,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,CAAY,IAAI,kBAAkB,MAAM,CAAC,CAAA,CAC5EM,CAAAA,CAAM,MAAM,IAAI,QAAA,CAASD,CAAM,EAAE,WAAA,EAAY,CACnD,OAAO,IAAI,IAAA,CAAK,CAACC,CAAG,CAAC,CACvB,CAUA,eAAeC,EAAAA,CAASR,CAAAA,CAAaC,CAAAA,CAAcQ,CAAAA,CAAqC,CACtF,GAAI,CACF,IAAMC,CAAAA,CAAkC,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CACzEC,CAAAA,CAAoBV,CAAAA,CACxB,GAAIQ,GAAYL,EAAAA,EAAY,CAC1B,GAAI,CACFO,CAAAA,CAAU,MAAMN,EAAAA,CAAKJ,CAAI,EACzBS,CAAAA,CAAQ,kBAAkB,CAAA,CAAI,OAChC,CAAA,KAAQ,CACNC,CAAAA,CAAUV,EACZ,CAEF,IAAMW,CAAAA,CAAM,MAAM,KAAA,CAAMZ,CAAAA,CAAK,CAAE,MAAA,CAAQ,MAAA,CAAQ,QAAAU,CAAAA,CAAS,IAAA,CAAMC,CAAAA,CAAS,SAAA,CAAW,CAAA,CAAK,CAAC,CAAA,CACxF,OAAI,EAAAC,CAAAA,CAAI,MAAA,GAAW,GAAA,EAAOA,CAAAA,CAAI,MAAA,EAAU,GAAA,CAE1C,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CAMA,eAAsBC,EAAAA,CAAUb,CAAAA,CAAaC,CAAAA,CAAcQ,CAAAA,CAAkC,CAC3F,GAAI,CAACtB,EAAAA,EAAS,CAAG,CACfY,CAAAA,CAAaC,CAAAA,CAAKC,CAAI,EACtB,MACF,CACA,IAAA,IAAST,CAAAA,CAAU,EAAGA,CAAAA,EAAW,CAAA,CAAaA,CAAAA,EAAAA,CAAW,CAEvD,GADW,MAAMgB,EAAAA,CAASR,CAAAA,CAAKC,CAAAA,CAAMQ,CAAQ,CAAA,CACrC,OACJjB,CAAAA,CAAU,GAAa,MAAMJ,EAAAA,CAAMG,EAAAA,CAAaC,CAAO,CAAC,EAC9D,CAEAO,CAAAA,CAAaC,EAAKC,CAAI,EACxB,CAQA,eAAsBa,EAAAA,EAA6B,CACjD,GAAI,CAAC3B,IAAS,CAAG,OACjB,IAAIW,CAAAA,CAAUJ,EAAAA,EAAW,CACzB,GAAII,CAAAA,CAAQ,SAAW,CAAA,CAGvB,CAAAD,EAAAA,CAAY,EAAE,CAAA,CACdC,CAAAA,CAAUA,CAAAA,CAAQ,KAAK,CAACrE,CAAAA,CAAGjB,CAAAA,GAAMiB,CAAAA,CAAE,EAAA,CAAKjB,CAAAA,CAAE,EAAE,CAAA,CAC5C,QAAWuG,CAAAA,IAASjB,CAAAA,CAAS,CAC3B,GAAI,CAACX,EAAAA,EAAS,CAAG,CACfY,EAAagB,CAAAA,CAAM,GAAA,CAAKA,CAAAA,CAAM,IAAI,EAClC,QACF,CACW,MAAMP,EAAAA,CAASO,EAAM,GAAA,CAAKA,CAAAA,CAAM,IAAA,CAAM,KAAK,CAAA,EAC7ChB,CAAAA,CAAagB,CAAAA,CAAM,GAAA,CAAKA,EAAM,IAAI,EAC7C,CAAA,CACF,CC9JA,IAAMC,EAAAA,CAAY,EAAA,CACZC,EAAAA,CAAoB,IAGpBC,EAAAA,CAAY,GAAA,CAEdC,CAAAA,CAA+B,IAAA,CAC/BC,CAAAA,CAAoB,EAAC,CACrBC,CAAAA,CAAoD,KACpDC,EAAAA,CAAuD,IAAA,CACvDC,EAAAA,CAAY,IAAA,CACZC,CAAAA,CAAc,KAAA,CAIdC,CAAAA,CAEAC,CAAAA,CAA4C,EAAC,CAG7CC,CAAAA,CAAoC,IAAA,CACpCC,CAAAA,CAAkC,IAAA,CAClCC,CAAAA,CAAgC,IAAA,CAE7B,SAASC,GAAUC,CAAAA,CAA0B,CAG9CP,CAAAA,GACJL,CAAAA,CAASY,CAAAA,CACTT,EAAAA,CAAc3C,EAAAA,EAAc,CAE5B4C,GAAY/C,EAAAA,CAAiBuD,CAAAA,CAAI,UAAA,EAAc,CAAC,CAAA,CAChDP,CAAAA,CAAc,IAAA,CACdQ,EAAAA,GACAC,EAAAA,EAAiB,CACjBC,EAAAA,EAAiB,CAEZpB,IAAY,EACnB,CAGO,SAASqB,EAAAA,CAAgBC,EAAoC,CAClEX,CAAAA,CAAeW,EACjB,CAEO,SAASC,EAAAA,CAAeC,CAAAA,CAAsC,CACnEZ,EAAmB,CAAE,GAAGA,CAAAA,CAAkB,GAAGY,CAAM,EACrD,CAEO,SAASC,IAAyB,CACvCb,CAAAA,CAAmB,GACrB,CAOA,SAASc,EAAAA,CAAsBC,CAAAA,CAAuB,CAEpD,GADa,MAAA,CAAO,IAAA,CAAKf,CAAgB,CAAA,CAChC,MAAA,GAAW,CAAA,CAAG,OACvB,IAAIgB,CAAAA,CAAoC,EAAC,CACzC,GAAID,CAAAA,CAAM,UAAA,CACR,GAAI,CACF,IAAM7C,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAM6C,CAAAA,CAAM,UAAU,CAAA,CACtC7C,CAAAA,EAAU,OAAOA,GAAW,QAAA,GAAU8C,CAAAA,CAAW9C,CAAAA,EACvD,CAAA,KAAQ,CACN,MACF,CAEF6C,CAAAA,CAAM,WAAa,IAAA,CAAK,SAAA,CAAU,CAAE,GAAGf,EAAkB,GAAGgB,CAAS,CAAC,EACxE,CAEO,SAASC,CAAAA,EAAkC,CAChD,OAAOxB,CACT,CAEO,SAASyB,EAAAA,EAAyB,CACvC,OAAOpB,CACT,CAGO,SAASqB,CAAAA,CAAY7C,CAAAA,CAAqB,CAC/C,GAAImB,GAAQ,kBAAA,CAAoB,OAAOnB,CAAAA,CACvC,IAAI8C,CAAAA,CAAM9C,CAAAA,CAAI,MAAA,CACR7C,CAAAA,CAAI6C,EAAI,OAAA,CAAQ,GAAG,CAAA,CACnB9D,CAAAA,CAAI8D,CAAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,CACzB,OAAI7C,CAAAA,GAAM,EAAA,GAAI2F,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAK3F,CAAC,CAAA,CAAA,CAC/BjB,IAAM,EAAA,GAAI4G,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAK5G,CAAC,CAAA,CAAA,CAC5B8D,CAAAA,CAAI,MAAM,CAAA,CAAG8C,CAAG,CACzB,CAOA,SAASC,EAAAA,EAAgB,CACvB,IAAM1D,EACJ,OAAO,WAAA,CAAgB,GAAA,EAAe,WAAA,CAAY,WAC9C,WAAA,CAAY,UAAA,CAAa,WAAA,CAAY,GAAA,GACrC,IAAA,CAAK,GAAA,EAAI,CACf,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAK,GAAS,CAClC,CAEO,SAAS2D,CAAAA,CAAUP,CAAAA,CAAuB,CAC/C,GAAI,EAAA,CAACtB,CAAAA,EAAU,CAACI,EAAAA,CAAAA,CAKhB,CAAA,GAJAkB,CAAAA,CAAM,SAAA,CAAYA,CAAAA,CAAM,SAAA,EAAaM,EAAAA,EAAM,CAIvC5B,EAAO,UAAA,CACT,GAAI,CACF,IAAM8B,CAAAA,CAAS9B,CAAAA,CAAO,UAAA,CAAWsB,CAAK,EACtC,GAAIQ,CAAAA,GAAW,IAAA,CAAM,OACrBR,CAAAA,CAAQQ,CAAAA,EAAUR,EACpB,CAAA,KAAQ,CAER,CAIFD,EAAAA,CAAsBC,CAAK,CAAA,CAE3BrB,CAAAA,CAAM,IAAA,CAAKqB,CAAK,CAAA,CAEZrB,EAAM,MAAA,CAASF,EAAAA,EAAWE,CAAAA,CAAM,MAAA,CAAO,CAAA,CAAGA,CAAAA,CAAM,MAAA,CAASF,EAAS,EAClEE,CAAAA,CAAM,MAAA,EAAUJ,EAAAA,EAAWkC,CAAAA,IACjC,CAEA,SAASC,EAAAA,EAAqB,CAC5B,IAAMpB,CAAAA,CAAMZ,CAAAA,CACNiC,CAAAA,CAAK9B,EAAAA,CACP+B,CAAAA,CAAS,EAAA,CAEb,GAAI5B,CAAAA,GAAiB,OACnB4B,CAAAA,CAAS5B,CAAAA,EAAc,EAAA,EAAM,EAAA,CAAA,KAE7B,GAAI,CAEF4B,CAAAA,CADUtB,CAAAA,CAAI,QAAO,EACT,EAAA,EAAM,GACpB,CAAA,KAAQ,CAER,CAGF,OAAO,CACL,SAAUA,CAAAA,CAAI,GAAA,CAAI,IAAA,CAClB,WAAA,CAAaA,CAAAA,CAAI,GAAA,CAAI,OAAA,EAAW,EAAA,CAChC,YAAaA,CAAAA,CAAI,WAAA,EAAe,EAAA,CAChC,UAAA,CAAY5D,CAAAA,EAAa,CACzB,OAAA,CAASkF,CAAAA,CACT,SAAUR,CAAAA,CAAY,QAAA,CAAS,IAAI,CAAA,CACnC,SAAA,CAAW,QAAA,CAAS,QAAA,CACpB,SAAA,CAAW,SAAS,KAAA,CACpB,QAAA,CAAUA,CAAAA,CAAY,QAAA,CAAS,QAAQ,CAAA,CACvC,YAAA,CAAcO,CAAAA,CAAG,YACjB,eAAA,CAAiBA,CAAAA,CAAG,cAAA,CACpB,OAAA,CAASA,EAAG,MAAA,CACZ,UAAA,CAAYA,CAAAA,CAAG,SAAA,CACf,YAAaA,CAAAA,CAAG,UAAA,CAChB,YAAA,CAAcA,CAAAA,CAAG,WAAA,CACjB,aAAA,CAAeA,CAAAA,CAAG,YACpB,CACF,CAEO,SAASF,CAAAA,EAAc,CAC5B,GAAI,CAAC/B,CAAAA,EAAUC,CAAAA,CAAM,SAAW,CAAA,CAAG,OACnC,IAAMkC,CAAAA,CAAWnC,CAAAA,CAAO,QAAA,CAClBV,CAAAA,CAAWU,CAAAA,CAAO,WAAa,IAAA,CAErC,KAAOC,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAG,CACvB,IAAMmC,CAAAA,CAASnC,EAAM,MAAA,CAAO,CAAA,CAAGJ,EAAS,CAAA,CAClCL,CAAAA,CAAsB,CAAE,IAAA,CAAMwC,EAAAA,GAAa,MAAA,CAAAI,CAAO,CAAA,CAClDtD,CAAAA,CAAO,IAAA,CAAK,SAAA,CAAUU,CAAO,CAAA,CAE9BE,GAAUyC,CAAAA,CAAUrD,CAAAA,CAAMQ,CAAQ,EACzC,CACF,CAEA,SAASuB,EAAAA,EAAwB,CAC3BX,CAAAA,GACJA,CAAAA,CAAa,WAAA,CAAY,IAAM,CACzBD,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAG8B,CAAAA,GACxB,CAAA,CAAGjC,EAAiB,CAAA,EACtB,CAEA,SAASgB,EAAAA,EAAyB,CAChC,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAErC,IAAMuB,CAAAA,CAAc,IAAM,CACxB,GAAI,CAACrC,CAAAA,EAAUC,CAAAA,CAAM,MAAA,GAAW,CAAA,CAAG,OACnC,IAAMmC,CAAAA,CAASnC,CAAAA,CAAM,OAAO,CAAC,CAAA,CACvBT,CAAAA,CAAsB,CAAE,IAAA,CAAMwC,EAAAA,EAAU,CAAG,MAAA,CAAAI,CAAO,CAAA,CAClDtD,CAAAA,CAAO,IAAA,CAAK,SAAA,CAAUU,CAAO,CAAA,CAEnC,GAAI,SAAA,CAAU,WACZ,SAAA,CAAU,UAAA,CAAWQ,CAAAA,CAAO,QAAA,CAAUlB,CAAI,CAAA,CAAA,KAG1C,GAAI,CACF,IAAMwD,CAAAA,CAAM,IAAI,cAAA,CAChBA,CAAAA,CAAI,IAAA,CAAK,MAAA,CAAQtC,CAAAA,CAAO,QAAA,CAAU,EAAK,CAAA,CACvCsC,CAAAA,CAAI,gBAAA,CAAiB,cAAA,CAAgB,kBAAkB,CAAA,CACvDA,CAAAA,CAAI,IAAA,CAAKxD,CAAI,EACf,CAAA,KAAQ,CAER,CAEJ,CAAA,CAEA0B,CAAAA,CAAe,IAAM,CACf,QAAA,CAAS,kBAAoB,QAAA,EAAU6B,CAAAA,GAC7C,CAAA,CACA5B,CAAAA,CAAa4B,CAAAA,CACb,QAAA,CAAS,gBAAA,CAAiB,mBAAoB7B,CAAY,CAAA,CAC1D,MAAA,CAAO,gBAAA,CAAiB,UAAA,CAAYC,CAAU,EAChD,CAGA,SAASM,EAAAA,EAAyB,CAC5B,OAAO,MAAA,CAAW,GAAA,GACtBL,CAAAA,CAAW,IAAM,CACVf,KACP,CAAA,CACA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUe,CAAQ,CAAA,EAC5C,CAQO,SAAS6B,EAAAA,EAAgB,CAC9BR,CAAAA,EAAM,CACF7B,CAAAA,GACF,aAAA,CAAcA,CAAU,CAAA,CACxBA,EAAa,IAAA,CAAA,CAEX,OAAO,QAAA,CAAa,GAAA,EAAeM,CAAAA,EACrC,QAAA,CAAS,mBAAA,CAAoB,kBAAA,CAAoBA,CAAY,CAAA,CAE3D,OAAO,MAAA,CAAW,GAAA,EAAeC,GACnC,MAAA,CAAO,mBAAA,CAAoB,UAAA,CAAYA,CAAU,EAE/C,OAAO,MAAA,CAAW,GAAA,EAAeC,CAAAA,EACnC,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAQ,EAE/CF,CAAAA,CAAe,IAAA,CACfC,CAAAA,CAAa,IAAA,CACbC,CAAAA,CAAW,IAAA,CACXT,CAAAA,CAAQ,GACRD,CAAAA,CAAS,IAAA,CACTK,CAAAA,CAAc,KAAA,CACdC,CAAAA,CAAe,MAAA,CACfC,CAAAA,CAAmB,GACrB,CCpQO,SAASiC,EAAAA,EAAmB,CAEjC,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAqB,IAAA,CAAK,CAAC,CAAE,MAAAC,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAO,CAAA,GAAM,CACpE,IAAMC,CAAAA,CAAUC,CAAAA,EAAkBC,CAAAA,EAA8C,CAC9EnB,CAAAA,CAAU,CACR,UAAA,CAAY,WAAA,CACZ,UAAA,CAAYkB,CAAAA,CACZ,WAAA,CAAaC,CAAAA,CAAO,KAAA,CACpB,YAAA,CAAcA,EAAO,MACvB,CAAC,EACH,CAAA,CAEAP,EAAMK,CAAAA,CAAO,KAAK,CAAC,CAAA,CACnBJ,EAAMI,CAAAA,CAAO,KAAK,CAAC,CAAA,CACnBH,CAAAA,CAAMG,CAAAA,CAAO,KAAK,CAAC,EACnBF,CAAAA,CAAME,CAAAA,CAAO,KAAK,CAAC,CAAA,CACnBD,CAAAA,CAAOC,CAAAA,CAAO,MAAM,CAAC,EACvB,CAAC,CAAA,CAAE,KAAA,CAAM,IAAM,CAEf,CAAC,EACH,CCTA,IAAIG,EAAAA,CAA8B,IAAA,CAElC,SAAS9F,EAAAA,EAAc,CACrB,OAAO,OAAO,YAAgB,GAAA,EAAe,WAAA,CAAY,GAAA,CAAM,WAAA,CAAY,GAAA,EAAI,CAAI,IAAA,CAAK,GAAA,EAC1F,CAEO,SAAS+F,EAAAA,CAAYC,CAAAA,CAAsB,CAChDF,EAAAA,CAAY,CAAE,MAAA,CAAAE,EAAQ,EAAA,CAAIhG,EAAAA,EAAM,EAClC,CAEO,SAASiG,EAAAA,EAAiC,CAC/C,OAAOH,EACT,CCpBA,IAAMI,EAAAA,CAAwB,IAE1BC,EAAAA,CAAQ,KAAA,CACRC,CAAAA,CAAgD,IAAA,CAChDC,EAA+D,IAAA,CAGnE,SAASC,EAAAA,EAA4B,CACnC,IAAMC,CAAAA,CAAON,EAAAA,EAAa,CAC1B,GAAI,CAACM,CAAAA,CAAM,OAAA,CAET,OAAO,WAAA,CAAgB,GAAA,EAAe,WAAA,CAAY,GAAA,CAAM,YAAY,GAAA,EAAI,CAAI,IAAA,CAAK,GAAA,EAAI,EAC7EA,CAAAA,CAAK,EAAA,CAAKL,EAAAA,EAClBxB,EAAU,CACR,UAAA,CAAY,aAAA,CACZ,gBAAA,CAAkB,aAAA,CAClB,kBAAA,CAAoB6B,CAAAA,CAAK,MAC3B,CAAC,EAEL,CAEO,SAASC,EAAAA,EAAmB,CAC7BL,EAAAA,GACJA,EAAAA,CAAQ,IAAA,CAERC,EAAWjC,CAAAA,EAA4B,CACrCmC,EAAAA,EAAoB,CACpB5B,CAAAA,CAAU,CACR,UAAA,CAAY,OAAA,CACZ,cAAeP,CAAAA,CAAM,OAAA,EAAW,eAAA,CAChC,WAAA,CAAaA,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAS,EAAA,CACnC,WAAYA,CAAAA,CAAM,KAAA,EAAO,IAAA,EAAQ,OACnC,CAAC,EACH,CAAA,CAEAkC,CAAAA,CAAelC,CAAAA,EAAuC,CACpD,IAAMsC,CAAAA,CAAStC,CAAAA,CAAM,MAAA,CACjBuC,CAAAA,CAAU,6BAAA,CACVC,CAAAA,CAAQ,EAAA,CACRC,EAAY,oBAAA,CAEZH,CAAAA,YAAkB,KAAA,EACpBC,CAAAA,CAAUD,CAAAA,CAAO,OAAA,CACjBE,CAAAA,CAAQF,CAAAA,CAAO,OAAS,EAAA,CACxBG,CAAAA,CAAYH,CAAAA,CAAO,IAAA,EACV,OAAOA,CAAAA,EAAW,QAAA,GAC3BC,CAAAA,CAAUD,GAGZ/B,CAAAA,CAAU,CACR,UAAA,CAAY,OAAA,CACZ,aAAA,CAAegC,CAAAA,CACf,WAAA,CAAaC,CAAAA,CACb,WAAYC,CACd,CAAC,EACH,CAAA,CAEA,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAASR,CAAO,EACxC,MAAA,CAAO,gBAAA,CAAiB,oBAAA,CAAsBC,CAAW,CAAA,EAC3D,CAGO,SAASQ,EAAAA,EAAsB,CAChCT,CAAAA,GACF,MAAA,CAAO,mBAAA,CAAoB,OAAA,CAASA,CAAO,CAAA,CAC3CA,CAAAA,CAAU,IAAA,CAAA,CAERC,IACF,MAAA,CAAO,mBAAA,CAAoB,oBAAA,CAAsBA,CAAW,EAC5DA,CAAAA,CAAc,IAAA,CAAA,CAEhBF,EAAAA,CAAQ,MACV,CC3EA,IAAIW,EAAAA,CAAU,KAAA,CAEP,SAASC,EAAAA,EAAsB,CAIpC,GAFAC,CAAAA,GAEIF,EAAAA,CAAS,OACbA,EAAAA,CAAU,IAAA,CAGV,IAAMG,CAAAA,CAAW,OAAA,CAAQ,SAAA,CAAU,KAAK,OAAO,CAAA,CACzCC,CAAAA,CAAc,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,CAErD,QAAQ,SAAA,CAAY,SAAA,GAAaC,CAAAA,CAAmC,CAClEF,EAAS,GAAGE,CAAI,CAAA,CAChBH,CAAAA,GACF,CAAA,CAEA,OAAA,CAAQ,YAAA,CAAe,SAAA,GAAaG,CAAAA,CAAsC,CACxED,CAAAA,CAAY,GAAGC,CAAI,CAAA,CACnBH,CAAAA,GACF,CAAA,CAGA,MAAA,CAAO,gBAAA,CAAiB,UAAA,CAAY,IAAM,CACxCA,CAAAA,GACF,CAAC,EACH,CAEA,SAASI,EAAAA,EAA0B,CACjC,IAAMC,CAAAA,CAAQ,IAAI,UAAA,CAAW,EAAE,EAC/B,OAAA,MAAA,CAAO,eAAA,CAAgBA,CAAK,CAAA,CACrB,MAAM,IAAA,CAAKA,CAAK,CAAA,CAAE,GAAA,CAAKnL,CAAAA,EAAMA,CAAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAC9E,CAEA,SAASoL,EAAAA,EAAyB,CAChC,IAAMD,CAAAA,CAAQ,IAAI,UAAA,CAAW,CAAC,EAC9B,OAAA,MAAA,CAAO,eAAA,CAAgBA,CAAK,CAAA,CACrB,KAAA,CAAM,IAAA,CAAKA,CAAK,CAAA,CAAE,IAAKnL,CAAAA,EAAMA,CAAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAC9E,CAEA,SAAS8K,CAAAA,EAAsB,CAC7B,IAAMO,CAAAA,CAAUH,EAAAA,EAAgB,CAC1BI,CAAAA,CAASF,EAAAA,EAAe,CAE9B5C,CAAAA,CAAU,CACR,WAAY,UAAA,CACZ,UAAA,CAAY,QAAA,CAAS,KAAA,CACrB,YAAa+C,EAAAA,EAAsB,CACnC,QAAA,CAAUF,CAAAA,CACV,QAASC,CACX,CAAC,EACH,CAEA,SAASC,EAAAA,EAAgC,CACvC,GAAI,OAAO,WAAA,CAAgB,GAAA,CAAa,OAAO,CAAA,CAC/C,IAAMC,CAAAA,CAAU,WAAA,CAAY,gBAAA,CAAiB,YAAY,CAAA,CACzD,OAAIA,CAAAA,CAAQ,MAAA,CAAS,CAAA,CACZA,CAAAA,CAAQ,CAAC,CAAA,CAAE,aAAeA,CAAAA,CAAQ,CAAC,CAAA,CAAE,SAAA,CAEvC,CACT,CC5DA,IAAMC,EAAAA,CAAwB,yEAGxBC,EAAAA,CAAiB,GAAA,CACjBC,EAAAA,CAAiB,CAAA,CAGjBC,EAAAA,CAAiB,GAAA,CAEnB3B,EAAAA,CAAQ,KAAA,CACR4B,EAAsD,IAAA,CAGtDC,CAAAA,CAA6B,IAAA,CAC7BC,CAAAA,CAAsB,EAAC,CAQvBC,CAAAA,CAA8B,GAGlC,SAASC,EAAAA,CAAeC,CAAAA,CAAqB,CAC3C,IAAMC,CAAAA,CAAMD,CAAAA,CAAG,OAAA,CAAQ,aAAY,CAC7BnI,CAAAA,CAAKmI,CAAAA,CAAG,EAAA,CAAK,IAAIA,CAAAA,CAAG,EAAE,CAAA,CAAA,CAAK,EAAA,CAC3BE,EAAUF,CAAAA,CAAG,SAAA,CACf,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAG,SAAS,CAAA,CAAE,MAAM,CAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAClD,EAAA,CAEEG,EAAOlE,CAAAA,EAAU,EAAG,mBAAA,CACtB,EAAA,CAAA,CACC+D,CAAAA,CAAG,WAAA,EAAe,EAAA,EAAI,IAAA,GAAO,KAAA,CAAM,CAAA,CAAG,GAAG,CAAA,CAC9C,OAAO,CAAA,EAAGC,CAAG,CAAA,EAAGpI,CAAE,CAAA,EAAGqI,CAAO,CAAA,EAAGC,CAAAA,CAAO,CAAA,EAAA,EAAKA,CAAI,CAAA,CAAA,CAAA,CAAM,EAAE,EACzD,CAGA,SAASC,EAAAA,CAAgBJ,CAAAA,CAAapC,CAAAA,CAAsB,CAC1D,IAAMhG,CAAAA,CAAM,KAAK,GAAA,EAAI,CACjBgI,CAAAA,GAAeI,CAAAA,GACjBJ,CAAAA,CAAaI,CAAAA,CACbH,CAAAA,CAAY,IAEdA,CAAAA,CAAU,IAAA,CAAKjI,CAAG,CAAA,CAElBiI,EAAYA,CAAAA,CAAU,MAAA,CAAQlL,CAAAA,EAAMiD,CAAAA,CAAMjD,GAAK6K,EAAc,CAAA,CACzDK,CAAAA,CAAU,MAAA,CAASJ,EAAAA,GACrBnD,CAAAA,CAAU,CACR,UAAA,CAAY,cACZ,gBAAA,CAAkB,YAAA,CAClB,kBAAA,CAAoBsB,CACtB,CAAC,CAAA,CAEDiC,CAAAA,CAAY,GACZD,CAAAA,CAAa,IAAA,EAEjB,CAQA,SAASS,EAAAA,CAAgBzC,CAAAA,CAAsB,CAC7C,IAAI0C,EAAU,KAAA,CACRC,CAAAA,CAAW,QAAA,CAAS,IAAA,CAEpBC,CAAAA,CAAW,IAAI,gBAAA,CAAiB,IAAM,CAC1CF,CAAAA,CAAU,KACZ,CAAC,CAAA,CACD,GAAI,CACFE,CAAAA,CAAS,OAAA,CAAQ,SAAS,eAAA,CAAiB,CACzC,SAAA,CAAW,CAAA,CAAA,CACX,OAAA,CAAS,CAAA,CAAA,CACT,UAAA,CAAY,CAAA,CAAA,CACZ,cAAe,CAAA,CACjB,CAAC,EACH,CAAA,KAAQ,CACN,MACF,CAEA,IAAMC,EAAW,IAAM,CACrBH,CAAAA,CAAU,KACZ,EACA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUG,CAAAA,CAAU,CAAE,OAAA,CAAS,IAAA,CAAM,OAAA,CAAS,IAAK,CAAC,CAAA,CAE5E,IAAMC,CAAAA,CAAQ,WAAW,IAAM,CAC7BC,CAAAA,EAAQ,CACR,IAAMC,CAAAA,CAAY,QAAA,CAAS,IAAA,GAASL,EAChC,CAACD,CAAAA,EAAW,CAACM,CAAAA,EACftE,CAAAA,CAAU,CACR,UAAA,CAAY,aAAA,CACZ,iBAAkB,YAAA,CAClB,kBAAA,CAAoBsB,CACtB,CAAC,EAEL,CAAA,CAAG8B,EAAc,CAAA,CAEXmB,EAAuB,CAAE,QAAA,CAAAL,CAAAA,CAAU,KAAA,CAAAE,CAAAA,CAAO,QAAA,CAAAD,CAAS,CAAA,CACzDX,EAAa,IAAA,CAAKe,CAAO,CAAA,CAEzB,SAASF,CAAAA,EAAgB,CACvBH,CAAAA,CAAS,UAAA,GACT,YAAA,CAAaE,CAAK,CAAA,CAClB,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUD,CAAAA,CAAU,CAAE,QAAS,IAAK,CAAyB,CAAA,CACxFX,CAAAA,CAAeA,EAAa,MAAA,CAAQ3L,CAAAA,EAAMA,CAAAA,GAAM0M,CAAO,EACzD,CACF,CAEO,SAASC,EAAAA,EAAyB,CACnC/C,EAAAA,GACJA,EAAAA,CAAQ,IAAA,CAER4B,EAAiB5D,CAAAA,EAA4B,CAC3C,IAAM6B,CAAAA,CAAS7B,CAAAA,CAAM,MAAA,CACrB,GAAI,CAAC6B,EAAQ,OAEb,IAAMmD,CAAAA,CAAcnD,CAAAA,CAAO,OAAA,CAAQ2B,EAAqB,CAAA,CACxD,GAAI,CAACwB,CAAAA,CAAa,OAElB,IAAMC,CAAAA,CAAajB,EAAAA,CAAegB,CAAW,CAAA,CAG7CpD,EAAAA,CAAYqD,CAAU,CAAA,CAEtB1E,CAAAA,CAAU,CACR,UAAA,CAAY,aAAA,CACZ,gBAAA,CAAkB,OAAA,CAClB,kBAAA,CAAoB0E,CACtB,CAAC,CAAA,CAEDZ,EAAAA,CAAgBW,CAAAA,CAAaC,CAAU,CAAA,CACvCX,EAAAA,CAAgBW,CAAU,EAC5B,CAAA,CAEA,QAAA,CAAS,gBAAA,CAAiB,OAAA,CAASrB,CAAAA,CAAe,CAAE,OAAA,CAAS,IAAA,CAAM,QAAS,IAAK,CAAC,CAAA,EACpF,CAGO,SAASsB,EAAAA,EAA4B,CACtCtB,CAAAA,GACF,QAAA,CAAS,oBAAoB,OAAA,CAASA,CAAAA,CAAe,CAAE,OAAA,CAAS,IAAK,CAAyB,CAAA,CAC9FA,CAAAA,CAAgB,MAElB,IAAA,IAAWxL,CAAAA,IAAK2L,CAAAA,CACd3L,CAAAA,CAAE,QAAA,CAAS,UAAA,EAAW,CACtB,YAAA,CAAaA,EAAE,KAAK,CAAA,CACpB,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAAA,CAAE,QAAA,CAAU,CAAE,QAAS,IAAK,CAAyB,CAAA,CAE5F2L,CAAAA,CAAe,EAAC,CAChBF,CAAAA,CAAa,IAAA,CACbC,EAAY,EAAC,CACb9B,EAAAA,CAAQ,MACV,CC7JA,IAAIW,EAAAA,CAAU,KAAA,CAEP,SAASwC,EAAAA,EAAsB,CAChCxC,EAAAA,GACJA,EAAAA,CAAU,IAAA,CACVyC,EAAAA,EAAW,CACXC,EAAAA,IACF,CAEA,SAASC,EAAAA,CAAkB/H,CAAAA,CAAsB,CAC/C,IAAM+B,CAAAA,CAAMY,CAAAA,GACZ,OAAKZ,CAAAA,EAAK,eAAA,EAAiB,OAAA,CACpBA,EAAI,eAAA,CAAgB,OAAA,CAAQ,IAAA,CAAMiG,CAAAA,EAAOA,EAAG,IAAA,CAAKhI,CAAG,CAAC,CAAA,CADjB,KAE7C,CAEA,SAAS0F,EAAAA,EAA0B,CACjC,IAAMC,CAAAA,CAAQ,IAAI,UAAA,CAAW,EAAE,CAAA,CAC/B,OAAA,MAAA,CAAO,eAAA,CAAgBA,CAAK,CAAA,CACrB,KAAA,CAAM,IAAA,CAAKA,CAAK,CAAA,CAAE,GAAA,CAAKnL,CAAAA,EAAMA,CAAAA,CAAE,SAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAC9E,CAEA,SAASoL,EAAAA,EAAyB,CAChC,IAAMD,CAAAA,CAAQ,IAAI,UAAA,CAAW,CAAC,CAAA,CAC9B,OAAA,MAAA,CAAO,eAAA,CAAgBA,CAAK,CAAA,CACrB,KAAA,CAAM,IAAA,CAAKA,CAAK,EAAE,GAAA,CAAKnL,CAAAA,EAAMA,CAAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAC9E,CAEA,SAASqN,EAAAA,EAAmB,CAC1B,IAAMI,CAAAA,CAAY,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,CAE1C,MAAA,CAAO,KAAA,CAAQ,eAAgBC,CAAAA,CAA0BC,CAAAA,CAAuC,CAC9F,IAAMnI,CAAAA,CAAM,OAAOkI,CAAAA,EAAU,QAAA,CAAWA,EAAQA,CAAAA,YAAiB,GAAA,CAAMA,CAAAA,CAAM,IAAA,CAAOA,CAAAA,CAAM,GAAA,CACpFE,CAAAA,CAAQ,WAAA,CAAY,KAAI,CAE1BvC,CAAAA,CAAU,EAAA,CACVC,CAAAA,CAAS,EAAA,CAEb,GAAIiC,EAAAA,CAAkB/H,CAAG,EAAG,CAC1B6F,CAAAA,CAAUH,EAAAA,EAAgB,CAC1BI,CAAAA,CAASF,EAAAA,EAAe,CACxB,IAAMlF,EAAU,IAAI,OAAA,CAAQyH,CAAAA,EAAM,OAAO,CAAA,CACzCzH,CAAAA,CAAQ,GAAA,CAAI,aAAA,CAAe,MAAMmF,CAAO,CAAA,CAAA,EAAIC,CAAM,CAAA,GAAA,CAAK,CAAA,CACvDqC,CAAAA,CAAO,CAAE,GAAGA,EAAM,OAAA,CAAAzH,CAAQ,EAC5B,CAEA,GAAI,CACF,IAAM2H,CAAAA,CAAW,MAAMJ,EAAUC,CAAAA,CAAOC,CAAI,CAAA,CACtCG,CAAAA,CAAa,WAAA,CAAY,GAAA,EAAI,CAAIF,CAAAA,CAEvC,OAAApF,CAAAA,CAAU,CACR,UAAA,CAAY,UAAA,CACZ,UAAA,CAAYH,CAAAA,CAAY7C,CAAG,CAAA,CAC3B,YAAasI,CAAAA,CACb,QAAA,CAAUzC,CAAAA,CACV,OAAA,CAASC,CAAAA,CACT,UAAA,CAAY,IAAA,CAAK,SAAA,CAAU,CAAE,MAAA,CAAQuC,CAAAA,CAAS,MAAA,CAAQ,MAAA,CAAQF,CAAAA,EAAM,MAAA,EAAU,KAAM,CAAC,CACvF,CAAC,CAAA,CAEME,CACT,CAAA,MAASE,CAAAA,CAAK,CACZ,IAAMD,CAAAA,CAAa,YAAY,GAAA,EAAI,CAAIF,CAAAA,CACvC,MAAApF,CAAAA,CAAU,CACR,UAAA,CAAY,UAAA,CACZ,WAAYH,CAAAA,CAAY7C,CAAG,CAAA,CAC3B,WAAA,CAAasI,CAAAA,CACb,QAAA,CAAUzC,CAAAA,CACV,OAAA,CAASC,EACT,aAAA,CAAeyC,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,QAAU,cAAA,CACpD,UAAA,CAAY,cACd,CAAC,EACKA,CACR,CACF,EACF,CAEA,SAAST,EAAAA,EAAiB,CACxB,IAAMU,EAAW,cAAA,CAAe,SAAA,CAAU,IAAA,CACpCC,CAAAA,CAAW,cAAA,CAAe,SAAA,CAAU,IAAA,CAE1C,cAAA,CAAe,UAAU,IAAA,CAAO,SAAUC,CAAAA,CAAgB1I,CAAAA,CAAAA,GAAsB2I,CAAAA,CAAa,CAC3F,OAAC,IAAA,CAAa,WAAa,OAAO3I,CAAAA,EAAQ,QAAA,CAAWA,CAAAA,CAAMA,CAAAA,CAAI,IAAA,CAC9D,IAAA,CAAa,aAAA,CAAgB0I,EACvBF,CAAAA,CAAS,KAAA,CAAM,IAAA,CAAM,CAACE,CAAAA,CAAQ1I,CAAAA,CAAK,GAAG2I,CAAI,CAAQ,CAC3D,CAAA,CAEA,cAAA,CAAe,SAAA,CAAU,IAAA,CAAO,SAAU1I,CAAAA,CAAY,CACpD,IAAMD,CAAAA,CAAe,IAAA,CAAa,UAAA,EAAc,EAAA,CAC1C0I,CAAAA,CAAkB,IAAA,CAAa,aAAA,EAAiB,KAAA,CAChDN,EAAQ,WAAA,CAAY,GAAA,EAAI,CAE1BvC,CAAAA,CAAU,GACVC,CAAAA,CAAS,EAAA,CACb,OAAIiC,EAAAA,CAAkB/H,CAAG,CAAA,GACvB6F,CAAAA,CAAUH,EAAAA,EAAgB,CAC1BI,CAAAA,CAASF,EAAAA,EAAe,CACxB,IAAA,CAAK,iBAAiB,aAAA,CAAe,CAAA,GAAA,EAAMC,CAAO,CAAA,CAAA,EAAIC,CAAM,CAAA,GAAA,CAAK,CAAA,CAAA,CAGnE,IAAA,CAAK,iBAAiB,SAAA,CAAW,IAAM,CACrC,IAAMwC,CAAAA,CAAa,WAAA,CAAY,GAAA,EAAI,CAAIF,EACvCpF,CAAAA,CAAU,CACR,UAAA,CAAY,UAAA,CACZ,UAAA,CAAYH,CAAAA,CAAY7C,CAAG,CAAA,CAC3B,YAAasI,CAAAA,CACb,QAAA,CAAUzC,CAAAA,CACV,OAAA,CAASC,CAAAA,CACT,UAAA,CAAY,IAAA,CAAK,SAAA,CAAU,CAAE,MAAA,CAAQ,IAAA,CAAK,MAAA,CAAQ,MAAA,CAAA4C,CAAO,CAAC,CAC5D,CAAC,EACH,CAAC,CAAA,CAEMD,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAMxI,CAAI,CACjC,EACF,CC3GA,IAAI2I,EAAAA,CAAU,KAAA,CACVC,CAAAA,CAA+C,KAC/CC,CAAAA,CAA2C,IAAA,CAE/C,SAASC,EAAAA,CAASC,EAAuB,CACvC,OACE,OAAO,mBAAA,CAAwB,GAAA,EAC/B,KAAA,CAAM,OAAA,CAAQ,mBAAA,CAAoB,mBAAmB,CAAA,EACrD,mBAAA,CAAoB,mBAAA,CAAoB,QAAA,CAASA,CAAI,CAEzD,CAEO,SAASC,IAAwB,CACtC,GAAI,CAAAL,EAAAA,EACA,EAAA,OAAO,mBAAA,CAAwB,GAAA,CAAA,CAGnC,CAAA,GAFAA,GAAU,IAAA,CAENG,EAAAA,CAAS,UAAU,CAAA,CACrB,GAAI,CACFF,CAAAA,CAAmB,IAAI,oBAAqBK,CAAAA,EAAS,CACnD,IAAA,IAAWC,CAAAA,IAASD,CAAAA,CAAK,UAAA,EAAW,CAClClG,CAAAA,CAAU,CACR,UAAA,CAAY,WAAA,CACZ,WAAA,CAAamG,CAAAA,CAAM,QAAA,CACnB,UAAA,CAAY,IAAA,CAAK,SAAA,CAAU,CAAE,KAAA,CAAOA,CAAAA,CAAM,SAAA,CAAW,IAAA,CAAMA,CAAAA,CAAM,IAAK,CAAC,CACzE,CAAC,EAEL,CAAC,CAAA,CACDN,CAAAA,CAAiB,QAAQ,CAAE,IAAA,CAAM,UAAA,CAAY,QAAA,CAAU,EAAK,CAAC,EAC/D,CAAA,KAAQ,CACNA,CAAAA,CAAmB,KACrB,CAGF,GAAIE,GAAS,sBAAsB,CAAA,CACjC,GAAI,CACFD,CAAAA,CAAe,IAAI,mBAAA,CAAqBI,CAAAA,EAAS,CAC/C,IAAA,IAAWC,CAAAA,IAASD,CAAAA,CAAK,UAAA,EAAW,CAAG,CAGrC,IAAM/N,CAAAA,CAAIgO,EAIVnG,CAAAA,CAAU,CACR,UAAA,CAAY,MAAA,CACZ,WAAA,CAAa7H,CAAAA,CAAE,QAAA,CACf,UAAA,CAAY,KAAK,SAAA,CAAU,CACzB,KAAA,CAAOA,CAAAA,CAAE,SAAA,CACT,gBAAA,CAAkBA,CAAAA,CAAE,gBAAA,EAAoB,EACxC,OAAA,CAAA,CAAUA,CAAAA,CAAE,OAAA,EAAW,EAAC,EAAG,MAC7B,CAAC,CACH,CAAC,EACH,CACF,CAAC,CAAA,CACD2N,CAAAA,CAAa,OAAA,CAAQ,CAAE,IAAA,CAAM,uBAAwB,QAAA,CAAU,CAAA,CAAK,CAAC,EACvE,MAAQ,CACNA,CAAAA,CAAe,KACjB,CAAA,CAEJ,CAEO,SAASM,EAAAA,EAA2B,CACrCP,CAAAA,GACFA,CAAAA,CAAiB,UAAA,EAAW,CAC5BA,CAAAA,CAAmB,MAEjBC,CAAAA,GACFA,CAAAA,CAAa,UAAA,EAAW,CACxBA,CAAAA,CAAe,IAAA,CAAA,CAEjBF,EAAAA,CAAU,MACZ,CC9CO,SAASS,EAAAA,CAAYC,CAAAA,CAAuB,CACjD,OAAO,CACL,IAAA,CAAKnI,CAAAA,CAA6B,CAGhC,GAAI,EAAA,OAAO,MAAA,CAAW,GAAA,CAAA,CAEtB,CAAA,GAAIyB,EAAAA,EAAc,CAAG,CACnB,QAAQ,IAAA,CAAK,mDAAmD,CAAA,CAChE,MACF,CAEAd,EAAAA,CAAUX,CAAM,CAAA,CAEZA,EAAO,cAAA,GAAmB,KAAA,EAAOwC,EAAAA,EAAW,CAC5CxC,CAAAA,CAAO,WAAA,GAAgB,KAAA,EAAO2D,EAAAA,GAC9B3D,CAAAA,CAAO,cAAA,GAAmB,KAAA,EAAOkE,EAAAA,EAAc,CAC/ClE,CAAAA,CAAO,cAAA,GAAmB,KAAA,EAAO8H,IAAgB,CACjD9H,CAAAA,CAAO,iBAAA,GAAsB,IAAA,EAAMqG,IAAiB,CACpDrG,CAAAA,CAAO,cAAA,GAAmB,IAAA,EAAMyG,IAAc,CAC9CzG,CAAAA,CAAO,kBAAA,GAAuB,IAAA,GAI9B,OAAA,CAAQ,IAAA,CAAK,4GAA4G,CAAA,EAAA,CAG/H,CAAA,CAGA,UAAA,CAAW+C,CAAAA,CAAcqF,CAAAA,CAA4C,CACnEvG,CAAAA,CAAU,CACR,UAAA,CAAY,QAAA,CACZ,UAAA,CAAYkB,CAAAA,CACZ,UAAA,CAAYqF,CAAAA,CAAa,KAAK,SAAA,CAAUA,CAAU,CAAA,CAAI,MACxD,CAAC,EACH,CAAA,CAMA,OAAA,CAAQnH,CAAAA,CAAoC,CAC1CD,EAAAA,CAAgBC,CAAI,EACtB,CAAA,CAMA,mBAAA,CAAoBE,CAAAA,CAAsC,CACxDD,EAAAA,CAAeC,CAAK,EACtB,CAAA,CAGA,qBAAA,EAA8B,CAC5BC,EAAAA,GACF,CAAA,CAGA,KAAA,CAAAW,EAMA,OAAA,EAAgB,CAEdkG,EAAAA,EAAmB,CACnBzB,EAAAA,EAAoB,CACpBxC,EAAAA,EAAc,CAEdzB,EAAAA,GACF,CACF,CACF,CChGA,IAAO8F,GAAQH,EAAAA","file":"rush-rum.global.js","sourcesContent":["var e,n,t,r,i,o=-1,a=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(o=n.timeStamp,e(n))}),!0)},c=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),r=\"navigate\";o>=0?r=\"back-forward-cache\":t&&(document.prerendering||u()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":t.type&&(r=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v4-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},d=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){document.addEventListener(\"visibilitychange\",(function(){\"hidden\"===document.visibilityState&&e()}))},v=function(e){var n=!1;return function(){n||(e(),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),a((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},b=[1800,3e3],S=function(e,n){n=n||{},C((function(){var t,r=E(),i=f(\"FCP\"),o=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(o.disconnect(),e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries.push(e),t(!0)))}))}));o&&(t=d(e,i,b,n.reportAllChanges),a((function(r){i=f(\"FCP\"),t=d(e,i,b,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,t(!0)}))})))}))},L=[.1,.25],w=function(e,n){n=n||{},S(v((function(){var t,r=f(\"CLS\",0),i=0,o=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=o[0],t=o[o.length-1];i&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(i+=e.value,o.push(e)):(i=e.value,o=[e])}})),i>r.value&&(r.value=i,r.entries=o,t())},u=s(\"layout-shift\",c);u&&(t=d(e,r,L,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),a((function(){i=0,r=f(\"CLS\",0),t=d(e,r,L,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A=0,I=1/0,P=0,M=function(e){e.forEach((function(e){e.interactionId&&(I=Math.min(I,e.interactionId),P=Math.max(P,e.interactionId),A=P?(P-I)/7+1:0)}))},k=function(){return e?A:performance.interactionCount||0},F=function(){\"interactionCount\"in performance||e||(e=s(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))},D=[],x=new Map,R=0,B=function(){var e=Math.min(D.length-1,Math.floor((k()-R)/50));return D[e]},H=[],q=function(e){if(H.forEach((function(n){return n(e)})),e.interactionId||\"first-input\"===e.entryType){var n=D[D.length-1],t=x.get(e.interactionId);if(t||D.length<10||e.duration>n.latency){if(t)e.duration>t.latency?(t.entries=[e],t.latency=e.duration):e.duration===t.latency&&e.startTime===t.entries[0].startTime&&t.entries.push(e);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};x.set(r.id,r),D.push(r)}D.sort((function(e,n){return n.latency-e.latency})),D.length>10&&D.splice(10).forEach((function(e){return x.delete(e.id)}))}}},O=function(e){var n=self.requestIdleCallback||self.setTimeout,t=-1;return e=v(e),\"hidden\"===document.visibilityState?e():(t=n(e),p(e)),t},N=[200,500],j=function(e,n){\"PerformanceEventTiming\"in self&&\"interactionId\"in PerformanceEventTiming.prototype&&(n=n||{},C((function(){var t;F();var r,i=f(\"INP\"),o=function(e){O((function(){e.forEach(q);var n=B();n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r())}))},c=s(\"event\",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=d(e,i,N,n.reportAllChanges),c&&(c.observe({type:\"first-input\",buffered:!0}),p((function(){o(c.takeRecords()),r(!0)})),a((function(){R=k(),D.length=0,x.clear(),i=f(\"INP\"),r=d(e,i,N,n.reportAllChanges)})))})))},_=[2500,4e3],z={},G=function(e,n){n=n||{},C((function(){var t,r=E(),i=f(\"LCP\"),o=function(e){n.reportAllChanges||(e=e.slice(-1)),e.forEach((function(e){e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries=[e],t())}))},c=s(\"largest-contentful-paint\",o);if(c){t=d(e,i,_,n.reportAllChanges);var m=v((function(){z[i.id]||(o(c.takeRecords()),c.disconnect(),z[i.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return O(m)}),{once:!0,capture:!0})})),p(m),a((function(r){i=f(\"LCP\"),t=d(e,i,_,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,z[i.id]=!0,t(!0)}))}))}}))},J=[800,1800],K=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Q=function(e,n){n=n||{};var t=f(\"TTFB\"),r=d(e,t,J,n.reportAllChanges);K((function(){var i=c();i&&(t.value=Math.max(i.responseStart-u(),0),t.entries=[i],r(!0),a((function(){t=f(\"TTFB\",0),(r=d(e,t,J,n.reportAllChanges))(!0)})))}))},U={passive:!0,capture:!0},V=new Date,W=function(e,i){n||(n=i,t=e,r=new Date,Z(removeEventListener),X())},X=function(){if(t>=0&&t<r-V){var e={entryType:\"first-input\",name:n.type,target:n.target,cancelable:n.cancelable,startTime:n.timeStamp,processingStart:n.timeStamp+t};i.forEach((function(n){n(e)})),i=[]}},Y=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){W(e,n),i()},r=function(){i()},i=function(){removeEventListener(\"pointerup\",t,U),removeEventListener(\"pointercancel\",r,U)};addEventListener(\"pointerup\",t,U),addEventListener(\"pointercancel\",r,U)}(n,e):W(n,e)}},Z=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,Y,U)}))},$=[100,300],ee=function(e,r){r=r||{},C((function(){var o,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),o(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);o=d(e,u,$,r.reportAllChanges),h&&(p(v((function(){m(h.takeRecords()),h.disconnect()}))),a((function(){var a;u=f(\"FID\"),o=d(e,u,$,r.reportAllChanges),i=[],t=-1,n=null,Z(addEventListener),a=l,i.push(a),X()})))}))};export{L as CLSThresholds,b as FCPThresholds,$ as FIDThresholds,N as INPThresholds,_ as LCPThresholds,J as TTFBThresholds,w as onCLS,S as onFCP,ee as onFID,j as onINP,G as onLCP,Q as onTTFB};\n","const SESSION_KEY = 'rush_rum_sid'\nconst SESSION_TS_KEY = 'rush_rum_sts'\nconst SESSION_SAMPLED_KEY = 'rush_rum_smp'\nconst TIMEOUT_MS = 30 * 60 * 1000 // 30 minutes\n\nfunction generateId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID()\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n const v = c === 'x' ? r : (r & 0x3) | 0x8\n return v.toString(16)\n })\n}\n\nexport function getSessionId(): string {\n try {\n const stored = sessionStorage.getItem(SESSION_KEY)\n const ts = sessionStorage.getItem(SESSION_TS_KEY)\n const now = Date.now()\n\n if (stored && ts && now - Number(ts) < TIMEOUT_MS) {\n sessionStorage.setItem(SESSION_TS_KEY, String(now))\n return stored\n }\n\n const id = generateId()\n sessionStorage.setItem(SESSION_KEY, id)\n sessionStorage.setItem(SESSION_TS_KEY, String(now))\n // New logical session → re-decide sampling next time it's asked.\n sessionStorage.removeItem(SESSION_SAMPLED_KEY)\n return id\n } catch {\n // sessionStorage not available (e.g. incognito overflow)\n return generateId()\n }\n}\n\n/**\n * Decide whether THIS session is sampled — once per session, cached so every\n * event in the session shares the same decision. Returns true if it should be\n * recorded. Cleared whenever a new session id is minted (see getSessionId).\n */\nexport function isSessionSampled(sampleRate: number): boolean {\n if (sampleRate >= 1) return true\n if (sampleRate <= 0) return false\n try {\n // Ensure a session id exists first, so a fresh session clears any stale flag.\n getSessionId()\n const stored = sessionStorage.getItem(SESSION_SAMPLED_KEY)\n if (stored !== null) return stored === '1'\n const sampled = Math.random() < sampleRate\n sessionStorage.setItem(SESSION_SAMPLED_KEY, sampled ? '1' : '0')\n return sampled\n } catch {\n // No sessionStorage → fall back to a per-load decision.\n return Math.random() < sampleRate\n }\n}\n\nexport function touchSession(): void {\n try {\n sessionStorage.setItem(SESSION_TS_KEY, String(Date.now()))\n } catch { /* ignore */ }\n}\n","export interface BrowserInfo {\n browserName: string\n browserVersion: string\n osName: string\n osVersion: string\n deviceType: 'desktop' | 'mobile' | 'tablet'\n screenWidth: number\n screenHeight: number\n}\n\nexport function detectBrowser(): BrowserInfo {\n const ua = navigator.userAgent\n\n let browserName = 'Unknown'\n let browserVersion = ''\n\n if (ua.includes('Firefox/')) {\n browserName = 'Firefox'\n browserVersion = ua.split('Firefox/')[1]?.split(' ')[0] ?? ''\n } else if (ua.includes('Edg/')) {\n browserName = 'Edge'\n browserVersion = ua.split('Edg/')[1]?.split(' ')[0] ?? ''\n } else if (ua.includes('Chrome/')) {\n browserName = 'Chrome'\n browserVersion = ua.split('Chrome/')[1]?.split(' ')[0] ?? ''\n } else if (ua.includes('Safari/') && !ua.includes('Chrome')) {\n browserName = 'Safari'\n browserVersion = ua.split('Version/')[1]?.split(' ')[0] ?? ''\n }\n\n let osName = 'Unknown'\n let osVersion = ''\n // Order matters: Android UAs contain \"Linux\" and iOS UAs contain \"Mac OS X\",\n // so the mobile OSes must be checked BEFORE Linux/macOS.\n if (ua.includes('Windows')) {\n osName = 'Windows'\n const m = ua.match(/Windows NT (\\d+\\.\\d+)/)\n osVersion = m?.[1] ?? ''\n } else if (ua.includes('Android')) {\n osName = 'Android'\n const m = ua.match(/Android (\\d+(\\.\\d+)?)/)\n osVersion = m?.[1] ?? ''\n } else if (/iPhone|iPad|iPod/.test(ua)) {\n osName = 'iOS'\n const m = ua.match(/OS (\\d+_\\d+)/)\n osVersion = m?.[1]?.replace('_', '.') ?? ''\n } else if (ua.includes('Mac OS X')) {\n osName = 'macOS'\n const m = ua.match(/Mac OS X (\\d+[._]\\d+[._]?\\d*)/)\n osVersion = m?.[1]?.replace(/_/g, '.') ?? ''\n } else if (ua.includes('Linux')) {\n osName = 'Linux'\n }\n\n let deviceType: 'desktop' | 'mobile' | 'tablet' = 'desktop'\n if (/Mobi|Android.*Mobile/.test(ua)) {\n deviceType = 'mobile'\n } else if (/iPad|Android(?!.*Mobile)|Tablet/.test(ua)) {\n deviceType = 'tablet'\n }\n\n return {\n browserName,\n browserVersion,\n osName,\n osVersion,\n deviceType,\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n }\n}\n","/**\n * Best-effort transport for RUM batches. Wraps the bare fetch with:\n * - retry + exponential backoff + jitter on network errors / 429 / 5xx,\n * - an offline buffer persisted to localStorage (drained on init + `online`),\n * - optional gzip compression (off by default).\n *\n * Everything here is fire-and-forget: it never throws into the host app and\n * never blocks the main thread. The unload/beacon path lives in core.ts and\n * does NOT go through here (sendBeacon can't retry/compress).\n */\n\nconst BUFFER_KEY = 'rush_rum_buf_v1' // versioned so a format change can't crash older readers\nconst MAX_BUFFER_BYTES = 1_000_000 // ~1 MB cap across all persisted batches\nconst MAX_BUFFER_BATCHES = 50\nconst MAX_RETRIES = 3\nconst BASE_BACKOFF_MS = 1_000\n\ninterface PersistedBatch {\n /** Endpoint the batch was destined for. */\n url: string\n /** Already-serialized JSON payload. */\n body: string\n /** When it was first buffered (ms epoch), for oldest-first drain. */\n ts: number\n}\n\nfunction isOnline(): boolean {\n return typeof navigator === 'undefined' || navigator.onLine !== false\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/** Backoff with full jitter: random in [0, base * 2^attempt]. */\nfunction backoffDelay(attempt: number): number {\n const ceiling = BASE_BACKOFF_MS * Math.pow(2, attempt)\n return Math.random() * ceiling\n}\n\n// ---- localStorage offline buffer -----------------------------------------\n\nfunction readBuffer(): PersistedBatch[] {\n try {\n const raw = localStorage.getItem(BUFFER_KEY)\n if (!raw) return []\n const parsed = JSON.parse(raw)\n return Array.isArray(parsed) ? (parsed as PersistedBatch[]) : []\n } catch {\n return []\n }\n}\n\nfunction writeBuffer(batches: PersistedBatch[]): void {\n try {\n if (batches.length === 0) {\n localStorage.removeItem(BUFFER_KEY)\n return\n }\n localStorage.setItem(BUFFER_KEY, JSON.stringify(batches))\n } catch {\n /* storage full / unavailable — best-effort */\n }\n}\n\n/** Append a batch, dropping the oldest until under the byte + count caps. */\nfunction persistBatch(url: string, body: string): void {\n try {\n const batches = readBuffer()\n batches.push({ url, body, ts: Date.now() })\n // Enforce count cap first (cheap), then byte cap.\n while (batches.length > MAX_BUFFER_BATCHES) batches.shift()\n let total = batches.reduce((n, b) => n + b.body.length, 0)\n while (batches.length > 1 && total > MAX_BUFFER_BYTES) {\n const dropped = batches.shift()!\n total -= dropped.body.length\n }\n writeBuffer(batches)\n } catch {\n /* best-effort */\n }\n}\n\n// ---- compression ----------------------------------------------------------\n\nfunction canCompress(): boolean {\n return typeof CompressionStream !== 'undefined' && typeof Response !== 'undefined'\n}\n\nasync function gzip(body: string): Promise<Blob> {\n const stream = new Blob([body]).stream().pipeThrough(new CompressionStream('gzip'))\n const buf = await new Response(stream).arrayBuffer()\n return new Blob([buf])\n}\n\n// ---- send ------------------------------------------------------------------\n\n/**\n * Send a body once. Resolves true on a 2xx/3xx response, false on a\n * retryable failure (network error, 429, 5xx) so the caller can retry/buffer.\n * Non-retryable 4xx (other than 429) resolve true so we don't loop forever on a\n * permanently-rejected payload.\n */\nasync function sendOnce(url: string, body: string, compress: boolean): Promise<boolean> {\n try {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' }\n let payload: BodyInit = body\n if (compress && canCompress()) {\n try {\n payload = await gzip(body)\n headers['Content-Encoding'] = 'gzip'\n } catch {\n payload = body // compression failed — fall back to plain JSON\n }\n }\n const res = await fetch(url, { method: 'POST', headers, body: payload, keepalive: true })\n if (res.status === 429 || res.status >= 500) return false\n return true\n } catch {\n return false // network error → retryable\n }\n}\n\n/**\n * Send a batch with retry/backoff. If it still fails (or we're offline), the\n * batch is persisted to the offline buffer for a later drain. Never throws.\n */\nexport async function sendBatch(url: string, body: string, compress: boolean): Promise<void> {\n if (!isOnline()) {\n persistBatch(url, body)\n return\n }\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n const ok = await sendOnce(url, body, compress)\n if (ok) return\n if (attempt < MAX_RETRIES) await sleep(backoffDelay(attempt))\n }\n // Exhausted retries — stash for later.\n persistBatch(url, body)\n}\n\n/**\n * Drain persisted batches oldest-first. Re-buffers any that still fail. Called\n * on init() and whenever the `online` event fires. Replayed batches are sent\n * uncompressed-by-default unless the caller asks to compress (we keep it simple\n * and never compress drains, since the bodies are already small JSON).\n */\nexport async function drainBuffer(): Promise<void> {\n if (!isOnline()) return\n let batches = readBuffer()\n if (batches.length === 0) return\n // Take a snapshot and clear storage so new live batches don't interleave;\n // anything that fails gets re-persisted below.\n writeBuffer([])\n batches = batches.sort((a, b) => a.ts - b.ts)\n for (const batch of batches) {\n if (!isOnline()) {\n persistBatch(batch.url, batch.body)\n continue\n }\n const ok = await sendOnce(batch.url, batch.body, false)\n if (!ok) persistBatch(batch.url, batch.body)\n }\n}\n","import type { RumEvent, RumMeta, RumPayload, RushRUMConfig } from './types'\nimport { getSessionId, isSessionSampled } from './session'\nimport { detectBrowser } from './browser'\nimport { sendBatch, drainBuffer } from './transport'\n\nconst MAX_BATCH = 30\nconst FLUSH_INTERVAL_MS = 250\n// Cap the in-memory queue so a flush outage (offline / failing backend) can't\n// grow it without bound; drop oldest on overflow.\nconst MAX_QUEUE = 1000\n\nlet config: RushRUMConfig | null = null\nlet queue: RumEvent[] = []\nlet flushTimer: ReturnType<typeof setInterval> | null = null\nlet browserInfo: ReturnType<typeof detectBrowser> | null = null\nlet sampledIn = true\nlet initialized = false\n\n// Dynamic user override (set via RushRUM.setUser) — takes precedence over the\n// config.user callback when set. undefined = not overridden; null = cleared.\nlet userOverride: { id?: string } | null | undefined = undefined\n// Global attributes merged into every event's `attributes` JSON.\nlet globalAttributes: Record<string, unknown> = {}\n\n// Listener refs kept so destroy() can detach them.\nlet onVisibility: (() => void) | null = null\nlet onPageHide: (() => void) | null = null\nlet onOnline: (() => void) | null = null\n\nexport function configure(cfg: RushRUMConfig): void {\n // Idempotent: a second init() is a no-op, so we never start duplicate timers,\n // handlers, or (via the trackers) double-wrap fetch/XHR/history.\n if (initialized) return\n config = cfg\n browserInfo = detectBrowser()\n // Sampling is decided ONCE per session and applied to every event.\n sampledIn = isSessionSampled(cfg.sampleRate ?? 1)\n initialized = true\n startFlushTimer()\n setupBeaconFlush()\n setupOnlineDrain()\n // Drain anything buffered offline on a previous load (oldest first).\n void drainBuffer()\n}\n\n/** Set/override the current user id; reflected in meta.user_id. null clears it. */\nexport function setUserOverride(user: { id?: string } | null): void {\n userOverride = user\n}\n\nexport function setGlobalAttrs(attrs: Record<string, unknown>): void {\n globalAttributes = { ...globalAttributes, ...attrs }\n}\n\nexport function clearGlobalAttrs(): void {\n globalAttributes = {}\n}\n\n/**\n * Merge global attributes into an event's `attributes` JSON. Event-specific keys\n * win over globals. No-op when there are no globals. Parse failures fall back to\n * keeping the event's original attributes untouched.\n */\nfunction applyGlobalAttributes(event: RumEvent): void {\n const keys = Object.keys(globalAttributes)\n if (keys.length === 0) return\n let existing: Record<string, unknown> = {}\n if (event.attributes) {\n try {\n const parsed = JSON.parse(event.attributes)\n if (parsed && typeof parsed === 'object') existing = parsed as Record<string, unknown>\n } catch {\n return // unparseable existing attributes — leave them as-is\n }\n }\n event.attributes = JSON.stringify({ ...globalAttributes, ...existing })\n}\n\nexport function getConfig(): RushRUMConfig | null {\n return config\n}\n\nexport function isInitialized(): boolean {\n return initialized\n}\n\n/** Strip query string + hash from a URL unless the caller opted in via config. */\nexport function sanitizeUrl(url: string): string {\n if (config?.captureQueryParams) return url\n let end = url.length\n const q = url.indexOf('?')\n const h = url.indexOf('#')\n if (q !== -1) end = Math.min(end, q)\n if (h !== -1) end = Math.min(end, h)\n return url.slice(0, end)\n}\n\n/**\n * High-resolution wall-clock time in nanoseconds (backend stores i64 ns).\n * timeOrigin + now() captures sub-millisecond ordering; the float quantizes at\n * ~256ns at this magnitude, which is far finer than RUM needs.\n */\nfunction nowNs(): number {\n const ms =\n typeof performance !== 'undefined' && performance.timeOrigin\n ? performance.timeOrigin + performance.now()\n : Date.now()\n return Math.round(ms * 1_000_000)\n}\n\nexport function pushEvent(event: RumEvent): void {\n if (!config || !sampledIn) return\n event.timestamp = event.timestamp ?? nowNs()\n\n // beforeSend may mutate or drop the event. A throwing hook must never break\n // collection, so swallow errors and keep the (un-hooked) event.\n if (config.beforeSend) {\n try {\n const result = config.beforeSend(event)\n if (result === null) return // explicitly dropped\n event = result ?? event\n } catch {\n /* ignore a misbehaving beforeSend */\n }\n }\n\n // Merge global attributes (event-specific keys win) into the stringified JSON.\n applyGlobalAttributes(event)\n\n queue.push(event)\n // Cap the queue: drop oldest first so the newest signal survives a backlog.\n if (queue.length > MAX_QUEUE) queue.splice(0, queue.length - MAX_QUEUE)\n if (queue.length >= MAX_BATCH) flush()\n}\n\nfunction buildMeta(): RumMeta {\n const cfg = config!\n const bi = browserInfo!\n let userId = ''\n // setUser() override (when set) wins over the config.user callback.\n if (userOverride !== undefined) {\n userId = userOverride?.id ?? ''\n } else {\n try {\n const u = cfg.user?.()\n userId = u?.id ?? ''\n } catch {\n /* ignore */\n }\n }\n\n return {\n app_name: cfg.app.name,\n app_version: cfg.app.version ?? '',\n environment: cfg.environment ?? '',\n session_id: getSessionId(),\n user_id: userId,\n page_url: sanitizeUrl(location.href),\n page_path: location.pathname,\n view_name: document.title,\n referrer: sanitizeUrl(document.referrer),\n browser_name: bi.browserName,\n browser_version: bi.browserVersion,\n os_name: bi.osName,\n os_version: bi.osVersion,\n device_type: bi.deviceType,\n screen_width: bi.screenWidth,\n screen_height: bi.screenHeight,\n }\n}\n\nexport function flush(): void {\n if (!config || queue.length === 0) return\n const endpoint = config.endpoint\n const compress = config.compress === true\n // Drain in batches so a burst doesn't leave a remainder waiting for the timer.\n while (queue.length > 0) {\n const events = queue.splice(0, MAX_BATCH)\n const payload: RumPayload = { meta: buildMeta(), events }\n const body = JSON.stringify(payload)\n // Transport handles retry/backoff + offline buffering; fire-and-forget.\n void sendBatch(endpoint, body, compress)\n }\n}\n\nfunction startFlushTimer(): void {\n if (flushTimer) return\n flushTimer = setInterval(() => {\n if (queue.length > 0) flush()\n }, FLUSH_INTERVAL_MS)\n}\n\nfunction setupBeaconFlush(): void {\n if (typeof document === 'undefined') return\n\n const beaconFlush = () => {\n if (!config || queue.length === 0) return\n const events = queue.splice(0)\n const payload: RumPayload = { meta: buildMeta(), events }\n const body = JSON.stringify(payload)\n\n if (navigator.sendBeacon) {\n navigator.sendBeacon(config.endpoint, body)\n } else {\n // Sync XHR as last resort (not recommended but works for unload).\n try {\n const xhr = new XMLHttpRequest()\n xhr.open('POST', config.endpoint, false)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(body)\n } catch {\n /* ignore */\n }\n }\n }\n\n onVisibility = () => {\n if (document.visibilityState === 'hidden') beaconFlush()\n }\n onPageHide = beaconFlush\n document.addEventListener('visibilitychange', onVisibility)\n window.addEventListener('pagehide', onPageHide)\n}\n\n/** Drain the offline buffer whenever connectivity is restored. */\nfunction setupOnlineDrain(): void {\n if (typeof window === 'undefined') return\n onOnline = () => {\n void drainBuffer()\n }\n window.addEventListener('online', onOnline)\n}\n\n/**\n * Stop collecting: flush the queue, clear the timer, and detach the unload\n * handlers. The fetch/XHR/history/click patches installed by the trackers stay\n * in place but become inert (pushEvent no-ops once config is null), so calling\n * init() again later is safe. Mainly for tests and SPA hot-reload.\n */\nexport function destroy(): void {\n flush()\n if (flushTimer) {\n clearInterval(flushTimer)\n flushTimer = null\n }\n if (typeof document !== 'undefined' && onVisibility) {\n document.removeEventListener('visibilitychange', onVisibility)\n }\n if (typeof window !== 'undefined' && onPageHide) {\n window.removeEventListener('pagehide', onPageHide)\n }\n if (typeof window !== 'undefined' && onOnline) {\n window.removeEventListener('online', onOnline)\n }\n onVisibility = null\n onPageHide = null\n onOnline = null\n queue = []\n config = null\n initialized = false\n userOverride = undefined\n globalAttributes = {}\n}\n","import { pushEvent } from './core'\n\nexport function initVitals(): void {\n // Dynamic import so the SDK works even if web-vitals isn't available\n import('web-vitals').then(({ onLCP, onCLS, onINP, onFCP, onTTFB }) => {\n const report = (name: string) => (metric: { value: number; rating: string }) => {\n pushEvent({\n event_type: 'web_vital',\n vital_name: name,\n vital_value: metric.value,\n vital_rating: metric.rating,\n })\n }\n\n onLCP(report('LCP'))\n onCLS(report('CLS'))\n onINP(report('INP'))\n onFCP(report('FCP'))\n onTTFB(report('TTFB'))\n }).catch(() => {\n // web-vitals not available — skip\n })\n}\n","/**\n * Tiny shared module for the \"error click\" frustration signal. interactions.ts\n * records the last click here; errors.ts reads it when a JS error fires. Living\n * in its own module avoids a circular import between those two files.\n */\n\nexport interface LastClick {\n /** A descriptor of the clicked element (same format as interaction events). */\n target: string\n /** Click time, ms via performance.now() / Date.now() fallback. */\n ts: number\n}\n\nlet lastClick: LastClick | null = null\n\nfunction now(): number {\n return typeof performance !== 'undefined' && performance.now ? performance.now() : Date.now()\n}\n\nexport function recordClick(target: string): void {\n lastClick = { target, ts: now() }\n}\n\nexport function getLastClick(): LastClick | null {\n return lastClick\n}\n\nexport function clearLastClick(): void {\n lastClick = null\n}\n","import { pushEvent } from './core'\nimport { getLastClick } from './frustration'\n\n// Error click: a JS error within this window of the last click is treated as a\n// frustration signal (the click likely triggered the error).\nconst ERROR_CLICK_WINDOW_MS = 1_000\n\nlet bound = false\nlet onError: ((event: ErrorEvent) => void) | null = null\nlet onRejection: ((event: PromiseRejectionEvent) => void) | null = null\n\n/** Emit an error_click frustration event if a recent click preceded this error. */\nfunction maybeEmitErrorClick(): void {\n const last = getLastClick()\n if (!last) return\n const now =\n typeof performance !== 'undefined' && performance.now ? performance.now() : Date.now()\n if (now - last.ts < ERROR_CLICK_WINDOW_MS) {\n pushEvent({\n event_type: 'frustration',\n interaction_type: 'error_click',\n interaction_target: last.target,\n })\n }\n}\n\nexport function initErrors(): void {\n if (bound) return // single set of error listeners per init\n bound = true\n\n onError = (event: ErrorEvent): void => {\n maybeEmitErrorClick()\n pushEvent({\n event_type: 'error',\n error_message: event.message || 'Unknown error',\n error_stack: event.error?.stack ?? '',\n error_type: event.error?.name ?? 'Error',\n })\n }\n\n onRejection = (event: PromiseRejectionEvent): void => {\n const reason = event.reason\n let message = 'Unhandled promise rejection'\n let stack = ''\n let errorType = 'UnhandledRejection'\n\n if (reason instanceof Error) {\n message = reason.message\n stack = reason.stack ?? ''\n errorType = reason.name\n } else if (typeof reason === 'string') {\n message = reason\n }\n\n pushEvent({\n event_type: 'error',\n error_message: message,\n error_stack: stack,\n error_type: errorType,\n })\n }\n\n window.addEventListener('error', onError)\n window.addEventListener('unhandledrejection', onRejection)\n}\n\n/** Detach the error/rejection listeners. */\nexport function destroyErrors(): void {\n if (onError) {\n window.removeEventListener('error', onError)\n onError = null\n }\n if (onRejection) {\n window.removeEventListener('unhandledrejection', onRejection)\n onRejection = null\n }\n bound = false\n}\n","import { pushEvent } from './core'\n\nlet patched = false\n\nexport function initPageViews(): void {\n // Track initial page load\n trackPageView()\n\n if (patched) return // don't re-wrap history on a repeat init\n patched = true\n\n // SPA navigation: history.pushState / replaceState\n const origPush = history.pushState.bind(history)\n const origReplace = history.replaceState.bind(history)\n\n history.pushState = function (...args: Parameters<typeof origPush>) {\n origPush(...args)\n trackPageView()\n }\n\n history.replaceState = function (...args: Parameters<typeof origReplace>) {\n origReplace(...args)\n trackPageView()\n }\n\n // Back/forward navigation\n window.addEventListener('popstate', () => {\n trackPageView()\n })\n}\n\nfunction generateTraceId(): string {\n const bytes = new Uint8Array(16)\n crypto.getRandomValues(bytes)\n return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('')\n}\n\nfunction generateSpanId(): string {\n const bytes = new Uint8Array(8)\n crypto.getRandomValues(bytes)\n return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('')\n}\n\nfunction trackPageView(): void {\n const traceId = generateTraceId()\n const spanId = generateSpanId()\n\n pushEvent({\n event_type: 'pageview',\n event_name: document.title,\n duration_ms: getNavigationLoadTime(),\n trace_id: traceId,\n span_id: spanId,\n })\n}\n\nfunction getNavigationLoadTime(): number {\n if (typeof performance === 'undefined') return 0\n const entries = performance.getEntriesByType('navigation') as PerformanceNavigationTiming[]\n if (entries.length > 0) {\n return entries[0].loadEventEnd - entries[0].startTime\n }\n return 0\n}\n","import { pushEvent, getConfig } from './core'\nimport { recordClick } from './frustration'\n\nconst INTERACTIVE_SELECTORS = 'button, a, [role=\"button\"], input[type=\"submit\"], input[type=\"button\"]'\n\n// Rage click: >3 clicks on the SAME element within this sliding window.\nconst RAGE_WINDOW_MS = 1_000\nconst RAGE_THRESHOLD = 3\n// Dead click: a click on an interactive element that causes no page change\n// within this window (no DOM mutation, URL change, or scroll).\nconst DEAD_WINDOW_MS = 3_000\n\nlet bound = false\nlet clickListener: ((event: MouseEvent) => void) | null = null\n\n// Rage-click sliding window per element.\nlet rageTarget: Element | null = null\nlet rageTimes: number[] = []\n\n// Active dead-click watchers we may need to clean up on destroy().\ninterface DeadWatcher {\n observer: MutationObserver\n timer: ReturnType<typeof setTimeout>\n onScroll: () => void\n}\nlet deadWatchers: DeadWatcher[] = []\n\n/** Build the same target descriptor used for click interaction events. */\nfunction describeTarget(el: Element): string {\n const tag = el.tagName.toLowerCase()\n const id = el.id ? `#${el.id}` : ''\n const classes = el.className\n ? `.${Array.from(el.classList).slice(0, 3).join('.')}`\n : ''\n // Element text can carry PII (names, amounts) — omit it when masked.\n const text = getConfig()?.maskInteractionText\n ? ''\n : (el.textContent ?? '').trim().slice(0, 100)\n return `${tag}${id}${classes}${text ? ` \"${text}\"` : ''}`\n}\n\n/** Detect a rage click; emits one frustration event when the threshold trips. */\nfunction detectRageClick(el: Element, target: string): void {\n const now = Date.now()\n if (rageTarget !== el) {\n rageTarget = el\n rageTimes = []\n }\n rageTimes.push(now)\n // Keep only clicks within the sliding window.\n rageTimes = rageTimes.filter((t) => now - t <= RAGE_WINDOW_MS)\n if (rageTimes.length > RAGE_THRESHOLD) {\n pushEvent({\n event_type: 'frustration',\n interaction_type: 'rage_click',\n interaction_target: target,\n })\n // Reset so we emit at most once per burst.\n rageTimes = []\n rageTarget = null\n }\n}\n\n/**\n * Detect a dead click: watch for ANY DOM mutation, URL change, or scroll within\n * a short window after the click. If none happens, the click did nothing →\n * emit a dead_click frustration event. Conservative on purpose to avoid false\n * positives. The MutationObserver is one-shot and always disconnected.\n */\nfunction detectDeadClick(target: string): void {\n let changed = false\n const startUrl = location.href\n\n const observer = new MutationObserver(() => {\n changed = true\n })\n try {\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true,\n })\n } catch {\n return\n }\n\n const onScroll = () => {\n changed = true\n }\n window.addEventListener('scroll', onScroll, { passive: true, capture: true })\n\n const timer = setTimeout(() => {\n cleanup()\n const navigated = location.href !== startUrl\n if (!changed && !navigated) {\n pushEvent({\n event_type: 'frustration',\n interaction_type: 'dead_click',\n interaction_target: target,\n })\n }\n }, DEAD_WINDOW_MS)\n\n const watcher: DeadWatcher = { observer, timer, onScroll }\n deadWatchers.push(watcher)\n\n function cleanup(): void {\n observer.disconnect()\n clearTimeout(timer)\n window.removeEventListener('scroll', onScroll, { capture: true } as EventListenerOptions)\n deadWatchers = deadWatchers.filter((w) => w !== watcher)\n }\n}\n\nexport function initInteractions(): void {\n if (bound) return // single global click listener\n bound = true\n\n clickListener = (event: MouseEvent): void => {\n const target = event.target as Element | null\n if (!target) return\n\n const interactive = target.closest(INTERACTIVE_SELECTORS)\n if (!interactive) return\n\n const descriptor = describeTarget(interactive)\n\n // Record for the error-click signal (errors.ts reads this).\n recordClick(descriptor)\n\n pushEvent({\n event_type: 'interaction',\n interaction_type: 'click',\n interaction_target: descriptor,\n })\n\n detectRageClick(interactive, descriptor)\n detectDeadClick(descriptor)\n }\n\n document.addEventListener('click', clickListener, { capture: true, passive: true })\n}\n\n/** Detach the click listener and tear down any in-flight dead-click watchers. */\nexport function destroyInteractions(): void {\n if (clickListener) {\n document.removeEventListener('click', clickListener, { capture: true } as EventListenerOptions)\n clickListener = null\n }\n for (const w of deadWatchers) {\n w.observer.disconnect()\n clearTimeout(w.timer)\n window.removeEventListener('scroll', w.onScroll, { capture: true } as EventListenerOptions)\n }\n deadWatchers = []\n rageTarget = null\n rageTimes = []\n bound = false\n}\n","import { pushEvent, getConfig, sanitizeUrl } from './core'\n\nlet patched = false\n\nexport function initResources(): void {\n if (patched) return // never double-wrap fetch/XHR\n patched = true\n patchFetch()\n patchXHR()\n}\n\nfunction shouldTraceOrigin(url: string): boolean {\n const cfg = getConfig()\n if (!cfg?.propagateTraces?.origins) return false\n return cfg.propagateTraces.origins.some((re) => re.test(url))\n}\n\nfunction generateTraceId(): string {\n const bytes = new Uint8Array(16)\n crypto.getRandomValues(bytes)\n return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('')\n}\n\nfunction generateSpanId(): string {\n const bytes = new Uint8Array(8)\n crypto.getRandomValues(bytes)\n return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('')\n}\n\nfunction patchFetch(): void {\n const origFetch = window.fetch.bind(window)\n\n window.fetch = async function (input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url\n const start = performance.now()\n\n let traceId = ''\n let spanId = ''\n\n if (shouldTraceOrigin(url)) {\n traceId = generateTraceId()\n spanId = generateSpanId()\n const headers = new Headers(init?.headers)\n headers.set('traceparent', `00-${traceId}-${spanId}-01`)\n init = { ...init, headers }\n }\n\n try {\n const response = await origFetch(input, init)\n const durationMs = performance.now() - start\n\n pushEvent({\n event_type: 'resource',\n event_name: sanitizeUrl(url),\n duration_ms: durationMs,\n trace_id: traceId,\n span_id: spanId,\n attributes: JSON.stringify({ status: response.status, method: init?.method ?? 'GET' }),\n })\n\n return response\n } catch (err) {\n const durationMs = performance.now() - start\n pushEvent({\n event_type: 'resource',\n event_name: sanitizeUrl(url),\n duration_ms: durationMs,\n trace_id: traceId,\n span_id: spanId,\n error_message: err instanceof Error ? err.message : 'fetch failed',\n error_type: 'NetworkError',\n })\n throw err\n }\n }\n}\n\nfunction patchXHR(): void {\n const origOpen = XMLHttpRequest.prototype.open\n const origSend = XMLHttpRequest.prototype.send\n\n XMLHttpRequest.prototype.open = function (method: string, url: string | URL, ...rest: any[]) {\n (this as any).__wide_url = typeof url === 'string' ? url : url.href;\n (this as any).__wide_method = method\n return origOpen.apply(this, [method, url, ...rest] as any)\n }\n\n XMLHttpRequest.prototype.send = function (body?: any) {\n const url: string = (this as any).__wide_url ?? ''\n const method: string = (this as any).__wide_method ?? 'GET'\n const start = performance.now()\n\n let traceId = ''\n let spanId = ''\n if (shouldTraceOrigin(url)) {\n traceId = generateTraceId()\n spanId = generateSpanId()\n this.setRequestHeader('traceparent', `00-${traceId}-${spanId}-01`)\n }\n\n this.addEventListener('loadend', () => {\n const durationMs = performance.now() - start\n pushEvent({\n event_type: 'resource',\n event_name: sanitizeUrl(url),\n duration_ms: durationMs,\n trace_id: traceId,\n span_id: spanId,\n attributes: JSON.stringify({ status: this.status, method }),\n })\n })\n\n return origSend.call(this, body)\n }\n}\n","/**\n * Long task + Long Animation Frame (LoAF) instrumentation via PerformanceObserver.\n * Lightweight and low-volume, so it's enabled by default. Both observers are\n * disconnected by destroy().\n */\nimport { pushEvent } from './core'\n\nlet started = false\nlet longTaskObserver: PerformanceObserver | null = null\nlet loafObserver: PerformanceObserver | null = null\n\nfunction supports(type: string): boolean {\n return (\n typeof PerformanceObserver !== 'undefined' &&\n Array.isArray(PerformanceObserver.supportedEntryTypes) &&\n PerformanceObserver.supportedEntryTypes.includes(type)\n )\n}\n\nexport function initPerformance(): void {\n if (started) return // single set of observers per init\n if (typeof PerformanceObserver === 'undefined') return\n started = true\n\n if (supports('longtask')) {\n try {\n longTaskObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n pushEvent({\n event_type: 'long_task',\n duration_ms: entry.duration,\n attributes: JSON.stringify({ start: entry.startTime, name: entry.name }),\n })\n }\n })\n longTaskObserver.observe({ type: 'longtask', buffered: true })\n } catch {\n longTaskObserver = null\n }\n }\n\n if (supports('long-animation-frame')) {\n try {\n loafObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // LoAF entries carry blockingDuration + a scripts[] array; types aren't\n // in lib.dom yet, so read them defensively.\n const e = entry as PerformanceEntry & {\n blockingDuration?: number\n scripts?: unknown[]\n }\n pushEvent({\n event_type: 'loaf',\n duration_ms: e.duration,\n attributes: JSON.stringify({\n start: e.startTime,\n blockingDuration: e.blockingDuration ?? 0,\n scripts: (e.scripts || []).length,\n }),\n })\n }\n })\n loafObserver.observe({ type: 'long-animation-frame', buffered: true })\n } catch {\n loafObserver = null\n }\n }\n}\n\nexport function destroyPerformance(): void {\n if (longTaskObserver) {\n longTaskObserver.disconnect()\n longTaskObserver = null\n }\n if (loafObserver) {\n loafObserver.disconnect()\n loafObserver = null\n }\n started = false\n}\n","import type { RushRUMConfig } from './types'\nimport {\n configure,\n flush,\n pushEvent,\n destroy as destroyCore,\n isInitialized,\n setUserOverride,\n setGlobalAttrs,\n clearGlobalAttrs,\n} from './core'\nimport { initVitals } from './vitals'\nimport { initErrors, destroyErrors } from './errors'\nimport { initPageViews } from './pageview'\nimport { initInteractions, destroyInteractions } from './interactions'\nimport { initResources } from './resources'\nimport { initPerformance, destroyPerformance } from './perf'\n\n/**\n * Optional session-replay module, injected by the build entry. The full npm\n * build (index.ts) passes the rrweb-backed replay module; the lean CDN build\n * (global.ts) passes nothing — so replay.ts (and therefore rrweb) is never part\n * of that bundle's import graph, keeping the CDN file small.\n */\nexport interface ReplayModule {\n init: (config: RushRUMConfig) => void\n destroy: () => void\n}\n\n/**\n * Build the RushRUM API object. Replay is injected (or omitted) so the same\n * core can ship as a full npm package or a lean replay-less CDN bundle.\n */\nexport function makeRushRUM(replay?: ReplayModule) {\n return {\n init(config: RushRUMConfig): void {\n // No-op outside the browser (SSR / Node) so importing + init in a universal\n // app (Next.js, etc.) doesn't throw on window/navigator/history access.\n if (typeof window === 'undefined') return\n // Guard against double init() — prevents duplicate subscriptions/timers.\n if (isInitialized()) {\n console.warn('[RushRUM] init() called more than once; ignoring.')\n return\n }\n\n configure(config)\n\n if (config.trackWebVitals !== false) initVitals()\n if (config.trackErrors !== false) initErrors()\n if (config.trackPageViews !== false) initPageViews()\n if (config.trackLongTasks !== false) initPerformance()\n if (config.trackInteractions === true) initInteractions()\n if (config.trackResources === true) initResources()\n if (config.trackSessionReplay === true) {\n if (replay) {\n replay.init(config)\n } else {\n console.warn('[RushRUM] session replay is not available in this build; use the npm package (@rushobservability/rum-sdk).')\n }\n }\n },\n\n /** Send a custom event. */\n trackEvent(name: string, attributes?: Record<string, unknown>): void {\n pushEvent({\n event_type: 'custom',\n event_name: name,\n attributes: attributes ? JSON.stringify(attributes) : undefined,\n })\n },\n\n /**\n * Set or override the current user id; reflected in meta.user_id on\n * subsequent events. Overrides the config.user callback. Pass null to clear.\n */\n setUser(user: { id?: string } | null): void {\n setUserOverride(user)\n },\n\n /**\n * Merge attributes into every subsequent event's `attributes` JSON.\n * Event-specific keys win over global ones.\n */\n setGlobalAttributes(attrs: Record<string, unknown>): void {\n setGlobalAttrs(attrs)\n },\n\n /** Clear all global attributes set via setGlobalAttributes. */\n clearGlobalAttributes(): void {\n clearGlobalAttrs()\n },\n\n /** Force flush the event queue. */\n flush,\n\n /**\n * Stop collecting and detach handlers/timers. Safe to call before a later\n * init() (tests, SPA hot-reload). Tears down every instrumentation.\n */\n destroy(): void {\n // Tear down instrumentation first (they call pushEvent → core), then core.\n destroyPerformance()\n destroyInteractions()\n destroyErrors()\n if (replay) replay.destroy()\n destroyCore()\n },\n }\n}\n","// CDN / <script> entry point — LEAN core (no session replay).\n//\n// Built into the IIFE `dist/rush-rum.global.js` with `globalName: 'RushRUM'`.\n// It uses makeRushRUM() WITHOUT the replay module, so replay.ts (and therefore\n// rrweb, ~200KB) is never in this bundle's import graph — keeping the CDN file\n// small. Calling init({ trackSessionReplay: true }) here logs a warning; session\n// replay requires the npm/ESM package (@rushobservability/rum-sdk).\n//\n// A default-only export keeps the global the RushRUM object itself\n// (`RushRUM.init(...)`), not `{ RushRUM, default }`.\nimport { makeRushRUM } from './bootstrap'\n\nexport default makeRushRUM()\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rushobservability/rum-sdk",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Rush RUM (Real User Monitoring) browser SDK",
5
5
  "type": "module",
6
6
  "repository": {
@@ -14,25 +14,35 @@
14
14
  "main": "dist/index.js",
15
15
  "module": "dist/index.js",
16
16
  "types": "dist/index.d.ts",
17
+ "unpkg": "dist/rush-rum.global.js",
18
+ "jsdelivr": "dist/rush-rum.global.js",
17
19
  "exports": {
18
20
  ".": {
19
21
  "import": "./dist/index.js",
20
22
  "types": "./dist/index.d.ts"
21
23
  }
22
24
  },
25
+ "sideEffects": false,
23
26
  "files": [
24
27
  "dist"
25
28
  ],
26
29
  "scripts": {
27
- "build": "tsc",
28
- "typecheck": "tsc --noEmit"
30
+ "build": "tsup",
31
+ "typecheck": "tsc --noEmit",
32
+ "test": "vitest run",
33
+ "test:watch": "vitest"
29
34
  },
30
35
  "dependencies": {
31
- "rrweb": "^2.0.0-alpha.20",
32
36
  "web-vitals": "^4.2.0"
33
37
  },
38
+ "optionalDependencies": {
39
+ "rrweb": "^2.0.0-alpha.20"
40
+ },
34
41
  "devDependencies": {
35
- "typescript": "^5.5.0"
42
+ "happy-dom": "^15.0.0",
43
+ "tsup": "^8.0.0",
44
+ "typescript": "^5.5.0",
45
+ "vitest": "^2.0.0"
36
46
  },
37
47
  "license": "MIT"
38
48
  }
package/dist/browser.d.ts DELETED
@@ -1,11 +0,0 @@
1
- export interface BrowserInfo {
2
- browserName: string;
3
- browserVersion: string;
4
- osName: string;
5
- osVersion: string;
6
- deviceType: 'desktop' | 'mobile' | 'tablet';
7
- screenWidth: number;
8
- screenHeight: number;
9
- }
10
- export declare function detectBrowser(): BrowserInfo;
11
- //# sourceMappingURL=browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC3C,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,aAAa,IAAI,WAAW,CA0D3C"}
package/dist/browser.js DELETED
@@ -1,63 +0,0 @@
1
- export function detectBrowser() {
2
- const ua = navigator.userAgent;
3
- let browserName = 'Unknown';
4
- let browserVersion = '';
5
- if (ua.includes('Firefox/')) {
6
- browserName = 'Firefox';
7
- browserVersion = ua.split('Firefox/')[1]?.split(' ')[0] ?? '';
8
- }
9
- else if (ua.includes('Edg/')) {
10
- browserName = 'Edge';
11
- browserVersion = ua.split('Edg/')[1]?.split(' ')[0] ?? '';
12
- }
13
- else if (ua.includes('Chrome/')) {
14
- browserName = 'Chrome';
15
- browserVersion = ua.split('Chrome/')[1]?.split(' ')[0] ?? '';
16
- }
17
- else if (ua.includes('Safari/') && !ua.includes('Chrome')) {
18
- browserName = 'Safari';
19
- browserVersion = ua.split('Version/')[1]?.split(' ')[0] ?? '';
20
- }
21
- let osName = 'Unknown';
22
- let osVersion = '';
23
- if (ua.includes('Windows')) {
24
- osName = 'Windows';
25
- const m = ua.match(/Windows NT (\d+\.\d+)/);
26
- osVersion = m?.[1] ?? '';
27
- }
28
- else if (ua.includes('Mac OS X')) {
29
- osName = 'macOS';
30
- const m = ua.match(/Mac OS X (\d+[._]\d+[._]?\d*)/);
31
- osVersion = m?.[1]?.replace(/_/g, '.') ?? '';
32
- }
33
- else if (ua.includes('Linux')) {
34
- osName = 'Linux';
35
- }
36
- else if (ua.includes('Android')) {
37
- osName = 'Android';
38
- const m = ua.match(/Android (\d+(\.\d+)?)/);
39
- osVersion = m?.[1] ?? '';
40
- }
41
- else if (/iPhone|iPad|iPod/.test(ua)) {
42
- osName = 'iOS';
43
- const m = ua.match(/OS (\d+_\d+)/);
44
- osVersion = m?.[1]?.replace('_', '.') ?? '';
45
- }
46
- let deviceType = 'desktop';
47
- if (/Mobi|Android.*Mobile/.test(ua)) {
48
- deviceType = 'mobile';
49
- }
50
- else if (/iPad|Android(?!.*Mobile)|Tablet/.test(ua)) {
51
- deviceType = 'tablet';
52
- }
53
- return {
54
- browserName,
55
- browserVersion,
56
- osName,
57
- osVersion,
58
- deviceType,
59
- screenWidth: window.screen.width,
60
- screenHeight: window.screen.height,
61
- };
62
- }
63
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/core.d.ts DELETED
@@ -1,16 +0,0 @@
1
- import type { RumEvent, RushRUMConfig } from './types';
2
- export declare function configure(cfg: RushRUMConfig): void;
3
- export declare function getConfig(): RushRUMConfig | null;
4
- export declare function isInitialized(): boolean;
5
- /** Strip query string + hash from a URL unless the caller opted in via config. */
6
- export declare function sanitizeUrl(url: string): string;
7
- export declare function pushEvent(event: RumEvent): void;
8
- export declare function flush(): void;
9
- /**
10
- * Stop collecting: flush the queue, clear the timer, and detach the unload
11
- * handlers. The fetch/XHR/history/click patches installed by the trackers stay
12
- * in place but become inert (pushEvent no-ops once config is null), so calling
13
- * init() again later is safe. Mainly for tests and SPA hot-reload.
14
- */
15
- export declare function destroy(): void;
16
- //# sourceMappingURL=core.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAuB,aAAa,EAAE,MAAM,SAAS,CAAA;AAkB3E,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAWlD;AAED,wBAAgB,SAAS,IAAI,aAAa,GAAG,IAAI,CAEhD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAeD,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAK/C;AAiCD,wBAAgB,KAAK,IAAI,IAAI,CAgB5B;AAyCD;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAiB9B"}
package/dist/core.js DELETED
@@ -1,178 +0,0 @@
1
- import { getSessionId, isSessionSampled } from './session';
2
- import { detectBrowser } from './browser';
3
- const MAX_BATCH = 30;
4
- const FLUSH_INTERVAL_MS = 250;
5
- let config = null;
6
- let queue = [];
7
- let flushTimer = null;
8
- let browserInfo = null;
9
- let sampledIn = true;
10
- let initialized = false;
11
- // Listener refs kept so destroy() can detach them.
12
- let onVisibility = null;
13
- let onPageHide = null;
14
- export function configure(cfg) {
15
- // Idempotent: a second init() is a no-op, so we never start duplicate timers,
16
- // handlers, or (via the trackers) double-wrap fetch/XHR/history.
17
- if (initialized)
18
- return;
19
- config = cfg;
20
- browserInfo = detectBrowser();
21
- // Sampling is decided ONCE per session and applied to every event.
22
- sampledIn = isSessionSampled(cfg.sampleRate ?? 1);
23
- initialized = true;
24
- startFlushTimer();
25
- setupBeaconFlush();
26
- }
27
- export function getConfig() {
28
- return config;
29
- }
30
- export function isInitialized() {
31
- return initialized;
32
- }
33
- /** Strip query string + hash from a URL unless the caller opted in via config. */
34
- export function sanitizeUrl(url) {
35
- if (config?.captureQueryParams)
36
- return url;
37
- let end = url.length;
38
- const q = url.indexOf('?');
39
- const h = url.indexOf('#');
40
- if (q !== -1)
41
- end = Math.min(end, q);
42
- if (h !== -1)
43
- end = Math.min(end, h);
44
- return url.slice(0, end);
45
- }
46
- /**
47
- * High-resolution wall-clock time in nanoseconds (backend stores i64 ns).
48
- * timeOrigin + now() captures sub-millisecond ordering; the float quantizes at
49
- * ~256ns at this magnitude, which is far finer than RUM needs.
50
- */
51
- function nowNs() {
52
- const ms = typeof performance !== 'undefined' && performance.timeOrigin
53
- ? performance.timeOrigin + performance.now()
54
- : Date.now();
55
- return Math.round(ms * 1000000);
56
- }
57
- export function pushEvent(event) {
58
- if (!config || !sampledIn)
59
- return;
60
- event.timestamp = event.timestamp ?? nowNs();
61
- queue.push(event);
62
- if (queue.length >= MAX_BATCH)
63
- flush();
64
- }
65
- function buildMeta() {
66
- const cfg = config;
67
- const bi = browserInfo;
68
- let userId = '';
69
- try {
70
- const u = cfg.user?.();
71
- userId = u?.id ?? '';
72
- }
73
- catch {
74
- /* ignore */
75
- }
76
- return {
77
- app_name: cfg.app.name,
78
- app_version: cfg.app.version ?? '',
79
- environment: cfg.environment ?? '',
80
- session_id: getSessionId(),
81
- user_id: userId,
82
- page_url: sanitizeUrl(location.href),
83
- page_path: location.pathname,
84
- view_name: document.title,
85
- referrer: sanitizeUrl(document.referrer),
86
- browser_name: bi.browserName,
87
- browser_version: bi.browserVersion,
88
- os_name: bi.osName,
89
- os_version: bi.osVersion,
90
- device_type: bi.deviceType,
91
- screen_width: bi.screenWidth,
92
- screen_height: bi.screenHeight,
93
- };
94
- }
95
- export function flush() {
96
- if (!config || queue.length === 0)
97
- return;
98
- // Drain in batches so a burst doesn't leave a remainder waiting for the timer.
99
- while (queue.length > 0) {
100
- const events = queue.splice(0, MAX_BATCH);
101
- const payload = { meta: buildMeta(), events };
102
- const body = JSON.stringify(payload);
103
- fetch(config.endpoint, {
104
- method: 'POST',
105
- headers: { 'Content-Type': 'application/json' },
106
- body,
107
- keepalive: true,
108
- }).catch(() => {
109
- // Silently drop — RUM data is best-effort.
110
- });
111
- }
112
- }
113
- function startFlushTimer() {
114
- if (flushTimer)
115
- return;
116
- flushTimer = setInterval(() => {
117
- if (queue.length > 0)
118
- flush();
119
- }, FLUSH_INTERVAL_MS);
120
- }
121
- function setupBeaconFlush() {
122
- if (typeof document === 'undefined')
123
- return;
124
- const beaconFlush = () => {
125
- if (!config || queue.length === 0)
126
- return;
127
- const events = queue.splice(0);
128
- const payload = { meta: buildMeta(), events };
129
- const body = JSON.stringify(payload);
130
- if (navigator.sendBeacon) {
131
- navigator.sendBeacon(config.endpoint, body);
132
- }
133
- else {
134
- // Sync XHR as last resort (not recommended but works for unload).
135
- try {
136
- const xhr = new XMLHttpRequest();
137
- xhr.open('POST', config.endpoint, false);
138
- xhr.setRequestHeader('Content-Type', 'application/json');
139
- xhr.send(body);
140
- }
141
- catch {
142
- /* ignore */
143
- }
144
- }
145
- };
146
- onVisibility = () => {
147
- if (document.visibilityState === 'hidden')
148
- beaconFlush();
149
- };
150
- onPageHide = beaconFlush;
151
- document.addEventListener('visibilitychange', onVisibility);
152
- window.addEventListener('pagehide', onPageHide);
153
- }
154
- /**
155
- * Stop collecting: flush the queue, clear the timer, and detach the unload
156
- * handlers. The fetch/XHR/history/click patches installed by the trackers stay
157
- * in place but become inert (pushEvent no-ops once config is null), so calling
158
- * init() again later is safe. Mainly for tests and SPA hot-reload.
159
- */
160
- export function destroy() {
161
- flush();
162
- if (flushTimer) {
163
- clearInterval(flushTimer);
164
- flushTimer = null;
165
- }
166
- if (typeof document !== 'undefined' && onVisibility) {
167
- document.removeEventListener('visibilitychange', onVisibility);
168
- }
169
- if (typeof window !== 'undefined' && onPageHide) {
170
- window.removeEventListener('pagehide', onPageHide);
171
- }
172
- onVisibility = null;
173
- onPageHide = null;
174
- queue = [];
175
- config = null;
176
- initialized = false;
177
- }
178
- //# sourceMappingURL=core.js.map
package/dist/core.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare function initErrors(): void;
2
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,IAAI,IAAI,CA+BjC"}
package/dist/errors.js DELETED
@@ -1,32 +0,0 @@
1
- import { pushEvent } from './core';
2
- export function initErrors() {
3
- window.addEventListener('error', (event) => {
4
- pushEvent({
5
- event_type: 'error',
6
- error_message: event.message || 'Unknown error',
7
- error_stack: event.error?.stack ?? '',
8
- error_type: event.error?.name ?? 'Error',
9
- });
10
- });
11
- window.addEventListener('unhandledrejection', (event) => {
12
- const reason = event.reason;
13
- let message = 'Unhandled promise rejection';
14
- let stack = '';
15
- let errorType = 'UnhandledRejection';
16
- if (reason instanceof Error) {
17
- message = reason.message;
18
- stack = reason.stack ?? '';
19
- errorType = reason.name;
20
- }
21
- else if (typeof reason === 'string') {
22
- message = reason;
23
- }
24
- pushEvent({
25
- event_type: 'error',
26
- error_message: message,
27
- error_stack: stack,
28
- error_type: errorType,
29
- });
30
- });
31
- }
32
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE;QACrD,SAAS,CAAC;YACR,UAAU,EAAE,OAAO;YACnB,aAAa,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;YAC/C,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YACrC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO;SACzC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,KAA4B,EAAE,EAAE;QAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC3B,IAAI,OAAO,GAAG,6BAA6B,CAAA;QAC3C,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,IAAI,SAAS,GAAG,oBAAoB,CAAA;QAEpC,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;YAC5B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;YACxB,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;YAC1B,SAAS,GAAG,MAAM,CAAC,IAAI,CAAA;QACzB,CAAC;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,GAAG,MAAM,CAAA;QAClB,CAAC;QAED,SAAS,CAAC;YACR,UAAU,EAAE,OAAO;YACnB,aAAa,EAAE,OAAO;YACtB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAa,KAAK,EAAa,OAAO,EAAiB,MAAM,QAAQ,CAAA;AAQ5E,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAElE,eAAO,MAAM,OAAO;iBACL,aAAa,GAAG,IAAI;IAiCjC;;OAEG;qBACc,MAAM,eAAe,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQpE;;OAEG;;IAGH;;;OAGG;;CAEJ,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare function initInteractions(): void;
2
- //# sourceMappingURL=interactions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,IAAI,IAAI,CA2BvC"}