@dash0/sdk-web 0.23.0 → 0.24.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.
- package/dist/dash0.iife.js +1 -1
- package/dist/dash0.iife.js.map +1 -1
- package/dist/dash0.js +1 -1
- package/dist/dash0.js.map +1 -1
- package/dist/dash0.umd.cjs +1 -1
- package/dist/dash0.umd.cjs.map +1 -1
- package/dist/modules/api/start-view.js +47 -0
- package/dist/modules/api/start-view_test.js +91 -0
- package/dist/modules/entrypoint/npm-package.js +1 -0
- package/dist/modules/entrypoint/npm-package_test.js +7 -0
- package/dist/modules/entrypoint/script.js +2 -0
- package/dist/modules/instrumentations/navigation/event.js +42 -10
- package/dist/modules/instrumentations/navigation/event_test.js +128 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/api/start-view.d.ts +33 -0
- package/dist/types/api/start-view_test.d.ts +1 -0
- package/dist/types/entrypoint/npm-package.d.ts +2 -0
- package/dist/types/entrypoint/npm-package_test.d.ts +1 -0
- package/dist/types/instrumentations/navigation/event.d.ts +18 -0
- package/dist/types/instrumentations/navigation/event_test.d.ts +1 -0
- package/package.json +2 -2
- package/src/api/start-view.ts +68 -0
- package/src/api/start-view_test.ts +125 -0
- package/src/entrypoint/npm-package.ts +2 -0
- package/src/entrypoint/npm-package_test.ts +8 -0
- package/src/entrypoint/script.ts +2 -0
- package/src/instrumentations/navigation/event.ts +63 -15
- package/src/instrumentations/navigation/event_test.ts +171 -0
package/dist/dash0.iife.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dash0.iife.js","sources":["modules/utils/fn.js","modules/utils/debug.js","modules/utils/obj.js","modules/utils/globals.js","modules/utils/id.js","modules/utils/listeners.js","modules/utils/local-storage.js","modules/utils/time.js","modules/utils/timers.js","modules/utils/performance.js","modules/utils/constants.js","modules/utils/math.js","modules/utils/url.js","modules/utils/origin.js","modules/utils/sanitize.js","modules/utils/wrap.js","modules/utils/crc32.js","modules/vars.js","modules/utils/ignore-rules.js","modules/utils/on-last-chance.js","modules/transport/batcher.js","modules/transport/fetch.js","modules/transport/index.js","modules/utils/rate-limit.js","modules/semantic-conventions.js","modules/utils/otel/attributes.js","modules/utils/otel/trace-context.js","modules/utils/session-id.js","modules/api/session.js","modules/utils/trace-id.js","modules/utils/otel/span.js","modules/utils/span-id.js","modules/utils/otel/error.js","modules/attributes/url.js","modules/utils/session-storage.js","modules/utils/tab-id.js","modules/attributes/common.js","modules/instrumentations/errors/unhandled-error.js","../node_modules/.pnpm/web-vitals@5.0.3/node_modules/web-vitals/dist/web-vitals.js","modules/instrumentations/web-vitals.js","modules/instrumentations/errors/unhandled-promise-rejection.js","modules/instrumentations/errors/async-function-wrapping.js","modules/instrumentations/errors/event-handlers.js","modules/instrumentations/errors/timers.js","modules/instrumentations/errors/index.js","modules/utils/otel/http.js","modules/instrumentations/http/utils.js","modules/instrumentations/http/fetch.js","modules/instrumentations/http/xhr.js","modules/instrumentations/navigation/event.js","modules/instrumentations/navigation/page-load.js","modules/instrumentations/navigation/page-transition.js","modules/instrumentations/navigation/index.js","modules/api/browser-env.js","modules/api/vcs.js","modules/api/init.js","modules/entrypoint/script.js","modules/utils/pick.js","modules/utils/session-sampling.js","modules/api/debug.js","modules/api/identify.js","modules/api/report-error.js","modules/api/attributes.js","modules/api/events.js"],"sourcesContent":["export function noop() {\n // This function is intentionally empty.\n}\nexport function identity(a) {\n return a;\n}\n","import { noop } from \"./fn\";\nconst logLevels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\nlet activeLogLevel = logLevels.warn;\n/**\n * Changes the logging verbosity of Dash0's web SDK. By default, only warnings and errors are logged.\n */\nexport function setActiveLogLevel(level) {\n activeLogLevel = logLevels[level] ?? logLevels.warn;\n}\nexport const info = createLogger(\"info\");\nexport const warn = createLogger(\"warn\");\nexport const error = createLogger(\"error\");\nexport const debug = createLogger(\"debug\");\nfunction createLogger(logLevel) {\n if (typeof console !== \"undefined\" && console[logLevel] && typeof console[logLevel].apply === \"function\") {\n const numericLogLevel = logLevels[logLevel];\n return function () {\n if (numericLogLevel >= activeLogLevel) {\n console[logLevel].apply(console, arguments);\n }\n };\n }\n return noop;\n}\n","const globalHasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * protection against hasOwnProperty overrides.\n */\nexport function hasOwnProperty(obj, key) {\n return globalHasOwnProperty.call(obj, key);\n}\nexport function hasKey(obj, key) {\n return key in obj;\n}\n","// aliasing globals for improved minification\n// Avoid blowing up in an ssr context. It is important to check via typeof here because window might not even be declared when imported in ssr.\nexport const win = typeof window !== \"undefined\" ? window : undefined;\nexport const doc = win?.document;\nexport const nav = win?.navigator;\nexport const loc = typeof location !== \"undefined\" ? location : undefined;\nexport const perf = win?.performance || win?.webkitPerformance || win?.msPerformance || win?.mozPerformance;\nexport const encodeURIComponent = win?.encodeURIComponent;\nexport const fetch = win?.fetch;\nexport const localStorage = (function () {\n try {\n return win?.localStorage ?? null;\n }\n catch {\n // localStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\nexport const sessionStorage = (function () {\n try {\n return win?.sessionStorage ?? null;\n }\n catch {\n // sessionStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\n/**\n * Exposed via this module to enable testing.\n */\nexport function sendBeacon(url, data) {\n return nav?.sendBeacon(url, data) ?? false;\n}\n/* eslint-enable no-restricted-globals */\n","export const SPAN_ID_BYTES = 8;\nexport const TRACE_ID_BYTES = 16;\nexport const PAGE_LOAD_ID_BYTES = TRACE_ID_BYTES;\nexport const SESSION_ID_BYTES = SPAN_ID_BYTES;\nexport const TAB_ID_BYTES = SPAN_ID_BYTES;\nexport const WEB_EVENT_ID_BYTES = SPAN_ID_BYTES;\nconst SHARED_CHAR_CODES_ARRAY = Array(32);\nexport function generateUniqueId(byteCount) {\n for (let i = 0; i < byteCount * 2; i++) {\n SHARED_CHAR_CODES_ARRAY[i] = Math.floor(Math.random() * 16) + 48;\n // valid hex characters in the range 48-57 and 97-102\n if (SHARED_CHAR_CODES_ARRAY[i] >= 58) {\n SHARED_CHAR_CODES_ARRAY[i] += 39;\n }\n }\n return String.fromCharCode.apply(null, SHARED_CHAR_CODES_ARRAY.slice(0, byteCount * 2));\n}\n","// aliasing the global function for improved minification and\n// protection against hasOwnProperty overrides.\nexport function addEventListener(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n }\n else if (target.attachEvent) {\n target.attachEvent(\"on\" + eventType, callback);\n }\n}\nexport function removeEventListener(target, eventType, callback) {\n if (target.removeEventListener) {\n target.removeEventListener(eventType, callback, false);\n }\n else if (target.detachEvent) {\n target.detachEvent(\"on\" + eventType, callback);\n }\n}\n","// localStorage API re-exposed to allow testing.\nimport { localStorage } from \"./globals\";\nexport const isSupported = localStorage != null && typeof localStorage.getItem === \"function\" && typeof localStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && localStorage) {\n return localStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && localStorage) {\n localStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && localStorage) {\n localStorage.removeItem(k);\n }\n}\n","import { perf } from \"./globals\";\nexport function now() {\n return new Date().getTime();\n}\nexport function nowNanos() {\n const timeOrigin = getTimeOrigin();\n const currentDate = new Date();\n if (timeOrigin) {\n const perfTime = perf.now() + timeOrigin;\n const dateTime = currentDate.getTime();\n // Only return perf time measurement if it hasn't significantly drifted (60s).\n // Some browsers violate the performance api spec and do not tick the monotonic time while the OS sleeps or the browser hangs\n // See https://bugzil.la/1709767\n // See https://webkit.org/b/225610\n if (Math.abs(perfTime - dateTime) < 60000) {\n return String(perfTime * 1000000);\n }\n }\n return toNanosTs(currentDate);\n}\nexport function toNanosTs(time) {\n if (typeof time === \"object\") {\n return toNanosTs(time.getTime());\n }\n // We don't multiply, because we want to keep number precision\n return String(time) + \"000000\";\n}\nexport function getTimeOrigin() {\n let timeOrigin = perf?.timeOrigin;\n if (typeof timeOrigin !== \"number\") {\n timeOrigin = perf?.timing?.fetchStart;\n }\n return timeOrigin;\n}\nexport function domHRTimestampToNanos(ts) {\n return String(Math.round((ts + getTimeOrigin()) * 1000000));\n}\n","import { warn, debug } from \"./debug\";\nimport { win } from \"./globals\";\n// This module contains wrappers around the standard timer API. These wrappers can be used to\n// ensure that execution of timers happens outside of any Angular specific zones. This in turn\n// means that this script will never disturb Angular's stabilization phase.\n// https://angular.io/api/core/ApplicationRef#isStable\n// Please note that it may sometimes be necessary to deliberately execute code inside of\n// Angular's Zones. Always take care to make a deliberate decision when to use and when not to\n// use these wrappers.\n// We take a copy of all globals to ensure that no other script will change them all of a sudden.\n// This ensures that when we register a timeout/interval on one global, that we will be able to\n// de-register it again in all cases.\nconst globals = {\n setTimeout: win?.setTimeout,\n clearTimeout: win?.clearTimeout,\n setInterval: win?.setInterval,\n clearInterval: win?.clearInterval,\n};\n// If the globals don't exist at execution time of this file, then we know that the globals stored\n// above are not wrapped by Zone.js. This in turn can mean better performance for Angular users.\nexport const isRunningZoneJs = win != null && win[\"Zone\"] != null && win[\"Zone\"][\"root\"] != null && typeof win[\"Zone\"][\"root\"][\"run\"] === \"function\";\nif (isRunningZoneJs) {\n debug(\"Discovered Zone.js globals. Will attempt to register all timers inside the root Zone.\");\n}\nexport function setTimeout(..._) {\n return executeGlobally.apply(\"setTimeout\", arguments);\n}\nexport function clearTimeout(..._) {\n return executeGlobally.apply(\"clearTimeout\", arguments);\n}\nexport function setInterval(..._) {\n return executeGlobally.apply(\"setInterval\", arguments);\n}\nexport function clearInterval(..._) {\n return executeGlobally.apply(\"clearInterval\", arguments);\n}\nfunction executeGlobally() {\n // We don't want to incur a performance penalty for all users just because some\n // users are relying on zone.js. This API looks quite ridiculous, but it\n // allows for concise and efficient code, e.g. arguments does not need to be\n // translated into an array.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const globalFunctionName = this;\n if (isRunningZoneJs) {\n try {\n // Incurr a performance overhead for Zone.js users that we just cannot avoid:\n // Copy the arguments passed in here so that we can use them inside the root\n // zone.\n const args = Array.prototype.slice.apply(arguments);\n // @ts-expect-error necessary Zone.js types not added\n return win[\"Zone\"][\"root\"][\"run\"](globals[globalFunctionName], win, args);\n }\n catch (e) {\n warn(\"Failed to execute %s inside of zone (via Zone.js). Falling back to execution inside currently \" +\n \"active zone.\", globalFunctionName, e);\n // failure – maybe zone js not properly initialized? Fall back to execution\n // outside of Zone.js as a last resort (outside of try/catch and if)\n }\n }\n // Note: Explicitly passing win as 'this' even though we are getting the function from 'globals'\n return globals[globalFunctionName]?.apply(win, arguments);\n}\n","import { doc, perf, win } from \"./globals\";\nimport { now } from \"./time\";\nimport { noop } from \"./fn\";\nimport { setTimeout } from \"./timers\";\nimport { addEventListener, removeEventListener } from \"./listeners\";\nconst TEN_MINUTES_IN_MILLIS = 1000 * 60 * 10;\nconst ONE_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;\nconst OBSERVER_WAIT_TIME_MS = 300;\nconst MAX_RESOURCES_ENTRIES = 100;\nexport const isResourceTimingAvailable = !!(perf && perf.getEntriesByType);\nexport const isPerformanceObserverAvailable = perf && typeof win[\"PerformanceObserver\"] === \"function\" && typeof perf[\"now\"] === \"function\";\nexport const PerformanceTimingNames = Object.freeze({\n CONNECT_END: \"connectEnd\",\n CONNECT_START: \"connectStart\",\n DECODED_BODY_SIZE: \"decodedBodySize\",\n DOM_COMPLETE: \"domComplete\",\n DOM_CONTENT_LOADED_EVENT_END: \"domContentLoadedEventEnd\",\n DOM_CONTENT_LOADED_EVENT_START: \"domContentLoadedEventStart\",\n DOM_INTERACTIVE: \"domInteractive\",\n DOMAIN_LOOKUP_END: \"domainLookupEnd\",\n DOMAIN_LOOKUP_START: \"domainLookupStart\",\n ENCODED_BODY_SIZE: \"encodedBodySize\",\n FETCH_START: \"fetchStart\",\n LOAD_EVENT_END: \"loadEventEnd\",\n LOAD_EVENT_START: \"loadEventStart\",\n NAVIGATION_START: \"navigationStart\",\n REDIRECT_END: \"redirectEnd\",\n REDIRECT_START: \"redirectStart\",\n REQUEST_START: \"requestStart\",\n RESPONSE_END: \"responseEnd\",\n RESPONSE_START: \"responseStart\",\n SECURE_CONNECTION_START: \"secureConnectionStart\",\n START_TIME: \"startTime\",\n UNLOAD_EVENT_END: \"unloadEventEnd\",\n UNLOAD_EVENT_START: \"unloadEventStart\",\n});\nconst usedResources = new WeakSet();\nexport function observeResourcePerformance(opts) {\n if (!isPerformanceObserverAvailable)\n return observeWithoutPerformanceObserverSupport(opts.onEnd);\n // Used to calculate the duration when no resource was found.\n let startTime;\n let endTime;\n const resources = [];\n // Global resources that will need to be disposed\n let observer;\n let fallbackNoResourceFoundTimerHandle;\n let fallbackEndNeverCalledTimerHandle;\n return {\n start: onStart,\n end: onEnd,\n cancel: disposeGlobalResources,\n };\n function onStart() {\n startTime = perf.now();\n try {\n const PerformanceObserver = win?.PerformanceObserver;\n if (PerformanceObserver) {\n observer = new PerformanceObserver(onResourceFound);\n observer?.observe({ type: \"resource\" });\n }\n }\n catch (_e) {\n // Some browsers may not support the passed entryTypes and decide to throw an error.\n // This would then result in an error with a message like:\n //\n // entryTypes only contained unsupported types\n //\n // Swallow and ignore the error. Treat it like unavailable performance observer data.\n }\n fallbackEndNeverCalledTimerHandle = setTimeout(disposeGlobalResources, TEN_MINUTES_IN_MILLIS);\n }\n function onEnd(endTs) {\n // If endTime is already set, we are already terminating and should not do so again\n if (endTime)\n return;\n endTime = endTs ?? perf.now();\n cancelFallbackEndNeverCalledTimer();\n if (!isWaitingAcceptable()) {\n return end();\n }\n setTimeout(() => end(), Math.min(OBSERVER_WAIT_TIME_MS, opts.maxWaitForResourceMillis));\n addEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n fallbackNoResourceFoundTimerHandle = setTimeout(end, opts.maxWaitForResourceMillis);\n }\n function end() {\n disposeGlobalResources();\n const resource = findBestMatchingResource();\n // In some old web browsers, e.g. Chrome 31, the value provided as the duration\n // can be very wrong. We have seen cases where this value is measured in years.\n // If this does seem be the case, then we will ignore the duration property and\n // instead prefer our approximation.\n if (resource?.duration && resource.duration < ONE_DAY_IN_MILLIS) {\n opts.onEnd({ resource, duration: resource.duration });\n }\n else {\n opts.onEnd({ resource, duration: endTime - startTime });\n }\n }\n function onResourceFound(list) {\n list\n .getEntriesByType(\"resource\")\n .filter((e) => {\n // This polymorphism is not properly represented in the api types. The cast is safe since we're only accessing the resource timings.\n const entry = e;\n return entry.startTime >= startTime && opts.resourceMatcher(entry);\n })\n .forEach((entry) => {\n // Limit array size to prevent memory leaks on high-traffic pages\n if (resources.length >= MAX_RESOURCES_ENTRIES) {\n // Remove oldest entry (FIFO)\n // Timings are only reported once the resource is fully recorded (i.e. the request has ended), so timings ending\n // way before the `onEnd` is called are less likely to be good matches and we can ignore them.\n resources.shift();\n }\n resources.push(entry);\n });\n }\n function onVisibilityChanged() {\n if (!isWaitingAcceptable())\n end();\n }\n function disposeGlobalResources() {\n disconnectResourceObserver();\n cancelFallbackNoResourceFoundTimer();\n cancelFallbackEndNeverCalledTimer();\n stopVisibilityObservation();\n }\n function disconnectResourceObserver() {\n if (observer) {\n try {\n observer?.disconnect();\n }\n catch (_e) {\n // Observer disconnect may throw when connect attempt wasn't successful. Ignore this.\n }\n observer = undefined;\n }\n }\n function cancelFallbackNoResourceFoundTimer() {\n if (fallbackNoResourceFoundTimerHandle) {\n clearTimeout(fallbackNoResourceFoundTimerHandle);\n fallbackNoResourceFoundTimerHandle = undefined;\n }\n }\n function cancelFallbackEndNeverCalledTimer() {\n if (fallbackEndNeverCalledTimerHandle) {\n clearTimeout(fallbackEndNeverCalledTimerHandle);\n fallbackEndNeverCalledTimerHandle = undefined;\n }\n }\n function stopVisibilityObservation() {\n if (!doc)\n return;\n removeEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n }\n function findBestMatchingResource() {\n if (!resources.length)\n return undefined;\n let bestMatch;\n const matchingResources = resources.filter((res) => res.responseEnd <= endTime + opts.maxToleranceForResourceTimingsMillis && !usedResources.has(res));\n if (!matchingResources.length) {\n return undefined;\n }\n if (matchingResources.length === 1) {\n bestMatch = matchingResources[0];\n }\n let bestScore;\n if (!bestMatch) {\n for (const res of matchingResources) {\n const score = Math.abs(endTime - startTime - res.duration) + Math.abs(res.responseEnd - endTime);\n if (bestScore === undefined || score < bestScore) {\n bestScore = score;\n bestMatch = res;\n }\n }\n }\n if (!bestMatch)\n return;\n usedResources.add(bestMatch);\n return bestMatch;\n }\n}\n// We may only wait for resource data to arrive as long as the document is visible or in the process\n// of becoming visible. In all other cases we might lose data when waiting, e.g. when the document\n// is in the process of being disposed.\nfunction isWaitingAcceptable() {\n return doc?.visibilityState === \"visible\" || doc?.visibilityState === \"prerender\";\n}\nfunction observeWithoutPerformanceObserverSupport(onEnd) {\n let start = 0;\n return {\n start: () => {\n start = now();\n },\n end: () => onEnd({ duration: now() - start }),\n cancel: noop,\n };\n}\n","export const NO_VALUE_FALLBACK = \"undefined\";\nexport const INIT_MESSAGE = \"Initializing Dash0 Web SDK\";\n","export function roundToTwoDecimals(n) {\n return Math.round(n * 100) / 100;\n}\n","import { doc, loc } from \"./globals\";\n/**\n * Parses url using URL constructor. Supports URL objects as passthrough input to simplify implementations\n * May throw if parsing fails\n * @param url\n */\nexport function parseUrl(url) {\n if (typeof url !== \"string\")\n return url;\n return new URL(url, doc?.baseURI ?? loc?.href);\n}\n","import { parseUrl } from \"./url\";\n/** Returns the origin if present (if in browser context). */\nfunction getOrigin() {\n return typeof location !== \"undefined\" ? location.origin : undefined;\n}\nexport function isSameOrigin(url) {\n try {\n const parsedUrl = parseUrl(url);\n return parsedUrl.origin === getOrigin();\n }\n catch (_e) {\n return false;\n }\n}\n","const SUSPICIOUS_CHARS = /['\"<>{};\\x00-\\x1F\\x7F]/;\n/**\n * Returns true if the value is safe to use as a `service.name` resource attribute.\n *\n * Rejects values containing characters commonly used in injection payloads:\n * quotes, angle brackets, braces, semicolons, and C0 control characters / DEL.\n * Forward and back slashes are intentionally permitted so names like\n * `myteam/myservice` remain valid.\n */\nexport function isSafeServiceName(value) {\n return !SUSPICIOUS_CHARS.test(value);\n}\n","import { debug, warn } from \"./debug\";\nconst INSTRUMENTED_BY_DASH0_SYMBOL = Symbol.for(\"INSTRUMENTED_BY_DASH0\");\nfunction isAlreadyInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n return objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] === true;\n}\nfunction markAsInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] = true;\n}\nexport function wrap(module, target, wrapper) {\n const original = module[target];\n if (!original) {\n debug(`${String(target)} is not defined, unable to instrument`);\n return;\n }\n if (isAlreadyInstrumented(original)) {\n debug(`${String(target)} has already been instrumented, skipping`);\n return;\n }\n try {\n const wrapped = wrapper(original);\n // Mark the replacement as well: a later wrap() call reads the replacement from module[target],\n // so marking only the original would let repeated instrumentation wrap the wrapper.\n markAsInstrumented(original);\n if (wrapped) {\n markAsInstrumented(wrapped);\n }\n module[target] = wrapped;\n }\n catch (e) {\n // Pages can lock properties via Object.defineProperty/Object.freeze -- failing to install\n // one instrumentation must not throw out of init() and abort the remaining ones.\n warn(`failed to instrument ${String(target)}, the page may have locked the property`, e);\n }\n}\n","const POLYNOMIAL = 0xedb88320; // This is the standard polynomial used in IEEE 802.3 and must be in sync with the one we are using in the backend.\nconst TABLE = new Uint32Array(256);\nfor (let i = 0; i < 256; i++) {\n let c = i;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? POLYNOMIAL ^ (c >>> 1) : c >>> 1;\n }\n TABLE[i] = c >>> 0;\n}\nexport function crc32(hexStr) {\n const bytes = new Uint8Array(hexStr.length / 2);\n for (let i = 0; i < hexStr.length; i += 2) {\n bytes[i / 2] = parseInt(hexStr.substring(i, i + 2), 16);\n }\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n crc = (crc >>> 8) ^ TABLE[(crc ^ byte) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n","import { identity } from \"./utils\";\nexport const vars = {\n endpoints: [],\n resource: {\n attributes: [],\n },\n scope: {\n name: \"dash0-web-sdk\",\n version: __sdkVersion,\n attributes: [],\n },\n signalAttributes: [],\n ignoreUrls: [],\n ignoreErrorMessages: [],\n wrapEventHandlers: true,\n wrapTimers: true,\n propagateTraceHeadersCorsURLs: [],\n maxWaitForResourceTimingsMillis: 10000,\n maxToleranceForResourceTimingsMillis: 50,\n headersToCapture: [],\n urlAttributeScrubber: identity,\n pageViewInstrumentation: {\n trackVirtualPageViews: true,\n includeParts: [],\n },\n enableTransportCompression: false,\n isSessionSampled: true,\n};\n","import { vars } from \"../vars\";\nexport function matchesAny(regexp, s) {\n for (let i = 0, len = regexp.length; i < len; i++) {\n if (regexp[i].test(s)) {\n return true;\n }\n }\n return false;\n}\nconst DATA_URL_PREFIX = \"data:\";\nexport function isUrlIgnored(url) {\n if (!url) {\n return true;\n }\n // Force string conversion. During runtime we have seen that some URLs passed into this code path aren't actually\n // strings. Reason currently unknown.\n url = String(url);\n if (!url) {\n return true;\n }\n // We never want to track data URLs. Instead of matching these via regular expressions (which might be expensive),\n // we are explicitly doing a startsWith ignore case check\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n if (url.substring == null || url.substring(0, DATA_URL_PREFIX.length).toLowerCase() === DATA_URL_PREFIX) {\n return true;\n }\n // Disable monitoring of data transmission requests. The data transmission strategy already ensures\n // that data transmission requests are not picked up internally. However, we have seen some users\n // leverage custom (broken) XMLHttpRequest instrumentation to implement application code which\n // then break the detection of data transmission requests.\n if (isTransportRequest(url)) {\n return true;\n }\n return matchesAny(vars.ignoreUrls, url);\n}\nfunction isTransportRequest(url) {\n const lowerCaseUrl = url.toLowerCase();\n for (let i = 0, len = vars.endpoints.length; i < len; i++) {\n const endpoint = vars.endpoints[i];\n if (lowerCaseUrl.startsWith(endpoint.url)) {\n return true;\n }\n }\n return false;\n}\nexport function isErrorMessageIgnored(message) {\n return !message || matchesAny(vars.ignoreErrorMessages, message);\n}\n","import { addEventListener } from \"./listeners\";\nimport { doc, win } from \"./globals\";\nlet isUnloading = false;\n/**\n * Triggers the `fn` when the HTML document is getting unloaded\n * (or when it looks like it might be). Useful to flush batch activities.\n */\nexport function onLastChance(fn) {\n if (isUnloading) {\n fn();\n }\n if (!doc || !win)\n return;\n addEventListener(doc, \"visibilitychange\", function () {\n if (doc.visibilityState !== \"visible\") {\n fn();\n }\n });\n addEventListener(win, \"pagehide\", function () {\n isUnloading = true;\n fn();\n });\n // According to the spec visibilitychange should be a replacement for\n // beforeunload, but the reality is different (as of 2019-04-17). Chrome will\n // close tabs without firing visibilitychange. beforeunload on the other hand\n // is fired.\n addEventListener(win, \"beforeunload\", function () {\n isUnloading = true;\n fn();\n });\n}\n","import { onLastChance } from \"../utils/on-last-chance\";\nimport { doc } from \"../utils\";\nimport { setTimeout } from \"../utils/timers\";\nconst SCHEDULE_DELAY_MILLIS = 1000;\nconst MAX_QUEUE_SIZE = 15;\nexport function newBatcher(sendInternal) {\n const queuedItems = [];\n let pendingFlushTimeout;\n // We attempt batching of messages to be more efficient on the client, network and\n // server-side. While the connection is either a persistent HTTP 2 connection or\n // an HTTP 1.1 connection with keep-alive, there is still some overhead involved\n // in having many small messages.\n //\n // For this reason we attempt batching. When batching we must be careful to\n // force a transmission when the document is unloaded.\n onLastChance(flush);\n return {\n send(item) {\n if (isWindowHidden()) {\n // We cannot guarantee that we will ever get time to transmit data in a batched\n // format when the window is hidden, as this might occur while the document is\n // being unloaded. Immediately force a transmission in these cases.\n sendInternal([item]);\n return;\n }\n queuedItems.push(item);\n if (queuedItems.length >= MAX_QUEUE_SIZE) {\n flush();\n }\n else if (pendingFlushTimeout == null) {\n pendingFlushTimeout = setTimeout(flush, SCHEDULE_DELAY_MILLIS);\n }\n },\n };\n function flush() {\n if (pendingFlushTimeout != null) {\n clearTimeout(pendingFlushTimeout);\n pendingFlushTimeout = null;\n }\n if (queuedItems.length > 0) {\n sendInternal(queuedItems.slice());\n queuedItems.length = 0;\n }\n }\n}\nfunction isWindowHidden() {\n return doc?.visibilityState !== \"visible\";\n}\n","import { vars } from \"../vars\";\nimport { noop, warn, fetch, debug } from \"../utils\";\n// The bacon api enforces a size limit across all pending beacon requests per fetch group\n// There also seems to be a limit of 15 pending requests at the same time\n// See: https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch subpoint 10\n// See: https://github.com/getsentry/sentry-javascript/pull/7553\nconst BEACON_BODY_SIZE_LIMIT = 60000;\nlet pendingBodySize = 0;\nlet pendingRequestCount = 0;\nexport async function send(path, body) {\n debug(\"Transmitting telemetry to endpoints\", body);\n const jsonString = JSON.stringify(body);\n let requestBody = jsonString;\n let byteLength = new Blob([jsonString]).size;\n let isCompressed = false;\n // Try to compress if supported\n if (typeof CompressionStream !== \"undefined\" && vars.enableTransportCompression) {\n requestBody = await compressWithGzip(jsonString);\n byteLength = requestBody.byteLength;\n isCompressed = true;\n }\n // Send to all endpoints in parallel\n await Promise.all(vars.endpoints.map(async (endpoint) => {\n try {\n const url = new URL(endpoint[\"url\"]);\n url.pathname = url.pathname + (url.pathname.endsWith(\"/\") ? path.substring(1) : path);\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${endpoint[\"authToken\"]}`,\n };\n if (endpoint.dataset) {\n headers[\"Dash0-Dataset\"] = endpoint[\"dataset\"];\n }\n // Try to compress if supported\n if (isCompressed) {\n headers[\"Content-Encoding\"] = \"gzip\";\n }\n if (!fetch) {\n warn(\"Unable to send telemetry, fetch is not defined\");\n return;\n }\n pendingBodySize += byteLength;\n pendingRequestCount++;\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: requestBody,\n // The keepalive flag is related to the window.sendBeacon API. This in turn has size limitations.\n keepalive: pendingBodySize <= BEACON_BODY_SIZE_LIMIT && pendingRequestCount <= 15,\n });\n // read the body so the connection can be closed\n response.text().catch(noop);\n if (!response.ok) {\n warn(`Failed to send telemetry to ${url}: ${response.status} ${response.statusText}`);\n }\n }\n catch (error) {\n warn(`Error sending telemetry to ${endpoint.url}${path}:`, error);\n }\n finally {\n pendingBodySize -= byteLength;\n pendingRequestCount--;\n }\n }));\n}\nasync function compressWithGzip(data) {\n const blob = new Blob([data]);\n const stream = blob.stream();\n const compressedStream = stream.pipeThrough(new CompressionStream(\"gzip\"));\n return new Response(compressedStream).arrayBuffer();\n}\n","import { newBatcher } from \"./batcher\";\nimport { send } from \"./fetch\";\nimport { vars } from \"../vars\";\nimport { debug, error, createRateLimiter } from \"../utils\";\nconst logBatcher = newBatcher(sendLogs);\nconst spanBatcher = newBatcher(sendSpans);\nlet rateLimiter;\nfunction isRateLimited() {\n if (!rateLimiter) {\n rateLimiter = createRateLimiter({\n maxCallsPerTenMinutes: 4096,\n maxCallsPerTenSeconds: 128,\n });\n }\n return rateLimiter();\n}\nexport function sendLog(log) {\n if (!vars.isSessionSampled)\n return;\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", log);\n return;\n }\n logBatcher.send(log);\n}\nfunction sendLogs(logs) {\n send(\"/v1/logs\", {\n resourceLogs: [\n {\n resource: vars.resource,\n scopeLogs: [\n {\n scope: vars.scope,\n logRecords: logs,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit logs\", err);\n });\n}\nexport function sendSpan(span) {\n if (!span)\n return;\n if (!vars.isSessionSampled)\n return;\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", span);\n return;\n }\n spanBatcher.send(span);\n}\nfunction sendSpans(spans) {\n send(\"/v1/traces\", {\n resourceSpans: [\n {\n resource: vars.resource,\n scopeSpans: [\n {\n scope: vars.scope,\n spans: spans,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit spans\", err);\n });\n}\n","import { setInterval } from \"./timers\";\nexport function createRateLimiter(opts) {\n const maxCallsPerTenMinutes = opts.maxCallsPerTenMinutes || 128;\n const maxCallsPerTenSeconds = opts.maxCallsPerTenSeconds || 32;\n let totalCallsInLastTenMinutes = 0;\n let totalCallsInLastTenSeconds = 0;\n setInterval(function () {\n totalCallsInLastTenMinutes = 0;\n }, 1000 * 60 * 10);\n setInterval(function () {\n totalCallsInLastTenSeconds = 0;\n }, 1000 * 10);\n return function isExcessiveUsage() {\n return ++totalCallsInLastTenMinutes > maxCallsPerTenMinutes || ++totalCallsInLastTenSeconds > maxCallsPerTenSeconds;\n };\n}\n","// Resource Attribute Keys\nexport const SERVICE_NAME = \"service.name\";\nexport const SERVICE_NAMESPACE = \"service.namespace\";\nexport const SERVICE_VERSION = \"service.version\";\nexport const DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\nexport const DEPLOYMENT_NAME = \"deployment.name\";\nexport const DEPLOYMENT_ID = \"deployment.id\";\n// VCS Resource Attribute Keys\nexport const VCS_PROVIDER_NAME = \"vcs.provider.name\";\nexport const VCS_OWNER_NAME = \"vcs.owner.name\";\nexport const VCS_REPOSITORY_NAME = \"vcs.repository.name\";\nexport const VCS_REPOSITORY_URL_FULL = \"vcs.repository.url.full\";\nexport const VCS_REF_HEAD_NAME = \"vcs.ref.head.name\";\nexport const VCS_REF_HEAD_REVISION = \"vcs.ref.head.revision\";\nexport const VCS_CHANGE_ID = \"vcs.change.id\";\n// Misc Signal Attribute Keys\nexport const EVENT_NAME = \"event.name\";\nexport const WEB_EVENT_TITLE = \"dash0.web.event.title\";\nexport const WEB_EVENT_ID = \"dash0.web.event.id\";\nexport const WEB_REQUEST_CANCELLED = \"dash0.web.request.cancelled\";\nexport const PAGE_LOAD_ID = \"page.load.id\";\nexport const SESSION_ID = \"session.id\";\nexport const USER_AGENT = \"user_agent.original\";\nexport const BROWSER_TAB_ID = \"browser.tab.id\";\nexport const WINDOW_WIDTH = \"browser.window.width\";\nexport const WINDOW_HEIGHT = \"browser.window.height\";\nexport const NETWORK_CONNECTION_TYPE = \"network.connection.subtype\";\nexport const EXCEPTION_COMPONENT_STACK = \"exception.component_stack\";\n// User Attribute Keys\nexport const USER_ID = \"user.id\";\nexport const USER_NAME = \"user.name\";\nexport const USER_FULL_NAME = \"user.full_name\";\nexport const USER_EMAIL = \"user.email\";\nexport const USER_HASH = \"user.hash\";\nexport const USER_ROLES = \"user.roles\";\n// Exception Attribute Keys\nexport const EXCEPTION_MESSAGE = \"exception.message\";\nexport const EXCEPTION_TYPE = \"exception.type\";\nexport const EXCEPTION_STACKTRACE = \"exception.stacktrace\";\n// Error Attribute Keys\nexport const ERROR_TYPE = \"error.type\";\n// URL Attribute Keys\nexport const PAGE_URL_ATTR_PREFIX = \"page\";\nexport const URL_DOMAIN = \"url.domain\";\nexport const URL_FRAGMENT = \"url.fragment\";\nexport const URL_FULL = \"url.full\";\nexport const URL_PATH = \"url.path\";\nexport const URL_QUERY = \"url.query\";\nexport const URL_SCHEME = \"url.scheme\";\n// Http Attribute Keys\nexport const HTTP_REQUEST_METHOD = \"http.request.method\";\nexport const HTTP_REQUEST_METHOD_ORIGINAL = \"http.request.method_original\";\nexport const HTTP_REQUEST_HEADER = \"http.request.header\";\nexport const HTTP_RESPONSE_STATUS_CODE = \"http.response.status_code\";\nexport const HTTP_RESPONSE_HEADER = \"http.response.header\";\nexport const HTTP_RESPONSE_BODY_SIZE = \"http.response.body.size\";\n// Event Names\nexport const EVENT_NAMES = {\n PAGE_VIEW: \"browser.page_view\",\n NAVIGATION_TIMING: \"browser.navigation_timing\",\n WEB_VITAL: \"browser.web_vital\",\n ERROR: \"browser.error\",\n};\nexport const SPAN_EVENT_NAME_EXCEPTION = \"exception\";\n// Log Severities\nexport const LOG_SEVERITIES = {\n UNSPECIFIED: 0,\n TRACE: 1,\n DEBUG: 5,\n INFO: 9,\n WARN: 13,\n ERROR: 17,\n FATAL: 21,\n};\n// Page View Event Attributes\n// SEE: https://github.com/open-telemetry/semantic-conventions/pull/1910/files\nexport const PAGE_VIEW_TYPE = \"type\";\nexport const PAGE_VIEW_TYPE_VALUES = {\n INITIAL: 0,\n VIRTUAL: 1,\n};\nexport const PAGE_VIEW_CHANGE_STATE = \"change_state\";\nexport const PAGE_VIEW_CHANGE_STATE_VALUES = {\n PUSH: \"pushState\",\n REPLACE: \"replaceState\",\n};\n// Span Status\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1; // This is here for completion, status ok is reserved for use by application developers\nexport const SPAN_STATUS_ERROR = 2;\n// Span Kind\n// See: https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\nexport const SPAN_KIND_CLIENT = 3;\n","const ANY_VALUE_KEYS = [\n \"stringValue\",\n \"boolValue\",\n \"intValue\",\n \"doubleValue\",\n \"arrayValue\",\n \"kvlistValue\",\n \"bytesValue\",\n];\nfunction isAnyValue(value) {\n if (value == null || typeof value !== \"object\")\n return false;\n const keys = Object.keys(value);\n return keys.length === 1 && ANY_VALUE_KEYS.includes(keys[0]);\n}\nexport function toAnyValue(value) {\n if (value == null) {\n return undefined;\n }\n let anyValue = {};\n if (Array.isArray(value)) {\n anyValue[\"arrayValue\"] = { values: value.map((e) => toAnyValue(e)) };\n }\n else if (typeof value === \"string\") {\n anyValue[\"stringValue\"] = value;\n }\n else if (typeof value === \"number\") {\n anyValue[\"doubleValue\"] = value;\n }\n else if (typeof value === \"boolean\") {\n anyValue[\"boolValue\"] = value;\n }\n else if (isAnyValue(value)) {\n anyValue = value;\n }\n else if (typeof value === \"object\") {\n anyValue[\"kvlistValue\"] = { values: Object.entries(value).map(([key, value]) => toKeyValue(key, value)) };\n }\n return anyValue;\n}\nexport function toKeyValue(key, value) {\n return {\n key: key,\n value: toAnyValue(value),\n };\n}\n/**\n * Adds a single attribute to the provided attributes array\n */\nexport function addAttribute(attributes, key, value) {\n if (!key)\n return;\n attributes.push(toKeyValue(key, value));\n}\n/**\n * Adds multiple attributes to the provided attributes array\n */\nexport function addAttributes(\n/**\n * The attributes array to add to\n */\nattributes, \n/**\n * Additional attributes to add\n * If no attributes are provided, nothing is added\n */\nattrs) {\n if (!attrs)\n return;\n Object.entries(attrs).forEach(([key, value]) => addAttribute(attributes, key, value));\n}\n/**\n * Removes an attribute from the provided attributes array by its key\n */\nexport function removeAttribute(attributes, key) {\n const index = attributes.findIndex((attr) => attr[\"key\"] === key);\n if (index !== -1) {\n attributes.splice(index, 1);\n }\n}\nexport function withPrefix(prefix) {\n if (!prefix)\n return (attr) => attr;\n if (Array.isArray(prefix)) {\n return (attr) => [...prefix, attr].join(\".\");\n }\n return (attr) => `${prefix}.${attr}`;\n}\n","import { doc } from \"../globals\";\nimport { perf } from \"../globals\";\nconst TRACE_PARENT_HEADER = \"traceparent\";\n/**\n * See https://www.w3.org/TR/trace-context/#traceparent-header\n */\nconst w3cTraceparentFormat = /^00-([a-f0-9]{32})-([a-f0-9]{16})-[0-9]{1,2}$/;\nexport function getTraceContextForPageLoad() {\n const match = getTraceparentFromMetaElement().match(w3cTraceparentFormat) ||\n getTraceparentFromNavigationTiming().match(w3cTraceparentFormat);\n if (match) {\n return {\n traceId: match[1],\n spanId: match[2],\n };\n }\n return undefined;\n}\nfunction getTraceparentFromMetaElement() {\n return (Array.from(doc?.getElementsByTagName(\"meta\") ?? [])\n .find((e) => e.getAttribute(\"name\")?.toLowerCase() === TRACE_PARENT_HEADER)\n ?.content.trim() || \"\");\n}\nfunction getTraceparentFromNavigationTiming() {\n const nt = perf.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n return \"\";\n }\n if (!nt.serverTiming) {\n return \"\";\n }\n return getTraceparentFromServerTiming(nt.serverTiming);\n}\nfunction getTraceparentFromServerTiming(serverTimings) {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === TRACE_PARENT_HEADER) {\n return serverEntry.description.trim();\n }\n }\n return \"\";\n}\nexport function addW3CTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * W3C Traceparent header.\n * General format is ${version}-${trace-id}-${parent-id}-${trace-flags}\n *\n * The only spec'd version is currently 00\n * Trace flags are an 8 bit field of bit flags:\n * Sampled: 00000001 - Should only be set if a definite decision to record the trace was made.\n * If set downstream processors should also record the trace\n * Random Trace ID: 00000010 - IF set the component guarantees that the seven right most bytes of the trace-id\n * are randomly generated. Downstream processors are then able to rely on this for technical things like shard keys.\n *\n * NOTE: For now we just send the \"sampled\" flag because not all components support the random trace ID flag.\n *\n * References:\n * https://www.w3.org/TR/trace-context-2/#traceparent-header\n * https://www.w3.org/TR/trace-context-2/#trace-flags\n * https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\n */\n fn.call(ctx, \"traceparent\", `00-${span.traceId}-${span.spanId}-01`);\n}\nexport function addXRayTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * AWS X-Ray trace header.\n * General format is Root=${trace-id};Parent=${span-id};Sampled=${sampling-flag}\n *\n * Converts W3C trace ID format to X-Ray format:\n * W3C: 4efaaf4d1e8720b39541901950019ee5 (32 hex chars)\n * X-Ray: 1-4efaaf4d-1e8720b39541901950019ee5 (1-{8chars}-{24chars})\n *\n * References:\n * https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader\n */\n const xrayTraceId = convertW3CTraceIdToXRay(span.traceId);\n const xrayHeader = `Root=${xrayTraceId};Parent=${span.spanId};Sampled=1`;\n fn.call(ctx, \"X-Amzn-Trace-Id\", xrayHeader);\n}\nfunction convertW3CTraceIdToXRay(w3cTraceId) {\n // X-Ray trace ID format: 1-{timestamp}-{unique-id}\n // Split the 32-char W3C trace ID into 8-char timestamp and 24-char unique ID\n const timestamp = w3cTraceId.substring(0, 8);\n const uniqueId = w3cTraceId.substring(8, 32);\n return `1-${timestamp}-${uniqueId}`;\n}\n","import * as localStorage from \"./local-storage\";\nimport { generateUniqueId, SESSION_ID_BYTES } from \"./id\";\nconst SESSION_FLAGS = {\n EPHEMERAL_SESSION: 0x01, // 00000001 - if the browser does NOT support local storage we count the session as ephemeral because we cannot persist it\n};\nfunction encodeSessionFlags(flags) {\n let byte = 0;\n if (flags.ephemeralSession) {\n byte |= SESSION_FLAGS.EPHEMERAL_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateSessionId() {\n const sessionFlags = {\n ephemeralSession: !localStorage.isSupported,\n };\n return `${encodeSessionFlags(sessionFlags)}${generateUniqueId(SESSION_ID_BYTES - 1)}`;\n}\n","import { isSupported, getItem, setItem, removeItem } from \"../utils\";\nimport { debug, now } from \"../utils\";\nimport { info, warn } from \"../utils\";\nimport { generateSessionId } from \"../utils/session-id\";\nconst SESSION_STORAGE_KEY = \"d0_session\";\nconst STORAGE_SEPARATOR_KEY = \"#\";\nconst DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS = 1000 * 60 * 60 * 3;\nconst DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 6;\nconst MAX_ALLOWED_SESSION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 24;\nexport let sessionId = null;\nexport function trackSessions(sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n if (!isSupported) {\n debug(\"Storage API is not available and session tracking is therefore not supported.\");\n // we still generate a session ID to ensure that the session ID is always available\n sessionId = generateSessionId();\n return;\n }\n if (!sessionInactivityTimeoutMillis) {\n sessionInactivityTimeoutMillis = DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS;\n }\n if (!sessionTerminationTimeoutMillis) {\n sessionTerminationTimeoutMillis = DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS;\n }\n sessionInactivityTimeoutMillis = Math.min(sessionInactivityTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n sessionTerminationTimeoutMillis = Math.min(sessionTerminationTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n try {\n const storedValue = getItem(SESSION_STORAGE_KEY);\n let session = parseSession(storedValue);\n if (session && !isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis)) {\n session = null;\n }\n if (session) {\n session.lastActivityTime = now();\n }\n else {\n session = {\n id: generateSessionId(),\n startTime: now(),\n lastActivityTime: now(),\n };\n }\n setItem(SESSION_STORAGE_KEY, serializeSession(session));\n sessionId = session.id;\n }\n catch (e) {\n warn(\"Failed to record session information\", e);\n }\n}\n/**\n * The session will be terminated. This only takes effect on the next physical page load.\n */\nexport function terminateSession() {\n if (!isSupported) {\n return;\n }\n try {\n removeItem(SESSION_STORAGE_KEY);\n }\n catch (e) {\n info(\"Failed to terminate session\", e);\n }\n}\nfunction parseSession(storedValue) {\n if (!storedValue) {\n return null;\n }\n const values = storedValue.split(STORAGE_SEPARATOR_KEY);\n if (values.length < 3) {\n return null;\n }\n const id = values[0];\n const startTime = parseInt(values[1], 10);\n const lastActivityTime = parseInt(values[2], 10);\n if (!id || isNaN(startTime) || isNaN(lastActivityTime)) {\n return null;\n }\n return {\n id,\n startTime,\n lastActivityTime,\n };\n}\nfunction serializeSession(session) {\n return session.id + STORAGE_SEPARATOR_KEY + session.startTime + STORAGE_SEPARATOR_KEY + session.lastActivityTime;\n}\nfunction isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n const minAllowedLastActivityTime = now() - sessionInactivityTimeoutMillis;\n if (session.lastActivityTime < minAllowedLastActivityTime) {\n return false;\n }\n const minAllowedStartTime = now() - sessionTerminationTimeoutMillis;\n return session.startTime >= minAllowedStartTime;\n}\n","import { generateUniqueId, SESSION_ID_BYTES, TRACE_ID_BYTES } from \"./id\";\nconst TRACE_ID_PREFIX = \"d042\";\nconst TRACE_FLAGS = {\n WITHOUT_SESSION: 0x01, // 00000001 - in some edge cases we do not have a session ID, so we need to mark the trace as such\n};\nfunction encodeTraceFlags(flags) {\n let byte = 0;\n if (flags.withoutSession) {\n byte |= TRACE_FLAGS.WITHOUT_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateTraceId(sessionId) {\n if (!sessionId) {\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: true })}${generateUniqueId(TRACE_ID_BYTES - 3)}`;\n }\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: false })}${sessionId}${generateUniqueId(TRACE_ID_BYTES - SESSION_ID_BYTES - 3)}`;\n}\n","import { nowNanos } from \"../time\";\nimport { SPAN_KIND_CLIENT, SPAN_STATUS_UNSET, WEB_EVENT_ID } from \"../../semantic-conventions\";\nimport { sessionId } from \"../../api/session\";\nimport { generateTraceId } from \"../trace-id\";\nimport { generateSpanId } from \"../span-id\";\nimport { addAttribute } from \"./attributes\";\nimport { debug } from \"../debug\";\nexport function startSpan(name) {\n const traceId = generateTraceId(sessionId);\n const spanId = generateSpanId(traceId);\n const attributes = [];\n addAttribute(attributes, WEB_EVENT_ID, spanId);\n return {\n traceId,\n spanId,\n name,\n // Always CLIENT for now https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\n // Note: we directly define otlp here, this differs from the values used by oteljs internally.\n kind: SPAN_KIND_CLIENT,\n startTimeUnixNano: nowNanos(),\n attributes,\n events: [],\n links: [],\n status: { code: SPAN_STATUS_UNSET },\n };\n}\n/**\n * Ends the span by setting status and endTimeUnixNano on it. If the spand was already previously ended, this returns undefined\n * to prevent the span from being ended multiple times on accident.\n */\nexport function endSpan(span, status, durationNano) {\n // We cast here to avoid having to instantiate a copy of the span\n const s = span;\n if (s.endTimeUnixNano) {\n debug(\"Attempting to end already ended span. Dropping...\", s);\n return undefined;\n }\n if (status) {\n s.status = status;\n }\n s.endTimeUnixNano =\n durationNano != null ? String(Math.round(parseInt(s.startTimeUnixNano) + durationNano)) : nowNanos();\n return s;\n}\n/**\n * Adds an event to a span. Can optionally accept the events timestamp and attributes for the event.\n * The timestamp needs to be specified as nanoseconds since unix epoch in string format.\n */\nexport function addSpanEvent(span, name, attributesOrTs, attributes) {\n let ts = undefined;\n let attr = undefined;\n if (typeof attributesOrTs === \"string\") {\n ts = attributesOrTs;\n }\n else if (Array.isArray(attributesOrTs)) {\n attr = attributesOrTs;\n }\n if (attributes) {\n attr = attributes;\n }\n span.events.push({\n name,\n timeUnixNano: ts != null ? ts : nowNanos(),\n attributes: attr ?? [],\n });\n}\nexport function setSpanStatus(span, code, message) {\n span.status = {\n code,\n message,\n };\n}\n","import { generateUniqueId, SPAN_ID_BYTES } from \"./id\";\nimport { crc32 } from \"./crc32\";\nexport function generateSpanId(traceId) {\n const checksum = crc32(traceId);\n const prefix = checksum.toString(16).padStart(8, \"0\");\n return `${prefix}${generateUniqueId(SPAN_ID_BYTES - 4)}`;\n}\n","import { addSpanEvent } from \"./span\";\nimport { addAttribute } from \"./attributes\";\nimport { SPAN_EVENT_NAME_EXCEPTION, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, SPAN_STATUS_ERROR, } from \"../../semantic-conventions\";\nexport function recordException(span, exception) {\n const attributes = [];\n if (typeof exception === \"string\") {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception);\n }\n else if (exception) {\n if (exception.code) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.code.toString());\n }\n else if (exception.name) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.name);\n }\n if (exception.message) {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception.message);\n }\n if (exception.stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, exception.stack);\n }\n addSpanEvent(span, SPAN_EVENT_NAME_EXCEPTION, attributes);\n }\n}\nexport function errorToSpanStatus(e) {\n return {\n code: SPAN_STATUS_ERROR,\n message: e && typeof e === \"object\" && \"message\" in e ? e.message : String(e),\n };\n}\n","import { addAttribute, withPrefix } from \"../utils/otel\";\nimport { URL_DOMAIN, URL_FRAGMENT, URL_FULL, URL_PATH, URL_QUERY, URL_SCHEME } from \"../semantic-conventions\";\nimport { identity, parseUrl } from \"../utils\";\nimport { vars } from \"../vars\";\nexport function addUrlAttributes(attributes, url, prefix) {\n const applyPrefix = withPrefix(prefix);\n try {\n const parsed = parseUrl(url);\n if (parsed.username)\n parsed.username = \"REDACTED\";\n if (parsed.password)\n parsed.password = \"REDACTED\";\n const attrs = vars.urlAttributeScrubber({\n [URL_FULL]: parsed.href,\n [URL_PATH]: parsed.pathname,\n [URL_DOMAIN]: parsed.hostname,\n [URL_SCHEME]: parsed.protocol.replace(\":\", \"\"),\n [URL_FRAGMENT]: parsed.hash ? parsed.hash.replace(\"#\", \"\") : undefined,\n [URL_QUERY]: parsed.search ? parsed.search.replace(\"?\", \"\") : undefined,\n });\n Object.entries(attrs).forEach(([key, value]) => {\n if (value !== undefined) {\n addAttribute(attributes, applyPrefix(key), value);\n }\n });\n }\n catch (_e) {\n // This is fallback handling in case the url failed to parse or the user defined attribute scrubber behaved unexpectedly\n // If the user did not attempt scrubbing we'll supply the full url for debugging purposes, otherwise we drop all url\n // attributes\n if (vars.urlAttributeScrubber === identity) {\n // `identity` is the default assignment for this option\n addAttribute(attributes, applyPrefix(URL_FULL), String(url));\n }\n }\n}\n","// sessionStorage API re-exposed to allow testing.\nimport { sessionStorage } from \"./globals\";\nexport const isSupported = sessionStorage != null &&\n typeof sessionStorage.getItem === \"function\" &&\n typeof sessionStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && sessionStorage) {\n return sessionStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && sessionStorage) {\n sessionStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && sessionStorage) {\n sessionStorage.removeItem(k);\n }\n}\n","import { getItem, isSupported, setItem } from \"./session-storage\";\nimport { debug, warn } from \"./debug\";\nimport { generateUniqueId, TAB_ID_BYTES } from \"./id\";\nconst TAB_ID_STORAGE_KEY = \"d0_tab\";\nexport let tabId = null;\n/**\n * We want to be able to identify what browser tab the user is looking at. We do this by identifying tabs through\n * random-generated IDs that are kept in session storage. To quote MDN:\n *\n * > sessionStorage is partitioned by both origin and browser tabs (top-level browsing contexts)\n */\nexport function initializeTabId() {\n if (!isSupported) {\n debug(\"Storage API is not available and tab tracking is therefore not supported.\");\n return;\n }\n try {\n const storedValue = getItem(TAB_ID_STORAGE_KEY);\n if (storedValue) {\n tabId = storedValue;\n return;\n }\n tabId = generateUniqueId(TAB_ID_BYTES);\n setItem(TAB_ID_STORAGE_KEY, tabId);\n }\n catch (e) {\n warn(\"Failed to record tab ID information\", e);\n }\n}\n","import { generateUniqueId, nav, NO_VALUE_FALLBACK, WEB_EVENT_ID_BYTES, win } from \"../utils\";\nimport { BROWSER_TAB_ID, NETWORK_CONNECTION_TYPE, PAGE_URL_ATTR_PREFIX, SESSION_ID, WEB_EVENT_ID, WINDOW_HEIGHT, WINDOW_WIDTH, } from \"../semantic-conventions\";\nimport { sessionId } from \"../api/session\";\nimport { vars } from \"../vars\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addUrlAttributes } from \"./url\";\nimport { tabId } from \"../utils/tab-id\";\nexport function addCommonAttributes(attributes, options) {\n if (attributes.find((attribute) => attribute.key === WEB_EVENT_ID) === undefined) {\n addAttribute(attributes, WEB_EVENT_ID, generateUniqueId(WEB_EVENT_ID_BYTES));\n }\n for (let i = 0; i < vars.signalAttributes.length; i++) {\n attributes.push(vars.signalAttributes[i]);\n }\n addUrlAttributes(attributes, options?.url ?? win?.location.href ?? NO_VALUE_FALLBACK, PAGE_URL_ATTR_PREFIX);\n if (sessionId) {\n addAttribute(attributes, SESSION_ID, sessionId);\n }\n if (tabId) {\n addAttribute(attributes, BROWSER_TAB_ID, tabId);\n }\n addAttribute(attributes, WINDOW_WIDTH, win?.innerWidth ?? NO_VALUE_FALLBACK);\n addAttribute(attributes, WINDOW_HEIGHT, win?.innerHeight ?? NO_VALUE_FALLBACK);\n // @ts-expect-error -- TypeScript is not aware of navigator.connection.effectiveType\n const connectionType = nav?.connection?.effectiveType;\n if (connectionType) {\n addAttribute(attributes, NETWORK_CONNECTION_TYPE, connectionType);\n }\n}\n","import { hasOwnProperty, nowNanos, win } from \"../../utils\";\nimport { isErrorMessageIgnored } from \"../../utils/ignore-rules\";\nimport { sendLog } from \"../../transport\";\nimport { EVENT_NAME, EVENT_NAMES, EXCEPTION_COMPONENT_STACK, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, LOG_SEVERITIES, } from \"../../semantic-conventions\";\nimport { addAttribute, addAttributes } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nconst MAX_ERRORS_TO_REPORT = 100;\nconst MAX_STACK_SIZE = 30;\nconst MAX_NUMBER_OF_TRACKED_ERRORS = 20;\nlet reportedErrors = 0;\nlet numberOfDifferentErrorsSeen = 0;\nlet seenErrors = {};\nlet scheduledTransmissionTimeoutHandle;\n// We are wrapping global listeners. In these, we are catching and rethrowing errors.\n// In older browsers, rethrowing errors actually manipulates the error objects. As a\n// result, it is not possible to just mark an error as reported. The simplest way to\n// avoid double reporting is to temporarily disable the global onError handler…\nlet ignoreNextOnError = false;\nexport function ignoreNextOnErrorEvent() {\n ignoreNextOnError = true;\n}\nexport function startOnErrorInstrumentation() {\n if (!win)\n return;\n const globalOnError = win.onerror;\n win.onerror = function (message, fileName, lineNumber, columnNumber, error) {\n if (ignoreNextOnError) {\n ignoreNextOnError = false;\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n return;\n }\n let stack = error && error.stack;\n if (!stack) {\n stack = \"at \" + fileName + \" \" + lineNumber;\n if (columnNumber != null) {\n stack += \":\" + columnNumber;\n }\n }\n onUnhandledError({ message: String(message), stack });\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n };\n}\nexport function reportUnhandledError(error, opts) {\n if (!error) {\n return;\n }\n if (typeof error === \"string\") {\n onUnhandledError({ message: error, opts });\n }\n else {\n onUnhandledError({ message: error.message, type: error.name, stack: error.stack, opts });\n }\n}\nfunction onUnhandledError({ message, type, stack, opts }) {\n if (!message || reportedErrors > MAX_ERRORS_TO_REPORT) {\n return;\n }\n if (isErrorMessageIgnored(message)) {\n return;\n }\n if (numberOfDifferentErrorsSeen >= MAX_NUMBER_OF_TRACKED_ERRORS) {\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n }\n message = String(message).substring(0, 300);\n stack = shortenStackTrace(stack);\n const location = win?.location.href;\n const key = message + stack + location;\n let trackedError = seenErrors[key];\n if (trackedError) {\n trackedError.seenCount++;\n }\n else {\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.ERROR);\n addAttribute(attributes, EXCEPTION_MESSAGE, message);\n if (type) {\n addAttribute(attributes, EXCEPTION_TYPE, type);\n }\n if (stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, stack);\n }\n if (opts?.componentStack) {\n addAttribute(attributes, EXCEPTION_COMPONENT_STACK, opts?.componentStack.substring(0, 2048));\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n trackedError = {\n seenCount: 1,\n transmittedCount: 0,\n log: {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.ERROR,\n severityText: \"ERROR\",\n body: {\n stringValue: message,\n },\n },\n };\n seenErrors[key] = trackedError;\n numberOfDifferentErrorsSeen++;\n }\n scheduleTransmission();\n}\nexport function shortenStackTrace(stack) {\n return String(stack || \"\")\n .split(\"\\n\")\n .slice(0, MAX_STACK_SIZE)\n .join(\"\\n\");\n}\nfunction scheduleTransmission() {\n if (scheduledTransmissionTimeoutHandle) {\n return;\n }\n scheduledTransmissionTimeoutHandle = setTimeout(send, 1000);\n}\nfunction send() {\n if (scheduledTransmissionTimeoutHandle) {\n clearTimeout(scheduledTransmissionTimeoutHandle);\n scheduledTransmissionTimeoutHandle = null;\n }\n for (const key in seenErrors) {\n if (hasOwnProperty(seenErrors, key)) {\n const seenError = seenErrors[key];\n if (seenError.seenCount > seenError.transmittedCount) {\n sendLog(seenError.log);\n reportedErrors++;\n }\n }\n }\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n}\n","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let o,s;return r=>{t.value>=0&&(r||i)&&(s=t.value-(o??0),(s||void 0===o)&&(o=t.value,t.delta=s,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},o=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},s=()=>{const e=o();return e?.activationStart??0},r=(t,n=-1)=>{const i=o();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||s()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,m=e=>{\"hidden\"===document.visibilityState&&u>-1&&(u=\"visibilitychange\"===e.type?e.timeStamp:0,v())},g=()=>{addEventListener(\"visibilitychange\",m,!0),addEventListener(\"prerenderingchange\",m,!0)},v=()=>{removeEventListener(\"visibilitychange\",m,!0),removeEventListener(\"prerenderingchange\",m,!0)},p=()=>{if(u<0){const e=s(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??l(),g(),t((()=>{setTimeout((()=>{u=l(),g()}))}))}return{get firstHiddenTime(){return u}}},y=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},b=[1800,3e3],P=(e,o={})=>{y((()=>{const c=p();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-s(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,b,o.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,b,o.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},T=[.1,.25],E=(e,o={})=>{P(f((()=>{let s,c=r(\"CLS\",0);const f=a(o,d),u=e=>{for(const t of e)f.h(t);f.i>c.value&&(c.value=f.i,c.entries=f.o,s())},l=h(\"layout-shift\",u);l&&(s=n(e,c,T,o.reportAllChanges),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(u(l.takeRecords()),s(!0))})),t((()=>{f.i=0,c=r(\"CLS\",0),s=n(e,c,T,o.reportAllChanges),i((()=>s()))})),setTimeout(s))})))};let _=0,L=1/0,M=0;const C=e=>{for(const t of e)t.interactionId&&(L=Math.min(L,t.interactionId),M=Math.max(M,t.interactionId),_=M?(M-L)/7+1:0)};let I;const w=()=>I?_:performance.interactionCount??0,F=()=>{\"interactionCount\"in performance||I||(I=h(\"event\",C,{type:\"event\",buffered:!0,durationThreshold:0}))};let k=0;class A{u=[];l=new Map;m;v;p(){k=w(),this.u.length=0,this.l.clear()}P(){const e=Math.min(this.u.length-1,Math.floor((w()-k)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.T){if(n?e.duration>n.T?(n.entries=[e],n.T=e.duration):e.duration===n.T&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],T:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.T-e.T)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.v?.(n)}}}const B=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),document.addEventListener(\"visibilitychange\",e,{once:!0}),t((()=>{e(),document.removeEventListener(\"visibilitychange\",e)})))},N=[200,500],S=(e,i={})=>{globalThis.PerformanceEventTiming&&\"interactionId\"in PerformanceEventTiming.prototype&&y((()=>{F();let o,s=r(\"INP\");const c=a(i,A),d=e=>{B((()=>{for(const t of e)c.h(t);const t=c.P();t&&t.T!==s.value&&(s.value=t.T,s.entries=t.entries,o())}))},f=h(\"event\",d,{durationThreshold:i.durationThreshold??40});o=n(e,s,N,i.reportAllChanges),f&&(f.observe({type:\"first-input\",buffered:!0}),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(d(f.takeRecords()),o(!0))})),t((()=>{c.p(),s=r(\"INP\"),o=n(e,s,N,i.reportAllChanges)})))}))};class q{m;h(e){this.m?.(e)}}const x=[2500,4e3],O=(e,o={})=>{y((()=>{const c=p();let d,u=r(\"LCP\");const l=a(o,q),m=e=>{o.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-s(),0),u.entries=[t],d())},g=h(\"largest-contentful-paint\",m);if(g){d=n(e,u,x,o.reportAllChanges);const s=f((()=>{m(g.takeRecords()),g.disconnect(),d(!0)}));for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,(()=>B(s)),{capture:!0,once:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,x,o.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},$=[800,1800],D=e=>{document.prerendering?y((()=>D(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>D(e)),!0):setTimeout(e)},H=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,$,i.reportAllChanges);D((()=>{const d=o();d&&(c.value=Math.max(d.responseStart-s(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,$,i.reportAllChanges),a(!0)})))}))};export{T as CLSThresholds,b as FCPThresholds,N as INPThresholds,x as LCPThresholds,$ as TTFBThresholds,E as onCLS,P as onFCP,S as onINP,O as onLCP,H as onTTFB};\n","import { onLCP, onINP, onCLS } from \"web-vitals\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { nowNanos, roundToTwoDecimals } from \"../utils\";\nimport { sendLog } from \"../transport\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addCommonAttributes } from \"../attributes\";\nexport function startWebVitalsInstrumentation() {\n onLCP(onWebVital, { reportAllChanges: true });\n onINP(onWebVital, { reportAllChanges: true });\n onCLS(onWebVital, { reportAllChanges: true });\n}\nfunction onWebVital(metric) {\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.WEB_VITAL);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", metric.name);\n addAttribute(bodyAttributes, \"value\", roundToTwoDecimals(metric.value));\n addAttribute(bodyAttributes, \"delta\", roundToTwoDecimals(metric.delta));\n const log = {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n sendLog(log);\n}\n","import { win } from \"../../utils\";\nimport { reportUnhandledError } from \"./unhandled-error\";\nconst MESSAGE_PREFIX = \"Unhandled promise rejection: \";\nconst STACK_UNAVAILABLE_MESSAGE = \"<unavailable because Promise wasn't rejected with an Error object>\";\nexport function startUnhandledRejectionInstrumentation() {\n if (typeof win?.addEventListener === \"function\") {\n win.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n }\n}\nexport function onUnhandledRejection(event) {\n if (event.reason == null) {\n reportUnhandledError({\n message: MESSAGE_PREFIX + \"<no reason defined>\",\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason.message === \"string\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason.message,\n stack: typeof event.reason.stack === \"string\" ? event.reason.stack : STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason !== \"object\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason,\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n}\n","const WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY = \"__dash0OriginalFunctions\";\n// Asynchronous function wrapping: The process of wrapping a listener which goes into one function, e.g.\n//\n// - EventTarget#addEventListener\n// - EventEmitter#on\n//\n// and is removed via another function, e.g.\n//\n// - EventTarget#removeEventListener\n// - EventEmitter#off\n//\n// What is complicated about this, is that these methods identify registered listeners by function reference.\n// When we wrap a function, we naturally change the reference. We must therefore keep track of which\n// original function belongs to what wrapped function.\n//\n// This file provides helpers that help in the typical cases. It is removed from all browser specific APIs\n// in order to allow simple unit test execution.\n//\n// Note that this file follows the behavior outlined in DOM specification. Among others, this means that it is not\n// possible to register the same listener twice.\n// http://dom.spec.whatwg.org\nexport function addWrappedFunction(storageTarget, wrappedFunction, valuesForEqualityCheck) {\n if (!storageTarget)\n return wrappedFunction;\n const storage = (storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] =\n storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] || []);\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index !== -1) {\n // already registered. Do not allow re-registration\n return storage[index].wrappedFunction;\n }\n storage.push({\n wrappedFunction,\n valuesForEqualityCheck,\n });\n return wrappedFunction;\n}\nfunction findInStorage(storageTarget, valuesForEqualityCheck) {\n const storage = storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n for (let i = 0; i < storage.length; i++) {\n const storageItem = storage[i];\n if (matchesEqualityCheck(storageItem.valuesForEqualityCheck, valuesForEqualityCheck)) {\n return i;\n }\n }\n return -1;\n}\nexport function popWrappedFunction(storageTarget, valuesForEqualityCheck, fallback) {\n const storage = storageTarget?.[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n if (storage == null) {\n return fallback;\n }\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index === -1) {\n return fallback;\n }\n const storageItem = storage[index];\n storage.splice(index, 1);\n return storageItem.wrappedFunction;\n}\nfunction matchesEqualityCheck(valuesForEqualityCheckA, valuesForEqualityCheckB) {\n if (valuesForEqualityCheckA.length !== valuesForEqualityCheckB.length) {\n return false;\n }\n for (let i = 0; i < valuesForEqualityCheckA.length; i++) {\n if (valuesForEqualityCheckA[i] !== valuesForEqualityCheckB[i]) {\n return false;\n }\n }\n return true;\n}\nexport function addWrappedDomEventListener(storageTarget, wrappedFunction, eventName, eventListener, optionsOrCapture) {\n return addWrappedFunction(storageTarget, wrappedFunction, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture));\n}\nfunction getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture) {\n return [eventName, eventListener, getDomEventListenerCaptureValue(optionsOrCapture)];\n}\nexport function getDomEventListenerCaptureValue(optionsOrCapture) {\n // > Let capture, passive, and once be the result of flattening more options.\n // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n //\n // > To flatten more options, run these steps:\n // > 1. Let capture be the result of flattening options.\n // https://dom.spec.whatwg.org/#event-flatten-more\n //\n // > To flatten options, run these steps:\n // > 1. If options is a boolean, then return options.\n // > 2. Return options’s capture.\n // https://dom.spec.whatwg.org/#concept-flatten-options\n //\n // > dictionary EventListenerOptions {\n // > boolean capture = false;\n // > };\n // https://dom.spec.whatwg.org/#dom-eventlisteneroptions-capture\n if (optionsOrCapture == null) {\n return false;\n }\n else if (typeof optionsOrCapture === \"object\") {\n return Boolean(optionsOrCapture.capture);\n }\n return Boolean(optionsOrCapture);\n}\nexport function popWrappedDomEventListener(storageTarget, eventName, eventListener, optionsOrCapture, fallback) {\n return popWrappedFunction(storageTarget, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture), fallback);\n}\n","import { vars } from \"../../vars\";\nimport { win } from \"../../utils\";\nimport { addWrappedDomEventListener, popWrappedDomEventListener, } from \"./async-function-wrapping\";\nimport { ignoreNextOnErrorEvent, reportUnhandledError } from \"./unhandled-error\";\nexport function startEventHandlerInstrumentation() {\n if (vars.wrapEventHandlers) {\n wrapEventTarget(win?.EventTarget);\n }\n}\nfunction wrapEventTarget(EventTarget) {\n if (!EventTarget ||\n typeof EventTarget.prototype.addEventListener !== \"function\" ||\n typeof EventTarget.prototype.removeEventListener !== \"function\") {\n return;\n }\n const originalAddEventListener = EventTarget.prototype.addEventListener;\n const originalRemoveEventListener = EventTarget.prototype.removeEventListener;\n EventTarget.prototype.addEventListener = function wrappedAddEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalAddEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = function wrappedEventListener() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportUnhandledError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n args[1] = addWrappedDomEventListener(this, args[1], eventName, fn, optionsOrCapture);\n return originalAddEventListener.apply(this, args);\n };\n EventTarget.prototype.removeEventListener = function wrappedRemoveEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalRemoveEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = popWrappedDomEventListener(this, eventName, fn, optionsOrCapture, fn);\n return originalRemoveEventListener.apply(this, args);\n };\n}\n","import { vars } from \"../../vars\";\nimport { isRunningZoneJs } from \"../../utils/timers\";\nimport { warn, win } from \"../../utils\";\nimport { ignoreNextOnErrorEvent } from \"./unhandled-error\";\nexport function startTimerInstrumentation() {\n if (vars.wrapTimers) {\n if (isRunningZoneJs) {\n warn(\"We discovered a usage of Zone.js. In order to avoid any incompatibility issues timer wrapping is not going to be enabled.\");\n return;\n }\n wrapTimer(\"setTimeout\");\n wrapTimer(\"setInterval\");\n }\n}\nfunction wrapTimer(name) {\n const original = win?.[name];\n if (typeof original !== \"function\") {\n // cannot wrap because fn is not a function – should actually never happen\n return;\n }\n win[name] = function wrappedTimerSetter(fn) {\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[0] = wrap(fn);\n return original.apply(this, args);\n };\n}\nfunction wrap(fn) {\n if (typeof fn !== \"function\") {\n // cannot wrap because fn is not a function\n return fn;\n }\n return function wrappedTimerHandler() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n}\n","import { startOnErrorInstrumentation } from \"./unhandled-error\";\nimport { startUnhandledRejectionInstrumentation } from \"./unhandled-promise-rejection\";\nimport { startEventHandlerInstrumentation } from \"./event-handlers\";\nimport { startTimerInstrumentation } from \"./timers\";\nexport function startErrorInstrumentation() {\n startOnErrorInstrumentation();\n startUnhandledRejectionInstrumentation();\n startEventHandlerInstrumentation();\n startTimerInstrumentation();\n}\n","import { HTTP_REQUEST_HEADER, HTTP_RESPONSE_HEADER } from \"../../semantic-conventions\";\nexport function httpRequestHeaderKey(key) {\n return `${HTTP_REQUEST_HEADER}.${key.toLowerCase()}`;\n}\nexport function httpResponseHeaderKey(key) {\n return `${HTTP_RESPONSE_HEADER}.${key.toLowerCase()}`;\n}\n","import { addAttribute, addSpanEvent, addW3CTraceContextHttpHeaders, addXRayTraceContextHttpHeaders, endSpan, errorToSpanStatus, recordException, } from \"../../utils/otel\";\nimport { domHRTimestampToNanos, hasKey, isSameOrigin, PerformanceTimingNames } from \"../../utils\";\nimport { matchesAny } from \"../../utils/ignore-rules\";\nimport { ERROR_TYPE, HTTP_RESPONSE_BODY_SIZE, WEB_REQUEST_CANCELLED } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { sendSpan } from \"../../transport\";\n// SEE: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/attributes-registry/http.md?plain=1#L67\nconst KNOWN_HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"CONNECT\", \"OPTIONS\", \"TRACE\", \"PATCH\"];\nexport const HTTP_METHOD_OTHER = \"_OTHER\";\nexport function isWellKnownHttpMethod(method) {\n return KNOWN_HTTP_METHODS.includes(method);\n}\nexport function addResourceNetworkEvents(span, resource) {\n const ignoreZeros = resource.startTime !== 0;\n addSpanNetworkEvent(span, PerformanceTimingNames.FETCH_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.SECURE_CONNECTION_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.REQUEST_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_END, resource, ignoreZeros);\n}\nfunction addSpanNetworkEvent(span, propertyName, resource, ignoreZeros = true) {\n if (!hasKey(resource, propertyName) ||\n typeof resource[propertyName] !== \"number\" ||\n (ignoreZeros && resource[propertyName] === 0)) {\n return;\n }\n addSpanEvent(span, propertyName, domHRTimestampToNanos(resource[propertyName]));\n}\nexport function addResourceSize(span, resource) {\n const encodedLength = resource.encodedBodySize;\n if (encodedLength != undefined) {\n addAttribute(span.attributes, HTTP_RESPONSE_BODY_SIZE, encodedLength);\n }\n}\n// Sets error.type alongside the recorded exception so failed fetch and XHR spans are equally\n// queryable by error.type. The value is the exception name (e.g. TypeError) -- XHR's synthetic\n// failure exceptions carry their failure kind (\"error\"/\"timeout\") as the name, so both\n// instrumentations converge here. Note the shapes still differ for cases inherent to the APIs:\n// a fetch that resolves with status 0 (e.g. opaque responses) never reaches this function and\n// instead gets error.type = response.type plus http.response.status_code \"0\".\nexport function endSpanOnError(span, error) {\n recordException(span, error);\n const errorType = typeof error === \"object\" && error ? (error.name ?? (error.code != null ? String(error.code) : \"error\")) : \"error\";\n addAttribute(span.attributes, ERROR_TYPE, errorType);\n sendSpan(endSpan(span, errorToSpanStatus(error), undefined));\n}\n// Cancellations are benign: no error status, no error.type. This also covers fetch calls aborted\n// by AbortSignal.timeout() -- the signal is aborted by the time the rejection is handled, so a\n// fetch timeout surfaces as a cancellation while an XHR timeout is an ERROR span with\n// error.type = \"timeout\". That asymmetry is inherent to the two APIs.\nexport function endSpanOnAbort(span) {\n addAttribute(span.attributes, WEB_REQUEST_CANCELLED, true);\n sendSpan(endSpan(span, undefined, undefined));\n}\nexport function determinePropagatorTypes(url) {\n const matchingTypes = [];\n const isUrlSameOrigin = isSameOrigin(url);\n // For same-origin requests, always include traceparent + all configured propagators\n if (isUrlSameOrigin) {\n // Always add traceparent for same-origin requests\n matchingTypes.push(\"traceparent\");\n // Add all other configured propagator types for same-origin requests\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (propagator.type !== \"traceparent\" && !matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n // For cross-origin requests, use new propagators config if available\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (matchesAny(propagator.match, url)) {\n // Avoid duplicates\n if (!matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n return [];\n}\nexport function addTraceContextHttpHeaders(fn, ctx, span, types) {\n for (const type of types) {\n if (type === \"xray\") {\n addXRayTraceContextHttpHeaders(fn, ctx, span);\n }\n else {\n addW3CTraceContextHttpHeaders(fn, ctx, span);\n }\n }\n}\n","import { debug, observeResourcePerformance, perf, win, setTimeout, wrap, parseUrl, clearTimeout } from \"../../utils\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addAttribute, endSpan, setSpanStatus, startSpan } from \"../../utils/otel\";\nimport { ERROR_TYPE, HTTP_REQUEST_METHOD, HTTP_REQUEST_METHOD_ORIGINAL, HTTP_RESPONSE_STATUS_CODE, SPAN_STATUS_ERROR, SPAN_STATUS_UNSET, } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { httpRequestHeaderKey, httpResponseHeaderKey } from \"../../utils/otel/http\";\nimport { sendSpan } from \"../../transport\";\nimport { addResourceNetworkEvents, addResourceSize, addTraceContextHttpHeaders, determinePropagatorTypes, endSpanOnAbort, endSpanOnError, HTTP_METHOD_OTHER, isWellKnownHttpMethod, } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes } from \"../../attributes\";\nexport function instrumentFetch() {\n if (!win || !win.fetch || !win.Request) {\n debug(\"Browser does not support the Fetch API, skipping instrumentation\");\n return;\n }\n wrap(win, \"fetch\", wrapFetch);\n}\n// eslint-disable-next-line no-restricted-globals -- only used as type here\nfunction wrapFetch(original) {\n return async function fetchWithInstrumentation(input, init) {\n let fetchInput = input;\n let request;\n let instrumentation;\n try {\n let copyOfInit = init ? Object.assign({}, init) : init;\n let body = null;\n if (copyOfInit?.body) {\n body = copyOfInit.body;\n copyOfInit.body = undefined;\n }\n request = new Request(input, copyOfInit);\n if (body && copyOfInit) {\n copyOfInit.body = body;\n }\n // Constructing the Request above disturbs the body of a Request input, so from here on the\n // copy has to be handed to the original fetch in place of the input -- including on the\n // ignored and instrumentation-failure paths below.\n fetchInput = input instanceof Request ? request : input;\n if (isUrlIgnored(request.url)) {\n debug(`Not creating span for fetch call because the url is ignored, URL: ${request.url}`);\n // Note: the rejection of the returned promise does not route through the catch below --\n // only synchronous throws do, so the original fetch cannot be invoked twice.\n return original(fetchInput, init);\n }\n instrumentation = onFetchStart(input, init, request, copyOfInit);\n }\n catch (e) {\n debug(\"failed to instrument fetch call\", e);\n return original(fetchInput, init);\n }\n const { copyOfInit, span, performanceObserver } = instrumentation;\n try {\n const origResponse = await original(fetchInput, copyOfInit);\n addResponseData(span, origResponse);\n return wrapResponse(origResponse, vars.maxToleranceForResourceTimingsMillis, () => performanceObserver.end(), (e) => {\n performanceObserver.cancel();\n if (request?.signal?.aborted) {\n endSpanOnAbort(span);\n }\n else {\n endSpanOnError(span, e);\n }\n });\n }\n catch (e) {\n performanceObserver.cancel();\n if (request?.signal?.aborted) {\n endSpanOnAbort(span);\n }\n else {\n endSpanOnError(span, e);\n }\n throw e;\n }\n };\n}\nfunction onFetchStart(input, init, request, copyOfInit) {\n const url = request.url;\n // https://fetch.spec.whatwg.org/#concept-request-method\n // We'll match methods case insensitive here to make the user experience a bit less painful\n const originalMethod = request.method ?? \"GET\";\n const isWellKnownMethod = isWellKnownHttpMethod(originalMethod);\n const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n const method = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n const span = startSpan(`HTTP ${method}`);\n addCommonAttributes(span.attributes);\n addUrlAttributes(span.attributes, url);\n addGraphQlProperties(input, init, span);\n addAttribute(span.attributes, HTTP_REQUEST_METHOD, method);\n if (!isWellKnownMethod) {\n addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, originalMethod);\n }\n const propagatorTypes = determinePropagatorTypes(url);\n const shouldSetCorrelationHeaders = propagatorTypes.length > 0;\n if (shouldSetCorrelationHeaders) {\n if (copyOfInit?.headers) {\n // ensure we have a unified container for the headers\n copyOfInit.headers = new Headers(copyOfInit.headers);\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n else if (input instanceof Request) {\n addTraceContextHttpHeaders(request.headers.append, request.headers, span, propagatorTypes);\n }\n else {\n if (!copyOfInit) {\n copyOfInit = {};\n }\n copyOfInit.headers = new Headers();\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n }\n tryCaptureHttpHeaders(request.headers, span, (k) => httpRequestHeaderKey(k));\n const performanceObserver = observeResourcePerformance({\n // We match on both fetch and XHR here to support polyfills\n resourceMatcher: ({ initiatorType, name }) => (initiatorType === \"fetch\" || initiatorType === \"xmlhttprequest\") && name === parseUrl(url).href,\n maxWaitForResourceMillis: vars.maxWaitForResourceTimingsMillis,\n maxToleranceForResourceTimingsMillis: vars.maxToleranceForResourceTimingsMillis,\n onEnd: ({ duration, resource }) => {\n if (resource) {\n addResourceNetworkEvents(span, resource);\n addResourceSize(span, resource);\n }\n // duration is millis we need to convert to nanos\n sendSpan(endSpan(span, undefined, duration * 1000000));\n },\n });\n performanceObserver.start();\n return { copyOfInit, span, performanceObserver };\n}\n// @ts-expect-error -- WIP\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction addGraphQlProperties(input, init, span) {\n try {\n if (!isGraphQLQuery(input, init))\n return;\n }\n catch (e) {\n debug(\"failed to analyze request for GraphQL insights\", e, input, init);\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction isGraphQLQuery(input, init) {\n /**\n * TODO: Add GraphQL support.\n * GraphQL queries are either POST or GET requests.\n * Identified by either setting Accept=application/graphql-response+json or the url matching a config field for graphql urls.\n * See: https://graphql.github.io/graphql-over-http/draft/\n * GET requests are queries carrying a query search param\n * POST requests are either queries or mutations, See: https://graphql.org/learn/serving-over-http/#post-request-and-body\n * and https://github.com/instana/weasel/blob/main/lib/hooks/Fetch.ts#L201\n */\n return false;\n}\nfunction tryCaptureHttpHeaders(headers, span, getAttributeKey) {\n try {\n if (!vars.headersToCapture.length)\n return;\n headers.forEach((value, key) => {\n if (vars.headersToCapture.some((rxp) => rxp.test(key))) {\n addAttribute(span.attributes, getAttributeKey(key), value);\n }\n });\n }\n catch (e) {\n debug(\"unable to capture http headers\", e);\n }\n}\nfunction addResponseData(span, response) {\n const status = response.status;\n setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR);\n if (status === 0) {\n addAttribute(span.attributes, ERROR_TYPE, response.type);\n }\n addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n tryCaptureHttpHeaders(response.headers, span, (k) => httpResponseHeaderKey(k));\n}\n/**\n * Wraps the response to be able to detect when it is fully read\n * @param originalResponse\n * @param readTimeoutMs Timeout applied between reading of response chunks, if exceeded the response is considered abandoned and onDone is called.\n * @param onDone Called when the response is completely read or with \"fallbackEndTs\" when reading timed out.\n * @param onError\n */\nfunction wrapResponse(originalResponse, readTimeoutMs, onDone, onError) {\n // When the response was wrapped (i.e. first available to js) we use this to replace or find the actual end timestamp\n // in case the response body is never read by js\n let fallbackTs = perf.now();\n const body = originalResponse.body;\n // For some reason browsers return a response body on responses that can't be constructed with one. In that case we can't wrap the body stream\n if (!body || !responseCanHaveBody(originalResponse)) {\n onDone();\n return originalResponse;\n }\n let cbCalled = false;\n const handleDone = (fallbackEndTs) => {\n if (cbCalled)\n return;\n onDone(fallbackEndTs);\n cbCalled = true;\n };\n const handleError = (e) => {\n if (cbCalled)\n return;\n onError(e);\n cbCalled = true;\n };\n let bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n const reader = body.getReader();\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n const { value, done } = await reader.read();\n if (done) {\n reader.releaseLock();\n controller.close();\n handleDone();\n }\n else {\n fallbackTs = perf.now();\n bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n controller.enqueue(value);\n }\n }\n catch (e) {\n handleError(e);\n controller.error(e);\n try {\n reader.releaseLock();\n }\n catch {\n // Spec reference:\n // https://streams.spec.whatwg.org/#default-reader-release-lock\n //\n // releaseLock() only throws if called on an invalid reader\n // (i.e. reader.[[stream]] is undefined, meaning the lock is already released\n // or the reader was never associated). In normal use this cannot happen.\n // This catch is defensive only.\n }\n }\n },\n cancel(reason) {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n handleDone();\n return reader.cancel(reason);\n },\n });\n return new Response(stream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: originalResponse.headers,\n });\n}\nfunction responseCanHaveBody(response) {\n const status = response.status;\n return status >= 200 && status != 204 && status != 205 && status != 304;\n}\n","import { addEventListener, debug, observeResourcePerformance, parseUrl, removeEventListener, win, wrap, } from \"../../utils\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addAttribute, endSpan, recordException, setSpanStatus, startSpan, } from \"../../utils/otel\";\nimport { ERROR_TYPE, HTTP_REQUEST_METHOD, HTTP_REQUEST_METHOD_ORIGINAL, HTTP_RESPONSE_STATUS_CODE, SPAN_STATUS_ERROR, SPAN_STATUS_UNSET, } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { httpRequestHeaderKey, httpResponseHeaderKey } from \"../../utils/otel/http\";\nimport { sendSpan } from \"../../transport\";\nimport { addResourceNetworkEvents, addResourceSize, addTraceContextHttpHeaders, determinePropagatorTypes, endSpanOnAbort, endSpanOnError, HTTP_METHOD_OTHER, isWellKnownHttpMethod, } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes } from \"../../attributes\";\nconst XHR_STATE = Symbol(\"dash0XhrState\");\n// The un-wrapped setRequestHeader, captured when wrapping. Trace context headers are injected\n// through it so the SDK's own headers neither land in capturedRequestHeaders nor trip the\n// already-traced detection below.\nlet originalSetRequestHeader;\nexport function instrumentXhr() {\n if (!win || !win.XMLHttpRequest) {\n debug(\"Browser does not support XMLHttpRequest, skipping instrumentation\");\n return;\n }\n const proto = win.XMLHttpRequest.prototype;\n wrap(proto, \"open\", wrapOpen);\n wrap(proto, \"setRequestHeader\", wrapSetRequestHeader);\n wrap(proto, \"send\", wrapSend);\n}\nfunction wrapOpen(original) {\n return function (method, url, ...rest) {\n let openArgs = [method, url, ...rest];\n try {\n // Pass the pre-coerced URL to the native method so a side-effectful custom toString runs\n // once, not twice. The method arg stays untouched -- its coercion is SDK bookkeeping only.\n openArgs = [method, onOpen(this, method, url), ...rest];\n }\n catch (e) {\n // Clear stale state from a previous open() on a reused instance so send() doesn't\n // attribute the new request to old state.\n this[XHR_STATE] = undefined;\n debug(\"failed to instrument XMLHttpRequest.open\", e);\n }\n return original.apply(this, openArgs);\n };\n}\nfunction onOpen(xhr, method, url) {\n // Per spec, open() during an in-flight request terminates the fetch without firing\n // abort/loadend, so onLoadEnd never runs for the previous request. Clean it up here (before\n // anything below can throw) or its listeners, performance observer and span would leak on\n // every cancel-by-reopen cycle -- and its stale loadend listener would end the old span with\n // the next request's status.\n const previousState = xhr[XHR_STATE];\n if (previousState?.span && !previousState.completed) {\n cleanupAbandonedRequest(xhr, previousState);\n }\n const stringUrl = String(url);\n // Resolve relative URLs so ignore rules, propagator matching and url.* attributes see the same\n // absolute URL the fetch instrumentation matches against (Request resolves it there). Only the\n // SDK bookkeeping uses the resolved form -- the native open() still receives stringUrl.\n const resolvedUrl = parseUrl(stringUrl).href;\n const originalMethod = String(method ?? \"GET\");\n const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n const normalizedMethod = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n // A new open() call on a reused XHR instance resets state -- any prior span for this instance\n // has already been sent (completed requests) or was just ended as cancelled above, and this\n // open() is treated as the start of a brand-new request with its own span.\n xhr[XHR_STATE] = {\n method: normalizedMethod,\n originalMethod,\n isWellKnownMethod: isWellKnownHttpMethod(originalMethod),\n url: resolvedUrl,\n ignored: isUrlIgnored(resolvedUrl),\n propagatorTypes: determinePropagatorTypes(resolvedUrl),\n completed: false,\n };\n return stringUrl;\n}\nfunction wrapSetRequestHeader(original) {\n // wrap() only invokes this factory when it actually wraps (it skips already-instrumented\n // targets), so this can never capture the SDK's own wrapper on double instrumentation.\n originalSetRequestHeader = original;\n return function (name, value) {\n original.call(this, name, value);\n try {\n onSetRequestHeader(this, name, value);\n }\n catch (e) {\n debug(\"failed to instrument XMLHttpRequest.setRequestHeader\", e);\n }\n };\n}\nfunction onSetRequestHeader(xhr, name, value) {\n const state = xhr[XHR_STATE];\n if (!state || state.ignored)\n return;\n // Match against the lowercased name so a regex behaves the same here as for fetch,\n // where Headers iteration yields lowercased names.\n const lowerName = name.toLowerCase();\n // A trace correlation header showing up here means someone else is already tracing this\n // request -- the SDK injects its own headers via the un-wrapped setRequestHeader, so it never\n // trips this. The typical source is a fetch polyfill built on XHR: the fetch instrumentation\n // has already created a span and injected headers for the logical request, and the polyfill\n // replays them onto the underlying XHR. send() skips span creation and injection for such\n // requests -- a second injection would combine into one invalid comma-joined header value,\n // and a second span would double-report the request (the fetch span's resource matcher\n // already accepts initiatorType \"xmlhttprequest\" to cover polyfills). Note this only\n // detects the polyfill case when the fetch side actually injected headers (a propagator\n // matched the URL) -- without that, the polyfill case still yields two spans.\n if (lowerName === \"traceparent\" || lowerName === \"x-amzn-trace-id\") {\n state.alreadyTraced = true;\n }\n // Filter at capture time like the fetch instrumentation -- never retain unmatched\n // (potentially sensitive) headers on the page-reachable XHR instance.\n if (vars.headersToCapture.length === 0)\n return;\n if (!vars.headersToCapture.some((rxp) => rxp.test(lowerName)))\n return;\n const headers = (state.capturedRequestHeaders ??= {});\n // Native XHR combines repeated setRequestHeader() calls for the same name\n // (case-insensitively) into a single \"a, b\" value -- mirror that.\n headers[lowerName] = lowerName in headers ? `${headers[lowerName]}, ${value}` : value;\n}\nfunction wrapSend(original) {\n return function (body) {\n const state = this[XHR_STATE];\n if (!state || state.ignored) {\n if (state?.ignored) {\n debug(`Not creating span for XMLHttpRequest because the url is ignored, URL: ${state.url}`);\n }\n return original.call(this, body);\n }\n if (state.alreadyTraced) {\n debug(`Not creating span for XMLHttpRequest because a trace correlation header is already present, URL: ${state.url}`);\n return original.call(this, body);\n }\n // send() on an already-sent request throws InvalidStateError natively. Don't create a second\n // span and set of listeners for it -- that would overwrite the in-flight request's state and\n // attribute its response to the wrong span.\n if (state.span && !state.completed) {\n return original.call(this, body);\n }\n try {\n onSend(this, state);\n }\n catch (e) {\n cleanupFailedSend(this, state);\n debug(\"failed to instrument XMLHttpRequest.send\", e);\n }\n try {\n return original.call(this, body);\n }\n catch (e) {\n // Synchronous XHR reports network errors and timeouts by making send() throw -- per spec\n // no loadend fires for sync failures, so onLoadEnd never runs and this is the only place\n // the request can be finalized.\n endSpanOnSyncSendError(this, state, e);\n throw e;\n }\n };\n}\nfunction endSpanOnSyncSendError(xhr, state, error) {\n if (state.completed)\n return;\n state.completed = true;\n try {\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n state.performanceObserver?.cancel();\n const span = state.span;\n if (!span)\n return;\n const failureKind = state.failureKind ?? (error?.name === \"TimeoutError\" ? \"timeout\" : \"error\");\n recordException(span, error ?? { name: failureKind, message: `XMLHttpRequest failed: ${state.url}` });\n addAttribute(span.attributes, ERROR_TYPE, failureKind);\n sendSpan(endSpan(span, { code: SPAN_STATUS_ERROR, message: `XMLHttpRequest failed: ${state.url}` }, undefined));\n }\n catch (_e) {\n // Best-effort only -- never mask the page's original exception from send().\n }\n}\nfunction onSend(xhr, state) {\n const span = startSpan(`HTTP ${state.method}`);\n addCommonAttributes(span.attributes);\n addUrlAttributes(span.attributes, state.url);\n addAttribute(span.attributes, HTTP_REQUEST_METHOD, state.method);\n if (!state.isWellKnownMethod) {\n addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, state.originalMethod);\n }\n state.span = span;\n if (state.propagatorTypes.length > 0) {\n try {\n addTraceContextHttpHeaders((name, value) => (originalSetRequestHeader ?? xhr.setRequestHeader).call(xhr, name, value), xhr, span, state.propagatorTypes);\n }\n catch (e) {\n // setRequestHeader throws InvalidStateError if called before open() succeeded, or after\n // send(). This should not normally happen since we only reach here from within send()\n // itself with state populated by a prior open(), but guard defensively.\n debug(\"failed to inject trace context headers on XMLHttpRequest\", e);\n }\n }\n // Entries were already filtered against vars.headersToCapture (and lowercased) at\n // setRequestHeader() time.\n if (state.capturedRequestHeaders) {\n for (const [name, value] of Object.entries(state.capturedRequestHeaders)) {\n addAttribute(span.attributes, httpRequestHeaderKey(name), value);\n }\n }\n const performanceObserver = observeResourcePerformance({\n resourceMatcher: ({ initiatorType, name }) => initiatorType === \"xmlhttprequest\" && name === state.url,\n maxWaitForResourceMillis: vars.maxWaitForResourceTimingsMillis,\n maxToleranceForResourceTimingsMillis: vars.maxToleranceForResourceTimingsMillis,\n onEnd: ({ duration, resource }) => {\n if (resource) {\n addResourceNetworkEvents(span, resource);\n addResourceSize(span, resource);\n }\n sendSpan(endSpan(span, undefined, duration * 1000000));\n },\n });\n state.performanceObserver = performanceObserver;\n performanceObserver.start();\n // Keep references to the per-request listeners so onLoadEnd can remove them again -- loadend\n // fires for every request outcome, so cleanup there prevents listeners (and their state/span\n // closures) from accumulating on reused XHR instances.\n state.listeners = [\n [\n \"error\",\n () => {\n state.failureKind = \"error\";\n },\n ],\n [\n \"timeout\",\n () => {\n state.failureKind = \"timeout\";\n },\n ],\n [\n \"abort\",\n () => {\n state.failureKind = \"abort\";\n },\n ],\n [\"loadend\", () => onLoadEnd(xhr, state)],\n ];\n for (const [eventType, listener] of state.listeners) {\n addEventListener(xhr, eventType, listener);\n }\n}\nfunction cleanupAbandonedRequest(xhr, state) {\n // Mark completed first so a stray late event stays a no-op even if listener removal fails.\n state.completed = true;\n try {\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n state.performanceObserver?.cancel();\n if (state.span) {\n // Report the request as cancelled, matching how fetch reports aborted requests.\n endSpanOnAbort(state.span);\n }\n }\n catch (_e) {\n // Best-effort cleanup only -- never let it throw into the page's open() call.\n }\n}\nfunction cleanupFailedSend(xhr, state) {\n try {\n state.performanceObserver?.cancel();\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n }\n catch (_e) {\n // Best-effort cleanup only -- never let it throw into the page's send() call.\n }\n // Drop the span so a stray loadend for this request doesn't emit a half-initialized span.\n state.span = undefined;\n}\nfunction onLoadEnd(xhr, state) {\n if (state.completed)\n return;\n state.completed = true;\n // The request cycle is over -- remove the per-request listeners so they don't pile up on reused\n // XHR instances.\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n const span = state.span;\n if (!span)\n return;\n const performanceObserver = state.performanceObserver;\n if (state.failureKind === \"abort\") {\n performanceObserver?.cancel();\n endSpanOnAbort(span);\n return;\n }\n let status = 0;\n try {\n status = xhr.status;\n }\n catch (_e) {\n // Reading .status can throw in some environments if accessed at the wrong readyState.\n status = 0;\n }\n if (state.failureKind === \"error\" || state.failureKind === \"timeout\" || status === 0) {\n performanceObserver?.cancel();\n const failureKind = state.failureKind ?? \"error\";\n // The failure kind doubles as the exception name, so endSpanOnError derives\n // error.type = failureKind from it.\n endSpanOnError(span, { name: failureKind, message: `XMLHttpRequest failed: ${state.url}` });\n return;\n }\n setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR);\n addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n tryCaptureResponseHeaders(xhr, span);\n performanceObserver?.end();\n}\nfunction tryCaptureResponseHeaders(xhr, span) {\n try {\n if (!vars.headersToCapture.length)\n return;\n const raw = xhr.getAllResponseHeaders();\n if (!raw)\n return;\n raw\n .split(/\\r?\\n/)\n .filter((line) => line.length > 0)\n .forEach((line) => {\n const separatorIndex = line.indexOf(\":\");\n if (separatorIndex === -1)\n return;\n const name = line.substring(0, separatorIndex).trim();\n const value = line.substring(separatorIndex + 1).trim();\n if (vars.headersToCapture.some((rxp) => rxp.test(name))) {\n addAttribute(span.attributes, httpResponseHeaderKey(name), value);\n }\n });\n }\n catch (e) {\n debug(\"unable to capture http response headers\", e);\n }\n}\n","import { addAttribute, getTraceContextForPageLoad } from \"../../utils/otel\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES, PAGE_VIEW_CHANGE_STATE, PAGE_VIEW_CHANGE_STATE_VALUES, PAGE_VIEW_TYPE, PAGE_VIEW_TYPE_VALUES, } from \"../../semantic-conventions\";\nimport { doc, NO_VALUE_FALLBACK } from \"../../utils\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { sendLog } from \"../../transport\";\nimport { vars } from \"../../vars\";\nfunction getPageViewMeta(url) {\n if (!url)\n return {};\n return vars.pageViewInstrumentation.generateMetadata?.(url) ?? {};\n}\nexport function transmitPageViewEvent(timeUnixNano, url, virtual, replaced) {\n const meta = getPageViewMeta(url);\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.PAGE_VIEW);\n if (meta.attributes) {\n Object.entries(meta.attributes).forEach(([key, value]) => addAttribute(attributes, key, value));\n }\n addCommonAttributes(attributes, { url });\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"title\", meta.title ?? doc?.title ?? NO_VALUE_FALLBACK);\n if (doc?.referrer) {\n addAttribute(bodyAttributes, \"referrer\", doc.referrer);\n }\n addAttribute(bodyAttributes, PAGE_VIEW_TYPE, virtual ? PAGE_VIEW_TYPE_VALUES.VIRTUAL : PAGE_VIEW_TYPE_VALUES.INITIAL);\n addAttribute(bodyAttributes, PAGE_VIEW_CHANGE_STATE, replaced ? PAGE_VIEW_CHANGE_STATE_VALUES.REPLACE : PAGE_VIEW_CHANGE_STATE_VALUES.PUSH);\n const log = {\n timeUnixNano: timeUnixNano,\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\n","import { addEventListener, debug, doc, win, roundToTwoDecimals, error, toNanosTs, getTimeOrigin } from \"../../utils\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../../semantic-conventions\";\nimport { sendLog } from \"../../transport\";\nimport { getTraceContextForPageLoad, addAttribute } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { transmitPageViewEvent } from \"./event\";\n/**\n * Tracks page loads as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageLoadInstrumentation() {\n try {\n transmitPageViewEvent(getStartTimeUnixNanos(), win?.location.href ? new URL(win?.location.href) : undefined);\n }\n catch (e) {\n error(\"Failed to transmit initial page view event\", e);\n }\n if (doc?.readyState === \"complete\") {\n return onLoaded();\n }\n if (win) {\n addEventListener(win, \"load\", function () {\n // we want to get timing data for loadEventEnd,\n // so asynchronously process this\n setTimeout(onLoaded, 0);\n });\n }\n}\n/**\n * See https://github.com/open-telemetry/semantic-conventions/pull/1919\n */\nfunction onLoaded() {\n const nt = win?.performance.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n debug(\"Navigation timings not available. Cannot emit navigation timing log\");\n return;\n }\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.NAVIGATION_TIMING);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", nt.name);\n addNavigationTiming(bodyAttributes, nt, \"responseStatus\");\n addNavigationTiming(bodyAttributes, nt, \"fetchStart\");\n addNavigationTiming(bodyAttributes, nt, \"requestStart\");\n addNavigationTiming(bodyAttributes, nt, \"responseStart\");\n addNavigationTiming(bodyAttributes, nt, \"domInteractive\");\n addNavigationTiming(bodyAttributes, nt, \"domContentLoadedEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"domComplete\");\n addNavigationTiming(bodyAttributes, nt, \"loadEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"transferSize\");\n addNavigationTiming(bodyAttributes, nt, \"encodedBodySize\");\n addNavigationTiming(bodyAttributes, nt, \"decodedBodySize\");\n const log = {\n timeUnixNano: getStartTimeUnixNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\nfunction addNavigationTiming(attributes, nt, field) {\n // @ts-expect-error index access not recognized by TS, but this makes the code more reusable\n const value = nt[field];\n if (typeof value === \"number\" && !isNaN(value)) {\n addAttribute(attributes, field, Number.isInteger(value) ? value : roundToTwoDecimals(value));\n }\n}\nfunction getStartTimeUnixNanos() {\n return toNanosTs(Math.round(getTimeOrigin()));\n}\n","import { debug, nowNanos, win, wrap } from \"../../utils\";\nimport { vars } from \"../../vars\";\nimport { transmitPageViewEvent } from \"./event\";\nlet currentLocation = {};\nlet shouldIncludeHashChanges = false;\nlet shouldIncludeSearchChanges = false;\n/**\n * Tracks page transitions (virtual page views) as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageTransitionInstrumentation() {\n if (!win || !win.history) {\n debug(\"Browser does not support history API, skipping instrumentation\");\n return;\n }\n if (!vars.pageViewInstrumentation.trackVirtualPageViews) {\n return;\n }\n shouldIncludeSearchChanges = vars.pageViewInstrumentation.includeParts?.includes(\"SEARCH\") ?? false;\n shouldIncludeHashChanges = vars.pageViewInstrumentation.includeParts?.includes(\"HASH\") ?? false;\n /**\n * Not wrapping history.go, history.backward and history.forward here, because their call signatures don't receive\n * url information. For these cases we can use the popstate and hashchange events.\n */\n wrap(win.history, \"replaceState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined, true);\n return original.apply(this, [state, unused, url]);\n });\n wrap(win.history, \"pushState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined);\n return original.apply(this, [state, unused, url]);\n });\n win.addEventListener(\"hashchange\", onHashChange);\n win.addEventListener(\"popstate\", onPopState);\n try {\n updateCurrentLocation(new URL(win.location.href));\n }\n catch { }\n}\nfunction onPopState() {\n // popState event is fired after the location entry has been updated, so the location should already contain the new url.\n onUrlChange(win?.location.href);\n}\nfunction onHashChange(event) {\n onUrlChange(event.newURL);\n}\nfunction onUrlChange(url, replaced) {\n if (!url)\n return;\n try {\n const parsedUrl = new URL(url, win?.location.href);\n if (isLocationChange(parsedUrl)) {\n updateCurrentLocation(parsedUrl);\n transmitPageViewEvent(nowNanos(), parsedUrl, true, Boolean(replaced));\n }\n }\n catch (e) {\n debug(\"Failed to handle url change\", e);\n }\n}\nfunction updateCurrentLocation(url) {\n currentLocation.path = url.pathname;\n currentLocation.search = url.search;\n currentLocation.hash = url.hash;\n}\nfunction isLocationChange(newUrl) {\n return (newUrl.pathname !== currentLocation.path ||\n (shouldIncludeSearchChanges && newUrl.search !== currentLocation.search) ||\n (shouldIncludeHashChanges && newUrl.hash !== currentLocation.hash));\n}\n","import { startPageLoadInstrumentation } from \"./page-load\";\nimport { startPageTransitionInstrumentation } from \"./page-transition\";\nexport function startNavigationInstrumentation() {\n startPageLoadInstrumentation();\n startPageTransitionInstrumentation();\n}\n","// Shared types and helpers for reading build-environment variables exposed\n// to the browser bundle. Owned by this module because it is used from both\n// init.ts (environment / deployment detection) and vcs.ts (VCS detection).\n//\n// IMPORTANT: each `process.env.NAME` MUST be a LITERAL accessor in the\n// caller's source. Webpack DefinePlugin, Next.js, Gatsby, and equivalents\n// substitute env vars at build time only when they see the literal form.\n// Dynamic lookups (`process.env[name]`, iterating a string array) are NOT\n// substituted — they resolve to `undefined` in the browser bundle.\n//\n// The type unions below are the single source of truth for which env var\n// names the SDK reads. They are composed via template-literal types so\n// every (prefix × suffix) combination is enumerated at the type level.\n// Adding a framework prefix is a one-line edit to `FrameworkPrefix`; adding\n// a suffix is a one-line edit to the appropriate suffix union.\n/**\n * Return the first truthy value, or undefined. Used to walk the list of\n * framework-prefixed variants of an env var and pick whichever the user's\n * bundler substituted at build time.\n *\n * The falsy check skips empty strings as well as undefined — bundlers that\n * do not substitute a literal leave it as `undefined`, not `\"\"`, so empty\n * is treated as \"not set\". This is intentional and matches every known\n * `VERCEL_GIT_*` / `REPOSITORY_URL` / etc. value shape (non-empty strings\n * or absent; Vercel PR IDs are positive integer strings, never `\"0\"`).\n */\nexport function pickFirstString(...values) {\n for (const value of values) {\n if (value)\n return value;\n }\n return undefined;\n}\n","import { vars } from \"../vars\";\nimport { VCS_CHANGE_ID, VCS_OWNER_NAME, VCS_PROVIDER_NAME, VCS_REF_HEAD_NAME, VCS_REF_HEAD_REVISION, VCS_REPOSITORY_NAME, VCS_REPOSITORY_URL_FULL, } from \"../semantic-conventions\";\nimport { addAttribute } from \"../utils/otel\";\nimport { pickFirstString } from \"./browser-env\";\n// Single source of truth mapping each VcsAttributes field to its OTel\n// resource attribute name. Typed as `Record<keyof VcsAttributes, string>` so\n// adding a field to VcsAttributes without adding an entry here is a compile\n// error — no silent \"I forgot to apply that field\" bugs.\nconst VCS_FIELD_TO_ATTRIBUTE = {\n providerName: VCS_PROVIDER_NAME,\n ownerName: VCS_OWNER_NAME,\n repositoryName: VCS_REPOSITORY_NAME,\n repositoryUrlFull: VCS_REPOSITORY_URL_FULL,\n refHeadName: VCS_REF_HEAD_NAME,\n refHeadRevision: VCS_REF_HEAD_REVISION,\n changeId: VCS_CHANGE_ID,\n};\n/**\n * Derive VCS (version control) context from the build environment and apply\n * the resulting `vcs.*` resource attributes to `vars.resource.attributes`.\n *\n * Detection precedence per attribute: `opts.vcs` → Vercel env vars → Netlify\n * env vars. Manual overrides via `opts.vcs` always win, even when\n * `opts.disableVcsDetection` is set.\n */\nexport function applyVcsResourceAttributes(opts) {\n const vcs = detectVcs(opts);\n for (const field of Object.keys(VCS_FIELD_TO_ATTRIBUTE)) {\n const value = vcs[field];\n if (value) {\n addAttribute(vars.resource.attributes, VCS_FIELD_TO_ATTRIBUTE[field], value);\n }\n }\n}\nfunction detectVcs(opts) {\n // opts.vcs manual overrides always win, even when auto-detection is disabled.\n // This lets callers on non-Vercel/Netlify platforms supply context explicitly\n // while still opting out of any env-var reading.\n const override = opts.vcs ?? {};\n if (opts.disableVcsDetection) {\n return override;\n }\n const vercel = detectVcsFromVercel();\n const netlify = detectVcsFromNetlify();\n return {\n providerName: override.providerName ?? vercel.providerName ?? netlify.providerName,\n ownerName: override.ownerName ?? vercel.ownerName ?? netlify.ownerName,\n repositoryName: override.repositoryName ?? vercel.repositoryName ?? netlify.repositoryName,\n repositoryUrlFull: override.repositoryUrlFull ?? vercel.repositoryUrlFull ?? netlify.repositoryUrlFull,\n refHeadName: override.refHeadName ?? vercel.refHeadName ?? netlify.refHeadName,\n refHeadRevision: override.refHeadRevision ?? vercel.refHeadRevision ?? netlify.refHeadRevision,\n changeId: override.changeId ?? vercel.changeId ?? netlify.changeId,\n };\n}\n// Frameworks expose env vars to the browser bundle using a per-framework\n// prefix (Next.js `NEXT_PUBLIC_*`, Vite `VITE_*`, etc.). For each known\n// vendor suffix (e.g. Vercel's `VERCEL_GIT_PROVIDER`, Netlify's\n// `REPOSITORY_URL`) we enumerate the prefixed variants below.\n//\n// IMPORTANT: each `process.env.NAME` MUST be a LITERAL accessor. Webpack\n// DefinePlugin, Next.js, Gatsby, and equivalents substitute env vars at\n// build time only when they see the literal form. Dynamic lookups like\n// `process.env[name]` or iterating a string array are NOT substituted —\n// they would resolve to `undefined` in the browser bundle.\n//\n// The 9 prefixes below are the framework presets Vercel auto-prefixes\n// `VERCEL_*` system vars under (https://vercel.com/docs/environment-variables/framework-environment-variables).\n// Users on platforms without auto-prefixing (Netlify, Cloudflare Pages, custom\n// CI) can manually expose any env var under any of these prefixes and get\n// the same auto-detection.\n//\n// Adding a new framework prefix = one new literal accessor per attribute in\n// each `detectVcsFrom*` function below.\nfunction detectVcsFromVercel() {\n let provider;\n let owner;\n let repo;\n let ref;\n let revision;\n let changeId;\n try {\n provider = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.NUXT_PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.NUXT_ENV_VERCEL_GIT_PROVIDER, process?.env?.REACT_APP_VERCEL_GIT_PROVIDER, process?.env?.GATSBY_VERCEL_GIT_PROVIDER, process?.env?.VITE_VERCEL_GIT_PROVIDER, process?.env?.PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.VUE_APP_VERCEL_GIT_PROVIDER, process?.env?.REDWOOD_ENV_VERCEL_GIT_PROVIDER, process?.env?.SANITY_STUDIO_VERCEL_GIT_PROVIDER);\n owner = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.NUXT_PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.NUXT_ENV_VERCEL_GIT_REPO_OWNER, process?.env?.REACT_APP_VERCEL_GIT_REPO_OWNER, process?.env?.GATSBY_VERCEL_GIT_REPO_OWNER, process?.env?.VITE_VERCEL_GIT_REPO_OWNER, process?.env?.PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.VUE_APP_VERCEL_GIT_REPO_OWNER, process?.env?.REDWOOD_ENV_VERCEL_GIT_REPO_OWNER, process?.env?.SANITY_STUDIO_VERCEL_GIT_REPO_OWNER);\n repo = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.NUXT_PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.NUXT_ENV_VERCEL_GIT_REPO_SLUG, process?.env?.REACT_APP_VERCEL_GIT_REPO_SLUG, process?.env?.GATSBY_VERCEL_GIT_REPO_SLUG, process?.env?.VITE_VERCEL_GIT_REPO_SLUG, process?.env?.PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.VUE_APP_VERCEL_GIT_REPO_SLUG, process?.env?.REDWOOD_ENV_VERCEL_GIT_REPO_SLUG, process?.env?.SANITY_STUDIO_VERCEL_GIT_REPO_SLUG);\n ref = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.NUXT_PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.NUXT_ENV_VERCEL_GIT_COMMIT_REF, process?.env?.REACT_APP_VERCEL_GIT_COMMIT_REF, process?.env?.GATSBY_VERCEL_GIT_COMMIT_REF, process?.env?.VITE_VERCEL_GIT_COMMIT_REF, process?.env?.PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.VUE_APP_VERCEL_GIT_COMMIT_REF, process?.env?.REDWOOD_ENV_VERCEL_GIT_COMMIT_REF, process?.env?.SANITY_STUDIO_VERCEL_GIT_COMMIT_REF);\n revision = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.NUXT_PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.NUXT_ENV_VERCEL_GIT_COMMIT_SHA, process?.env?.REACT_APP_VERCEL_GIT_COMMIT_SHA, process?.env?.GATSBY_VERCEL_GIT_COMMIT_SHA, process?.env?.VITE_VERCEL_GIT_COMMIT_SHA, process?.env?.PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.VUE_APP_VERCEL_GIT_COMMIT_SHA, process?.env?.REDWOOD_ENV_VERCEL_GIT_COMMIT_SHA, process?.env?.SANITY_STUDIO_VERCEL_GIT_COMMIT_SHA);\n changeId = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.NUXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.NUXT_ENV_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.REACT_APP_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.GATSBY_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.VITE_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.VUE_APP_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.REDWOOD_ENV_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.SANITY_STUDIO_VERCEL_GIT_PULL_REQUEST_ID);\n }\n catch (_ignored) {\n // process is not defined (or a bundler shimmed it strangely) — skip.\n }\n return {\n providerName: provider,\n ownerName: owner,\n repositoryName: repo,\n repositoryUrlFull: buildRepositoryUrlFromVercel(provider, owner, repo),\n refHeadName: ref,\n refHeadRevision: revision,\n changeId,\n };\n}\nfunction detectVcsFromNetlify() {\n // Netlify exposes read-only build env vars (REPOSITORY_URL, BRANCH,\n // COMMIT_REF, REVIEW_ID) but does not auto-prefix them for browser\n // exposure. Users must surface them via their framework's prefix\n // convention themselves (e.g. `NEXT_PUBLIC_REPOSITORY_URL = $REPOSITORY_URL`\n // for Next.js, `VITE_REPOSITORY_URL = $REPOSITORY_URL` for Vite, etc.).\n // We enumerate the same 9 framework prefixes as the Vercel path above.\n let repositoryUrl;\n let branch;\n let commit;\n let reviewId;\n try {\n repositoryUrl = pickFirstString(process?.env?.NEXT_PUBLIC_REPOSITORY_URL, process?.env?.NUXT_PUBLIC_REPOSITORY_URL, process?.env?.NUXT_ENV_REPOSITORY_URL, process?.env?.REACT_APP_REPOSITORY_URL, process?.env?.GATSBY_REPOSITORY_URL, process?.env?.VITE_REPOSITORY_URL, process?.env?.PUBLIC_REPOSITORY_URL, process?.env?.VUE_APP_REPOSITORY_URL, process?.env?.REDWOOD_ENV_REPOSITORY_URL, process?.env?.SANITY_STUDIO_REPOSITORY_URL);\n branch = pickFirstString(process?.env?.NEXT_PUBLIC_BRANCH, process?.env?.NUXT_PUBLIC_BRANCH, process?.env?.NUXT_ENV_BRANCH, process?.env?.REACT_APP_BRANCH, process?.env?.GATSBY_BRANCH, process?.env?.VITE_BRANCH, process?.env?.PUBLIC_BRANCH, process?.env?.VUE_APP_BRANCH, process?.env?.REDWOOD_ENV_BRANCH, process?.env?.SANITY_STUDIO_BRANCH);\n commit = pickFirstString(process?.env?.NEXT_PUBLIC_COMMIT_REF, process?.env?.NUXT_PUBLIC_COMMIT_REF, process?.env?.NUXT_ENV_COMMIT_REF, process?.env?.REACT_APP_COMMIT_REF, process?.env?.GATSBY_COMMIT_REF, process?.env?.VITE_COMMIT_REF, process?.env?.PUBLIC_COMMIT_REF, process?.env?.VUE_APP_COMMIT_REF, process?.env?.REDWOOD_ENV_COMMIT_REF, process?.env?.SANITY_STUDIO_COMMIT_REF);\n reviewId = pickFirstString(process?.env?.NEXT_PUBLIC_REVIEW_ID, process?.env?.NUXT_PUBLIC_REVIEW_ID, process?.env?.NUXT_ENV_REVIEW_ID, process?.env?.REACT_APP_REVIEW_ID, process?.env?.GATSBY_REVIEW_ID, process?.env?.VITE_REVIEW_ID, process?.env?.PUBLIC_REVIEW_ID, process?.env?.VUE_APP_REVIEW_ID, process?.env?.REDWOOD_ENV_REVIEW_ID, process?.env?.SANITY_STUDIO_REVIEW_ID);\n }\n catch (_ignored) {\n // process is not defined — skip.\n }\n const parsed = parseRepositoryUrl(repositoryUrl);\n return {\n providerName: parsed?.providerName,\n ownerName: parsed?.ownerName,\n repositoryName: parsed?.repositoryName,\n repositoryUrlFull: repositoryUrl,\n refHeadName: branch,\n refHeadRevision: commit,\n changeId: reviewId,\n };\n}\nfunction buildRepositoryUrlFromVercel(provider, owner, repo) {\n if (!provider || !owner || !repo)\n return undefined;\n const host = vcsHostForProvider(provider);\n if (!host)\n return undefined;\n return `https://${host}/${owner}/${repo}`;\n}\n// Single source of truth for provider↔host mapping. Both `vcsHostForProvider`\n// (Vercel path: provider name is known, derive the canonical host) and\n// `vcsProviderForHost` (Netlify path: only the URL is known, derive the\n// provider) consult this map so adding a provider is one edit. Each entry is\n// a list of accepted hostnames; the FIRST entry is the canonical host used\n// when building URLs from a provider name. Subsequent entries are exact\n// aliases — we do not match arbitrary subdomains.\nconst VCS_PROVIDER_HOSTS = {\n github: [\"github.com\", \"gist.github.com\"],\n gitlab: [\"gitlab.com\"],\n bitbucket: [\"bitbucket.org\"],\n};\nfunction vcsHostForProvider(provider) {\n return VCS_PROVIDER_HOSTS[provider]?.[0];\n}\nfunction parseRepositoryUrl(url) {\n if (!url)\n return undefined;\n let host;\n let pathname;\n try {\n const parsed = new URL(url);\n host = parsed.host;\n pathname = parsed.pathname;\n }\n catch (_ignored) {\n return undefined;\n }\n const provider = vcsProviderForHost(host);\n if (!provider)\n return undefined;\n const trimmed = pathname.replace(/^\\/+/, \"\").replace(/\\.git$/, \"\");\n const segments = trimmed.split(\"/\");\n if (segments.length < 2)\n return undefined;\n const ownerName = segments[0];\n // Bitbucket and GitLab can have nested groups; the repository slug is the\n // last path segment. GitHub paths are always two segments.\n const repositoryName = segments[segments.length - 1];\n if (!ownerName || !repositoryName)\n return undefined;\n return { providerName: provider, ownerName, repositoryName };\n}\nfunction vcsProviderForHost(host) {\n for (const [provider, hosts] of Object.entries(VCS_PROVIDER_HOSTS)) {\n if (hosts.includes(host))\n return provider;\n }\n return undefined;\n}\n","import { vars } from \"../vars\";\nimport { DEPLOYMENT_ENVIRONMENT_NAME, DEPLOYMENT_ID, DEPLOYMENT_NAME, PAGE_LOAD_ID, SERVICE_NAME, SERVICE_NAMESPACE, SERVICE_VERSION, USER_AGENT, } from \"../semantic-conventions\";\nimport { fetch, generateUniqueId, isSessionSampledIn, isSafeServiceName, PAGE_LOAD_ID_BYTES, warn, debug, perf, nav, win, NO_VALUE_FALLBACK, pick, loc, } from \"../utils\";\nimport { sessionId, trackSessions } from \"./session\";\nimport { startWebVitalsInstrumentation } from \"../instrumentations/web-vitals\";\nimport { startErrorInstrumentation } from \"../instrumentations/errors\";\nimport { addAttribute } from \"../utils/otel\";\nimport { instrumentFetch } from \"../instrumentations/http/fetch\";\nimport { instrumentXhr } from \"../instrumentations/http/xhr\";\nimport { startNavigationInstrumentation } from \"../instrumentations/navigation\";\nimport { initializeTabId } from \"../utils/tab-id\";\nimport { pickFirstString } from \"./browser-env\";\nimport { applyVcsResourceAttributes } from \"./vcs\";\nlet hasBeenInitialised = false;\nexport function init(opts) {\n if (hasBeenInitialised) {\n debug(\"Dash0 SDK is being reinitialized, skipping ...\");\n return;\n }\n if (!isClient()) {\n debug(\"Looks like we are not running in a browser context. Stopping Dash0 Web SDK initialization.\");\n return;\n }\n if (!isSupported()) {\n debug(\"Stopping Dash0 Web SDK initialization. This browser does not support the necessary APIs.\");\n return;\n }\n const trimmedServiceName = opts.serviceName.trim();\n if (!trimmedServiceName) {\n debug(\"Missing or empty serviceName value. Falling back to location.hostname.\");\n opts.serviceName = loc?.hostname ?? \"unknown\";\n }\n else if (opts.rejectSuspiciousServiceName !== false && !isSafeServiceName(trimmedServiceName)) {\n debug(\"serviceName contains disallowed characters. Falling back to location.hostname.\");\n opts.serviceName = loc?.hostname ?? \"unknown\";\n }\n vars.endpoints = opts.endpoint instanceof Array ? opts.endpoint : [opts.endpoint];\n if (vars.endpoints.length === 0) {\n warn(\"No telemetry endpoint configured. Aborting Dash0 Web SDK initialization process.\");\n return;\n }\n Object.assign(vars, merge(vars, pick(opts, [\n \"ignoreUrls\",\n \"ignoreErrorMessages\",\n \"wrapEventHandlers\",\n \"wrapTimers\",\n \"propagateTraceHeadersCorsURLs\",\n \"maxWaitForResourceTimingsMillis\",\n \"maxToleranceForResourceTimingsMillis\",\n \"headersToCapture\",\n \"urlAttributeScrubber\",\n \"pageViewInstrumentation\",\n \"enableTransportCompression\",\n ])));\n initializePropagators(opts);\n initializeResourceAttributes(opts);\n initializeSignalAttributes(opts);\n initializeTabId();\n trackSessions(opts.sessionInactivityTimeoutMillis, opts.sessionTerminationTimeoutMillis);\n if (opts.sessionSamplingRate != null) {\n const rate = Math.max(0, Math.min(100, opts.sessionSamplingRate));\n vars.isSessionSampled = sessionId != null ? isSessionSampledIn(sessionId, rate) : rate > 0;\n }\n if (!vars.isSessionSampled) {\n debug(\"Session is not sampled. No telemetry will be transmitted for this session.\");\n hasBeenInitialised = true;\n return;\n }\n if (isInstrumentationEnabled(\"@dash0/navigation\", opts)) {\n startNavigationInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/web-vitals\", opts)) {\n startWebVitalsInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/error\", opts)) {\n startErrorInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/fetch\", opts)) {\n instrumentFetch();\n }\n if (isInstrumentationEnabled(\"@dash0/xhr\", opts)) {\n instrumentXhr();\n }\n hasBeenInitialised = true;\n}\nfunction initializeResourceAttributes(opts) {\n addAttribute(vars.resource.attributes, SERVICE_NAME, opts[\"serviceName\"]);\n if (opts.serviceNamespace) {\n addAttribute(vars.resource.attributes, SERVICE_NAMESPACE, opts[\"serviceNamespace\"]);\n }\n if (opts.serviceVersion) {\n addAttribute(vars.resource.attributes, SERVICE_VERSION, opts[\"serviceVersion\"]);\n }\n const env = detectEnvironment(opts);\n if (env) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ENVIRONMENT_NAME, env);\n }\n const deploymentName = detectDeploymentName(opts);\n if (deploymentName) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_NAME, deploymentName);\n }\n const deploymentId = detectDeploymentId(opts);\n if (deploymentId) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ID, deploymentId);\n }\n applyVcsResourceAttributes(opts);\n}\nfunction initializeSignalAttributes(opts) {\n addAttribute(vars.signalAttributes, PAGE_LOAD_ID, generateUniqueId(PAGE_LOAD_ID_BYTES));\n addAttribute(vars.signalAttributes, USER_AGENT, nav?.userAgent ?? NO_VALUE_FALLBACK);\n if (opts.additionalSignalAttributes) {\n Object.entries(opts.additionalSignalAttributes).forEach(([key, value]) => {\n addAttribute(vars.signalAttributes, key, value);\n });\n }\n}\nfunction isSupported() {\n return typeof fetch === \"function\" && perf && perf.getEntriesByType;\n}\nfunction isClient() {\n return win != null;\n}\n// Vercel auto-prefixes its system env vars under every framework preset\n// (see https://vercel.com/docs/environment-variables/framework-environment-variables).\n// The shared `FrameworkPrefix` union in `./browser-env` is the single source\n// of truth for which prefixes the SDK recognises. To add a new prefix, edit\n// it there; the literal accessors below pick it up automatically via the\n// typed `process.env` declaration.\nfunction detectEnvironment(opts) {\n if (opts.environment) {\n return opts.environment;\n }\n try {\n return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_ENV, process?.env?.NUXT_PUBLIC_VERCEL_ENV, process?.env?.NUXT_ENV_VERCEL_ENV, process?.env?.REACT_APP_VERCEL_ENV, process?.env?.GATSBY_VERCEL_ENV, process?.env?.VITE_VERCEL_ENV, process?.env?.PUBLIC_VERCEL_ENV, process?.env?.VUE_APP_VERCEL_ENV, process?.env?.REDWOOD_ENV_VERCEL_ENV, process?.env?.SANITY_STUDIO_VERCEL_ENV);\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentName(opts) {\n if (opts.deploymentName) {\n return opts.deploymentName;\n }\n try {\n return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_TARGET_ENV, process?.env?.NUXT_PUBLIC_VERCEL_TARGET_ENV, process?.env?.NUXT_ENV_VERCEL_TARGET_ENV, process?.env?.REACT_APP_VERCEL_TARGET_ENV, process?.env?.GATSBY_VERCEL_TARGET_ENV, process?.env?.VITE_VERCEL_TARGET_ENV, process?.env?.PUBLIC_VERCEL_TARGET_ENV, process?.env?.VUE_APP_VERCEL_TARGET_ENV, process?.env?.REDWOOD_ENV_VERCEL_TARGET_ENV, process?.env?.SANITY_STUDIO_VERCEL_TARGET_ENV);\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentId(opts) {\n if (opts.deploymentId) {\n return opts.deploymentId;\n }\n try {\n return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_BRANCH_URL, process?.env?.NUXT_PUBLIC_VERCEL_BRANCH_URL, process?.env?.NUXT_ENV_VERCEL_BRANCH_URL, process?.env?.REACT_APP_VERCEL_BRANCH_URL, process?.env?.GATSBY_VERCEL_BRANCH_URL, process?.env?.VITE_VERCEL_BRANCH_URL, process?.env?.PUBLIC_VERCEL_BRANCH_URL, process?.env?.VUE_APP_VERCEL_BRANCH_URL, process?.env?.REDWOOD_ENV_VERCEL_BRANCH_URL, process?.env?.SANITY_STUDIO_VERCEL_BRANCH_URL);\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction initializePropagators(opts) {\n if (opts.propagators) {\n if (opts.propagateTraceHeadersCorsURLs) {\n warn(\"Both 'propagators' and deprecated 'propagateTraceHeadersCorsURLs' were provided. Using 'propagators' configuration. Please migrate to the new 'propagators' config.\");\n }\n vars.propagators = opts.propagators;\n }\n // Handle legacy configuration\n else if (opts.propagateTraceHeadersCorsURLs && opts.propagateTraceHeadersCorsURLs.length > 0) {\n warn(\"'propagateTraceHeadersCorsURLs' is deprecated. Please use the new 'propagators' configuration.\");\n // Convert legacy config to new format - only include cross-origin URLs since same-origin is automatic\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [...opts.propagateTraceHeadersCorsURLs],\n },\n ];\n }\n // Default configuration - traceparent with empty match array\n // Same-origin requests get ALL configured propagators, so this ensures traceparent for same-origin\n else {\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [],\n },\n ];\n }\n}\nfunction isInstrumentationEnabled(name, opts) {\n const instrumentations = opts.enabledInstrumentations;\n if (!instrumentations)\n return true;\n return instrumentations.includes(name);\n}\nfunction merge(target, source) {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n const srcVal = source[key];\n const dstVal = target[key];\n if (srcVal !== undefined) {\n if (srcVal !== null &&\n typeof srcVal === \"object\" &&\n !Array.isArray(srcVal) &&\n typeof dstVal === \"object\" &&\n dstVal !== null &&\n !Array.isArray(dstVal)) {\n result[key] = { ...dstVal, ...srcVal };\n }\n else {\n result[key] = srcVal;\n }\n }\n }\n return result;\n}\n","import { win, debug, warn, INIT_MESSAGE } from \"../utils\";\nimport { reportError } from \"../api/report-error\";\nimport { identify } from \"../api/identify\";\nimport { debug as debugApi } from \"../api/debug\";\nimport { init as initApi } from \"../api/init\";\nimport { terminateSession } from \"../api/session\";\nimport { addSignalAttribute, removeSignalAttribute } from \"../api/attributes\";\nimport { sendEvent } from \"../api/events\";\nimport { setActiveLogLevel } from \"../api/log-level\";\n/**\n * All the APIs exposed through the script tag via `dash0('{{api name}}')`\n */\nconst scriptApis = {\n init: initApi,\n debug: debugApi,\n identify,\n terminateSession,\n reportError,\n addSignalAttribute,\n removeSignalAttribute,\n setActiveLogLevel,\n sendEvent,\n};\ninit();\nfunction init() {\n debug(`${INIT_MESSAGE} (via Script)`);\n const globalObject = win[\"dash0\"];\n if (!globalObject) {\n warn(\"global 'dash0' not found. Did you use the correct Dash0 Web SDK initializer?\");\n return;\n }\n if (!globalObject[\"_q\"]) {\n warn(\"Dash0 Web SDK command queue not defined. Did you add the script tag multiple times to your website?\");\n return;\n }\n processQueuedApiCalls(globalObject[\"_q\"]);\n addApiCallAfterInitializationSupport();\n}\nfunction processQueuedApiCalls(apiCalls) {\n for (let i = 0, len = apiCalls.length; i < len; i++) {\n processQueuedApiCall(apiCalls[i]);\n }\n}\nfunction processQueuedApiCall(apiCall) {\n const apiName = apiCall[0];\n // @ts-expect-error the APIs are dynamic\n const apiFn = scriptApis[apiName];\n if (!apiFn) {\n warn(\"Unsupported Dash0 Web SDK api: \", apiCall[0]);\n return;\n }\n const args = [];\n for (let i = 1; i < apiCall.length; i++) {\n args.push(apiCall[i]);\n }\n apiFn.apply(null, args);\n}\nfunction addApiCallAfterInitializationSupport() {\n win[\"dash0\"] = function () {\n return processQueuedApiCall(arguments);\n };\n}\n","/**\n * Creates a new object by picking specified properties from the source object.\n * Similar to TypeScript's Pick<T, K> utility type but as a runtime function.\n *\n * @param obj - The source object to pick properties from\n * @param keys - Array of property keys to pick from the source object\n * @returns A new object containing only the specified properties\n */\nexport function pick(obj, keys) {\n const result = {};\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n","import { crc32 } from \"./crc32\";\n/**\n * Determines whether a session should be sampled based on the session ID\n * and a configured sampling rate.\n *\n * @param sessionId The hex session ID string\n * @param samplingRate A number between 0 and 100 (inclusive)\n * @returns true if the session should be sampled (data collected), false otherwise\n */\nexport function isSessionSampledIn(sessionId, samplingRate) {\n if (samplingRate <= 0)\n return false;\n if (samplingRate >= 100)\n return true;\n return crc32(sessionId) % 100 < samplingRate;\n}\n","import { vars } from \"../vars\";\nimport { debug as debugLogger } from \"../utils/debug\";\nexport function debug() {\n debugLogger(\"Dash0 Web SDK configuration state:\", vars);\n}\n","import { vars } from \"../vars\";\nimport { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { USER_EMAIL, USER_FULL_NAME, USER_HASH, USER_ID, USER_NAME, USER_ROLES } from \"../semantic-conventions\";\nexport function identify(id, opts) {\n removeAttribute(vars.signalAttributes, USER_ID);\n if (id != null) {\n addAttribute(vars.signalAttributes, USER_ID, id);\n }\n removeAttribute(vars.signalAttributes, USER_NAME);\n if (opts?.name != null) {\n addAttribute(vars.signalAttributes, USER_NAME, opts.name);\n }\n removeAttribute(vars.signalAttributes, USER_FULL_NAME);\n if (opts?.fullName != null) {\n addAttribute(vars.signalAttributes, USER_FULL_NAME, opts.fullName);\n }\n removeAttribute(vars.signalAttributes, USER_EMAIL);\n if (opts?.email != null) {\n addAttribute(vars.signalAttributes, USER_EMAIL, opts.email);\n }\n removeAttribute(vars.signalAttributes, USER_HASH);\n if (opts?.hash != null) {\n addAttribute(vars.signalAttributes, USER_HASH, opts.hash);\n }\n removeAttribute(vars.signalAttributes, USER_ROLES);\n if (opts?.roles != null) {\n addAttribute(vars.signalAttributes, USER_ROLES, opts.roles);\n }\n}\n","import { reportUnhandledError as reportErrorInternal } from \"../instrumentations/errors/unhandled-error\";\nexport function reportError(error, opts) {\n reportErrorInternal(error, opts);\n}\n","import { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { vars } from \"../vars\";\n/**\n * Adds a signal attribute to be transmitted with every signal.\n * Note: if you need to ensure attributes are included with signals transmitted on initial page load, you should use\n * the \"additionalSignalAttributes\" property of the init call instead\n */\nexport function addSignalAttribute(name, value) {\n addAttribute(vars.signalAttributes, name, value);\n}\n/**\n * Removes a previously added signal attribute\n */\nexport function removeSignalAttribute(name) {\n removeAttribute(vars.signalAttributes, name);\n}\n","import { EVENT_NAME, EVENT_NAMES, WEB_EVENT_TITLE, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { sendLog } from \"../transport\";\nimport { addCommonAttributes } from \"../attributes\";\nimport { addAttribute, addAttributes, toAnyValue } from \"../utils/otel\";\nimport { nowNanos, toNanosTs, warn } from \"../utils\";\n/**\n * Sends a custom event.\n * @param name The event name. Can not be any of the internal event names. See: EVENT_NAMES in src/semantic-conventions.\n * @param opts Additional event details.\n */\nexport function sendEvent(name, opts) {\n if (Object.values(EVENT_NAMES).includes(name)) {\n warn(`Unable to send custom event ${name}. You are not allowed to use an internal event name while sending a custom event. Dropping event...`);\n return;\n }\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, name);\n if (opts?.title) {\n addAttribute(attributes, WEB_EVENT_TITLE, opts.title);\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n sendLog({\n timeUnixNano: opts?.timestamp != null ? toNanosTs(opts.timestamp) : nowNanos(),\n attributes,\n body: toAnyValue(opts?.data),\n severityText: opts?.severity,\n severityNumber: opts?.severity ? LOG_SEVERITIES[opts.severity] : undefined,\n });\n}\n"],"names":["noop","identity","a","logLevels","debug","info","warn","error","activeLogLevel","createLogger","logLevel","console","apply","numericLogLevel","arguments","globalHasOwnProperty","Object","prototype","hasOwnProperty","obj","key","call","win","window","undefined","doc","document","nav","navigator","loc","location","perf","performance","webkitPerformance","msPerformance","mozPerformance","encodeURIComponent","fetch","localStorage","_win$localStorage","_unused","sessionStorage","_win$sessionStorage","_unused2","SHARED_CHAR_CODES_ARRAY","Array","generateUniqueId","byteCount","i","Math","floor","random","String","fromCharCode","slice","addEventListener","target","eventType","callback","attachEvent","removeEventListener","detachEvent","isSupported","getItem","setItem","now","Date","getTime","nowNanos","timeOrigin","getTimeOrigin","currentDate","perfTime","dateTime","abs","toNanosTs","time","_typeof","_perf$timing","timing","fetchStart","globals","setTimeout","clearTimeout","setInterval","clearInterval","isRunningZoneJs","_len","length","_","_key","executeGlobally","_len2","_key2","_len3","_key3","_globals$globalFuncti","globalFunctionName","this","args","e","getEntriesByType","isPerformanceObserverAvailable","PerformanceTimingNames","freeze","CONNECT_END","CONNECT_START","DECODED_BODY_SIZE","DOM_COMPLETE","DOM_CONTENT_LOADED_EVENT_END","DOM_CONTENT_LOADED_EVENT_START","DOM_INTERACTIVE","DOMAIN_LOOKUP_END","DOMAIN_LOOKUP_START","ENCODED_BODY_SIZE","FETCH_START","LOAD_EVENT_END","LOAD_EVENT_START","NAVIGATION_START","REDIRECT_END","REDIRECT_START","REQUEST_START","RESPONSE_END","RESPONSE_START","SECURE_CONNECTION_START","START_TIME","UNLOAD_EVENT_END","UNLOAD_EVENT_START","usedResources","WeakSet","observeResourcePerformance","opts","onEnd","start","end","duration","cancel","observeWithoutPerformanceObserverSupport","startTime","endTime","observer","fallbackNoResourceFoundTimerHandle","fallbackEndNeverCalledTimerHandle","resources","_observer","PerformanceObserver","onResourceFound","observe","type","_e","disposeGlobalResources","endTs","cancelFallbackEndNeverCalledTimer","isWaitingAcceptable","min","maxWaitForResourceMillis","onVisibilityChanged","resource","bestMatch","bestScore","matchingResources","filter","res","responseEnd","maxToleranceForResourceTimingsMillis","has","_step","_iterator","_createForOfIteratorHelper","s","n","done","value","score","err","f","add","findBestMatchingResource","list","entry","resourceMatcher","forEach","shift","push","_observer2","disconnect","disconnectResourceObserver","stopVisibilityObservation","visibilityState","NO_VALUE_FALLBACK","roundToTwoDecimals","round","parseUrl","url","_doc$baseURI","URL","baseURI","href","isSameOrigin","origin","SUSPICIOUS_CHARS","INSTRUMENTED_BY_DASH0_SYMBOL","Symbol","for","markAsInstrumented","objOrFunction","wrap","module","wrapper","original","wrapped","concat","TABLE","Uint32Array","c","k","crc32","hexStr","bytes","Uint8Array","parseInt","substring","crc","byte","vars","endpoints","attributes","scope","name","version","__sdkVersion","signalAttributes","ignoreUrls","ignoreErrorMessages","wrapEventHandlers","wrapTimers","propagateTraceHeadersCorsURLs","maxWaitForResourceTimingsMillis","headersToCapture","urlAttributeScrubber","pageViewInstrumentation","trackVirtualPageViews","includeParts","enableTransportCompression","isSessionSampled","matchesAny","regexp","len","test","DATA_URL_PREFIX","isUrlIgnored","toLowerCase","lowerCaseUrl","endpoint","startsWith","isTransportRequest","isUnloading","newBatcher","sendInternal","pendingFlushTimeout","fn","queuedItems","flush","send","item","pendingBodySize","pendingRequestCount","_x","_x2","_send","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","path","body","jsonString","requestBody","byteLength","isCompressed","_context2","prev","next","JSON","stringify","Blob","size","CompressionStream","compressWithGzip","sent","Promise","all","map","_ref","_callee","headers","response","_context","pathname","endsWith","Authorization","dataset","abrupt","method","keepalive","text","catch","ok","status","statusText","t0","finish","stop","_x4","_x3","_compressWithGzip","_callee3","data","blob","stream","compressedStream","_context3","pipeThrough","Response","arrayBuffer","rateLimiter","logBatcher","logs","resourceLogs","scopeLogs","logRecords","spanBatcher","spans","resourceSpans","scopeSpans","isRateLimited","maxCallsPerTenMinutes","maxCallsPerTenSeconds","totalCallsInLastTenMinutes","totalCallsInLastTenSeconds","sendLog","log","sendSpan","span","SERVICE_NAME","SERVICE_NAMESPACE","SERVICE_VERSION","DEPLOYMENT_ENVIRONMENT_NAME","DEPLOYMENT_NAME","DEPLOYMENT_ID","EVENT_NAME","WEB_EVENT_ID","PAGE_LOAD_ID","USER_AGENT","USER_ID","USER_NAME","USER_FULL_NAME","USER_EMAIL","USER_HASH","USER_ROLES","EXCEPTION_MESSAGE","EXCEPTION_TYPE","EXCEPTION_STACKTRACE","ERROR_TYPE","URL_FULL","HTTP_REQUEST_METHOD","HTTP_REQUEST_METHOD_ORIGINAL","HTTP_RESPONSE_STATUS_CODE","EVENT_NAMES","PAGE_VIEW","NAVIGATION_TIMING","WEB_VITAL","ERROR","LOG_SEVERITIES","UNSPECIFIED","TRACE","DEBUG","INFO","WARN","FATAL","PAGE_VIEW_TYPE_VALUES","PAGE_VIEW_CHANGE_STATE_VALUES","ANY_VALUE_KEYS","toAnyValue","anyValue","isArray","values","keys","includes","isAnyValue","entries","_ref2","_slicedToArray","toKeyValue","addAttribute","addAttributes","attrs","_ref3","_ref4","removeAttribute","index","findIndex","attr","splice","TRACE_PARENT_HEADER","w3cTraceparentFormat","getTraceContextForPageLoad","_Array$from$find","_doc$getElementsByTag","match","from","getElementsByTagName","find","_e$getAttribute","getAttribute","content","trim","nt","serverTiming","serverTimings","serverEntry","description","getTraceparentFromServerTiming","getTraceparentFromNavigationTiming","traceId","spanId","addW3CTraceContextHttpHeaders","ctx","addXRayTraceContextHttpHeaders","w3cTraceId","timestamp","uniqueId","xrayTraceId","xrayHeader","SESSION_FLAGS","generateSessionId","flags","ephemeralSession","toString","padStart","SESSION_ID_BYTES","SESSION_STORAGE_KEY","STORAGE_SEPARATOR_KEY","MAX_ALLOWED_SESSION_TIMEOUT_MILLIS","sessionId","trackSessions","sessionInactivityTimeoutMillis","sessionTerminationTimeoutMillis","storedValue","session","split","id","lastActivityTime","isNaN","parseSession","minAllowedLastActivityTime","minAllowedStartTime","isSessionValid","v","serializeSession","TRACE_ID_PREFIX","TRACE_FLAGS","encodeTraceFlags","withoutSession","startSpan","TRACE_ID_BYTES","generateTraceId","prefix","SPAN_ID_BYTES","generateSpanId","kind","startTimeUnixNano","events","links","code","endSpan","durationNano","endTimeUnixNano","addSpanEvent","attributesOrTs","ts","timeUnixNano","setSpanStatus","message","recordException","exception","stack","addUrlAttributes","applyPrefix","_toConsumableArray","join","withPrefix","parsed","username","password","_defineProperty","hostname","protocol","replace","hash","search","TAB_ID_STORAGE_KEY","tabId","initializeTabId","addCommonAttributes","options","_options$url","_win$innerWidth","_win$innerHeight","_nav$connection","attribute","innerWidth","innerHeight","connectionType","connection","effectiveType","scheduledTransmissionTimeoutHandle","reportedErrors","numberOfDifferentErrorsSeen","seenErrors","ignoreNextOnError","ignoreNextOnErrorEvent","reportUnhandledError","onUnhandledError","isErrorMessageIgnored","shortenStackTrace","trackedError","seenCount","componentStack","transmittedCount","severityNumber","severityText","stringValue","scheduleTransmission","seenError","t","persisted","timeStamp","o","r","delta","rating","requestAnimationFrame","responseStart","_e$activationStart","activationStart","prerendering","wasDiscarded","navigationType","WeakMap","get","set","I","d","_createClass","_classCallCheck","_this$t","hadRecentInput","at","h","supportedEntryTypes","resolve","then","getEntries","_objectSpread","buffered","u","l","m","g","p","_globalThis$performan","globalThis","firstHiddenTime","y","b","T","E","max","reportAllChanges","P","_step2","_iterator2","takeRecords","L","M","C","_step3","_iterator3","interactionId","w","_performance$interact","interactionCount","A","Map","clear","_this$m","entryType","_this$v","sort","_step4","_iterator4","delete","B","requestIdleCallback","once","N","S","PerformanceEventTiming","_i$durationThreshold","durationThreshold","_step5","_iterator5","q","_this$m2","x","startWebVitalsInstrumentation","_step6","_iterator6","_i2","_arr","capture","onLCP","onWebVital","onINP","onCLS","metric","bodyAttributes","kvlistValue","MESSAGE_PREFIX","STACK_UNAVAILABLE_MESSAGE","onUnhandledRejection","event","reason","WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY","findInStorage","storageTarget","valuesForEqualityCheck","storage","matchesEqualityCheck","valuesForEqualityCheckA","valuesForEqualityCheckB","addWrappedDomEventListener","wrappedFunction","eventName","eventListener","optionsOrCapture","addWrappedFunction","getDomEventListenerValuesForEqualityCheck","getDomEventListenerCaptureValue","Boolean","popWrappedDomEventListener","fallback","storageItem","popWrappedFunction","startEventHandlerInstrumentation","EventTarget","originalAddEventListener","originalRemoveEventListener","wrapEventTarget","wrapTimer","reportError","startErrorInstrumentation","globalOnError","onerror","fileName","lineNumber","columnNumber","startOnErrorInstrumentation","startTimerInstrumentation","httpRequestHeaderKey","httpResponseHeaderKey","KNOWN_HTTP_METHODS","HTTP_METHOD_OTHER","isWellKnownHttpMethod","addResourceNetworkEvents","ignoreZeros","addSpanNetworkEvent","propertyName","addResourceSize","encodedLength","encodedBodySize","endSpanOnError","_error$name","errorType","errorToSpanStatus","endSpanOnAbort","determinePropagatorTypes","matchingTypes","propagators","propagator","addTraceContextHttpHeaders","types","wrapFetch","_fetchWithInstrumentation","input","init","fetchInput","request","instrumentation","_copyOfInit","_instrumentation","copyOfInit","performanceObserver","origResponse","_request2","assign","Request","onFetchStart","addResponseData","wrapResponse","_request","signal","aborted","t1","_request$method","originalMethod","isWellKnownMethod","toUpperCase","addGraphQlProperties","_copyOfInit2","propagatorTypes","Headers","append","tryCaptureHttpHeaders","initiatorType","getAttributeKey","some","rxp","originalResponse","readTimeoutMs","onDone","onError","fallbackTs","cbCalled","handleDone","fallbackEndTs","handleError","bodyNeverCompletelyReadTimeout","reader","getReader","ReadableStream","pull","controller","_yield$reader$read","read","releaseLock","close","enqueue","originalSetRequestHeader","XHR_STATE","wrapOpen","rest","openArgs","onOpen","xhr","previousState","completed","state","_state$performanceObs2","_state$listeners2","listeners","_step3$value","cleanupAbandonedRequest","stringUrl","resolvedUrl","normalizedMethod","ignored","wrapSetRequestHeader","_state$capturedReques","lowerName","alreadyTraced","capturedRequestHeaders","onSetRequestHeader","wrapSend","setRequestHeader","_i","_Object$entries","_Object$entries$_i","failureKind","_state$listeners4","_step5$value","_state$failureKind2","raw","getAllResponseHeaders","line","separatorIndex","indexOf","tryCaptureResponseHeaders","onLoadEnd","_step2$value","listener","onSend","_state$performanceObs3","_state$listeners3","_step4$value","cleanupFailedSend","_state$performanceObs","_state$failureKind","_state$listeners","_step$value","endSpanOnSyncSendError","transmitPageViewEvent","virtual","replaced","_meta$title","meta","_vars$pageViewInstrum","_vars$pageViewInstrum2","_vars$pageViewInstrum3","generateMetadata","getPageViewMeta","title","referrer","traceContext","onLoaded","addNavigationTiming","getStartTimeUnixNanos","field","Number","isInteger","currentLocation","shouldIncludeHashChanges","shouldIncludeSearchChanges","onPopState","onUrlChange","onHashChange","newURL","newUrl","parsedUrl","updateCurrentLocation","startNavigationInstrumentation","readyState","startPageLoadInstrumentation","_vars$pageViewInstrum4","history","unused","startPageTransitionInstrumentation","pickFirstString","_values","VCS_FIELD_TO_ATTRIBUTE","providerName","ownerName","repositoryName","repositoryUrlFull","refHeadName","refHeadRevision","changeId","applyVcsResourceAttributes","vcs","_opts$vcs","_override$providerNam","_override$ownerName","_override$repositoryN","_override$repositoryU","_ref5","_override$refHeadName","_ref6","_override$refHeadRevi","_ref7","_override$changeId","override","disableVcsDetection","vercel","provider","owner","repo","ref","revision","_process","_process2","_process3","_process4","_process5","_process6","_process7","_process8","_process9","_process10","_process11","_process12","_process13","_process14","_process15","_process16","_process17","_process18","_process19","_process20","_process21","_process22","_process23","_process24","_process25","_process26","_process27","_process28","_process29","_process30","_process31","_process32","_process33","_process34","_process35","_process36","_process37","_process38","_process39","_process40","_process41","_process42","_process43","_process44","_process45","_process46","_process47","_process48","_process49","_process50","_process51","_process52","_process53","_process54","_process55","_process56","_process57","_process58","_process59","_process60","process","env","NEXT_PUBLIC_VERCEL_GIT_PROVIDER","NUXT_PUBLIC_VERCEL_GIT_PROVIDER","NUXT_ENV_VERCEL_GIT_PROVIDER","REACT_APP_VERCEL_GIT_PROVIDER","GATSBY_VERCEL_GIT_PROVIDER","VITE_VERCEL_GIT_PROVIDER","PUBLIC_VERCEL_GIT_PROVIDER","VUE_APP_VERCEL_GIT_PROVIDER","REDWOOD_ENV_VERCEL_GIT_PROVIDER","SANITY_STUDIO_VERCEL_GIT_PROVIDER","NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER","NUXT_PUBLIC_VERCEL_GIT_REPO_OWNER","NUXT_ENV_VERCEL_GIT_REPO_OWNER","REACT_APP_VERCEL_GIT_REPO_OWNER","GATSBY_VERCEL_GIT_REPO_OWNER","VITE_VERCEL_GIT_REPO_OWNER","PUBLIC_VERCEL_GIT_REPO_OWNER","VUE_APP_VERCEL_GIT_REPO_OWNER","REDWOOD_ENV_VERCEL_GIT_REPO_OWNER","SANITY_STUDIO_VERCEL_GIT_REPO_OWNER","NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG","NUXT_PUBLIC_VERCEL_GIT_REPO_SLUG","NUXT_ENV_VERCEL_GIT_REPO_SLUG","REACT_APP_VERCEL_GIT_REPO_SLUG","GATSBY_VERCEL_GIT_REPO_SLUG","VITE_VERCEL_GIT_REPO_SLUG","PUBLIC_VERCEL_GIT_REPO_SLUG","VUE_APP_VERCEL_GIT_REPO_SLUG","REDWOOD_ENV_VERCEL_GIT_REPO_SLUG","SANITY_STUDIO_VERCEL_GIT_REPO_SLUG","NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF","NUXT_PUBLIC_VERCEL_GIT_COMMIT_REF","NUXT_ENV_VERCEL_GIT_COMMIT_REF","REACT_APP_VERCEL_GIT_COMMIT_REF","GATSBY_VERCEL_GIT_COMMIT_REF","VITE_VERCEL_GIT_COMMIT_REF","PUBLIC_VERCEL_GIT_COMMIT_REF","VUE_APP_VERCEL_GIT_COMMIT_REF","REDWOOD_ENV_VERCEL_GIT_COMMIT_REF","SANITY_STUDIO_VERCEL_GIT_COMMIT_REF","NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","NUXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","NUXT_ENV_VERCEL_GIT_COMMIT_SHA","REACT_APP_VERCEL_GIT_COMMIT_SHA","GATSBY_VERCEL_GIT_COMMIT_SHA","VITE_VERCEL_GIT_COMMIT_SHA","PUBLIC_VERCEL_GIT_COMMIT_SHA","VUE_APP_VERCEL_GIT_COMMIT_SHA","REDWOOD_ENV_VERCEL_GIT_COMMIT_SHA","SANITY_STUDIO_VERCEL_GIT_COMMIT_SHA","NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","NUXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","NUXT_ENV_VERCEL_GIT_PULL_REQUEST_ID","REACT_APP_VERCEL_GIT_PULL_REQUEST_ID","GATSBY_VERCEL_GIT_PULL_REQUEST_ID","VITE_VERCEL_GIT_PULL_REQUEST_ID","PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","VUE_APP_VERCEL_GIT_PULL_REQUEST_ID","REDWOOD_ENV_VERCEL_GIT_PULL_REQUEST_ID","SANITY_STUDIO_VERCEL_GIT_PULL_REQUEST_ID","_ignored","buildRepositoryUrlFromVercel","detectVcsFromVercel","netlify","repositoryUrl","branch","commit","reviewId","_process61","_process62","_process63","_process64","_process65","_process66","_process67","_process68","_process69","_process70","_process71","_process72","_process73","_process74","_process75","_process76","_process77","_process78","_process79","_process80","_process81","_process82","_process83","_process84","_process85","_process86","_process87","_process88","_process89","_process90","_process91","_process92","_process93","_process94","_process95","_process96","_process97","_process98","_process99","_process100","NEXT_PUBLIC_REPOSITORY_URL","NUXT_PUBLIC_REPOSITORY_URL","NUXT_ENV_REPOSITORY_URL","REACT_APP_REPOSITORY_URL","GATSBY_REPOSITORY_URL","VITE_REPOSITORY_URL","PUBLIC_REPOSITORY_URL","VUE_APP_REPOSITORY_URL","REDWOOD_ENV_REPOSITORY_URL","SANITY_STUDIO_REPOSITORY_URL","NEXT_PUBLIC_BRANCH","NUXT_PUBLIC_BRANCH","NUXT_ENV_BRANCH","REACT_APP_BRANCH","GATSBY_BRANCH","VITE_BRANCH","PUBLIC_BRANCH","VUE_APP_BRANCH","REDWOOD_ENV_BRANCH","SANITY_STUDIO_BRANCH","NEXT_PUBLIC_COMMIT_REF","NUXT_PUBLIC_COMMIT_REF","NUXT_ENV_COMMIT_REF","REACT_APP_COMMIT_REF","GATSBY_COMMIT_REF","VITE_COMMIT_REF","PUBLIC_COMMIT_REF","VUE_APP_COMMIT_REF","REDWOOD_ENV_COMMIT_REF","SANITY_STUDIO_COMMIT_REF","NEXT_PUBLIC_REVIEW_ID","NUXT_PUBLIC_REVIEW_ID","NUXT_ENV_REVIEW_ID","REACT_APP_REVIEW_ID","GATSBY_REVIEW_ID","VITE_REVIEW_ID","PUBLIC_REVIEW_ID","VUE_APP_REVIEW_ID","REDWOOD_ENV_REVIEW_ID","SANITY_STUDIO_REVIEW_ID","host","VCS_PROVIDER_HOSTS","vcsProviderForHost","segments","parseRepositoryUrl","detectVcsFromNetlify","detectVcs","_Object$keys","_VCS_PROVIDER_HOSTS$p","vcsHostForProvider","github","gitlab","bitbucket","hasBeenInitialised","isInstrumentationEnabled","instrumentations","enabledInstrumentations","scriptApis","_loc$hostname","trimmedServiceName","serviceName","rejectSuspiciousServiceName","_loc$hostname2","source","result","srcVal","dstVal","merge","pick","initializePropagators","serviceNamespace","serviceVersion","environment","NEXT_PUBLIC_VERCEL_ENV","NUXT_PUBLIC_VERCEL_ENV","NUXT_ENV_VERCEL_ENV","REACT_APP_VERCEL_ENV","GATSBY_VERCEL_ENV","VITE_VERCEL_ENV","PUBLIC_VERCEL_ENV","VUE_APP_VERCEL_ENV","REDWOOD_ENV_VERCEL_ENV","SANITY_STUDIO_VERCEL_ENV","detectEnvironment","deploymentName","NEXT_PUBLIC_VERCEL_TARGET_ENV","NUXT_PUBLIC_VERCEL_TARGET_ENV","NUXT_ENV_VERCEL_TARGET_ENV","REACT_APP_VERCEL_TARGET_ENV","GATSBY_VERCEL_TARGET_ENV","VITE_VERCEL_TARGET_ENV","PUBLIC_VERCEL_TARGET_ENV","VUE_APP_VERCEL_TARGET_ENV","REDWOOD_ENV_VERCEL_TARGET_ENV","SANITY_STUDIO_VERCEL_TARGET_ENV","detectDeploymentName","deploymentId","NEXT_PUBLIC_VERCEL_BRANCH_URL","NUXT_PUBLIC_VERCEL_BRANCH_URL","NUXT_ENV_VERCEL_BRANCH_URL","REACT_APP_VERCEL_BRANCH_URL","GATSBY_VERCEL_BRANCH_URL","VITE_VERCEL_BRANCH_URL","PUBLIC_VERCEL_BRANCH_URL","VUE_APP_VERCEL_BRANCH_URL","REDWOOD_ENV_VERCEL_BRANCH_URL","SANITY_STUDIO_VERCEL_BRANCH_URL","detectDeploymentId","initializeResourceAttributes","_nav$userAgent","userAgent","additionalSignalAttributes","initializeSignalAttributes","sessionSamplingRate","rate","samplingRate","isSessionSampledIn","XMLHttpRequest","proto","instrumentXhr","debugLogger","identify","fullName","email","roles","terminateSession","removeItem","reportErrorInternal","addSignalAttribute","removeSignalAttribute","setActiveLogLevel","level","_logLevels$level","sendEvent","severity","processQueuedApiCall","apiCall","apiName","apiFn","globalObject","apiCalls","processQueuedApiCalls"],"mappings":"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","x_google_ignoreList":[38]}
|
|
1
|
+
{"version":3,"file":"dash0.iife.js","sources":["modules/utils/fn.js","modules/utils/debug.js","modules/utils/obj.js","modules/utils/globals.js","modules/utils/id.js","modules/utils/listeners.js","modules/utils/local-storage.js","modules/utils/time.js","modules/utils/timers.js","modules/utils/performance.js","modules/utils/constants.js","modules/utils/math.js","modules/utils/url.js","modules/utils/origin.js","modules/utils/sanitize.js","modules/utils/wrap.js","modules/utils/crc32.js","modules/vars.js","modules/utils/ignore-rules.js","modules/utils/on-last-chance.js","modules/transport/batcher.js","modules/transport/fetch.js","modules/transport/index.js","modules/utils/rate-limit.js","modules/semantic-conventions.js","modules/utils/otel/attributes.js","modules/utils/otel/trace-context.js","modules/utils/session-id.js","modules/api/session.js","modules/utils/trace-id.js","modules/utils/otel/span.js","modules/utils/span-id.js","modules/utils/otel/error.js","modules/attributes/url.js","modules/utils/session-storage.js","modules/utils/tab-id.js","modules/attributes/common.js","modules/instrumentations/errors/unhandled-error.js","../node_modules/.pnpm/web-vitals@5.0.3/node_modules/web-vitals/dist/web-vitals.js","modules/instrumentations/web-vitals.js","modules/instrumentations/errors/unhandled-promise-rejection.js","modules/instrumentations/errors/async-function-wrapping.js","modules/instrumentations/errors/event-handlers.js","modules/instrumentations/errors/timers.js","modules/instrumentations/errors/index.js","modules/utils/otel/http.js","modules/instrumentations/http/utils.js","modules/instrumentations/http/fetch.js","modules/instrumentations/http/xhr.js","modules/instrumentations/navigation/event.js","modules/instrumentations/navigation/page-load.js","modules/instrumentations/navigation/page-transition.js","modules/instrumentations/navigation/index.js","modules/api/browser-env.js","modules/api/vcs.js","modules/api/init.js","modules/entrypoint/script.js","modules/utils/pick.js","modules/utils/session-sampling.js","modules/api/debug.js","modules/api/identify.js","modules/api/report-error.js","modules/api/attributes.js","modules/api/events.js","modules/api/start-view.js"],"sourcesContent":["export function noop() {\n // This function is intentionally empty.\n}\nexport function identity(a) {\n return a;\n}\n","import { noop } from \"./fn\";\nconst logLevels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\nlet activeLogLevel = logLevels.warn;\n/**\n * Changes the logging verbosity of Dash0's web SDK. By default, only warnings and errors are logged.\n */\nexport function setActiveLogLevel(level) {\n activeLogLevel = logLevels[level] ?? logLevels.warn;\n}\nexport const info = createLogger(\"info\");\nexport const warn = createLogger(\"warn\");\nexport const error = createLogger(\"error\");\nexport const debug = createLogger(\"debug\");\nfunction createLogger(logLevel) {\n if (typeof console !== \"undefined\" && console[logLevel] && typeof console[logLevel].apply === \"function\") {\n const numericLogLevel = logLevels[logLevel];\n return function () {\n if (numericLogLevel >= activeLogLevel) {\n console[logLevel].apply(console, arguments);\n }\n };\n }\n return noop;\n}\n","const globalHasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * protection against hasOwnProperty overrides.\n */\nexport function hasOwnProperty(obj, key) {\n return globalHasOwnProperty.call(obj, key);\n}\nexport function hasKey(obj, key) {\n return key in obj;\n}\n","// aliasing globals for improved minification\n// Avoid blowing up in an ssr context. It is important to check via typeof here because window might not even be declared when imported in ssr.\nexport const win = typeof window !== \"undefined\" ? window : undefined;\nexport const doc = win?.document;\nexport const nav = win?.navigator;\nexport const loc = typeof location !== \"undefined\" ? location : undefined;\nexport const perf = win?.performance || win?.webkitPerformance || win?.msPerformance || win?.mozPerformance;\nexport const encodeURIComponent = win?.encodeURIComponent;\nexport const fetch = win?.fetch;\nexport const localStorage = (function () {\n try {\n return win?.localStorage ?? null;\n }\n catch {\n // localStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\nexport const sessionStorage = (function () {\n try {\n return win?.sessionStorage ?? null;\n }\n catch {\n // sessionStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\n/**\n * Exposed via this module to enable testing.\n */\nexport function sendBeacon(url, data) {\n return nav?.sendBeacon(url, data) ?? false;\n}\n/* eslint-enable no-restricted-globals */\n","export const SPAN_ID_BYTES = 8;\nexport const TRACE_ID_BYTES = 16;\nexport const PAGE_LOAD_ID_BYTES = TRACE_ID_BYTES;\nexport const SESSION_ID_BYTES = SPAN_ID_BYTES;\nexport const TAB_ID_BYTES = SPAN_ID_BYTES;\nexport const WEB_EVENT_ID_BYTES = SPAN_ID_BYTES;\nconst SHARED_CHAR_CODES_ARRAY = Array(32);\nexport function generateUniqueId(byteCount) {\n for (let i = 0; i < byteCount * 2; i++) {\n SHARED_CHAR_CODES_ARRAY[i] = Math.floor(Math.random() * 16) + 48;\n // valid hex characters in the range 48-57 and 97-102\n if (SHARED_CHAR_CODES_ARRAY[i] >= 58) {\n SHARED_CHAR_CODES_ARRAY[i] += 39;\n }\n }\n return String.fromCharCode.apply(null, SHARED_CHAR_CODES_ARRAY.slice(0, byteCount * 2));\n}\n","// aliasing the global function for improved minification and\n// protection against hasOwnProperty overrides.\nexport function addEventListener(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n }\n else if (target.attachEvent) {\n target.attachEvent(\"on\" + eventType, callback);\n }\n}\nexport function removeEventListener(target, eventType, callback) {\n if (target.removeEventListener) {\n target.removeEventListener(eventType, callback, false);\n }\n else if (target.detachEvent) {\n target.detachEvent(\"on\" + eventType, callback);\n }\n}\n","// localStorage API re-exposed to allow testing.\nimport { localStorage } from \"./globals\";\nexport const isSupported = localStorage != null && typeof localStorage.getItem === \"function\" && typeof localStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && localStorage) {\n return localStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && localStorage) {\n localStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && localStorage) {\n localStorage.removeItem(k);\n }\n}\n","import { perf } from \"./globals\";\nexport function now() {\n return new Date().getTime();\n}\nexport function nowNanos() {\n const timeOrigin = getTimeOrigin();\n const currentDate = new Date();\n if (timeOrigin) {\n const perfTime = perf.now() + timeOrigin;\n const dateTime = currentDate.getTime();\n // Only return perf time measurement if it hasn't significantly drifted (60s).\n // Some browsers violate the performance api spec and do not tick the monotonic time while the OS sleeps or the browser hangs\n // See https://bugzil.la/1709767\n // See https://webkit.org/b/225610\n if (Math.abs(perfTime - dateTime) < 60000) {\n return String(perfTime * 1000000);\n }\n }\n return toNanosTs(currentDate);\n}\nexport function toNanosTs(time) {\n if (typeof time === \"object\") {\n return toNanosTs(time.getTime());\n }\n // We don't multiply, because we want to keep number precision\n return String(time) + \"000000\";\n}\nexport function getTimeOrigin() {\n let timeOrigin = perf?.timeOrigin;\n if (typeof timeOrigin !== \"number\") {\n timeOrigin = perf?.timing?.fetchStart;\n }\n return timeOrigin;\n}\nexport function domHRTimestampToNanos(ts) {\n return String(Math.round((ts + getTimeOrigin()) * 1000000));\n}\n","import { warn, debug } from \"./debug\";\nimport { win } from \"./globals\";\n// This module contains wrappers around the standard timer API. These wrappers can be used to\n// ensure that execution of timers happens outside of any Angular specific zones. This in turn\n// means that this script will never disturb Angular's stabilization phase.\n// https://angular.io/api/core/ApplicationRef#isStable\n// Please note that it may sometimes be necessary to deliberately execute code inside of\n// Angular's Zones. Always take care to make a deliberate decision when to use and when not to\n// use these wrappers.\n// We take a copy of all globals to ensure that no other script will change them all of a sudden.\n// This ensures that when we register a timeout/interval on one global, that we will be able to\n// de-register it again in all cases.\nconst globals = {\n setTimeout: win?.setTimeout,\n clearTimeout: win?.clearTimeout,\n setInterval: win?.setInterval,\n clearInterval: win?.clearInterval,\n};\n// If the globals don't exist at execution time of this file, then we know that the globals stored\n// above are not wrapped by Zone.js. This in turn can mean better performance for Angular users.\nexport const isRunningZoneJs = win != null && win[\"Zone\"] != null && win[\"Zone\"][\"root\"] != null && typeof win[\"Zone\"][\"root\"][\"run\"] === \"function\";\nif (isRunningZoneJs) {\n debug(\"Discovered Zone.js globals. Will attempt to register all timers inside the root Zone.\");\n}\nexport function setTimeout(..._) {\n return executeGlobally.apply(\"setTimeout\", arguments);\n}\nexport function clearTimeout(..._) {\n return executeGlobally.apply(\"clearTimeout\", arguments);\n}\nexport function setInterval(..._) {\n return executeGlobally.apply(\"setInterval\", arguments);\n}\nexport function clearInterval(..._) {\n return executeGlobally.apply(\"clearInterval\", arguments);\n}\nfunction executeGlobally() {\n // We don't want to incur a performance penalty for all users just because some\n // users are relying on zone.js. This API looks quite ridiculous, but it\n // allows for concise and efficient code, e.g. arguments does not need to be\n // translated into an array.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const globalFunctionName = this;\n if (isRunningZoneJs) {\n try {\n // Incurr a performance overhead for Zone.js users that we just cannot avoid:\n // Copy the arguments passed in here so that we can use them inside the root\n // zone.\n const args = Array.prototype.slice.apply(arguments);\n // @ts-expect-error necessary Zone.js types not added\n return win[\"Zone\"][\"root\"][\"run\"](globals[globalFunctionName], win, args);\n }\n catch (e) {\n warn(\"Failed to execute %s inside of zone (via Zone.js). Falling back to execution inside currently \" +\n \"active zone.\", globalFunctionName, e);\n // failure – maybe zone js not properly initialized? Fall back to execution\n // outside of Zone.js as a last resort (outside of try/catch and if)\n }\n }\n // Note: Explicitly passing win as 'this' even though we are getting the function from 'globals'\n return globals[globalFunctionName]?.apply(win, arguments);\n}\n","import { doc, perf, win } from \"./globals\";\nimport { now } from \"./time\";\nimport { noop } from \"./fn\";\nimport { setTimeout } from \"./timers\";\nimport { addEventListener, removeEventListener } from \"./listeners\";\nconst TEN_MINUTES_IN_MILLIS = 1000 * 60 * 10;\nconst ONE_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;\nconst OBSERVER_WAIT_TIME_MS = 300;\nconst MAX_RESOURCES_ENTRIES = 100;\nexport const isResourceTimingAvailable = !!(perf && perf.getEntriesByType);\nexport const isPerformanceObserverAvailable = perf && typeof win[\"PerformanceObserver\"] === \"function\" && typeof perf[\"now\"] === \"function\";\nexport const PerformanceTimingNames = Object.freeze({\n CONNECT_END: \"connectEnd\",\n CONNECT_START: \"connectStart\",\n DECODED_BODY_SIZE: \"decodedBodySize\",\n DOM_COMPLETE: \"domComplete\",\n DOM_CONTENT_LOADED_EVENT_END: \"domContentLoadedEventEnd\",\n DOM_CONTENT_LOADED_EVENT_START: \"domContentLoadedEventStart\",\n DOM_INTERACTIVE: \"domInteractive\",\n DOMAIN_LOOKUP_END: \"domainLookupEnd\",\n DOMAIN_LOOKUP_START: \"domainLookupStart\",\n ENCODED_BODY_SIZE: \"encodedBodySize\",\n FETCH_START: \"fetchStart\",\n LOAD_EVENT_END: \"loadEventEnd\",\n LOAD_EVENT_START: \"loadEventStart\",\n NAVIGATION_START: \"navigationStart\",\n REDIRECT_END: \"redirectEnd\",\n REDIRECT_START: \"redirectStart\",\n REQUEST_START: \"requestStart\",\n RESPONSE_END: \"responseEnd\",\n RESPONSE_START: \"responseStart\",\n SECURE_CONNECTION_START: \"secureConnectionStart\",\n START_TIME: \"startTime\",\n UNLOAD_EVENT_END: \"unloadEventEnd\",\n UNLOAD_EVENT_START: \"unloadEventStart\",\n});\nconst usedResources = new WeakSet();\nexport function observeResourcePerformance(opts) {\n if (!isPerformanceObserverAvailable)\n return observeWithoutPerformanceObserverSupport(opts.onEnd);\n // Used to calculate the duration when no resource was found.\n let startTime;\n let endTime;\n const resources = [];\n // Global resources that will need to be disposed\n let observer;\n let fallbackNoResourceFoundTimerHandle;\n let fallbackEndNeverCalledTimerHandle;\n return {\n start: onStart,\n end: onEnd,\n cancel: disposeGlobalResources,\n };\n function onStart() {\n startTime = perf.now();\n try {\n const PerformanceObserver = win?.PerformanceObserver;\n if (PerformanceObserver) {\n observer = new PerformanceObserver(onResourceFound);\n observer?.observe({ type: \"resource\" });\n }\n }\n catch (_e) {\n // Some browsers may not support the passed entryTypes and decide to throw an error.\n // This would then result in an error with a message like:\n //\n // entryTypes only contained unsupported types\n //\n // Swallow and ignore the error. Treat it like unavailable performance observer data.\n }\n fallbackEndNeverCalledTimerHandle = setTimeout(disposeGlobalResources, TEN_MINUTES_IN_MILLIS);\n }\n function onEnd(endTs) {\n // If endTime is already set, we are already terminating and should not do so again\n if (endTime)\n return;\n endTime = endTs ?? perf.now();\n cancelFallbackEndNeverCalledTimer();\n if (!isWaitingAcceptable()) {\n return end();\n }\n setTimeout(() => end(), Math.min(OBSERVER_WAIT_TIME_MS, opts.maxWaitForResourceMillis));\n addEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n fallbackNoResourceFoundTimerHandle = setTimeout(end, opts.maxWaitForResourceMillis);\n }\n function end() {\n disposeGlobalResources();\n const resource = findBestMatchingResource();\n // In some old web browsers, e.g. Chrome 31, the value provided as the duration\n // can be very wrong. We have seen cases where this value is measured in years.\n // If this does seem be the case, then we will ignore the duration property and\n // instead prefer our approximation.\n if (resource?.duration && resource.duration < ONE_DAY_IN_MILLIS) {\n opts.onEnd({ resource, duration: resource.duration });\n }\n else {\n opts.onEnd({ resource, duration: endTime - startTime });\n }\n }\n function onResourceFound(list) {\n list\n .getEntriesByType(\"resource\")\n .filter((e) => {\n // This polymorphism is not properly represented in the api types. The cast is safe since we're only accessing the resource timings.\n const entry = e;\n return entry.startTime >= startTime && opts.resourceMatcher(entry);\n })\n .forEach((entry) => {\n // Limit array size to prevent memory leaks on high-traffic pages\n if (resources.length >= MAX_RESOURCES_ENTRIES) {\n // Remove oldest entry (FIFO)\n // Timings are only reported once the resource is fully recorded (i.e. the request has ended), so timings ending\n // way before the `onEnd` is called are less likely to be good matches and we can ignore them.\n resources.shift();\n }\n resources.push(entry);\n });\n }\n function onVisibilityChanged() {\n if (!isWaitingAcceptable())\n end();\n }\n function disposeGlobalResources() {\n disconnectResourceObserver();\n cancelFallbackNoResourceFoundTimer();\n cancelFallbackEndNeverCalledTimer();\n stopVisibilityObservation();\n }\n function disconnectResourceObserver() {\n if (observer) {\n try {\n observer?.disconnect();\n }\n catch (_e) {\n // Observer disconnect may throw when connect attempt wasn't successful. Ignore this.\n }\n observer = undefined;\n }\n }\n function cancelFallbackNoResourceFoundTimer() {\n if (fallbackNoResourceFoundTimerHandle) {\n clearTimeout(fallbackNoResourceFoundTimerHandle);\n fallbackNoResourceFoundTimerHandle = undefined;\n }\n }\n function cancelFallbackEndNeverCalledTimer() {\n if (fallbackEndNeverCalledTimerHandle) {\n clearTimeout(fallbackEndNeverCalledTimerHandle);\n fallbackEndNeverCalledTimerHandle = undefined;\n }\n }\n function stopVisibilityObservation() {\n if (!doc)\n return;\n removeEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n }\n function findBestMatchingResource() {\n if (!resources.length)\n return undefined;\n let bestMatch;\n const matchingResources = resources.filter((res) => res.responseEnd <= endTime + opts.maxToleranceForResourceTimingsMillis && !usedResources.has(res));\n if (!matchingResources.length) {\n return undefined;\n }\n if (matchingResources.length === 1) {\n bestMatch = matchingResources[0];\n }\n let bestScore;\n if (!bestMatch) {\n for (const res of matchingResources) {\n const score = Math.abs(endTime - startTime - res.duration) + Math.abs(res.responseEnd - endTime);\n if (bestScore === undefined || score < bestScore) {\n bestScore = score;\n bestMatch = res;\n }\n }\n }\n if (!bestMatch)\n return;\n usedResources.add(bestMatch);\n return bestMatch;\n }\n}\n// We may only wait for resource data to arrive as long as the document is visible or in the process\n// of becoming visible. In all other cases we might lose data when waiting, e.g. when the document\n// is in the process of being disposed.\nfunction isWaitingAcceptable() {\n return doc?.visibilityState === \"visible\" || doc?.visibilityState === \"prerender\";\n}\nfunction observeWithoutPerformanceObserverSupport(onEnd) {\n let start = 0;\n return {\n start: () => {\n start = now();\n },\n end: () => onEnd({ duration: now() - start }),\n cancel: noop,\n };\n}\n","export const NO_VALUE_FALLBACK = \"undefined\";\nexport const INIT_MESSAGE = \"Initializing Dash0 Web SDK\";\n","export function roundToTwoDecimals(n) {\n return Math.round(n * 100) / 100;\n}\n","import { doc, loc } from \"./globals\";\n/**\n * Parses url using URL constructor. Supports URL objects as passthrough input to simplify implementations\n * May throw if parsing fails\n * @param url\n */\nexport function parseUrl(url) {\n if (typeof url !== \"string\")\n return url;\n return new URL(url, doc?.baseURI ?? loc?.href);\n}\n","import { parseUrl } from \"./url\";\n/** Returns the origin if present (if in browser context). */\nfunction getOrigin() {\n return typeof location !== \"undefined\" ? location.origin : undefined;\n}\nexport function isSameOrigin(url) {\n try {\n const parsedUrl = parseUrl(url);\n return parsedUrl.origin === getOrigin();\n }\n catch (_e) {\n return false;\n }\n}\n","const SUSPICIOUS_CHARS = /['\"<>{};\\x00-\\x1F\\x7F]/;\n/**\n * Returns true if the value is safe to use as a `service.name` resource attribute.\n *\n * Rejects values containing characters commonly used in injection payloads:\n * quotes, angle brackets, braces, semicolons, and C0 control characters / DEL.\n * Forward and back slashes are intentionally permitted so names like\n * `myteam/myservice` remain valid.\n */\nexport function isSafeServiceName(value) {\n return !SUSPICIOUS_CHARS.test(value);\n}\n","import { debug, warn } from \"./debug\";\nconst INSTRUMENTED_BY_DASH0_SYMBOL = Symbol.for(\"INSTRUMENTED_BY_DASH0\");\nfunction isAlreadyInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n return objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] === true;\n}\nfunction markAsInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] = true;\n}\nexport function wrap(module, target, wrapper) {\n const original = module[target];\n if (!original) {\n debug(`${String(target)} is not defined, unable to instrument`);\n return;\n }\n if (isAlreadyInstrumented(original)) {\n debug(`${String(target)} has already been instrumented, skipping`);\n return;\n }\n try {\n const wrapped = wrapper(original);\n // Mark the replacement as well: a later wrap() call reads the replacement from module[target],\n // so marking only the original would let repeated instrumentation wrap the wrapper.\n markAsInstrumented(original);\n if (wrapped) {\n markAsInstrumented(wrapped);\n }\n module[target] = wrapped;\n }\n catch (e) {\n // Pages can lock properties via Object.defineProperty/Object.freeze -- failing to install\n // one instrumentation must not throw out of init() and abort the remaining ones.\n warn(`failed to instrument ${String(target)}, the page may have locked the property`, e);\n }\n}\n","const POLYNOMIAL = 0xedb88320; // This is the standard polynomial used in IEEE 802.3 and must be in sync with the one we are using in the backend.\nconst TABLE = new Uint32Array(256);\nfor (let i = 0; i < 256; i++) {\n let c = i;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? POLYNOMIAL ^ (c >>> 1) : c >>> 1;\n }\n TABLE[i] = c >>> 0;\n}\nexport function crc32(hexStr) {\n const bytes = new Uint8Array(hexStr.length / 2);\n for (let i = 0; i < hexStr.length; i += 2) {\n bytes[i / 2] = parseInt(hexStr.substring(i, i + 2), 16);\n }\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n crc = (crc >>> 8) ^ TABLE[(crc ^ byte) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n","import { identity } from \"./utils\";\nexport const vars = {\n endpoints: [],\n resource: {\n attributes: [],\n },\n scope: {\n name: \"dash0-web-sdk\",\n version: __sdkVersion,\n attributes: [],\n },\n signalAttributes: [],\n ignoreUrls: [],\n ignoreErrorMessages: [],\n wrapEventHandlers: true,\n wrapTimers: true,\n propagateTraceHeadersCorsURLs: [],\n maxWaitForResourceTimingsMillis: 10000,\n maxToleranceForResourceTimingsMillis: 50,\n headersToCapture: [],\n urlAttributeScrubber: identity,\n pageViewInstrumentation: {\n trackVirtualPageViews: true,\n includeParts: [],\n },\n enableTransportCompression: false,\n isSessionSampled: true,\n};\n","import { vars } from \"../vars\";\nexport function matchesAny(regexp, s) {\n for (let i = 0, len = regexp.length; i < len; i++) {\n if (regexp[i].test(s)) {\n return true;\n }\n }\n return false;\n}\nconst DATA_URL_PREFIX = \"data:\";\nexport function isUrlIgnored(url) {\n if (!url) {\n return true;\n }\n // Force string conversion. During runtime we have seen that some URLs passed into this code path aren't actually\n // strings. Reason currently unknown.\n url = String(url);\n if (!url) {\n return true;\n }\n // We never want to track data URLs. Instead of matching these via regular expressions (which might be expensive),\n // we are explicitly doing a startsWith ignore case check\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n if (url.substring == null || url.substring(0, DATA_URL_PREFIX.length).toLowerCase() === DATA_URL_PREFIX) {\n return true;\n }\n // Disable monitoring of data transmission requests. The data transmission strategy already ensures\n // that data transmission requests are not picked up internally. However, we have seen some users\n // leverage custom (broken) XMLHttpRequest instrumentation to implement application code which\n // then break the detection of data transmission requests.\n if (isTransportRequest(url)) {\n return true;\n }\n return matchesAny(vars.ignoreUrls, url);\n}\nfunction isTransportRequest(url) {\n const lowerCaseUrl = url.toLowerCase();\n for (let i = 0, len = vars.endpoints.length; i < len; i++) {\n const endpoint = vars.endpoints[i];\n if (lowerCaseUrl.startsWith(endpoint.url)) {\n return true;\n }\n }\n return false;\n}\nexport function isErrorMessageIgnored(message) {\n return !message || matchesAny(vars.ignoreErrorMessages, message);\n}\n","import { addEventListener } from \"./listeners\";\nimport { doc, win } from \"./globals\";\nlet isUnloading = false;\n/**\n * Triggers the `fn` when the HTML document is getting unloaded\n * (or when it looks like it might be). Useful to flush batch activities.\n */\nexport function onLastChance(fn) {\n if (isUnloading) {\n fn();\n }\n if (!doc || !win)\n return;\n addEventListener(doc, \"visibilitychange\", function () {\n if (doc.visibilityState !== \"visible\") {\n fn();\n }\n });\n addEventListener(win, \"pagehide\", function () {\n isUnloading = true;\n fn();\n });\n // According to the spec visibilitychange should be a replacement for\n // beforeunload, but the reality is different (as of 2019-04-17). Chrome will\n // close tabs without firing visibilitychange. beforeunload on the other hand\n // is fired.\n addEventListener(win, \"beforeunload\", function () {\n isUnloading = true;\n fn();\n });\n}\n","import { onLastChance } from \"../utils/on-last-chance\";\nimport { doc } from \"../utils\";\nimport { setTimeout } from \"../utils/timers\";\nconst SCHEDULE_DELAY_MILLIS = 1000;\nconst MAX_QUEUE_SIZE = 15;\nexport function newBatcher(sendInternal) {\n const queuedItems = [];\n let pendingFlushTimeout;\n // We attempt batching of messages to be more efficient on the client, network and\n // server-side. While the connection is either a persistent HTTP 2 connection or\n // an HTTP 1.1 connection with keep-alive, there is still some overhead involved\n // in having many small messages.\n //\n // For this reason we attempt batching. When batching we must be careful to\n // force a transmission when the document is unloaded.\n onLastChance(flush);\n return {\n send(item) {\n if (isWindowHidden()) {\n // We cannot guarantee that we will ever get time to transmit data in a batched\n // format when the window is hidden, as this might occur while the document is\n // being unloaded. Immediately force a transmission in these cases.\n sendInternal([item]);\n return;\n }\n queuedItems.push(item);\n if (queuedItems.length >= MAX_QUEUE_SIZE) {\n flush();\n }\n else if (pendingFlushTimeout == null) {\n pendingFlushTimeout = setTimeout(flush, SCHEDULE_DELAY_MILLIS);\n }\n },\n };\n function flush() {\n if (pendingFlushTimeout != null) {\n clearTimeout(pendingFlushTimeout);\n pendingFlushTimeout = null;\n }\n if (queuedItems.length > 0) {\n sendInternal(queuedItems.slice());\n queuedItems.length = 0;\n }\n }\n}\nfunction isWindowHidden() {\n return doc?.visibilityState !== \"visible\";\n}\n","import { vars } from \"../vars\";\nimport { noop, warn, fetch, debug } from \"../utils\";\n// The bacon api enforces a size limit across all pending beacon requests per fetch group\n// There also seems to be a limit of 15 pending requests at the same time\n// See: https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch subpoint 10\n// See: https://github.com/getsentry/sentry-javascript/pull/7553\nconst BEACON_BODY_SIZE_LIMIT = 60000;\nlet pendingBodySize = 0;\nlet pendingRequestCount = 0;\nexport async function send(path, body) {\n debug(\"Transmitting telemetry to endpoints\", body);\n const jsonString = JSON.stringify(body);\n let requestBody = jsonString;\n let byteLength = new Blob([jsonString]).size;\n let isCompressed = false;\n // Try to compress if supported\n if (typeof CompressionStream !== \"undefined\" && vars.enableTransportCompression) {\n requestBody = await compressWithGzip(jsonString);\n byteLength = requestBody.byteLength;\n isCompressed = true;\n }\n // Send to all endpoints in parallel\n await Promise.all(vars.endpoints.map(async (endpoint) => {\n try {\n const url = new URL(endpoint[\"url\"]);\n url.pathname = url.pathname + (url.pathname.endsWith(\"/\") ? path.substring(1) : path);\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${endpoint[\"authToken\"]}`,\n };\n if (endpoint.dataset) {\n headers[\"Dash0-Dataset\"] = endpoint[\"dataset\"];\n }\n // Try to compress if supported\n if (isCompressed) {\n headers[\"Content-Encoding\"] = \"gzip\";\n }\n if (!fetch) {\n warn(\"Unable to send telemetry, fetch is not defined\");\n return;\n }\n pendingBodySize += byteLength;\n pendingRequestCount++;\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: requestBody,\n // The keepalive flag is related to the window.sendBeacon API. This in turn has size limitations.\n keepalive: pendingBodySize <= BEACON_BODY_SIZE_LIMIT && pendingRequestCount <= 15,\n });\n // read the body so the connection can be closed\n response.text().catch(noop);\n if (!response.ok) {\n warn(`Failed to send telemetry to ${url}: ${response.status} ${response.statusText}`);\n }\n }\n catch (error) {\n warn(`Error sending telemetry to ${endpoint.url}${path}:`, error);\n }\n finally {\n pendingBodySize -= byteLength;\n pendingRequestCount--;\n }\n }));\n}\nasync function compressWithGzip(data) {\n const blob = new Blob([data]);\n const stream = blob.stream();\n const compressedStream = stream.pipeThrough(new CompressionStream(\"gzip\"));\n return new Response(compressedStream).arrayBuffer();\n}\n","import { newBatcher } from \"./batcher\";\nimport { send } from \"./fetch\";\nimport { vars } from \"../vars\";\nimport { debug, error, createRateLimiter } from \"../utils\";\nconst logBatcher = newBatcher(sendLogs);\nconst spanBatcher = newBatcher(sendSpans);\nlet rateLimiter;\nfunction isRateLimited() {\n if (!rateLimiter) {\n rateLimiter = createRateLimiter({\n maxCallsPerTenMinutes: 4096,\n maxCallsPerTenSeconds: 128,\n });\n }\n return rateLimiter();\n}\nexport function sendLog(log) {\n if (!vars.isSessionSampled)\n return;\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", log);\n return;\n }\n logBatcher.send(log);\n}\nfunction sendLogs(logs) {\n send(\"/v1/logs\", {\n resourceLogs: [\n {\n resource: vars.resource,\n scopeLogs: [\n {\n scope: vars.scope,\n logRecords: logs,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit logs\", err);\n });\n}\nexport function sendSpan(span) {\n if (!span)\n return;\n if (!vars.isSessionSampled)\n return;\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", span);\n return;\n }\n spanBatcher.send(span);\n}\nfunction sendSpans(spans) {\n send(\"/v1/traces\", {\n resourceSpans: [\n {\n resource: vars.resource,\n scopeSpans: [\n {\n scope: vars.scope,\n spans: spans,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit spans\", err);\n });\n}\n","import { setInterval } from \"./timers\";\nexport function createRateLimiter(opts) {\n const maxCallsPerTenMinutes = opts.maxCallsPerTenMinutes || 128;\n const maxCallsPerTenSeconds = opts.maxCallsPerTenSeconds || 32;\n let totalCallsInLastTenMinutes = 0;\n let totalCallsInLastTenSeconds = 0;\n setInterval(function () {\n totalCallsInLastTenMinutes = 0;\n }, 1000 * 60 * 10);\n setInterval(function () {\n totalCallsInLastTenSeconds = 0;\n }, 1000 * 10);\n return function isExcessiveUsage() {\n return ++totalCallsInLastTenMinutes > maxCallsPerTenMinutes || ++totalCallsInLastTenSeconds > maxCallsPerTenSeconds;\n };\n}\n","// Resource Attribute Keys\nexport const SERVICE_NAME = \"service.name\";\nexport const SERVICE_NAMESPACE = \"service.namespace\";\nexport const SERVICE_VERSION = \"service.version\";\nexport const DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\nexport const DEPLOYMENT_NAME = \"deployment.name\";\nexport const DEPLOYMENT_ID = \"deployment.id\";\n// VCS Resource Attribute Keys\nexport const VCS_PROVIDER_NAME = \"vcs.provider.name\";\nexport const VCS_OWNER_NAME = \"vcs.owner.name\";\nexport const VCS_REPOSITORY_NAME = \"vcs.repository.name\";\nexport const VCS_REPOSITORY_URL_FULL = \"vcs.repository.url.full\";\nexport const VCS_REF_HEAD_NAME = \"vcs.ref.head.name\";\nexport const VCS_REF_HEAD_REVISION = \"vcs.ref.head.revision\";\nexport const VCS_CHANGE_ID = \"vcs.change.id\";\n// Misc Signal Attribute Keys\nexport const EVENT_NAME = \"event.name\";\nexport const WEB_EVENT_TITLE = \"dash0.web.event.title\";\nexport const WEB_EVENT_ID = \"dash0.web.event.id\";\nexport const WEB_REQUEST_CANCELLED = \"dash0.web.request.cancelled\";\nexport const PAGE_LOAD_ID = \"page.load.id\";\nexport const SESSION_ID = \"session.id\";\nexport const USER_AGENT = \"user_agent.original\";\nexport const BROWSER_TAB_ID = \"browser.tab.id\";\nexport const WINDOW_WIDTH = \"browser.window.width\";\nexport const WINDOW_HEIGHT = \"browser.window.height\";\nexport const NETWORK_CONNECTION_TYPE = \"network.connection.subtype\";\nexport const EXCEPTION_COMPONENT_STACK = \"exception.component_stack\";\n// User Attribute Keys\nexport const USER_ID = \"user.id\";\nexport const USER_NAME = \"user.name\";\nexport const USER_FULL_NAME = \"user.full_name\";\nexport const USER_EMAIL = \"user.email\";\nexport const USER_HASH = \"user.hash\";\nexport const USER_ROLES = \"user.roles\";\n// Exception Attribute Keys\nexport const EXCEPTION_MESSAGE = \"exception.message\";\nexport const EXCEPTION_TYPE = \"exception.type\";\nexport const EXCEPTION_STACKTRACE = \"exception.stacktrace\";\n// Error Attribute Keys\nexport const ERROR_TYPE = \"error.type\";\n// URL Attribute Keys\nexport const PAGE_URL_ATTR_PREFIX = \"page\";\nexport const URL_DOMAIN = \"url.domain\";\nexport const URL_FRAGMENT = \"url.fragment\";\nexport const URL_FULL = \"url.full\";\nexport const URL_PATH = \"url.path\";\nexport const URL_QUERY = \"url.query\";\nexport const URL_SCHEME = \"url.scheme\";\n// Http Attribute Keys\nexport const HTTP_REQUEST_METHOD = \"http.request.method\";\nexport const HTTP_REQUEST_METHOD_ORIGINAL = \"http.request.method_original\";\nexport const HTTP_REQUEST_HEADER = \"http.request.header\";\nexport const HTTP_RESPONSE_STATUS_CODE = \"http.response.status_code\";\nexport const HTTP_RESPONSE_HEADER = \"http.response.header\";\nexport const HTTP_RESPONSE_BODY_SIZE = \"http.response.body.size\";\n// Event Names\nexport const EVENT_NAMES = {\n PAGE_VIEW: \"browser.page_view\",\n NAVIGATION_TIMING: \"browser.navigation_timing\",\n WEB_VITAL: \"browser.web_vital\",\n ERROR: \"browser.error\",\n};\nexport const SPAN_EVENT_NAME_EXCEPTION = \"exception\";\n// Log Severities\nexport const LOG_SEVERITIES = {\n UNSPECIFIED: 0,\n TRACE: 1,\n DEBUG: 5,\n INFO: 9,\n WARN: 13,\n ERROR: 17,\n FATAL: 21,\n};\n// Page View Event Attributes\n// SEE: https://github.com/open-telemetry/semantic-conventions/pull/1910/files\nexport const PAGE_VIEW_TYPE = \"type\";\nexport const PAGE_VIEW_TYPE_VALUES = {\n INITIAL: 0,\n VIRTUAL: 1,\n};\nexport const PAGE_VIEW_CHANGE_STATE = \"change_state\";\nexport const PAGE_VIEW_CHANGE_STATE_VALUES = {\n PUSH: \"pushState\",\n REPLACE: \"replaceState\",\n};\n// Span Status\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1; // This is here for completion, status ok is reserved for use by application developers\nexport const SPAN_STATUS_ERROR = 2;\n// Span Kind\n// See: https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\nexport const SPAN_KIND_CLIENT = 3;\n","const ANY_VALUE_KEYS = [\n \"stringValue\",\n \"boolValue\",\n \"intValue\",\n \"doubleValue\",\n \"arrayValue\",\n \"kvlistValue\",\n \"bytesValue\",\n];\nfunction isAnyValue(value) {\n if (value == null || typeof value !== \"object\")\n return false;\n const keys = Object.keys(value);\n return keys.length === 1 && ANY_VALUE_KEYS.includes(keys[0]);\n}\nexport function toAnyValue(value) {\n if (value == null) {\n return undefined;\n }\n let anyValue = {};\n if (Array.isArray(value)) {\n anyValue[\"arrayValue\"] = { values: value.map((e) => toAnyValue(e)) };\n }\n else if (typeof value === \"string\") {\n anyValue[\"stringValue\"] = value;\n }\n else if (typeof value === \"number\") {\n anyValue[\"doubleValue\"] = value;\n }\n else if (typeof value === \"boolean\") {\n anyValue[\"boolValue\"] = value;\n }\n else if (isAnyValue(value)) {\n anyValue = value;\n }\n else if (typeof value === \"object\") {\n anyValue[\"kvlistValue\"] = { values: Object.entries(value).map(([key, value]) => toKeyValue(key, value)) };\n }\n return anyValue;\n}\nexport function toKeyValue(key, value) {\n return {\n key: key,\n value: toAnyValue(value),\n };\n}\n/**\n * Adds a single attribute to the provided attributes array\n */\nexport function addAttribute(attributes, key, value) {\n if (!key)\n return;\n attributes.push(toKeyValue(key, value));\n}\n/**\n * Adds multiple attributes to the provided attributes array\n */\nexport function addAttributes(\n/**\n * The attributes array to add to\n */\nattributes, \n/**\n * Additional attributes to add\n * If no attributes are provided, nothing is added\n */\nattrs) {\n if (!attrs)\n return;\n Object.entries(attrs).forEach(([key, value]) => addAttribute(attributes, key, value));\n}\n/**\n * Removes an attribute from the provided attributes array by its key\n */\nexport function removeAttribute(attributes, key) {\n const index = attributes.findIndex((attr) => attr[\"key\"] === key);\n if (index !== -1) {\n attributes.splice(index, 1);\n }\n}\nexport function withPrefix(prefix) {\n if (!prefix)\n return (attr) => attr;\n if (Array.isArray(prefix)) {\n return (attr) => [...prefix, attr].join(\".\");\n }\n return (attr) => `${prefix}.${attr}`;\n}\n","import { doc } from \"../globals\";\nimport { perf } from \"../globals\";\nconst TRACE_PARENT_HEADER = \"traceparent\";\n/**\n * See https://www.w3.org/TR/trace-context/#traceparent-header\n */\nconst w3cTraceparentFormat = /^00-([a-f0-9]{32})-([a-f0-9]{16})-[0-9]{1,2}$/;\nexport function getTraceContextForPageLoad() {\n const match = getTraceparentFromMetaElement().match(w3cTraceparentFormat) ||\n getTraceparentFromNavigationTiming().match(w3cTraceparentFormat);\n if (match) {\n return {\n traceId: match[1],\n spanId: match[2],\n };\n }\n return undefined;\n}\nfunction getTraceparentFromMetaElement() {\n return (Array.from(doc?.getElementsByTagName(\"meta\") ?? [])\n .find((e) => e.getAttribute(\"name\")?.toLowerCase() === TRACE_PARENT_HEADER)\n ?.content.trim() || \"\");\n}\nfunction getTraceparentFromNavigationTiming() {\n const nt = perf.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n return \"\";\n }\n if (!nt.serverTiming) {\n return \"\";\n }\n return getTraceparentFromServerTiming(nt.serverTiming);\n}\nfunction getTraceparentFromServerTiming(serverTimings) {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === TRACE_PARENT_HEADER) {\n return serverEntry.description.trim();\n }\n }\n return \"\";\n}\nexport function addW3CTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * W3C Traceparent header.\n * General format is ${version}-${trace-id}-${parent-id}-${trace-flags}\n *\n * The only spec'd version is currently 00\n * Trace flags are an 8 bit field of bit flags:\n * Sampled: 00000001 - Should only be set if a definite decision to record the trace was made.\n * If set downstream processors should also record the trace\n * Random Trace ID: 00000010 - IF set the component guarantees that the seven right most bytes of the trace-id\n * are randomly generated. Downstream processors are then able to rely on this for technical things like shard keys.\n *\n * NOTE: For now we just send the \"sampled\" flag because not all components support the random trace ID flag.\n *\n * References:\n * https://www.w3.org/TR/trace-context-2/#traceparent-header\n * https://www.w3.org/TR/trace-context-2/#trace-flags\n * https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\n */\n fn.call(ctx, \"traceparent\", `00-${span.traceId}-${span.spanId}-01`);\n}\nexport function addXRayTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * AWS X-Ray trace header.\n * General format is Root=${trace-id};Parent=${span-id};Sampled=${sampling-flag}\n *\n * Converts W3C trace ID format to X-Ray format:\n * W3C: 4efaaf4d1e8720b39541901950019ee5 (32 hex chars)\n * X-Ray: 1-4efaaf4d-1e8720b39541901950019ee5 (1-{8chars}-{24chars})\n *\n * References:\n * https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader\n */\n const xrayTraceId = convertW3CTraceIdToXRay(span.traceId);\n const xrayHeader = `Root=${xrayTraceId};Parent=${span.spanId};Sampled=1`;\n fn.call(ctx, \"X-Amzn-Trace-Id\", xrayHeader);\n}\nfunction convertW3CTraceIdToXRay(w3cTraceId) {\n // X-Ray trace ID format: 1-{timestamp}-{unique-id}\n // Split the 32-char W3C trace ID into 8-char timestamp and 24-char unique ID\n const timestamp = w3cTraceId.substring(0, 8);\n const uniqueId = w3cTraceId.substring(8, 32);\n return `1-${timestamp}-${uniqueId}`;\n}\n","import * as localStorage from \"./local-storage\";\nimport { generateUniqueId, SESSION_ID_BYTES } from \"./id\";\nconst SESSION_FLAGS = {\n EPHEMERAL_SESSION: 0x01, // 00000001 - if the browser does NOT support local storage we count the session as ephemeral because we cannot persist it\n};\nfunction encodeSessionFlags(flags) {\n let byte = 0;\n if (flags.ephemeralSession) {\n byte |= SESSION_FLAGS.EPHEMERAL_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateSessionId() {\n const sessionFlags = {\n ephemeralSession: !localStorage.isSupported,\n };\n return `${encodeSessionFlags(sessionFlags)}${generateUniqueId(SESSION_ID_BYTES - 1)}`;\n}\n","import { isSupported, getItem, setItem, removeItem } from \"../utils\";\nimport { debug, now } from \"../utils\";\nimport { info, warn } from \"../utils\";\nimport { generateSessionId } from \"../utils/session-id\";\nconst SESSION_STORAGE_KEY = \"d0_session\";\nconst STORAGE_SEPARATOR_KEY = \"#\";\nconst DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS = 1000 * 60 * 60 * 3;\nconst DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 6;\nconst MAX_ALLOWED_SESSION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 24;\nexport let sessionId = null;\nexport function trackSessions(sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n if (!isSupported) {\n debug(\"Storage API is not available and session tracking is therefore not supported.\");\n // we still generate a session ID to ensure that the session ID is always available\n sessionId = generateSessionId();\n return;\n }\n if (!sessionInactivityTimeoutMillis) {\n sessionInactivityTimeoutMillis = DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS;\n }\n if (!sessionTerminationTimeoutMillis) {\n sessionTerminationTimeoutMillis = DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS;\n }\n sessionInactivityTimeoutMillis = Math.min(sessionInactivityTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n sessionTerminationTimeoutMillis = Math.min(sessionTerminationTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n try {\n const storedValue = getItem(SESSION_STORAGE_KEY);\n let session = parseSession(storedValue);\n if (session && !isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis)) {\n session = null;\n }\n if (session) {\n session.lastActivityTime = now();\n }\n else {\n session = {\n id: generateSessionId(),\n startTime: now(),\n lastActivityTime: now(),\n };\n }\n setItem(SESSION_STORAGE_KEY, serializeSession(session));\n sessionId = session.id;\n }\n catch (e) {\n warn(\"Failed to record session information\", e);\n }\n}\n/**\n * The session will be terminated. This only takes effect on the next physical page load.\n */\nexport function terminateSession() {\n if (!isSupported) {\n return;\n }\n try {\n removeItem(SESSION_STORAGE_KEY);\n }\n catch (e) {\n info(\"Failed to terminate session\", e);\n }\n}\nfunction parseSession(storedValue) {\n if (!storedValue) {\n return null;\n }\n const values = storedValue.split(STORAGE_SEPARATOR_KEY);\n if (values.length < 3) {\n return null;\n }\n const id = values[0];\n const startTime = parseInt(values[1], 10);\n const lastActivityTime = parseInt(values[2], 10);\n if (!id || isNaN(startTime) || isNaN(lastActivityTime)) {\n return null;\n }\n return {\n id,\n startTime,\n lastActivityTime,\n };\n}\nfunction serializeSession(session) {\n return session.id + STORAGE_SEPARATOR_KEY + session.startTime + STORAGE_SEPARATOR_KEY + session.lastActivityTime;\n}\nfunction isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n const minAllowedLastActivityTime = now() - sessionInactivityTimeoutMillis;\n if (session.lastActivityTime < minAllowedLastActivityTime) {\n return false;\n }\n const minAllowedStartTime = now() - sessionTerminationTimeoutMillis;\n return session.startTime >= minAllowedStartTime;\n}\n","import { generateUniqueId, SESSION_ID_BYTES, TRACE_ID_BYTES } from \"./id\";\nconst TRACE_ID_PREFIX = \"d042\";\nconst TRACE_FLAGS = {\n WITHOUT_SESSION: 0x01, // 00000001 - in some edge cases we do not have a session ID, so we need to mark the trace as such\n};\nfunction encodeTraceFlags(flags) {\n let byte = 0;\n if (flags.withoutSession) {\n byte |= TRACE_FLAGS.WITHOUT_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateTraceId(sessionId) {\n if (!sessionId) {\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: true })}${generateUniqueId(TRACE_ID_BYTES - 3)}`;\n }\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: false })}${sessionId}${generateUniqueId(TRACE_ID_BYTES - SESSION_ID_BYTES - 3)}`;\n}\n","import { nowNanos } from \"../time\";\nimport { SPAN_KIND_CLIENT, SPAN_STATUS_UNSET, WEB_EVENT_ID } from \"../../semantic-conventions\";\nimport { sessionId } from \"../../api/session\";\nimport { generateTraceId } from \"../trace-id\";\nimport { generateSpanId } from \"../span-id\";\nimport { addAttribute } from \"./attributes\";\nimport { debug } from \"../debug\";\nexport function startSpan(name) {\n const traceId = generateTraceId(sessionId);\n const spanId = generateSpanId(traceId);\n const attributes = [];\n addAttribute(attributes, WEB_EVENT_ID, spanId);\n return {\n traceId,\n spanId,\n name,\n // Always CLIENT for now https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\n // Note: we directly define otlp here, this differs from the values used by oteljs internally.\n kind: SPAN_KIND_CLIENT,\n startTimeUnixNano: nowNanos(),\n attributes,\n events: [],\n links: [],\n status: { code: SPAN_STATUS_UNSET },\n };\n}\n/**\n * Ends the span by setting status and endTimeUnixNano on it. If the spand was already previously ended, this returns undefined\n * to prevent the span from being ended multiple times on accident.\n */\nexport function endSpan(span, status, durationNano) {\n // We cast here to avoid having to instantiate a copy of the span\n const s = span;\n if (s.endTimeUnixNano) {\n debug(\"Attempting to end already ended span. Dropping...\", s);\n return undefined;\n }\n if (status) {\n s.status = status;\n }\n s.endTimeUnixNano =\n durationNano != null ? String(Math.round(parseInt(s.startTimeUnixNano) + durationNano)) : nowNanos();\n return s;\n}\n/**\n * Adds an event to a span. Can optionally accept the events timestamp and attributes for the event.\n * The timestamp needs to be specified as nanoseconds since unix epoch in string format.\n */\nexport function addSpanEvent(span, name, attributesOrTs, attributes) {\n let ts = undefined;\n let attr = undefined;\n if (typeof attributesOrTs === \"string\") {\n ts = attributesOrTs;\n }\n else if (Array.isArray(attributesOrTs)) {\n attr = attributesOrTs;\n }\n if (attributes) {\n attr = attributes;\n }\n span.events.push({\n name,\n timeUnixNano: ts != null ? ts : nowNanos(),\n attributes: attr ?? [],\n });\n}\nexport function setSpanStatus(span, code, message) {\n span.status = {\n code,\n message,\n };\n}\n","import { generateUniqueId, SPAN_ID_BYTES } from \"./id\";\nimport { crc32 } from \"./crc32\";\nexport function generateSpanId(traceId) {\n const checksum = crc32(traceId);\n const prefix = checksum.toString(16).padStart(8, \"0\");\n return `${prefix}${generateUniqueId(SPAN_ID_BYTES - 4)}`;\n}\n","import { addSpanEvent } from \"./span\";\nimport { addAttribute } from \"./attributes\";\nimport { SPAN_EVENT_NAME_EXCEPTION, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, SPAN_STATUS_ERROR, } from \"../../semantic-conventions\";\nexport function recordException(span, exception) {\n const attributes = [];\n if (typeof exception === \"string\") {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception);\n }\n else if (exception) {\n if (exception.code) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.code.toString());\n }\n else if (exception.name) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.name);\n }\n if (exception.message) {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception.message);\n }\n if (exception.stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, exception.stack);\n }\n addSpanEvent(span, SPAN_EVENT_NAME_EXCEPTION, attributes);\n }\n}\nexport function errorToSpanStatus(e) {\n return {\n code: SPAN_STATUS_ERROR,\n message: e && typeof e === \"object\" && \"message\" in e ? e.message : String(e),\n };\n}\n","import { addAttribute, withPrefix } from \"../utils/otel\";\nimport { URL_DOMAIN, URL_FRAGMENT, URL_FULL, URL_PATH, URL_QUERY, URL_SCHEME } from \"../semantic-conventions\";\nimport { identity, parseUrl } from \"../utils\";\nimport { vars } from \"../vars\";\nexport function addUrlAttributes(attributes, url, prefix) {\n const applyPrefix = withPrefix(prefix);\n try {\n const parsed = parseUrl(url);\n if (parsed.username)\n parsed.username = \"REDACTED\";\n if (parsed.password)\n parsed.password = \"REDACTED\";\n const attrs = vars.urlAttributeScrubber({\n [URL_FULL]: parsed.href,\n [URL_PATH]: parsed.pathname,\n [URL_DOMAIN]: parsed.hostname,\n [URL_SCHEME]: parsed.protocol.replace(\":\", \"\"),\n [URL_FRAGMENT]: parsed.hash ? parsed.hash.replace(\"#\", \"\") : undefined,\n [URL_QUERY]: parsed.search ? parsed.search.replace(\"?\", \"\") : undefined,\n });\n Object.entries(attrs).forEach(([key, value]) => {\n if (value !== undefined) {\n addAttribute(attributes, applyPrefix(key), value);\n }\n });\n }\n catch (_e) {\n // This is fallback handling in case the url failed to parse or the user defined attribute scrubber behaved unexpectedly\n // If the user did not attempt scrubbing we'll supply the full url for debugging purposes, otherwise we drop all url\n // attributes\n if (vars.urlAttributeScrubber === identity) {\n // `identity` is the default assignment for this option\n addAttribute(attributes, applyPrefix(URL_FULL), String(url));\n }\n }\n}\n","// sessionStorage API re-exposed to allow testing.\nimport { sessionStorage } from \"./globals\";\nexport const isSupported = sessionStorage != null &&\n typeof sessionStorage.getItem === \"function\" &&\n typeof sessionStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && sessionStorage) {\n return sessionStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && sessionStorage) {\n sessionStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && sessionStorage) {\n sessionStorage.removeItem(k);\n }\n}\n","import { getItem, isSupported, setItem } from \"./session-storage\";\nimport { debug, warn } from \"./debug\";\nimport { generateUniqueId, TAB_ID_BYTES } from \"./id\";\nconst TAB_ID_STORAGE_KEY = \"d0_tab\";\nexport let tabId = null;\n/**\n * We want to be able to identify what browser tab the user is looking at. We do this by identifying tabs through\n * random-generated IDs that are kept in session storage. To quote MDN:\n *\n * > sessionStorage is partitioned by both origin and browser tabs (top-level browsing contexts)\n */\nexport function initializeTabId() {\n if (!isSupported) {\n debug(\"Storage API is not available and tab tracking is therefore not supported.\");\n return;\n }\n try {\n const storedValue = getItem(TAB_ID_STORAGE_KEY);\n if (storedValue) {\n tabId = storedValue;\n return;\n }\n tabId = generateUniqueId(TAB_ID_BYTES);\n setItem(TAB_ID_STORAGE_KEY, tabId);\n }\n catch (e) {\n warn(\"Failed to record tab ID information\", e);\n }\n}\n","import { generateUniqueId, nav, NO_VALUE_FALLBACK, WEB_EVENT_ID_BYTES, win } from \"../utils\";\nimport { BROWSER_TAB_ID, NETWORK_CONNECTION_TYPE, PAGE_URL_ATTR_PREFIX, SESSION_ID, WEB_EVENT_ID, WINDOW_HEIGHT, WINDOW_WIDTH, } from \"../semantic-conventions\";\nimport { sessionId } from \"../api/session\";\nimport { vars } from \"../vars\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addUrlAttributes } from \"./url\";\nimport { tabId } from \"../utils/tab-id\";\nexport function addCommonAttributes(attributes, options) {\n if (attributes.find((attribute) => attribute.key === WEB_EVENT_ID) === undefined) {\n addAttribute(attributes, WEB_EVENT_ID, generateUniqueId(WEB_EVENT_ID_BYTES));\n }\n for (let i = 0; i < vars.signalAttributes.length; i++) {\n attributes.push(vars.signalAttributes[i]);\n }\n addUrlAttributes(attributes, options?.url ?? win?.location.href ?? NO_VALUE_FALLBACK, PAGE_URL_ATTR_PREFIX);\n if (sessionId) {\n addAttribute(attributes, SESSION_ID, sessionId);\n }\n if (tabId) {\n addAttribute(attributes, BROWSER_TAB_ID, tabId);\n }\n addAttribute(attributes, WINDOW_WIDTH, win?.innerWidth ?? NO_VALUE_FALLBACK);\n addAttribute(attributes, WINDOW_HEIGHT, win?.innerHeight ?? NO_VALUE_FALLBACK);\n // @ts-expect-error -- TypeScript is not aware of navigator.connection.effectiveType\n const connectionType = nav?.connection?.effectiveType;\n if (connectionType) {\n addAttribute(attributes, NETWORK_CONNECTION_TYPE, connectionType);\n }\n}\n","import { hasOwnProperty, nowNanos, win } from \"../../utils\";\nimport { isErrorMessageIgnored } from \"../../utils/ignore-rules\";\nimport { sendLog } from \"../../transport\";\nimport { EVENT_NAME, EVENT_NAMES, EXCEPTION_COMPONENT_STACK, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, LOG_SEVERITIES, } from \"../../semantic-conventions\";\nimport { addAttribute, addAttributes } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nconst MAX_ERRORS_TO_REPORT = 100;\nconst MAX_STACK_SIZE = 30;\nconst MAX_NUMBER_OF_TRACKED_ERRORS = 20;\nlet reportedErrors = 0;\nlet numberOfDifferentErrorsSeen = 0;\nlet seenErrors = {};\nlet scheduledTransmissionTimeoutHandle;\n// We are wrapping global listeners. In these, we are catching and rethrowing errors.\n// In older browsers, rethrowing errors actually manipulates the error objects. As a\n// result, it is not possible to just mark an error as reported. The simplest way to\n// avoid double reporting is to temporarily disable the global onError handler…\nlet ignoreNextOnError = false;\nexport function ignoreNextOnErrorEvent() {\n ignoreNextOnError = true;\n}\nexport function startOnErrorInstrumentation() {\n if (!win)\n return;\n const globalOnError = win.onerror;\n win.onerror = function (message, fileName, lineNumber, columnNumber, error) {\n if (ignoreNextOnError) {\n ignoreNextOnError = false;\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n return;\n }\n let stack = error && error.stack;\n if (!stack) {\n stack = \"at \" + fileName + \" \" + lineNumber;\n if (columnNumber != null) {\n stack += \":\" + columnNumber;\n }\n }\n onUnhandledError({ message: String(message), stack });\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n };\n}\nexport function reportUnhandledError(error, opts) {\n if (!error) {\n return;\n }\n if (typeof error === \"string\") {\n onUnhandledError({ message: error, opts });\n }\n else {\n onUnhandledError({ message: error.message, type: error.name, stack: error.stack, opts });\n }\n}\nfunction onUnhandledError({ message, type, stack, opts }) {\n if (!message || reportedErrors > MAX_ERRORS_TO_REPORT) {\n return;\n }\n if (isErrorMessageIgnored(message)) {\n return;\n }\n if (numberOfDifferentErrorsSeen >= MAX_NUMBER_OF_TRACKED_ERRORS) {\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n }\n message = String(message).substring(0, 300);\n stack = shortenStackTrace(stack);\n const location = win?.location.href;\n const key = message + stack + location;\n let trackedError = seenErrors[key];\n if (trackedError) {\n trackedError.seenCount++;\n }\n else {\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.ERROR);\n addAttribute(attributes, EXCEPTION_MESSAGE, message);\n if (type) {\n addAttribute(attributes, EXCEPTION_TYPE, type);\n }\n if (stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, stack);\n }\n if (opts?.componentStack) {\n addAttribute(attributes, EXCEPTION_COMPONENT_STACK, opts?.componentStack.substring(0, 2048));\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n trackedError = {\n seenCount: 1,\n transmittedCount: 0,\n log: {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.ERROR,\n severityText: \"ERROR\",\n body: {\n stringValue: message,\n },\n },\n };\n seenErrors[key] = trackedError;\n numberOfDifferentErrorsSeen++;\n }\n scheduleTransmission();\n}\nexport function shortenStackTrace(stack) {\n return String(stack || \"\")\n .split(\"\\n\")\n .slice(0, MAX_STACK_SIZE)\n .join(\"\\n\");\n}\nfunction scheduleTransmission() {\n if (scheduledTransmissionTimeoutHandle) {\n return;\n }\n scheduledTransmissionTimeoutHandle = setTimeout(send, 1000);\n}\nfunction send() {\n if (scheduledTransmissionTimeoutHandle) {\n clearTimeout(scheduledTransmissionTimeoutHandle);\n scheduledTransmissionTimeoutHandle = null;\n }\n for (const key in seenErrors) {\n if (hasOwnProperty(seenErrors, key)) {\n const seenError = seenErrors[key];\n if (seenError.seenCount > seenError.transmittedCount) {\n sendLog(seenError.log);\n reportedErrors++;\n }\n }\n }\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n}\n","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let o,s;return r=>{t.value>=0&&(r||i)&&(s=t.value-(o??0),(s||void 0===o)&&(o=t.value,t.delta=s,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},o=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},s=()=>{const e=o();return e?.activationStart??0},r=(t,n=-1)=>{const i=o();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||s()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,m=e=>{\"hidden\"===document.visibilityState&&u>-1&&(u=\"visibilitychange\"===e.type?e.timeStamp:0,v())},g=()=>{addEventListener(\"visibilitychange\",m,!0),addEventListener(\"prerenderingchange\",m,!0)},v=()=>{removeEventListener(\"visibilitychange\",m,!0),removeEventListener(\"prerenderingchange\",m,!0)},p=()=>{if(u<0){const e=s(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??l(),g(),t((()=>{setTimeout((()=>{u=l(),g()}))}))}return{get firstHiddenTime(){return u}}},y=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},b=[1800,3e3],P=(e,o={})=>{y((()=>{const c=p();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-s(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,b,o.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,b,o.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},T=[.1,.25],E=(e,o={})=>{P(f((()=>{let s,c=r(\"CLS\",0);const f=a(o,d),u=e=>{for(const t of e)f.h(t);f.i>c.value&&(c.value=f.i,c.entries=f.o,s())},l=h(\"layout-shift\",u);l&&(s=n(e,c,T,o.reportAllChanges),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(u(l.takeRecords()),s(!0))})),t((()=>{f.i=0,c=r(\"CLS\",0),s=n(e,c,T,o.reportAllChanges),i((()=>s()))})),setTimeout(s))})))};let _=0,L=1/0,M=0;const C=e=>{for(const t of e)t.interactionId&&(L=Math.min(L,t.interactionId),M=Math.max(M,t.interactionId),_=M?(M-L)/7+1:0)};let I;const w=()=>I?_:performance.interactionCount??0,F=()=>{\"interactionCount\"in performance||I||(I=h(\"event\",C,{type:\"event\",buffered:!0,durationThreshold:0}))};let k=0;class A{u=[];l=new Map;m;v;p(){k=w(),this.u.length=0,this.l.clear()}P(){const e=Math.min(this.u.length-1,Math.floor((w()-k)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.T){if(n?e.duration>n.T?(n.entries=[e],n.T=e.duration):e.duration===n.T&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],T:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.T-e.T)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.v?.(n)}}}const B=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),document.addEventListener(\"visibilitychange\",e,{once:!0}),t((()=>{e(),document.removeEventListener(\"visibilitychange\",e)})))},N=[200,500],S=(e,i={})=>{globalThis.PerformanceEventTiming&&\"interactionId\"in PerformanceEventTiming.prototype&&y((()=>{F();let o,s=r(\"INP\");const c=a(i,A),d=e=>{B((()=>{for(const t of e)c.h(t);const t=c.P();t&&t.T!==s.value&&(s.value=t.T,s.entries=t.entries,o())}))},f=h(\"event\",d,{durationThreshold:i.durationThreshold??40});o=n(e,s,N,i.reportAllChanges),f&&(f.observe({type:\"first-input\",buffered:!0}),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(d(f.takeRecords()),o(!0))})),t((()=>{c.p(),s=r(\"INP\"),o=n(e,s,N,i.reportAllChanges)})))}))};class q{m;h(e){this.m?.(e)}}const x=[2500,4e3],O=(e,o={})=>{y((()=>{const c=p();let d,u=r(\"LCP\");const l=a(o,q),m=e=>{o.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-s(),0),u.entries=[t],d())},g=h(\"largest-contentful-paint\",m);if(g){d=n(e,u,x,o.reportAllChanges);const s=f((()=>{m(g.takeRecords()),g.disconnect(),d(!0)}));for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,(()=>B(s)),{capture:!0,once:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,x,o.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},$=[800,1800],D=e=>{document.prerendering?y((()=>D(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>D(e)),!0):setTimeout(e)},H=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,$,i.reportAllChanges);D((()=>{const d=o();d&&(c.value=Math.max(d.responseStart-s(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,$,i.reportAllChanges),a(!0)})))}))};export{T as CLSThresholds,b as FCPThresholds,N as INPThresholds,x as LCPThresholds,$ as TTFBThresholds,E as onCLS,P as onFCP,S as onINP,O as onLCP,H as onTTFB};\n","import { onLCP, onINP, onCLS } from \"web-vitals\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { nowNanos, roundToTwoDecimals } from \"../utils\";\nimport { sendLog } from \"../transport\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addCommonAttributes } from \"../attributes\";\nexport function startWebVitalsInstrumentation() {\n onLCP(onWebVital, { reportAllChanges: true });\n onINP(onWebVital, { reportAllChanges: true });\n onCLS(onWebVital, { reportAllChanges: true });\n}\nfunction onWebVital(metric) {\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.WEB_VITAL);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", metric.name);\n addAttribute(bodyAttributes, \"value\", roundToTwoDecimals(metric.value));\n addAttribute(bodyAttributes, \"delta\", roundToTwoDecimals(metric.delta));\n const log = {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n sendLog(log);\n}\n","import { win } from \"../../utils\";\nimport { reportUnhandledError } from \"./unhandled-error\";\nconst MESSAGE_PREFIX = \"Unhandled promise rejection: \";\nconst STACK_UNAVAILABLE_MESSAGE = \"<unavailable because Promise wasn't rejected with an Error object>\";\nexport function startUnhandledRejectionInstrumentation() {\n if (typeof win?.addEventListener === \"function\") {\n win.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n }\n}\nexport function onUnhandledRejection(event) {\n if (event.reason == null) {\n reportUnhandledError({\n message: MESSAGE_PREFIX + \"<no reason defined>\",\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason.message === \"string\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason.message,\n stack: typeof event.reason.stack === \"string\" ? event.reason.stack : STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason !== \"object\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason,\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n}\n","const WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY = \"__dash0OriginalFunctions\";\n// Asynchronous function wrapping: The process of wrapping a listener which goes into one function, e.g.\n//\n// - EventTarget#addEventListener\n// - EventEmitter#on\n//\n// and is removed via another function, e.g.\n//\n// - EventTarget#removeEventListener\n// - EventEmitter#off\n//\n// What is complicated about this, is that these methods identify registered listeners by function reference.\n// When we wrap a function, we naturally change the reference. We must therefore keep track of which\n// original function belongs to what wrapped function.\n//\n// This file provides helpers that help in the typical cases. It is removed from all browser specific APIs\n// in order to allow simple unit test execution.\n//\n// Note that this file follows the behavior outlined in DOM specification. Among others, this means that it is not\n// possible to register the same listener twice.\n// http://dom.spec.whatwg.org\nexport function addWrappedFunction(storageTarget, wrappedFunction, valuesForEqualityCheck) {\n if (!storageTarget)\n return wrappedFunction;\n const storage = (storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] =\n storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] || []);\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index !== -1) {\n // already registered. Do not allow re-registration\n return storage[index].wrappedFunction;\n }\n storage.push({\n wrappedFunction,\n valuesForEqualityCheck,\n });\n return wrappedFunction;\n}\nfunction findInStorage(storageTarget, valuesForEqualityCheck) {\n const storage = storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n for (let i = 0; i < storage.length; i++) {\n const storageItem = storage[i];\n if (matchesEqualityCheck(storageItem.valuesForEqualityCheck, valuesForEqualityCheck)) {\n return i;\n }\n }\n return -1;\n}\nexport function popWrappedFunction(storageTarget, valuesForEqualityCheck, fallback) {\n const storage = storageTarget?.[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n if (storage == null) {\n return fallback;\n }\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index === -1) {\n return fallback;\n }\n const storageItem = storage[index];\n storage.splice(index, 1);\n return storageItem.wrappedFunction;\n}\nfunction matchesEqualityCheck(valuesForEqualityCheckA, valuesForEqualityCheckB) {\n if (valuesForEqualityCheckA.length !== valuesForEqualityCheckB.length) {\n return false;\n }\n for (let i = 0; i < valuesForEqualityCheckA.length; i++) {\n if (valuesForEqualityCheckA[i] !== valuesForEqualityCheckB[i]) {\n return false;\n }\n }\n return true;\n}\nexport function addWrappedDomEventListener(storageTarget, wrappedFunction, eventName, eventListener, optionsOrCapture) {\n return addWrappedFunction(storageTarget, wrappedFunction, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture));\n}\nfunction getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture) {\n return [eventName, eventListener, getDomEventListenerCaptureValue(optionsOrCapture)];\n}\nexport function getDomEventListenerCaptureValue(optionsOrCapture) {\n // > Let capture, passive, and once be the result of flattening more options.\n // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n //\n // > To flatten more options, run these steps:\n // > 1. Let capture be the result of flattening options.\n // https://dom.spec.whatwg.org/#event-flatten-more\n //\n // > To flatten options, run these steps:\n // > 1. If options is a boolean, then return options.\n // > 2. Return options’s capture.\n // https://dom.spec.whatwg.org/#concept-flatten-options\n //\n // > dictionary EventListenerOptions {\n // > boolean capture = false;\n // > };\n // https://dom.spec.whatwg.org/#dom-eventlisteneroptions-capture\n if (optionsOrCapture == null) {\n return false;\n }\n else if (typeof optionsOrCapture === \"object\") {\n return Boolean(optionsOrCapture.capture);\n }\n return Boolean(optionsOrCapture);\n}\nexport function popWrappedDomEventListener(storageTarget, eventName, eventListener, optionsOrCapture, fallback) {\n return popWrappedFunction(storageTarget, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture), fallback);\n}\n","import { vars } from \"../../vars\";\nimport { win } from \"../../utils\";\nimport { addWrappedDomEventListener, popWrappedDomEventListener, } from \"./async-function-wrapping\";\nimport { ignoreNextOnErrorEvent, reportUnhandledError } from \"./unhandled-error\";\nexport function startEventHandlerInstrumentation() {\n if (vars.wrapEventHandlers) {\n wrapEventTarget(win?.EventTarget);\n }\n}\nfunction wrapEventTarget(EventTarget) {\n if (!EventTarget ||\n typeof EventTarget.prototype.addEventListener !== \"function\" ||\n typeof EventTarget.prototype.removeEventListener !== \"function\") {\n return;\n }\n const originalAddEventListener = EventTarget.prototype.addEventListener;\n const originalRemoveEventListener = EventTarget.prototype.removeEventListener;\n EventTarget.prototype.addEventListener = function wrappedAddEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalAddEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = function wrappedEventListener() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportUnhandledError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n args[1] = addWrappedDomEventListener(this, args[1], eventName, fn, optionsOrCapture);\n return originalAddEventListener.apply(this, args);\n };\n EventTarget.prototype.removeEventListener = function wrappedRemoveEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalRemoveEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = popWrappedDomEventListener(this, eventName, fn, optionsOrCapture, fn);\n return originalRemoveEventListener.apply(this, args);\n };\n}\n","import { vars } from \"../../vars\";\nimport { isRunningZoneJs } from \"../../utils/timers\";\nimport { warn, win } from \"../../utils\";\nimport { ignoreNextOnErrorEvent } from \"./unhandled-error\";\nexport function startTimerInstrumentation() {\n if (vars.wrapTimers) {\n if (isRunningZoneJs) {\n warn(\"We discovered a usage of Zone.js. In order to avoid any incompatibility issues timer wrapping is not going to be enabled.\");\n return;\n }\n wrapTimer(\"setTimeout\");\n wrapTimer(\"setInterval\");\n }\n}\nfunction wrapTimer(name) {\n const original = win?.[name];\n if (typeof original !== \"function\") {\n // cannot wrap because fn is not a function – should actually never happen\n return;\n }\n win[name] = function wrappedTimerSetter(fn) {\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[0] = wrap(fn);\n return original.apply(this, args);\n };\n}\nfunction wrap(fn) {\n if (typeof fn !== \"function\") {\n // cannot wrap because fn is not a function\n return fn;\n }\n return function wrappedTimerHandler() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n}\n","import { startOnErrorInstrumentation } from \"./unhandled-error\";\nimport { startUnhandledRejectionInstrumentation } from \"./unhandled-promise-rejection\";\nimport { startEventHandlerInstrumentation } from \"./event-handlers\";\nimport { startTimerInstrumentation } from \"./timers\";\nexport function startErrorInstrumentation() {\n startOnErrorInstrumentation();\n startUnhandledRejectionInstrumentation();\n startEventHandlerInstrumentation();\n startTimerInstrumentation();\n}\n","import { HTTP_REQUEST_HEADER, HTTP_RESPONSE_HEADER } from \"../../semantic-conventions\";\nexport function httpRequestHeaderKey(key) {\n return `${HTTP_REQUEST_HEADER}.${key.toLowerCase()}`;\n}\nexport function httpResponseHeaderKey(key) {\n return `${HTTP_RESPONSE_HEADER}.${key.toLowerCase()}`;\n}\n","import { addAttribute, addSpanEvent, addW3CTraceContextHttpHeaders, addXRayTraceContextHttpHeaders, endSpan, errorToSpanStatus, recordException, } from \"../../utils/otel\";\nimport { domHRTimestampToNanos, hasKey, isSameOrigin, PerformanceTimingNames } from \"../../utils\";\nimport { matchesAny } from \"../../utils/ignore-rules\";\nimport { ERROR_TYPE, HTTP_RESPONSE_BODY_SIZE, WEB_REQUEST_CANCELLED } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { sendSpan } from \"../../transport\";\n// SEE: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/attributes-registry/http.md?plain=1#L67\nconst KNOWN_HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"CONNECT\", \"OPTIONS\", \"TRACE\", \"PATCH\"];\nexport const HTTP_METHOD_OTHER = \"_OTHER\";\nexport function isWellKnownHttpMethod(method) {\n return KNOWN_HTTP_METHODS.includes(method);\n}\nexport function addResourceNetworkEvents(span, resource) {\n const ignoreZeros = resource.startTime !== 0;\n addSpanNetworkEvent(span, PerformanceTimingNames.FETCH_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.SECURE_CONNECTION_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.REQUEST_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_END, resource, ignoreZeros);\n}\nfunction addSpanNetworkEvent(span, propertyName, resource, ignoreZeros = true) {\n if (!hasKey(resource, propertyName) ||\n typeof resource[propertyName] !== \"number\" ||\n (ignoreZeros && resource[propertyName] === 0)) {\n return;\n }\n addSpanEvent(span, propertyName, domHRTimestampToNanos(resource[propertyName]));\n}\nexport function addResourceSize(span, resource) {\n const encodedLength = resource.encodedBodySize;\n if (encodedLength != undefined) {\n addAttribute(span.attributes, HTTP_RESPONSE_BODY_SIZE, encodedLength);\n }\n}\n// Sets error.type alongside the recorded exception so failed fetch and XHR spans are equally\n// queryable by error.type. The value is the exception name (e.g. TypeError) -- XHR's synthetic\n// failure exceptions carry their failure kind (\"error\"/\"timeout\") as the name, so both\n// instrumentations converge here. Note the shapes still differ for cases inherent to the APIs:\n// a fetch that resolves with status 0 (e.g. opaque responses) never reaches this function and\n// instead gets error.type = response.type plus http.response.status_code \"0\".\nexport function endSpanOnError(span, error) {\n recordException(span, error);\n const errorType = typeof error === \"object\" && error ? (error.name ?? (error.code != null ? String(error.code) : \"error\")) : \"error\";\n addAttribute(span.attributes, ERROR_TYPE, errorType);\n sendSpan(endSpan(span, errorToSpanStatus(error), undefined));\n}\n// Cancellations are benign: no error status, no error.type. This also covers fetch calls aborted\n// by AbortSignal.timeout() -- the signal is aborted by the time the rejection is handled, so a\n// fetch timeout surfaces as a cancellation while an XHR timeout is an ERROR span with\n// error.type = \"timeout\". That asymmetry is inherent to the two APIs.\nexport function endSpanOnAbort(span) {\n addAttribute(span.attributes, WEB_REQUEST_CANCELLED, true);\n sendSpan(endSpan(span, undefined, undefined));\n}\nexport function determinePropagatorTypes(url) {\n const matchingTypes = [];\n const isUrlSameOrigin = isSameOrigin(url);\n // For same-origin requests, always include traceparent + all configured propagators\n if (isUrlSameOrigin) {\n // Always add traceparent for same-origin requests\n matchingTypes.push(\"traceparent\");\n // Add all other configured propagator types for same-origin requests\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (propagator.type !== \"traceparent\" && !matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n // For cross-origin requests, use new propagators config if available\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (matchesAny(propagator.match, url)) {\n // Avoid duplicates\n if (!matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n return [];\n}\nexport function addTraceContextHttpHeaders(fn, ctx, span, types) {\n for (const type of types) {\n if (type === \"xray\") {\n addXRayTraceContextHttpHeaders(fn, ctx, span);\n }\n else {\n addW3CTraceContextHttpHeaders(fn, ctx, span);\n }\n }\n}\n","import { debug, observeResourcePerformance, perf, win, setTimeout, wrap, parseUrl, clearTimeout } from \"../../utils\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addAttribute, endSpan, setSpanStatus, startSpan } from \"../../utils/otel\";\nimport { ERROR_TYPE, HTTP_REQUEST_METHOD, HTTP_REQUEST_METHOD_ORIGINAL, HTTP_RESPONSE_STATUS_CODE, SPAN_STATUS_ERROR, SPAN_STATUS_UNSET, } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { httpRequestHeaderKey, httpResponseHeaderKey } from \"../../utils/otel/http\";\nimport { sendSpan } from \"../../transport\";\nimport { addResourceNetworkEvents, addResourceSize, addTraceContextHttpHeaders, determinePropagatorTypes, endSpanOnAbort, endSpanOnError, HTTP_METHOD_OTHER, isWellKnownHttpMethod, } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes } from \"../../attributes\";\nexport function instrumentFetch() {\n if (!win || !win.fetch || !win.Request) {\n debug(\"Browser does not support the Fetch API, skipping instrumentation\");\n return;\n }\n wrap(win, \"fetch\", wrapFetch);\n}\n// eslint-disable-next-line no-restricted-globals -- only used as type here\nfunction wrapFetch(original) {\n return async function fetchWithInstrumentation(input, init) {\n let fetchInput = input;\n let request;\n let instrumentation;\n try {\n let copyOfInit = init ? Object.assign({}, init) : init;\n let body = null;\n if (copyOfInit?.body) {\n body = copyOfInit.body;\n copyOfInit.body = undefined;\n }\n request = new Request(input, copyOfInit);\n if (body && copyOfInit) {\n copyOfInit.body = body;\n }\n // Constructing the Request above disturbs the body of a Request input, so from here on the\n // copy has to be handed to the original fetch in place of the input -- including on the\n // ignored and instrumentation-failure paths below.\n fetchInput = input instanceof Request ? request : input;\n if (isUrlIgnored(request.url)) {\n debug(`Not creating span for fetch call because the url is ignored, URL: ${request.url}`);\n // Note: the rejection of the returned promise does not route through the catch below --\n // only synchronous throws do, so the original fetch cannot be invoked twice.\n return original(fetchInput, init);\n }\n instrumentation = onFetchStart(input, init, request, copyOfInit);\n }\n catch (e) {\n debug(\"failed to instrument fetch call\", e);\n return original(fetchInput, init);\n }\n const { copyOfInit, span, performanceObserver } = instrumentation;\n try {\n const origResponse = await original(fetchInput, copyOfInit);\n addResponseData(span, origResponse);\n return wrapResponse(origResponse, vars.maxToleranceForResourceTimingsMillis, () => performanceObserver.end(), (e) => {\n performanceObserver.cancel();\n if (request?.signal?.aborted) {\n endSpanOnAbort(span);\n }\n else {\n endSpanOnError(span, e);\n }\n });\n }\n catch (e) {\n performanceObserver.cancel();\n if (request?.signal?.aborted) {\n endSpanOnAbort(span);\n }\n else {\n endSpanOnError(span, e);\n }\n throw e;\n }\n };\n}\nfunction onFetchStart(input, init, request, copyOfInit) {\n const url = request.url;\n // https://fetch.spec.whatwg.org/#concept-request-method\n // We'll match methods case insensitive here to make the user experience a bit less painful\n const originalMethod = request.method ?? \"GET\";\n const isWellKnownMethod = isWellKnownHttpMethod(originalMethod);\n const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n const method = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n const span = startSpan(`HTTP ${method}`);\n addCommonAttributes(span.attributes);\n addUrlAttributes(span.attributes, url);\n addGraphQlProperties(input, init, span);\n addAttribute(span.attributes, HTTP_REQUEST_METHOD, method);\n if (!isWellKnownMethod) {\n addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, originalMethod);\n }\n const propagatorTypes = determinePropagatorTypes(url);\n const shouldSetCorrelationHeaders = propagatorTypes.length > 0;\n if (shouldSetCorrelationHeaders) {\n if (copyOfInit?.headers) {\n // ensure we have a unified container for the headers\n copyOfInit.headers = new Headers(copyOfInit.headers);\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n else if (input instanceof Request) {\n addTraceContextHttpHeaders(request.headers.append, request.headers, span, propagatorTypes);\n }\n else {\n if (!copyOfInit) {\n copyOfInit = {};\n }\n copyOfInit.headers = new Headers();\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n }\n tryCaptureHttpHeaders(request.headers, span, (k) => httpRequestHeaderKey(k));\n const performanceObserver = observeResourcePerformance({\n // We match on both fetch and XHR here to support polyfills\n resourceMatcher: ({ initiatorType, name }) => (initiatorType === \"fetch\" || initiatorType === \"xmlhttprequest\") && name === parseUrl(url).href,\n maxWaitForResourceMillis: vars.maxWaitForResourceTimingsMillis,\n maxToleranceForResourceTimingsMillis: vars.maxToleranceForResourceTimingsMillis,\n onEnd: ({ duration, resource }) => {\n if (resource) {\n addResourceNetworkEvents(span, resource);\n addResourceSize(span, resource);\n }\n // duration is millis we need to convert to nanos\n sendSpan(endSpan(span, undefined, duration * 1000000));\n },\n });\n performanceObserver.start();\n return { copyOfInit, span, performanceObserver };\n}\n// @ts-expect-error -- WIP\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction addGraphQlProperties(input, init, span) {\n try {\n if (!isGraphQLQuery(input, init))\n return;\n }\n catch (e) {\n debug(\"failed to analyze request for GraphQL insights\", e, input, init);\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction isGraphQLQuery(input, init) {\n /**\n * TODO: Add GraphQL support.\n * GraphQL queries are either POST or GET requests.\n * Identified by either setting Accept=application/graphql-response+json or the url matching a config field for graphql urls.\n * See: https://graphql.github.io/graphql-over-http/draft/\n * GET requests are queries carrying a query search param\n * POST requests are either queries or mutations, See: https://graphql.org/learn/serving-over-http/#post-request-and-body\n * and https://github.com/instana/weasel/blob/main/lib/hooks/Fetch.ts#L201\n */\n return false;\n}\nfunction tryCaptureHttpHeaders(headers, span, getAttributeKey) {\n try {\n if (!vars.headersToCapture.length)\n return;\n headers.forEach((value, key) => {\n if (vars.headersToCapture.some((rxp) => rxp.test(key))) {\n addAttribute(span.attributes, getAttributeKey(key), value);\n }\n });\n }\n catch (e) {\n debug(\"unable to capture http headers\", e);\n }\n}\nfunction addResponseData(span, response) {\n const status = response.status;\n setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR);\n if (status === 0) {\n addAttribute(span.attributes, ERROR_TYPE, response.type);\n }\n addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n tryCaptureHttpHeaders(response.headers, span, (k) => httpResponseHeaderKey(k));\n}\n/**\n * Wraps the response to be able to detect when it is fully read\n * @param originalResponse\n * @param readTimeoutMs Timeout applied between reading of response chunks, if exceeded the response is considered abandoned and onDone is called.\n * @param onDone Called when the response is completely read or with \"fallbackEndTs\" when reading timed out.\n * @param onError\n */\nfunction wrapResponse(originalResponse, readTimeoutMs, onDone, onError) {\n // When the response was wrapped (i.e. first available to js) we use this to replace or find the actual end timestamp\n // in case the response body is never read by js\n let fallbackTs = perf.now();\n const body = originalResponse.body;\n // For some reason browsers return a response body on responses that can't be constructed with one. In that case we can't wrap the body stream\n if (!body || !responseCanHaveBody(originalResponse)) {\n onDone();\n return originalResponse;\n }\n let cbCalled = false;\n const handleDone = (fallbackEndTs) => {\n if (cbCalled)\n return;\n onDone(fallbackEndTs);\n cbCalled = true;\n };\n const handleError = (e) => {\n if (cbCalled)\n return;\n onError(e);\n cbCalled = true;\n };\n let bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n const reader = body.getReader();\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n const { value, done } = await reader.read();\n if (done) {\n reader.releaseLock();\n controller.close();\n handleDone();\n }\n else {\n fallbackTs = perf.now();\n bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n controller.enqueue(value);\n }\n }\n catch (e) {\n handleError(e);\n controller.error(e);\n try {\n reader.releaseLock();\n }\n catch {\n // Spec reference:\n // https://streams.spec.whatwg.org/#default-reader-release-lock\n //\n // releaseLock() only throws if called on an invalid reader\n // (i.e. reader.[[stream]] is undefined, meaning the lock is already released\n // or the reader was never associated). In normal use this cannot happen.\n // This catch is defensive only.\n }\n }\n },\n cancel(reason) {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n handleDone();\n return reader.cancel(reason);\n },\n });\n return new Response(stream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: originalResponse.headers,\n });\n}\nfunction responseCanHaveBody(response) {\n const status = response.status;\n return status >= 200 && status != 204 && status != 205 && status != 304;\n}\n","import { addEventListener, debug, observeResourcePerformance, parseUrl, removeEventListener, win, wrap, } from \"../../utils\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addAttribute, endSpan, recordException, setSpanStatus, startSpan, } from \"../../utils/otel\";\nimport { ERROR_TYPE, HTTP_REQUEST_METHOD, HTTP_REQUEST_METHOD_ORIGINAL, HTTP_RESPONSE_STATUS_CODE, SPAN_STATUS_ERROR, SPAN_STATUS_UNSET, } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { httpRequestHeaderKey, httpResponseHeaderKey } from \"../../utils/otel/http\";\nimport { sendSpan } from \"../../transport\";\nimport { addResourceNetworkEvents, addResourceSize, addTraceContextHttpHeaders, determinePropagatorTypes, endSpanOnAbort, endSpanOnError, HTTP_METHOD_OTHER, isWellKnownHttpMethod, } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes } from \"../../attributes\";\nconst XHR_STATE = Symbol(\"dash0XhrState\");\n// The un-wrapped setRequestHeader, captured when wrapping. Trace context headers are injected\n// through it so the SDK's own headers neither land in capturedRequestHeaders nor trip the\n// already-traced detection below.\nlet originalSetRequestHeader;\nexport function instrumentXhr() {\n if (!win || !win.XMLHttpRequest) {\n debug(\"Browser does not support XMLHttpRequest, skipping instrumentation\");\n return;\n }\n const proto = win.XMLHttpRequest.prototype;\n wrap(proto, \"open\", wrapOpen);\n wrap(proto, \"setRequestHeader\", wrapSetRequestHeader);\n wrap(proto, \"send\", wrapSend);\n}\nfunction wrapOpen(original) {\n return function (method, url, ...rest) {\n let openArgs = [method, url, ...rest];\n try {\n // Pass the pre-coerced URL to the native method so a side-effectful custom toString runs\n // once, not twice. The method arg stays untouched -- its coercion is SDK bookkeeping only.\n openArgs = [method, onOpen(this, method, url), ...rest];\n }\n catch (e) {\n // Clear stale state from a previous open() on a reused instance so send() doesn't\n // attribute the new request to old state.\n this[XHR_STATE] = undefined;\n debug(\"failed to instrument XMLHttpRequest.open\", e);\n }\n return original.apply(this, openArgs);\n };\n}\nfunction onOpen(xhr, method, url) {\n // Per spec, open() during an in-flight request terminates the fetch without firing\n // abort/loadend, so onLoadEnd never runs for the previous request. Clean it up here (before\n // anything below can throw) or its listeners, performance observer and span would leak on\n // every cancel-by-reopen cycle -- and its stale loadend listener would end the old span with\n // the next request's status.\n const previousState = xhr[XHR_STATE];\n if (previousState?.span && !previousState.completed) {\n cleanupAbandonedRequest(xhr, previousState);\n }\n const stringUrl = String(url);\n // Resolve relative URLs so ignore rules, propagator matching and url.* attributes see the same\n // absolute URL the fetch instrumentation matches against (Request resolves it there). Only the\n // SDK bookkeeping uses the resolved form -- the native open() still receives stringUrl.\n const resolvedUrl = parseUrl(stringUrl).href;\n const originalMethod = String(method ?? \"GET\");\n const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n const normalizedMethod = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n // A new open() call on a reused XHR instance resets state -- any prior span for this instance\n // has already been sent (completed requests) or was just ended as cancelled above, and this\n // open() is treated as the start of a brand-new request with its own span.\n xhr[XHR_STATE] = {\n method: normalizedMethod,\n originalMethod,\n isWellKnownMethod: isWellKnownHttpMethod(originalMethod),\n url: resolvedUrl,\n ignored: isUrlIgnored(resolvedUrl),\n propagatorTypes: determinePropagatorTypes(resolvedUrl),\n completed: false,\n };\n return stringUrl;\n}\nfunction wrapSetRequestHeader(original) {\n // wrap() only invokes this factory when it actually wraps (it skips already-instrumented\n // targets), so this can never capture the SDK's own wrapper on double instrumentation.\n originalSetRequestHeader = original;\n return function (name, value) {\n original.call(this, name, value);\n try {\n onSetRequestHeader(this, name, value);\n }\n catch (e) {\n debug(\"failed to instrument XMLHttpRequest.setRequestHeader\", e);\n }\n };\n}\nfunction onSetRequestHeader(xhr, name, value) {\n const state = xhr[XHR_STATE];\n if (!state || state.ignored)\n return;\n // Match against the lowercased name so a regex behaves the same here as for fetch,\n // where Headers iteration yields lowercased names.\n const lowerName = name.toLowerCase();\n // A trace correlation header showing up here means someone else is already tracing this\n // request -- the SDK injects its own headers via the un-wrapped setRequestHeader, so it never\n // trips this. The typical source is a fetch polyfill built on XHR: the fetch instrumentation\n // has already created a span and injected headers for the logical request, and the polyfill\n // replays them onto the underlying XHR. send() skips span creation and injection for such\n // requests -- a second injection would combine into one invalid comma-joined header value,\n // and a second span would double-report the request (the fetch span's resource matcher\n // already accepts initiatorType \"xmlhttprequest\" to cover polyfills). Note this only\n // detects the polyfill case when the fetch side actually injected headers (a propagator\n // matched the URL) -- without that, the polyfill case still yields two spans.\n if (lowerName === \"traceparent\" || lowerName === \"x-amzn-trace-id\") {\n state.alreadyTraced = true;\n }\n // Filter at capture time like the fetch instrumentation -- never retain unmatched\n // (potentially sensitive) headers on the page-reachable XHR instance.\n if (vars.headersToCapture.length === 0)\n return;\n if (!vars.headersToCapture.some((rxp) => rxp.test(lowerName)))\n return;\n const headers = (state.capturedRequestHeaders ??= {});\n // Native XHR combines repeated setRequestHeader() calls for the same name\n // (case-insensitively) into a single \"a, b\" value -- mirror that.\n headers[lowerName] = lowerName in headers ? `${headers[lowerName]}, ${value}` : value;\n}\nfunction wrapSend(original) {\n return function (body) {\n const state = this[XHR_STATE];\n if (!state || state.ignored) {\n if (state?.ignored) {\n debug(`Not creating span for XMLHttpRequest because the url is ignored, URL: ${state.url}`);\n }\n return original.call(this, body);\n }\n if (state.alreadyTraced) {\n debug(`Not creating span for XMLHttpRequest because a trace correlation header is already present, URL: ${state.url}`);\n return original.call(this, body);\n }\n // send() on an already-sent request throws InvalidStateError natively. Don't create a second\n // span and set of listeners for it -- that would overwrite the in-flight request's state and\n // attribute its response to the wrong span.\n if (state.span && !state.completed) {\n return original.call(this, body);\n }\n try {\n onSend(this, state);\n }\n catch (e) {\n cleanupFailedSend(this, state);\n debug(\"failed to instrument XMLHttpRequest.send\", e);\n }\n try {\n return original.call(this, body);\n }\n catch (e) {\n // Synchronous XHR reports network errors and timeouts by making send() throw -- per spec\n // no loadend fires for sync failures, so onLoadEnd never runs and this is the only place\n // the request can be finalized.\n endSpanOnSyncSendError(this, state, e);\n throw e;\n }\n };\n}\nfunction endSpanOnSyncSendError(xhr, state, error) {\n if (state.completed)\n return;\n state.completed = true;\n try {\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n state.performanceObserver?.cancel();\n const span = state.span;\n if (!span)\n return;\n const failureKind = state.failureKind ?? (error?.name === \"TimeoutError\" ? \"timeout\" : \"error\");\n recordException(span, error ?? { name: failureKind, message: `XMLHttpRequest failed: ${state.url}` });\n addAttribute(span.attributes, ERROR_TYPE, failureKind);\n sendSpan(endSpan(span, { code: SPAN_STATUS_ERROR, message: `XMLHttpRequest failed: ${state.url}` }, undefined));\n }\n catch (_e) {\n // Best-effort only -- never mask the page's original exception from send().\n }\n}\nfunction onSend(xhr, state) {\n const span = startSpan(`HTTP ${state.method}`);\n addCommonAttributes(span.attributes);\n addUrlAttributes(span.attributes, state.url);\n addAttribute(span.attributes, HTTP_REQUEST_METHOD, state.method);\n if (!state.isWellKnownMethod) {\n addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, state.originalMethod);\n }\n state.span = span;\n if (state.propagatorTypes.length > 0) {\n try {\n addTraceContextHttpHeaders((name, value) => (originalSetRequestHeader ?? xhr.setRequestHeader).call(xhr, name, value), xhr, span, state.propagatorTypes);\n }\n catch (e) {\n // setRequestHeader throws InvalidStateError if called before open() succeeded, or after\n // send(). This should not normally happen since we only reach here from within send()\n // itself with state populated by a prior open(), but guard defensively.\n debug(\"failed to inject trace context headers on XMLHttpRequest\", e);\n }\n }\n // Entries were already filtered against vars.headersToCapture (and lowercased) at\n // setRequestHeader() time.\n if (state.capturedRequestHeaders) {\n for (const [name, value] of Object.entries(state.capturedRequestHeaders)) {\n addAttribute(span.attributes, httpRequestHeaderKey(name), value);\n }\n }\n const performanceObserver = observeResourcePerformance({\n resourceMatcher: ({ initiatorType, name }) => initiatorType === \"xmlhttprequest\" && name === state.url,\n maxWaitForResourceMillis: vars.maxWaitForResourceTimingsMillis,\n maxToleranceForResourceTimingsMillis: vars.maxToleranceForResourceTimingsMillis,\n onEnd: ({ duration, resource }) => {\n if (resource) {\n addResourceNetworkEvents(span, resource);\n addResourceSize(span, resource);\n }\n sendSpan(endSpan(span, undefined, duration * 1000000));\n },\n });\n state.performanceObserver = performanceObserver;\n performanceObserver.start();\n // Keep references to the per-request listeners so onLoadEnd can remove them again -- loadend\n // fires for every request outcome, so cleanup there prevents listeners (and their state/span\n // closures) from accumulating on reused XHR instances.\n state.listeners = [\n [\n \"error\",\n () => {\n state.failureKind = \"error\";\n },\n ],\n [\n \"timeout\",\n () => {\n state.failureKind = \"timeout\";\n },\n ],\n [\n \"abort\",\n () => {\n state.failureKind = \"abort\";\n },\n ],\n [\"loadend\", () => onLoadEnd(xhr, state)],\n ];\n for (const [eventType, listener] of state.listeners) {\n addEventListener(xhr, eventType, listener);\n }\n}\nfunction cleanupAbandonedRequest(xhr, state) {\n // Mark completed first so a stray late event stays a no-op even if listener removal fails.\n state.completed = true;\n try {\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n state.performanceObserver?.cancel();\n if (state.span) {\n // Report the request as cancelled, matching how fetch reports aborted requests.\n endSpanOnAbort(state.span);\n }\n }\n catch (_e) {\n // Best-effort cleanup only -- never let it throw into the page's open() call.\n }\n}\nfunction cleanupFailedSend(xhr, state) {\n try {\n state.performanceObserver?.cancel();\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n }\n catch (_e) {\n // Best-effort cleanup only -- never let it throw into the page's send() call.\n }\n // Drop the span so a stray loadend for this request doesn't emit a half-initialized span.\n state.span = undefined;\n}\nfunction onLoadEnd(xhr, state) {\n if (state.completed)\n return;\n state.completed = true;\n // The request cycle is over -- remove the per-request listeners so they don't pile up on reused\n // XHR instances.\n for (const [eventType, listener] of state.listeners ?? []) {\n removeEventListener(xhr, eventType, listener);\n }\n const span = state.span;\n if (!span)\n return;\n const performanceObserver = state.performanceObserver;\n if (state.failureKind === \"abort\") {\n performanceObserver?.cancel();\n endSpanOnAbort(span);\n return;\n }\n let status = 0;\n try {\n status = xhr.status;\n }\n catch (_e) {\n // Reading .status can throw in some environments if accessed at the wrong readyState.\n status = 0;\n }\n if (state.failureKind === \"error\" || state.failureKind === \"timeout\" || status === 0) {\n performanceObserver?.cancel();\n const failureKind = state.failureKind ?? \"error\";\n // The failure kind doubles as the exception name, so endSpanOnError derives\n // error.type = failureKind from it.\n endSpanOnError(span, { name: failureKind, message: `XMLHttpRequest failed: ${state.url}` });\n return;\n }\n setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR);\n addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n tryCaptureResponseHeaders(xhr, span);\n performanceObserver?.end();\n}\nfunction tryCaptureResponseHeaders(xhr, span) {\n try {\n if (!vars.headersToCapture.length)\n return;\n const raw = xhr.getAllResponseHeaders();\n if (!raw)\n return;\n raw\n .split(/\\r?\\n/)\n .filter((line) => line.length > 0)\n .forEach((line) => {\n const separatorIndex = line.indexOf(\":\");\n if (separatorIndex === -1)\n return;\n const name = line.substring(0, separatorIndex).trim();\n const value = line.substring(separatorIndex + 1).trim();\n if (vars.headersToCapture.some((rxp) => rxp.test(name))) {\n addAttribute(span.attributes, httpResponseHeaderKey(name), value);\n }\n });\n }\n catch (e) {\n debug(\"unable to capture http response headers\", e);\n }\n}\n","import { addAttribute, addAttributes, getTraceContextForPageLoad } from \"../../utils/otel\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES, PAGE_VIEW_CHANGE_STATE, PAGE_VIEW_CHANGE_STATE_VALUES, PAGE_VIEW_TYPE, PAGE_VIEW_TYPE_VALUES, } from \"../../semantic-conventions\";\nimport { doc, NO_VALUE_FALLBACK } from \"../../utils\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { sendLog } from \"../../transport\";\nimport { vars } from \"../../vars\";\nfunction getPageViewMeta(url) {\n if (!url)\n return {};\n return vars.pageViewInstrumentation.generateMetadata?.(url) ?? {};\n}\nfunction buildAndSendPageViewLog(opts) {\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.PAGE_VIEW);\n if (opts.metaAttributes) {\n Object.entries(opts.metaAttributes).forEach(([key, value]) => addAttribute(attributes, key, value));\n }\n addCommonAttributes(attributes, { url: opts.url });\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts.customAttributes);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"title\", opts.title ?? doc?.title ?? NO_VALUE_FALLBACK);\n if (doc?.referrer) {\n addAttribute(bodyAttributes, \"referrer\", doc.referrer);\n }\n addAttribute(bodyAttributes, PAGE_VIEW_TYPE, opts.pageViewType);\n if (opts.changeState) {\n addAttribute(bodyAttributes, PAGE_VIEW_CHANGE_STATE, opts.changeState);\n }\n const log = {\n timeUnixNano: opts.timeUnixNano,\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\nexport function transmitPageViewEvent(timeUnixNano, url, virtual, replaced) {\n const meta = getPageViewMeta(url);\n buildAndSendPageViewLog({\n timeUnixNano,\n url,\n title: meta.title,\n metaAttributes: meta.attributes,\n pageViewType: virtual ? PAGE_VIEW_TYPE_VALUES.VIRTUAL : PAGE_VIEW_TYPE_VALUES.INITIAL,\n changeState: replaced ? PAGE_VIEW_CHANGE_STATE_VALUES.REPLACE : PAGE_VIEW_CHANGE_STATE_VALUES.PUSH,\n });\n}\n/**\n * Emits a manually-triggered page view log, e.g. from the public `startView` API.\n * Deliberately does NOT read `vars.pageViewInstrumentation.generateMetadata` and does NOT\n * include a `change_state` body key (a manual view is neither a pushState nor replaceState).\n * The emitted `type` is PAGE_VIEW_TYPE_VALUES.VIRTUAL, matching automatic virtual page views —\n * manual views are deliberately indistinguishable from virtual ones downstream.\n * Caller-provided attributes are added after the SDK-generated ones so they can override them,\n * matching the sendEvent semantics.\n */\nexport function transmitManualPageViewEvent(opts) {\n buildAndSendPageViewLog({\n timeUnixNano: opts.timeUnixNano,\n url: opts.url,\n title: opts.title,\n customAttributes: opts.attributes,\n pageViewType: PAGE_VIEW_TYPE_VALUES.VIRTUAL,\n });\n}\n","import { addEventListener, debug, doc, win, roundToTwoDecimals, error, toNanosTs, getTimeOrigin } from \"../../utils\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../../semantic-conventions\";\nimport { sendLog } from \"../../transport\";\nimport { getTraceContextForPageLoad, addAttribute } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { transmitPageViewEvent } from \"./event\";\n/**\n * Tracks page loads as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageLoadInstrumentation() {\n try {\n transmitPageViewEvent(getStartTimeUnixNanos(), win?.location.href ? new URL(win?.location.href) : undefined);\n }\n catch (e) {\n error(\"Failed to transmit initial page view event\", e);\n }\n if (doc?.readyState === \"complete\") {\n return onLoaded();\n }\n if (win) {\n addEventListener(win, \"load\", function () {\n // we want to get timing data for loadEventEnd,\n // so asynchronously process this\n setTimeout(onLoaded, 0);\n });\n }\n}\n/**\n * See https://github.com/open-telemetry/semantic-conventions/pull/1919\n */\nfunction onLoaded() {\n const nt = win?.performance.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n debug(\"Navigation timings not available. Cannot emit navigation timing log\");\n return;\n }\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.NAVIGATION_TIMING);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", nt.name);\n addNavigationTiming(bodyAttributes, nt, \"responseStatus\");\n addNavigationTiming(bodyAttributes, nt, \"fetchStart\");\n addNavigationTiming(bodyAttributes, nt, \"requestStart\");\n addNavigationTiming(bodyAttributes, nt, \"responseStart\");\n addNavigationTiming(bodyAttributes, nt, \"domInteractive\");\n addNavigationTiming(bodyAttributes, nt, \"domContentLoadedEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"domComplete\");\n addNavigationTiming(bodyAttributes, nt, \"loadEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"transferSize\");\n addNavigationTiming(bodyAttributes, nt, \"encodedBodySize\");\n addNavigationTiming(bodyAttributes, nt, \"decodedBodySize\");\n const log = {\n timeUnixNano: getStartTimeUnixNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\nfunction addNavigationTiming(attributes, nt, field) {\n // @ts-expect-error index access not recognized by TS, but this makes the code more reusable\n const value = nt[field];\n if (typeof value === \"number\" && !isNaN(value)) {\n addAttribute(attributes, field, Number.isInteger(value) ? value : roundToTwoDecimals(value));\n }\n}\nfunction getStartTimeUnixNanos() {\n return toNanosTs(Math.round(getTimeOrigin()));\n}\n","import { debug, nowNanos, win, wrap } from \"../../utils\";\nimport { vars } from \"../../vars\";\nimport { transmitPageViewEvent } from \"./event\";\nlet currentLocation = {};\nlet shouldIncludeHashChanges = false;\nlet shouldIncludeSearchChanges = false;\n/**\n * Tracks page transitions (virtual page views) as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageTransitionInstrumentation() {\n if (!win || !win.history) {\n debug(\"Browser does not support history API, skipping instrumentation\");\n return;\n }\n if (!vars.pageViewInstrumentation.trackVirtualPageViews) {\n return;\n }\n shouldIncludeSearchChanges = vars.pageViewInstrumentation.includeParts?.includes(\"SEARCH\") ?? false;\n shouldIncludeHashChanges = vars.pageViewInstrumentation.includeParts?.includes(\"HASH\") ?? false;\n /**\n * Not wrapping history.go, history.backward and history.forward here, because their call signatures don't receive\n * url information. For these cases we can use the popstate and hashchange events.\n */\n wrap(win.history, \"replaceState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined, true);\n return original.apply(this, [state, unused, url]);\n });\n wrap(win.history, \"pushState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined);\n return original.apply(this, [state, unused, url]);\n });\n win.addEventListener(\"hashchange\", onHashChange);\n win.addEventListener(\"popstate\", onPopState);\n try {\n updateCurrentLocation(new URL(win.location.href));\n }\n catch { }\n}\nfunction onPopState() {\n // popState event is fired after the location entry has been updated, so the location should already contain the new url.\n onUrlChange(win?.location.href);\n}\nfunction onHashChange(event) {\n onUrlChange(event.newURL);\n}\nfunction onUrlChange(url, replaced) {\n if (!url)\n return;\n try {\n const parsedUrl = new URL(url, win?.location.href);\n if (isLocationChange(parsedUrl)) {\n updateCurrentLocation(parsedUrl);\n transmitPageViewEvent(nowNanos(), parsedUrl, true, Boolean(replaced));\n }\n }\n catch (e) {\n debug(\"Failed to handle url change\", e);\n }\n}\nfunction updateCurrentLocation(url) {\n currentLocation.path = url.pathname;\n currentLocation.search = url.search;\n currentLocation.hash = url.hash;\n}\nfunction isLocationChange(newUrl) {\n return (newUrl.pathname !== currentLocation.path ||\n (shouldIncludeSearchChanges && newUrl.search !== currentLocation.search) ||\n (shouldIncludeHashChanges && newUrl.hash !== currentLocation.hash));\n}\n","import { startPageLoadInstrumentation } from \"./page-load\";\nimport { startPageTransitionInstrumentation } from \"./page-transition\";\nexport function startNavigationInstrumentation() {\n startPageLoadInstrumentation();\n startPageTransitionInstrumentation();\n}\n","// Shared types and helpers for reading build-environment variables exposed\n// to the browser bundle. Owned by this module because it is used from both\n// init.ts (environment / deployment detection) and vcs.ts (VCS detection).\n//\n// IMPORTANT: each `process.env.NAME` MUST be a LITERAL accessor in the\n// caller's source. Webpack DefinePlugin, Next.js, Gatsby, and equivalents\n// substitute env vars at build time only when they see the literal form.\n// Dynamic lookups (`process.env[name]`, iterating a string array) are NOT\n// substituted — they resolve to `undefined` in the browser bundle.\n//\n// The type unions below are the single source of truth for which env var\n// names the SDK reads. They are composed via template-literal types so\n// every (prefix × suffix) combination is enumerated at the type level.\n// Adding a framework prefix is a one-line edit to `FrameworkPrefix`; adding\n// a suffix is a one-line edit to the appropriate suffix union.\n/**\n * Return the first truthy value, or undefined. Used to walk the list of\n * framework-prefixed variants of an env var and pick whichever the user's\n * bundler substituted at build time.\n *\n * The falsy check skips empty strings as well as undefined — bundlers that\n * do not substitute a literal leave it as `undefined`, not `\"\"`, so empty\n * is treated as \"not set\". This is intentional and matches every known\n * `VERCEL_GIT_*` / `REPOSITORY_URL` / etc. value shape (non-empty strings\n * or absent; Vercel PR IDs are positive integer strings, never `\"0\"`).\n */\nexport function pickFirstString(...values) {\n for (const value of values) {\n if (value)\n return value;\n }\n return undefined;\n}\n","import { vars } from \"../vars\";\nimport { VCS_CHANGE_ID, VCS_OWNER_NAME, VCS_PROVIDER_NAME, VCS_REF_HEAD_NAME, VCS_REF_HEAD_REVISION, VCS_REPOSITORY_NAME, VCS_REPOSITORY_URL_FULL, } from \"../semantic-conventions\";\nimport { addAttribute } from \"../utils/otel\";\nimport { pickFirstString } from \"./browser-env\";\n// Single source of truth mapping each VcsAttributes field to its OTel\n// resource attribute name. Typed as `Record<keyof VcsAttributes, string>` so\n// adding a field to VcsAttributes without adding an entry here is a compile\n// error — no silent \"I forgot to apply that field\" bugs.\nconst VCS_FIELD_TO_ATTRIBUTE = {\n providerName: VCS_PROVIDER_NAME,\n ownerName: VCS_OWNER_NAME,\n repositoryName: VCS_REPOSITORY_NAME,\n repositoryUrlFull: VCS_REPOSITORY_URL_FULL,\n refHeadName: VCS_REF_HEAD_NAME,\n refHeadRevision: VCS_REF_HEAD_REVISION,\n changeId: VCS_CHANGE_ID,\n};\n/**\n * Derive VCS (version control) context from the build environment and apply\n * the resulting `vcs.*` resource attributes to `vars.resource.attributes`.\n *\n * Detection precedence per attribute: `opts.vcs` → Vercel env vars → Netlify\n * env vars. Manual overrides via `opts.vcs` always win, even when\n * `opts.disableVcsDetection` is set.\n */\nexport function applyVcsResourceAttributes(opts) {\n const vcs = detectVcs(opts);\n for (const field of Object.keys(VCS_FIELD_TO_ATTRIBUTE)) {\n const value = vcs[field];\n if (value) {\n addAttribute(vars.resource.attributes, VCS_FIELD_TO_ATTRIBUTE[field], value);\n }\n }\n}\nfunction detectVcs(opts) {\n // opts.vcs manual overrides always win, even when auto-detection is disabled.\n // This lets callers on non-Vercel/Netlify platforms supply context explicitly\n // while still opting out of any env-var reading.\n const override = opts.vcs ?? {};\n if (opts.disableVcsDetection) {\n return override;\n }\n const vercel = detectVcsFromVercel();\n const netlify = detectVcsFromNetlify();\n return {\n providerName: override.providerName ?? vercel.providerName ?? netlify.providerName,\n ownerName: override.ownerName ?? vercel.ownerName ?? netlify.ownerName,\n repositoryName: override.repositoryName ?? vercel.repositoryName ?? netlify.repositoryName,\n repositoryUrlFull: override.repositoryUrlFull ?? vercel.repositoryUrlFull ?? netlify.repositoryUrlFull,\n refHeadName: override.refHeadName ?? vercel.refHeadName ?? netlify.refHeadName,\n refHeadRevision: override.refHeadRevision ?? vercel.refHeadRevision ?? netlify.refHeadRevision,\n changeId: override.changeId ?? vercel.changeId ?? netlify.changeId,\n };\n}\n// Frameworks expose env vars to the browser bundle using a per-framework\n// prefix (Next.js `NEXT_PUBLIC_*`, Vite `VITE_*`, etc.). For each known\n// vendor suffix (e.g. Vercel's `VERCEL_GIT_PROVIDER`, Netlify's\n// `REPOSITORY_URL`) we enumerate the prefixed variants below.\n//\n// IMPORTANT: each `process.env.NAME` MUST be a LITERAL accessor. Webpack\n// DefinePlugin, Next.js, Gatsby, and equivalents substitute env vars at\n// build time only when they see the literal form. Dynamic lookups like\n// `process.env[name]` or iterating a string array are NOT substituted —\n// they would resolve to `undefined` in the browser bundle.\n//\n// The 9 prefixes below are the framework presets Vercel auto-prefixes\n// `VERCEL_*` system vars under (https://vercel.com/docs/environment-variables/framework-environment-variables).\n// Users on platforms without auto-prefixing (Netlify, Cloudflare Pages, custom\n// CI) can manually expose any env var under any of these prefixes and get\n// the same auto-detection.\n//\n// Adding a new framework prefix = one new literal accessor per attribute in\n// each `detectVcsFrom*` function below.\nfunction detectVcsFromVercel() {\n let provider;\n let owner;\n let repo;\n let ref;\n let revision;\n let changeId;\n try {\n provider = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.NUXT_PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.NUXT_ENV_VERCEL_GIT_PROVIDER, process?.env?.REACT_APP_VERCEL_GIT_PROVIDER, process?.env?.GATSBY_VERCEL_GIT_PROVIDER, process?.env?.VITE_VERCEL_GIT_PROVIDER, process?.env?.PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.VUE_APP_VERCEL_GIT_PROVIDER, process?.env?.REDWOOD_ENV_VERCEL_GIT_PROVIDER, process?.env?.SANITY_STUDIO_VERCEL_GIT_PROVIDER);\n owner = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.NUXT_PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.NUXT_ENV_VERCEL_GIT_REPO_OWNER, process?.env?.REACT_APP_VERCEL_GIT_REPO_OWNER, process?.env?.GATSBY_VERCEL_GIT_REPO_OWNER, process?.env?.VITE_VERCEL_GIT_REPO_OWNER, process?.env?.PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.VUE_APP_VERCEL_GIT_REPO_OWNER, process?.env?.REDWOOD_ENV_VERCEL_GIT_REPO_OWNER, process?.env?.SANITY_STUDIO_VERCEL_GIT_REPO_OWNER);\n repo = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.NUXT_PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.NUXT_ENV_VERCEL_GIT_REPO_SLUG, process?.env?.REACT_APP_VERCEL_GIT_REPO_SLUG, process?.env?.GATSBY_VERCEL_GIT_REPO_SLUG, process?.env?.VITE_VERCEL_GIT_REPO_SLUG, process?.env?.PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.VUE_APP_VERCEL_GIT_REPO_SLUG, process?.env?.REDWOOD_ENV_VERCEL_GIT_REPO_SLUG, process?.env?.SANITY_STUDIO_VERCEL_GIT_REPO_SLUG);\n ref = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.NUXT_PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.NUXT_ENV_VERCEL_GIT_COMMIT_REF, process?.env?.REACT_APP_VERCEL_GIT_COMMIT_REF, process?.env?.GATSBY_VERCEL_GIT_COMMIT_REF, process?.env?.VITE_VERCEL_GIT_COMMIT_REF, process?.env?.PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.VUE_APP_VERCEL_GIT_COMMIT_REF, process?.env?.REDWOOD_ENV_VERCEL_GIT_COMMIT_REF, process?.env?.SANITY_STUDIO_VERCEL_GIT_COMMIT_REF);\n revision = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.NUXT_PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.NUXT_ENV_VERCEL_GIT_COMMIT_SHA, process?.env?.REACT_APP_VERCEL_GIT_COMMIT_SHA, process?.env?.GATSBY_VERCEL_GIT_COMMIT_SHA, process?.env?.VITE_VERCEL_GIT_COMMIT_SHA, process?.env?.PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.VUE_APP_VERCEL_GIT_COMMIT_SHA, process?.env?.REDWOOD_ENV_VERCEL_GIT_COMMIT_SHA, process?.env?.SANITY_STUDIO_VERCEL_GIT_COMMIT_SHA);\n changeId = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.NUXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.NUXT_ENV_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.REACT_APP_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.GATSBY_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.VITE_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.VUE_APP_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.REDWOOD_ENV_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.SANITY_STUDIO_VERCEL_GIT_PULL_REQUEST_ID);\n }\n catch (_ignored) {\n // process is not defined (or a bundler shimmed it strangely) — skip.\n }\n return {\n providerName: provider,\n ownerName: owner,\n repositoryName: repo,\n repositoryUrlFull: buildRepositoryUrlFromVercel(provider, owner, repo),\n refHeadName: ref,\n refHeadRevision: revision,\n changeId,\n };\n}\nfunction detectVcsFromNetlify() {\n // Netlify exposes read-only build env vars (REPOSITORY_URL, BRANCH,\n // COMMIT_REF, REVIEW_ID) but does not auto-prefix them for browser\n // exposure. Users must surface them via their framework's prefix\n // convention themselves (e.g. `NEXT_PUBLIC_REPOSITORY_URL = $REPOSITORY_URL`\n // for Next.js, `VITE_REPOSITORY_URL = $REPOSITORY_URL` for Vite, etc.).\n // We enumerate the same 9 framework prefixes as the Vercel path above.\n let repositoryUrl;\n let branch;\n let commit;\n let reviewId;\n try {\n repositoryUrl = pickFirstString(process?.env?.NEXT_PUBLIC_REPOSITORY_URL, process?.env?.NUXT_PUBLIC_REPOSITORY_URL, process?.env?.NUXT_ENV_REPOSITORY_URL, process?.env?.REACT_APP_REPOSITORY_URL, process?.env?.GATSBY_REPOSITORY_URL, process?.env?.VITE_REPOSITORY_URL, process?.env?.PUBLIC_REPOSITORY_URL, process?.env?.VUE_APP_REPOSITORY_URL, process?.env?.REDWOOD_ENV_REPOSITORY_URL, process?.env?.SANITY_STUDIO_REPOSITORY_URL);\n branch = pickFirstString(process?.env?.NEXT_PUBLIC_BRANCH, process?.env?.NUXT_PUBLIC_BRANCH, process?.env?.NUXT_ENV_BRANCH, process?.env?.REACT_APP_BRANCH, process?.env?.GATSBY_BRANCH, process?.env?.VITE_BRANCH, process?.env?.PUBLIC_BRANCH, process?.env?.VUE_APP_BRANCH, process?.env?.REDWOOD_ENV_BRANCH, process?.env?.SANITY_STUDIO_BRANCH);\n commit = pickFirstString(process?.env?.NEXT_PUBLIC_COMMIT_REF, process?.env?.NUXT_PUBLIC_COMMIT_REF, process?.env?.NUXT_ENV_COMMIT_REF, process?.env?.REACT_APP_COMMIT_REF, process?.env?.GATSBY_COMMIT_REF, process?.env?.VITE_COMMIT_REF, process?.env?.PUBLIC_COMMIT_REF, process?.env?.VUE_APP_COMMIT_REF, process?.env?.REDWOOD_ENV_COMMIT_REF, process?.env?.SANITY_STUDIO_COMMIT_REF);\n reviewId = pickFirstString(process?.env?.NEXT_PUBLIC_REVIEW_ID, process?.env?.NUXT_PUBLIC_REVIEW_ID, process?.env?.NUXT_ENV_REVIEW_ID, process?.env?.REACT_APP_REVIEW_ID, process?.env?.GATSBY_REVIEW_ID, process?.env?.VITE_REVIEW_ID, process?.env?.PUBLIC_REVIEW_ID, process?.env?.VUE_APP_REVIEW_ID, process?.env?.REDWOOD_ENV_REVIEW_ID, process?.env?.SANITY_STUDIO_REVIEW_ID);\n }\n catch (_ignored) {\n // process is not defined — skip.\n }\n const parsed = parseRepositoryUrl(repositoryUrl);\n return {\n providerName: parsed?.providerName,\n ownerName: parsed?.ownerName,\n repositoryName: parsed?.repositoryName,\n repositoryUrlFull: repositoryUrl,\n refHeadName: branch,\n refHeadRevision: commit,\n changeId: reviewId,\n };\n}\nfunction buildRepositoryUrlFromVercel(provider, owner, repo) {\n if (!provider || !owner || !repo)\n return undefined;\n const host = vcsHostForProvider(provider);\n if (!host)\n return undefined;\n return `https://${host}/${owner}/${repo}`;\n}\n// Single source of truth for provider↔host mapping. Both `vcsHostForProvider`\n// (Vercel path: provider name is known, derive the canonical host) and\n// `vcsProviderForHost` (Netlify path: only the URL is known, derive the\n// provider) consult this map so adding a provider is one edit. Each entry is\n// a list of accepted hostnames; the FIRST entry is the canonical host used\n// when building URLs from a provider name. Subsequent entries are exact\n// aliases — we do not match arbitrary subdomains.\nconst VCS_PROVIDER_HOSTS = {\n github: [\"github.com\", \"gist.github.com\"],\n gitlab: [\"gitlab.com\"],\n bitbucket: [\"bitbucket.org\"],\n};\nfunction vcsHostForProvider(provider) {\n return VCS_PROVIDER_HOSTS[provider]?.[0];\n}\nfunction parseRepositoryUrl(url) {\n if (!url)\n return undefined;\n let host;\n let pathname;\n try {\n const parsed = new URL(url);\n host = parsed.host;\n pathname = parsed.pathname;\n }\n catch (_ignored) {\n return undefined;\n }\n const provider = vcsProviderForHost(host);\n if (!provider)\n return undefined;\n const trimmed = pathname.replace(/^\\/+/, \"\").replace(/\\.git$/, \"\");\n const segments = trimmed.split(\"/\");\n if (segments.length < 2)\n return undefined;\n const ownerName = segments[0];\n // Bitbucket and GitLab can have nested groups; the repository slug is the\n // last path segment. GitHub paths are always two segments.\n const repositoryName = segments[segments.length - 1];\n if (!ownerName || !repositoryName)\n return undefined;\n return { providerName: provider, ownerName, repositoryName };\n}\nfunction vcsProviderForHost(host) {\n for (const [provider, hosts] of Object.entries(VCS_PROVIDER_HOSTS)) {\n if (hosts.includes(host))\n return provider;\n }\n return undefined;\n}\n","import { vars } from \"../vars\";\nimport { DEPLOYMENT_ENVIRONMENT_NAME, DEPLOYMENT_ID, DEPLOYMENT_NAME, PAGE_LOAD_ID, SERVICE_NAME, SERVICE_NAMESPACE, SERVICE_VERSION, USER_AGENT, } from \"../semantic-conventions\";\nimport { fetch, generateUniqueId, isSessionSampledIn, isSafeServiceName, PAGE_LOAD_ID_BYTES, warn, debug, perf, nav, win, NO_VALUE_FALLBACK, pick, loc, } from \"../utils\";\nimport { sessionId, trackSessions } from \"./session\";\nimport { startWebVitalsInstrumentation } from \"../instrumentations/web-vitals\";\nimport { startErrorInstrumentation } from \"../instrumentations/errors\";\nimport { addAttribute } from \"../utils/otel\";\nimport { instrumentFetch } from \"../instrumentations/http/fetch\";\nimport { instrumentXhr } from \"../instrumentations/http/xhr\";\nimport { startNavigationInstrumentation } from \"../instrumentations/navigation\";\nimport { initializeTabId } from \"../utils/tab-id\";\nimport { pickFirstString } from \"./browser-env\";\nimport { applyVcsResourceAttributes } from \"./vcs\";\nlet hasBeenInitialised = false;\nexport function init(opts) {\n if (hasBeenInitialised) {\n debug(\"Dash0 SDK is being reinitialized, skipping ...\");\n return;\n }\n if (!isClient()) {\n debug(\"Looks like we are not running in a browser context. Stopping Dash0 Web SDK initialization.\");\n return;\n }\n if (!isSupported()) {\n debug(\"Stopping Dash0 Web SDK initialization. This browser does not support the necessary APIs.\");\n return;\n }\n const trimmedServiceName = opts.serviceName.trim();\n if (!trimmedServiceName) {\n debug(\"Missing or empty serviceName value. Falling back to location.hostname.\");\n opts.serviceName = loc?.hostname ?? \"unknown\";\n }\n else if (opts.rejectSuspiciousServiceName !== false && !isSafeServiceName(trimmedServiceName)) {\n debug(\"serviceName contains disallowed characters. Falling back to location.hostname.\");\n opts.serviceName = loc?.hostname ?? \"unknown\";\n }\n vars.endpoints = opts.endpoint instanceof Array ? opts.endpoint : [opts.endpoint];\n if (vars.endpoints.length === 0) {\n warn(\"No telemetry endpoint configured. Aborting Dash0 Web SDK initialization process.\");\n return;\n }\n Object.assign(vars, merge(vars, pick(opts, [\n \"ignoreUrls\",\n \"ignoreErrorMessages\",\n \"wrapEventHandlers\",\n \"wrapTimers\",\n \"propagateTraceHeadersCorsURLs\",\n \"maxWaitForResourceTimingsMillis\",\n \"maxToleranceForResourceTimingsMillis\",\n \"headersToCapture\",\n \"urlAttributeScrubber\",\n \"pageViewInstrumentation\",\n \"enableTransportCompression\",\n ])));\n initializePropagators(opts);\n initializeResourceAttributes(opts);\n initializeSignalAttributes(opts);\n initializeTabId();\n trackSessions(opts.sessionInactivityTimeoutMillis, opts.sessionTerminationTimeoutMillis);\n if (opts.sessionSamplingRate != null) {\n const rate = Math.max(0, Math.min(100, opts.sessionSamplingRate));\n vars.isSessionSampled = sessionId != null ? isSessionSampledIn(sessionId, rate) : rate > 0;\n }\n if (!vars.isSessionSampled) {\n debug(\"Session is not sampled. No telemetry will be transmitted for this session.\");\n hasBeenInitialised = true;\n return;\n }\n if (isInstrumentationEnabled(\"@dash0/navigation\", opts)) {\n startNavigationInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/web-vitals\", opts)) {\n startWebVitalsInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/error\", opts)) {\n startErrorInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/fetch\", opts)) {\n instrumentFetch();\n }\n if (isInstrumentationEnabled(\"@dash0/xhr\", opts)) {\n instrumentXhr();\n }\n hasBeenInitialised = true;\n}\nfunction initializeResourceAttributes(opts) {\n addAttribute(vars.resource.attributes, SERVICE_NAME, opts[\"serviceName\"]);\n if (opts.serviceNamespace) {\n addAttribute(vars.resource.attributes, SERVICE_NAMESPACE, opts[\"serviceNamespace\"]);\n }\n if (opts.serviceVersion) {\n addAttribute(vars.resource.attributes, SERVICE_VERSION, opts[\"serviceVersion\"]);\n }\n const env = detectEnvironment(opts);\n if (env) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ENVIRONMENT_NAME, env);\n }\n const deploymentName = detectDeploymentName(opts);\n if (deploymentName) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_NAME, deploymentName);\n }\n const deploymentId = detectDeploymentId(opts);\n if (deploymentId) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ID, deploymentId);\n }\n applyVcsResourceAttributes(opts);\n}\nfunction initializeSignalAttributes(opts) {\n addAttribute(vars.signalAttributes, PAGE_LOAD_ID, generateUniqueId(PAGE_LOAD_ID_BYTES));\n addAttribute(vars.signalAttributes, USER_AGENT, nav?.userAgent ?? NO_VALUE_FALLBACK);\n if (opts.additionalSignalAttributes) {\n Object.entries(opts.additionalSignalAttributes).forEach(([key, value]) => {\n addAttribute(vars.signalAttributes, key, value);\n });\n }\n}\nfunction isSupported() {\n return typeof fetch === \"function\" && perf && perf.getEntriesByType;\n}\nfunction isClient() {\n return win != null;\n}\n// Vercel auto-prefixes its system env vars under every framework preset\n// (see https://vercel.com/docs/environment-variables/framework-environment-variables).\n// The shared `FrameworkPrefix` union in `./browser-env` is the single source\n// of truth for which prefixes the SDK recognises. To add a new prefix, edit\n// it there; the literal accessors below pick it up automatically via the\n// typed `process.env` declaration.\nfunction detectEnvironment(opts) {\n if (opts.environment) {\n return opts.environment;\n }\n try {\n return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_ENV, process?.env?.NUXT_PUBLIC_VERCEL_ENV, process?.env?.NUXT_ENV_VERCEL_ENV, process?.env?.REACT_APP_VERCEL_ENV, process?.env?.GATSBY_VERCEL_ENV, process?.env?.VITE_VERCEL_ENV, process?.env?.PUBLIC_VERCEL_ENV, process?.env?.VUE_APP_VERCEL_ENV, process?.env?.REDWOOD_ENV_VERCEL_ENV, process?.env?.SANITY_STUDIO_VERCEL_ENV);\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentName(opts) {\n if (opts.deploymentName) {\n return opts.deploymentName;\n }\n try {\n return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_TARGET_ENV, process?.env?.NUXT_PUBLIC_VERCEL_TARGET_ENV, process?.env?.NUXT_ENV_VERCEL_TARGET_ENV, process?.env?.REACT_APP_VERCEL_TARGET_ENV, process?.env?.GATSBY_VERCEL_TARGET_ENV, process?.env?.VITE_VERCEL_TARGET_ENV, process?.env?.PUBLIC_VERCEL_TARGET_ENV, process?.env?.VUE_APP_VERCEL_TARGET_ENV, process?.env?.REDWOOD_ENV_VERCEL_TARGET_ENV, process?.env?.SANITY_STUDIO_VERCEL_TARGET_ENV);\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentId(opts) {\n if (opts.deploymentId) {\n return opts.deploymentId;\n }\n try {\n return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_BRANCH_URL, process?.env?.NUXT_PUBLIC_VERCEL_BRANCH_URL, process?.env?.NUXT_ENV_VERCEL_BRANCH_URL, process?.env?.REACT_APP_VERCEL_BRANCH_URL, process?.env?.GATSBY_VERCEL_BRANCH_URL, process?.env?.VITE_VERCEL_BRANCH_URL, process?.env?.PUBLIC_VERCEL_BRANCH_URL, process?.env?.VUE_APP_VERCEL_BRANCH_URL, process?.env?.REDWOOD_ENV_VERCEL_BRANCH_URL, process?.env?.SANITY_STUDIO_VERCEL_BRANCH_URL);\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction initializePropagators(opts) {\n if (opts.propagators) {\n if (opts.propagateTraceHeadersCorsURLs) {\n warn(\"Both 'propagators' and deprecated 'propagateTraceHeadersCorsURLs' were provided. Using 'propagators' configuration. Please migrate to the new 'propagators' config.\");\n }\n vars.propagators = opts.propagators;\n }\n // Handle legacy configuration\n else if (opts.propagateTraceHeadersCorsURLs && opts.propagateTraceHeadersCorsURLs.length > 0) {\n warn(\"'propagateTraceHeadersCorsURLs' is deprecated. Please use the new 'propagators' configuration.\");\n // Convert legacy config to new format - only include cross-origin URLs since same-origin is automatic\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [...opts.propagateTraceHeadersCorsURLs],\n },\n ];\n }\n // Default configuration - traceparent with empty match array\n // Same-origin requests get ALL configured propagators, so this ensures traceparent for same-origin\n else {\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [],\n },\n ];\n }\n}\nfunction isInstrumentationEnabled(name, opts) {\n const instrumentations = opts.enabledInstrumentations;\n if (!instrumentations)\n return true;\n return instrumentations.includes(name);\n}\nfunction merge(target, source) {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n const srcVal = source[key];\n const dstVal = target[key];\n if (srcVal !== undefined) {\n if (srcVal !== null &&\n typeof srcVal === \"object\" &&\n !Array.isArray(srcVal) &&\n typeof dstVal === \"object\" &&\n dstVal !== null &&\n !Array.isArray(dstVal)) {\n result[key] = { ...dstVal, ...srcVal };\n }\n else {\n result[key] = srcVal;\n }\n }\n }\n return result;\n}\n","import { win, debug, warn, INIT_MESSAGE } from \"../utils\";\nimport { reportError } from \"../api/report-error\";\nimport { identify } from \"../api/identify\";\nimport { debug as debugApi } from \"../api/debug\";\nimport { init as initApi } from \"../api/init\";\nimport { terminateSession } from \"../api/session\";\nimport { addSignalAttribute, removeSignalAttribute } from \"../api/attributes\";\nimport { sendEvent } from \"../api/events\";\nimport { setActiveLogLevel } from \"../api/log-level\";\nimport { startView } from \"../api/start-view\";\n/**\n * All the APIs exposed through the script tag via `dash0('{{api name}}')`\n */\nconst scriptApis = {\n init: initApi,\n debug: debugApi,\n identify,\n terminateSession,\n reportError,\n addSignalAttribute,\n removeSignalAttribute,\n setActiveLogLevel,\n sendEvent,\n startView,\n};\ninit();\nfunction init() {\n debug(`${INIT_MESSAGE} (via Script)`);\n const globalObject = win[\"dash0\"];\n if (!globalObject) {\n warn(\"global 'dash0' not found. Did you use the correct Dash0 Web SDK initializer?\");\n return;\n }\n if (!globalObject[\"_q\"]) {\n warn(\"Dash0 Web SDK command queue not defined. Did you add the script tag multiple times to your website?\");\n return;\n }\n processQueuedApiCalls(globalObject[\"_q\"]);\n addApiCallAfterInitializationSupport();\n}\nfunction processQueuedApiCalls(apiCalls) {\n for (let i = 0, len = apiCalls.length; i < len; i++) {\n processQueuedApiCall(apiCalls[i]);\n }\n}\nfunction processQueuedApiCall(apiCall) {\n const apiName = apiCall[0];\n // @ts-expect-error the APIs are dynamic\n const apiFn = scriptApis[apiName];\n if (!apiFn) {\n warn(\"Unsupported Dash0 Web SDK api: \", apiCall[0]);\n return;\n }\n const args = [];\n for (let i = 1; i < apiCall.length; i++) {\n args.push(apiCall[i]);\n }\n apiFn.apply(null, args);\n}\nfunction addApiCallAfterInitializationSupport() {\n win[\"dash0\"] = function () {\n return processQueuedApiCall(arguments);\n };\n}\n","/**\n * Creates a new object by picking specified properties from the source object.\n * Similar to TypeScript's Pick<T, K> utility type but as a runtime function.\n *\n * @param obj - The source object to pick properties from\n * @param keys - Array of property keys to pick from the source object\n * @returns A new object containing only the specified properties\n */\nexport function pick(obj, keys) {\n const result = {};\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n","import { crc32 } from \"./crc32\";\n/**\n * Determines whether a session should be sampled based on the session ID\n * and a configured sampling rate.\n *\n * @param sessionId The hex session ID string\n * @param samplingRate A number between 0 and 100 (inclusive)\n * @returns true if the session should be sampled (data collected), false otherwise\n */\nexport function isSessionSampledIn(sessionId, samplingRate) {\n if (samplingRate <= 0)\n return false;\n if (samplingRate >= 100)\n return true;\n return crc32(sessionId) % 100 < samplingRate;\n}\n","import { vars } from \"../vars\";\nimport { debug as debugLogger } from \"../utils/debug\";\nexport function debug() {\n debugLogger(\"Dash0 Web SDK configuration state:\", vars);\n}\n","import { vars } from \"../vars\";\nimport { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { USER_EMAIL, USER_FULL_NAME, USER_HASH, USER_ID, USER_NAME, USER_ROLES } from \"../semantic-conventions\";\nexport function identify(id, opts) {\n removeAttribute(vars.signalAttributes, USER_ID);\n if (id != null) {\n addAttribute(vars.signalAttributes, USER_ID, id);\n }\n removeAttribute(vars.signalAttributes, USER_NAME);\n if (opts?.name != null) {\n addAttribute(vars.signalAttributes, USER_NAME, opts.name);\n }\n removeAttribute(vars.signalAttributes, USER_FULL_NAME);\n if (opts?.fullName != null) {\n addAttribute(vars.signalAttributes, USER_FULL_NAME, opts.fullName);\n }\n removeAttribute(vars.signalAttributes, USER_EMAIL);\n if (opts?.email != null) {\n addAttribute(vars.signalAttributes, USER_EMAIL, opts.email);\n }\n removeAttribute(vars.signalAttributes, USER_HASH);\n if (opts?.hash != null) {\n addAttribute(vars.signalAttributes, USER_HASH, opts.hash);\n }\n removeAttribute(vars.signalAttributes, USER_ROLES);\n if (opts?.roles != null) {\n addAttribute(vars.signalAttributes, USER_ROLES, opts.roles);\n }\n}\n","import { reportUnhandledError as reportErrorInternal } from \"../instrumentations/errors/unhandled-error\";\nexport function reportError(error, opts) {\n reportErrorInternal(error, opts);\n}\n","import { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { vars } from \"../vars\";\n/**\n * Adds a signal attribute to be transmitted with every signal.\n * Note: if you need to ensure attributes are included with signals transmitted on initial page load, you should use\n * the \"additionalSignalAttributes\" property of the init call instead\n */\nexport function addSignalAttribute(name, value) {\n addAttribute(vars.signalAttributes, name, value);\n}\n/**\n * Removes a previously added signal attribute\n */\nexport function removeSignalAttribute(name) {\n removeAttribute(vars.signalAttributes, name);\n}\n","import { EVENT_NAME, EVENT_NAMES, WEB_EVENT_TITLE, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { sendLog } from \"../transport\";\nimport { addCommonAttributes } from \"../attributes\";\nimport { addAttribute, addAttributes, toAnyValue } from \"../utils/otel\";\nimport { nowNanos, toNanosTs, warn } from \"../utils\";\n/**\n * Sends a custom event.\n * @param name The event name. Can not be any of the internal event names. See: EVENT_NAMES in src/semantic-conventions.\n * @param opts Additional event details.\n */\nexport function sendEvent(name, opts) {\n if (Object.values(EVENT_NAMES).includes(name)) {\n warn(`Unable to send custom event ${name}. You are not allowed to use an internal event name while sending a custom event. Dropping event...`);\n return;\n }\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, name);\n if (opts?.title) {\n addAttribute(attributes, WEB_EVENT_TITLE, opts.title);\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n sendLog({\n timeUnixNano: opts?.timestamp != null ? toNanosTs(opts.timestamp) : nowNanos(),\n attributes,\n body: toAnyValue(opts?.data),\n severityText: opts?.severity,\n severityNumber: opts?.severity ? LOG_SEVERITIES[opts.severity] : undefined,\n });\n}\n","import { transmitManualPageViewEvent } from \"../instrumentations/navigation/event\";\nimport { debug, nowNanos, win } from \"../utils\";\nimport { vars } from \"../vars\";\n/**\n * Manually records a page view, side-effect free: this never calls `history.pushState` /\n * `history.replaceState` and never mutates `location`. Intended for single-page applications\n * that own their own router and cannot let the SDK touch navigation state (e.g. Electron apps\n * serving the whole app from one root URL, where automatic page-view tracking would report\n * every screen as \"/\").\n *\n * The emitted event is indistinguishable from an automatic virtual page view downstream\n * (same `browser.page_view` event name, same `type` value), with two differences: it is never\n * accompanied by a `change_state` value, since no history mutation occurred, and the\n * `pageViewInstrumentation`'s `generateMetadata` callback is not invoked for manual views —\n * supply title and attributes directly instead.\n *\n * @param name The name of the view, e.g. \"/settings\". Transmitted as the page view's title.\n * @param opts Additional page view details.\n */\nexport function startView(name, opts) {\n if (vars.endpoints.length === 0) {\n debug(\"Dash0 SDK has not been initialized. Ignoring startView call.\");\n return;\n }\n // The script entrypoint forwards dash0(\"startView\", ...) arguments without type checking,\n // so malformed calls must degrade to a logged no-op instead of throwing. An uncaught throw\n // here would abort the command-queue drain and drop all subsequently queued api calls.\n if (typeof name !== \"string\" || name.length === 0) {\n debug(\"startView requires a non-empty view name. Ignoring startView call.\");\n return;\n }\n let url;\n if (opts?.url != null) {\n try {\n url = new URL(opts.url, win?.location.href);\n }\n catch (e) {\n debug(\"Failed to parse startView url option. Falling back to the current location.\", e);\n }\n }\n transmitManualPageViewEvent({\n timeUnixNano: nowNanos(),\n title: name,\n url,\n attributes: opts?.attributes,\n });\n}\n"],"names":["noop","identity","a","logLevels","debug","info","warn","error","activeLogLevel","createLogger","logLevel","console","apply","numericLogLevel","arguments","globalHasOwnProperty","Object","prototype","hasOwnProperty","obj","key","call","win","window","undefined","doc","document","nav","navigator","loc","location","perf","performance","webkitPerformance","msPerformance","mozPerformance","encodeURIComponent","fetch","localStorage","_win$localStorage","_unused","sessionStorage","_win$sessionStorage","_unused2","SHARED_CHAR_CODES_ARRAY","Array","generateUniqueId","byteCount","i","Math","floor","random","String","fromCharCode","slice","addEventListener","target","eventType","callback","attachEvent","removeEventListener","detachEvent","isSupported","getItem","setItem","now","Date","getTime","nowNanos","timeOrigin","getTimeOrigin","currentDate","perfTime","dateTime","abs","toNanosTs","time","_typeof","_perf$timing","timing","fetchStart","globals","setTimeout","clearTimeout","setInterval","clearInterval","isRunningZoneJs","_len","length","_","_key","executeGlobally","_len2","_key2","_len3","_key3","_globals$globalFuncti","globalFunctionName","this","args","e","getEntriesByType","isPerformanceObserverAvailable","PerformanceTimingNames","freeze","CONNECT_END","CONNECT_START","DECODED_BODY_SIZE","DOM_COMPLETE","DOM_CONTENT_LOADED_EVENT_END","DOM_CONTENT_LOADED_EVENT_START","DOM_INTERACTIVE","DOMAIN_LOOKUP_END","DOMAIN_LOOKUP_START","ENCODED_BODY_SIZE","FETCH_START","LOAD_EVENT_END","LOAD_EVENT_START","NAVIGATION_START","REDIRECT_END","REDIRECT_START","REQUEST_START","RESPONSE_END","RESPONSE_START","SECURE_CONNECTION_START","START_TIME","UNLOAD_EVENT_END","UNLOAD_EVENT_START","usedResources","WeakSet","observeResourcePerformance","opts","onEnd","start","end","duration","cancel","observeWithoutPerformanceObserverSupport","startTime","endTime","observer","fallbackNoResourceFoundTimerHandle","fallbackEndNeverCalledTimerHandle","resources","_observer","PerformanceObserver","onResourceFound","observe","type","_e","disposeGlobalResources","endTs","cancelFallbackEndNeverCalledTimer","isWaitingAcceptable","min","maxWaitForResourceMillis","onVisibilityChanged","resource","bestMatch","bestScore","matchingResources","filter","res","responseEnd","maxToleranceForResourceTimingsMillis","has","_step","_iterator","_createForOfIteratorHelper","s","n","done","value","score","err","f","add","findBestMatchingResource","list","entry","resourceMatcher","forEach","shift","push","_observer2","disconnect","disconnectResourceObserver","stopVisibilityObservation","visibilityState","NO_VALUE_FALLBACK","roundToTwoDecimals","round","parseUrl","url","_doc$baseURI","URL","baseURI","href","isSameOrigin","origin","SUSPICIOUS_CHARS","INSTRUMENTED_BY_DASH0_SYMBOL","Symbol","for","markAsInstrumented","objOrFunction","wrap","module","wrapper","original","wrapped","concat","TABLE","Uint32Array","c","k","crc32","hexStr","bytes","Uint8Array","parseInt","substring","crc","byte","vars","endpoints","attributes","scope","name","version","__sdkVersion","signalAttributes","ignoreUrls","ignoreErrorMessages","wrapEventHandlers","wrapTimers","propagateTraceHeadersCorsURLs","maxWaitForResourceTimingsMillis","headersToCapture","urlAttributeScrubber","pageViewInstrumentation","trackVirtualPageViews","includeParts","enableTransportCompression","isSessionSampled","matchesAny","regexp","len","test","DATA_URL_PREFIX","isUrlIgnored","toLowerCase","lowerCaseUrl","endpoint","startsWith","isTransportRequest","isUnloading","newBatcher","sendInternal","pendingFlushTimeout","fn","queuedItems","flush","send","item","pendingBodySize","pendingRequestCount","_x","_x2","_send","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","path","body","jsonString","requestBody","byteLength","isCompressed","_context2","prev","next","JSON","stringify","Blob","size","CompressionStream","compressWithGzip","sent","Promise","all","map","_ref","_callee","headers","response","_context","pathname","endsWith","Authorization","dataset","abrupt","method","keepalive","text","catch","ok","status","statusText","t0","finish","stop","_x4","_x3","_compressWithGzip","_callee3","data","blob","stream","compressedStream","_context3","pipeThrough","Response","arrayBuffer","rateLimiter","logBatcher","logs","resourceLogs","scopeLogs","logRecords","spanBatcher","spans","resourceSpans","scopeSpans","isRateLimited","maxCallsPerTenMinutes","maxCallsPerTenSeconds","totalCallsInLastTenMinutes","totalCallsInLastTenSeconds","sendLog","log","sendSpan","span","SERVICE_NAME","SERVICE_NAMESPACE","SERVICE_VERSION","DEPLOYMENT_ENVIRONMENT_NAME","DEPLOYMENT_NAME","DEPLOYMENT_ID","EVENT_NAME","WEB_EVENT_ID","PAGE_LOAD_ID","USER_AGENT","USER_ID","USER_NAME","USER_FULL_NAME","USER_EMAIL","USER_HASH","USER_ROLES","EXCEPTION_MESSAGE","EXCEPTION_TYPE","EXCEPTION_STACKTRACE","ERROR_TYPE","URL_FULL","HTTP_REQUEST_METHOD","HTTP_REQUEST_METHOD_ORIGINAL","HTTP_RESPONSE_STATUS_CODE","EVENT_NAMES","PAGE_VIEW","NAVIGATION_TIMING","WEB_VITAL","ERROR","LOG_SEVERITIES","UNSPECIFIED","TRACE","DEBUG","INFO","WARN","FATAL","PAGE_VIEW_TYPE_VALUES","PAGE_VIEW_CHANGE_STATE_VALUES","ANY_VALUE_KEYS","toAnyValue","anyValue","isArray","values","keys","includes","isAnyValue","entries","_ref2","_slicedToArray","toKeyValue","addAttribute","addAttributes","attrs","_ref3","_ref4","removeAttribute","index","findIndex","attr","splice","TRACE_PARENT_HEADER","w3cTraceparentFormat","getTraceContextForPageLoad","_Array$from$find","_doc$getElementsByTag","match","from","getElementsByTagName","find","_e$getAttribute","getAttribute","content","trim","nt","serverTiming","serverTimings","serverEntry","description","getTraceparentFromServerTiming","getTraceparentFromNavigationTiming","traceId","spanId","addW3CTraceContextHttpHeaders","ctx","addXRayTraceContextHttpHeaders","w3cTraceId","timestamp","uniqueId","xrayTraceId","xrayHeader","SESSION_FLAGS","generateSessionId","flags","ephemeralSession","toString","padStart","SESSION_ID_BYTES","SESSION_STORAGE_KEY","STORAGE_SEPARATOR_KEY","MAX_ALLOWED_SESSION_TIMEOUT_MILLIS","sessionId","trackSessions","sessionInactivityTimeoutMillis","sessionTerminationTimeoutMillis","storedValue","session","split","id","lastActivityTime","isNaN","parseSession","minAllowedLastActivityTime","minAllowedStartTime","isSessionValid","v","serializeSession","TRACE_ID_PREFIX","TRACE_FLAGS","encodeTraceFlags","withoutSession","startSpan","TRACE_ID_BYTES","generateTraceId","prefix","SPAN_ID_BYTES","generateSpanId","kind","startTimeUnixNano","events","links","code","endSpan","durationNano","endTimeUnixNano","addSpanEvent","attributesOrTs","ts","timeUnixNano","setSpanStatus","message","recordException","exception","stack","addUrlAttributes","applyPrefix","_toConsumableArray","join","withPrefix","parsed","username","password","_defineProperty","hostname","protocol","replace","hash","search","TAB_ID_STORAGE_KEY","tabId","initializeTabId","addCommonAttributes","options","_options$url","_win$innerWidth","_win$innerHeight","_nav$connection","attribute","innerWidth","innerHeight","connectionType","connection","effectiveType","scheduledTransmissionTimeoutHandle","reportedErrors","numberOfDifferentErrorsSeen","seenErrors","ignoreNextOnError","ignoreNextOnErrorEvent","reportUnhandledError","onUnhandledError","isErrorMessageIgnored","shortenStackTrace","trackedError","seenCount","componentStack","transmittedCount","severityNumber","severityText","stringValue","scheduleTransmission","seenError","t","persisted","timeStamp","o","r","delta","rating","requestAnimationFrame","responseStart","_e$activationStart","activationStart","prerendering","wasDiscarded","navigationType","WeakMap","get","set","I","d","_createClass","_classCallCheck","_this$t","hadRecentInput","at","h","supportedEntryTypes","resolve","then","getEntries","_objectSpread","buffered","u","l","m","g","p","_globalThis$performan","globalThis","firstHiddenTime","y","b","T","E","max","reportAllChanges","P","_step2","_iterator2","takeRecords","L","M","C","_step3","_iterator3","interactionId","w","_performance$interact","interactionCount","A","Map","clear","_this$m","entryType","_this$v","sort","_step4","_iterator4","delete","B","requestIdleCallback","once","N","S","PerformanceEventTiming","_i$durationThreshold","durationThreshold","_step5","_iterator5","q","_this$m2","x","startWebVitalsInstrumentation","_step6","_iterator6","_i2","_arr","capture","onLCP","onWebVital","onINP","onCLS","metric","bodyAttributes","kvlistValue","MESSAGE_PREFIX","STACK_UNAVAILABLE_MESSAGE","onUnhandledRejection","event","reason","WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY","findInStorage","storageTarget","valuesForEqualityCheck","storage","matchesEqualityCheck","valuesForEqualityCheckA","valuesForEqualityCheckB","addWrappedDomEventListener","wrappedFunction","eventName","eventListener","optionsOrCapture","addWrappedFunction","getDomEventListenerValuesForEqualityCheck","getDomEventListenerCaptureValue","Boolean","popWrappedDomEventListener","fallback","storageItem","popWrappedFunction","startEventHandlerInstrumentation","EventTarget","originalAddEventListener","originalRemoveEventListener","wrapEventTarget","wrapTimer","reportError","startErrorInstrumentation","globalOnError","onerror","fileName","lineNumber","columnNumber","startOnErrorInstrumentation","startTimerInstrumentation","httpRequestHeaderKey","httpResponseHeaderKey","KNOWN_HTTP_METHODS","HTTP_METHOD_OTHER","isWellKnownHttpMethod","addResourceNetworkEvents","ignoreZeros","addSpanNetworkEvent","propertyName","addResourceSize","encodedLength","encodedBodySize","endSpanOnError","_error$name","errorType","errorToSpanStatus","endSpanOnAbort","determinePropagatorTypes","matchingTypes","propagators","propagator","addTraceContextHttpHeaders","types","wrapFetch","_fetchWithInstrumentation","input","init","fetchInput","request","instrumentation","_copyOfInit","_instrumentation","copyOfInit","performanceObserver","origResponse","_request2","assign","Request","onFetchStart","addResponseData","wrapResponse","_request","signal","aborted","t1","_request$method","originalMethod","isWellKnownMethod","toUpperCase","addGraphQlProperties","_copyOfInit2","propagatorTypes","Headers","append","tryCaptureHttpHeaders","initiatorType","getAttributeKey","some","rxp","originalResponse","readTimeoutMs","onDone","onError","fallbackTs","cbCalled","handleDone","fallbackEndTs","handleError","bodyNeverCompletelyReadTimeout","reader","getReader","ReadableStream","pull","controller","_yield$reader$read","read","releaseLock","close","enqueue","originalSetRequestHeader","XHR_STATE","wrapOpen","rest","openArgs","onOpen","xhr","previousState","completed","state","_state$performanceObs2","_state$listeners2","listeners","_step3$value","cleanupAbandonedRequest","stringUrl","resolvedUrl","normalizedMethod","ignored","wrapSetRequestHeader","_state$capturedReques","lowerName","alreadyTraced","capturedRequestHeaders","onSetRequestHeader","wrapSend","setRequestHeader","_i","_Object$entries","_Object$entries$_i","failureKind","_state$listeners4","_step5$value","_state$failureKind2","raw","getAllResponseHeaders","line","separatorIndex","indexOf","tryCaptureResponseHeaders","onLoadEnd","_step2$value","listener","onSend","_state$performanceObs3","_state$listeners3","_step4$value","cleanupFailedSend","_state$performanceObs","_state$failureKind","_state$listeners","_step$value","endSpanOnSyncSendError","buildAndSendPageViewLog","_opts$title","metaAttributes","customAttributes","title","referrer","pageViewType","changeState","traceContext","transmitPageViewEvent","virtual","replaced","meta","_vars$pageViewInstrum","_vars$pageViewInstrum2","_vars$pageViewInstrum3","generateMetadata","getPageViewMeta","onLoaded","addNavigationTiming","getStartTimeUnixNanos","field","Number","isInteger","currentLocation","shouldIncludeHashChanges","shouldIncludeSearchChanges","onPopState","onUrlChange","onHashChange","newURL","newUrl","parsedUrl","updateCurrentLocation","startNavigationInstrumentation","readyState","startPageLoadInstrumentation","_vars$pageViewInstrum4","history","unused","startPageTransitionInstrumentation","pickFirstString","_values","VCS_FIELD_TO_ATTRIBUTE","providerName","ownerName","repositoryName","repositoryUrlFull","refHeadName","refHeadRevision","changeId","applyVcsResourceAttributes","vcs","_opts$vcs","_override$providerNam","_override$ownerName","_override$repositoryN","_override$repositoryU","_ref5","_override$refHeadName","_ref6","_override$refHeadRevi","_ref7","_override$changeId","override","disableVcsDetection","vercel","provider","owner","repo","ref","revision","_process","_process2","_process3","_process4","_process5","_process6","_process7","_process8","_process9","_process10","_process11","_process12","_process13","_process14","_process15","_process16","_process17","_process18","_process19","_process20","_process21","_process22","_process23","_process24","_process25","_process26","_process27","_process28","_process29","_process30","_process31","_process32","_process33","_process34","_process35","_process36","_process37","_process38","_process39","_process40","_process41","_process42","_process43","_process44","_process45","_process46","_process47","_process48","_process49","_process50","_process51","_process52","_process53","_process54","_process55","_process56","_process57","_process58","_process59","_process60","process","env","NEXT_PUBLIC_VERCEL_GIT_PROVIDER","NUXT_PUBLIC_VERCEL_GIT_PROVIDER","NUXT_ENV_VERCEL_GIT_PROVIDER","REACT_APP_VERCEL_GIT_PROVIDER","GATSBY_VERCEL_GIT_PROVIDER","VITE_VERCEL_GIT_PROVIDER","PUBLIC_VERCEL_GIT_PROVIDER","VUE_APP_VERCEL_GIT_PROVIDER","REDWOOD_ENV_VERCEL_GIT_PROVIDER","SANITY_STUDIO_VERCEL_GIT_PROVIDER","NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER","NUXT_PUBLIC_VERCEL_GIT_REPO_OWNER","NUXT_ENV_VERCEL_GIT_REPO_OWNER","REACT_APP_VERCEL_GIT_REPO_OWNER","GATSBY_VERCEL_GIT_REPO_OWNER","VITE_VERCEL_GIT_REPO_OWNER","PUBLIC_VERCEL_GIT_REPO_OWNER","VUE_APP_VERCEL_GIT_REPO_OWNER","REDWOOD_ENV_VERCEL_GIT_REPO_OWNER","SANITY_STUDIO_VERCEL_GIT_REPO_OWNER","NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG","NUXT_PUBLIC_VERCEL_GIT_REPO_SLUG","NUXT_ENV_VERCEL_GIT_REPO_SLUG","REACT_APP_VERCEL_GIT_REPO_SLUG","GATSBY_VERCEL_GIT_REPO_SLUG","VITE_VERCEL_GIT_REPO_SLUG","PUBLIC_VERCEL_GIT_REPO_SLUG","VUE_APP_VERCEL_GIT_REPO_SLUG","REDWOOD_ENV_VERCEL_GIT_REPO_SLUG","SANITY_STUDIO_VERCEL_GIT_REPO_SLUG","NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF","NUXT_PUBLIC_VERCEL_GIT_COMMIT_REF","NUXT_ENV_VERCEL_GIT_COMMIT_REF","REACT_APP_VERCEL_GIT_COMMIT_REF","GATSBY_VERCEL_GIT_COMMIT_REF","VITE_VERCEL_GIT_COMMIT_REF","PUBLIC_VERCEL_GIT_COMMIT_REF","VUE_APP_VERCEL_GIT_COMMIT_REF","REDWOOD_ENV_VERCEL_GIT_COMMIT_REF","SANITY_STUDIO_VERCEL_GIT_COMMIT_REF","NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","NUXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","NUXT_ENV_VERCEL_GIT_COMMIT_SHA","REACT_APP_VERCEL_GIT_COMMIT_SHA","GATSBY_VERCEL_GIT_COMMIT_SHA","VITE_VERCEL_GIT_COMMIT_SHA","PUBLIC_VERCEL_GIT_COMMIT_SHA","VUE_APP_VERCEL_GIT_COMMIT_SHA","REDWOOD_ENV_VERCEL_GIT_COMMIT_SHA","SANITY_STUDIO_VERCEL_GIT_COMMIT_SHA","NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","NUXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","NUXT_ENV_VERCEL_GIT_PULL_REQUEST_ID","REACT_APP_VERCEL_GIT_PULL_REQUEST_ID","GATSBY_VERCEL_GIT_PULL_REQUEST_ID","VITE_VERCEL_GIT_PULL_REQUEST_ID","PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","VUE_APP_VERCEL_GIT_PULL_REQUEST_ID","REDWOOD_ENV_VERCEL_GIT_PULL_REQUEST_ID","SANITY_STUDIO_VERCEL_GIT_PULL_REQUEST_ID","_ignored","buildRepositoryUrlFromVercel","detectVcsFromVercel","netlify","repositoryUrl","branch","commit","reviewId","_process61","_process62","_process63","_process64","_process65","_process66","_process67","_process68","_process69","_process70","_process71","_process72","_process73","_process74","_process75","_process76","_process77","_process78","_process79","_process80","_process81","_process82","_process83","_process84","_process85","_process86","_process87","_process88","_process89","_process90","_process91","_process92","_process93","_process94","_process95","_process96","_process97","_process98","_process99","_process100","NEXT_PUBLIC_REPOSITORY_URL","NUXT_PUBLIC_REPOSITORY_URL","NUXT_ENV_REPOSITORY_URL","REACT_APP_REPOSITORY_URL","GATSBY_REPOSITORY_URL","VITE_REPOSITORY_URL","PUBLIC_REPOSITORY_URL","VUE_APP_REPOSITORY_URL","REDWOOD_ENV_REPOSITORY_URL","SANITY_STUDIO_REPOSITORY_URL","NEXT_PUBLIC_BRANCH","NUXT_PUBLIC_BRANCH","NUXT_ENV_BRANCH","REACT_APP_BRANCH","GATSBY_BRANCH","VITE_BRANCH","PUBLIC_BRANCH","VUE_APP_BRANCH","REDWOOD_ENV_BRANCH","SANITY_STUDIO_BRANCH","NEXT_PUBLIC_COMMIT_REF","NUXT_PUBLIC_COMMIT_REF","NUXT_ENV_COMMIT_REF","REACT_APP_COMMIT_REF","GATSBY_COMMIT_REF","VITE_COMMIT_REF","PUBLIC_COMMIT_REF","VUE_APP_COMMIT_REF","REDWOOD_ENV_COMMIT_REF","SANITY_STUDIO_COMMIT_REF","NEXT_PUBLIC_REVIEW_ID","NUXT_PUBLIC_REVIEW_ID","NUXT_ENV_REVIEW_ID","REACT_APP_REVIEW_ID","GATSBY_REVIEW_ID","VITE_REVIEW_ID","PUBLIC_REVIEW_ID","VUE_APP_REVIEW_ID","REDWOOD_ENV_REVIEW_ID","SANITY_STUDIO_REVIEW_ID","host","VCS_PROVIDER_HOSTS","vcsProviderForHost","segments","parseRepositoryUrl","detectVcsFromNetlify","detectVcs","_Object$keys","_VCS_PROVIDER_HOSTS$p","vcsHostForProvider","github","gitlab","bitbucket","hasBeenInitialised","isInstrumentationEnabled","instrumentations","enabledInstrumentations","scriptApis","_loc$hostname","trimmedServiceName","serviceName","rejectSuspiciousServiceName","_loc$hostname2","source","result","srcVal","dstVal","merge","pick","initializePropagators","serviceNamespace","serviceVersion","environment","NEXT_PUBLIC_VERCEL_ENV","NUXT_PUBLIC_VERCEL_ENV","NUXT_ENV_VERCEL_ENV","REACT_APP_VERCEL_ENV","GATSBY_VERCEL_ENV","VITE_VERCEL_ENV","PUBLIC_VERCEL_ENV","VUE_APP_VERCEL_ENV","REDWOOD_ENV_VERCEL_ENV","SANITY_STUDIO_VERCEL_ENV","detectEnvironment","deploymentName","NEXT_PUBLIC_VERCEL_TARGET_ENV","NUXT_PUBLIC_VERCEL_TARGET_ENV","NUXT_ENV_VERCEL_TARGET_ENV","REACT_APP_VERCEL_TARGET_ENV","GATSBY_VERCEL_TARGET_ENV","VITE_VERCEL_TARGET_ENV","PUBLIC_VERCEL_TARGET_ENV","VUE_APP_VERCEL_TARGET_ENV","REDWOOD_ENV_VERCEL_TARGET_ENV","SANITY_STUDIO_VERCEL_TARGET_ENV","detectDeploymentName","deploymentId","NEXT_PUBLIC_VERCEL_BRANCH_URL","NUXT_PUBLIC_VERCEL_BRANCH_URL","NUXT_ENV_VERCEL_BRANCH_URL","REACT_APP_VERCEL_BRANCH_URL","GATSBY_VERCEL_BRANCH_URL","VITE_VERCEL_BRANCH_URL","PUBLIC_VERCEL_BRANCH_URL","VUE_APP_VERCEL_BRANCH_URL","REDWOOD_ENV_VERCEL_BRANCH_URL","SANITY_STUDIO_VERCEL_BRANCH_URL","detectDeploymentId","initializeResourceAttributes","_nav$userAgent","userAgent","additionalSignalAttributes","initializeSignalAttributes","sessionSamplingRate","rate","samplingRate","isSessionSampledIn","XMLHttpRequest","proto","instrumentXhr","debugLogger","identify","fullName","email","roles","terminateSession","removeItem","reportErrorInternal","addSignalAttribute","removeSignalAttribute","setActiveLogLevel","level","_logLevels$level","sendEvent","severity","startView","transmitManualPageViewEvent","processQueuedApiCall","apiCall","apiName","apiFn","globalObject","apiCalls","processQueuedApiCalls"],"mappings":"yBAAO,SAASA,IACZ,CAEG,SAASC,EAASC,GACrB,OAAOA,CACX,CCJA,IAAMC,EAAY,CACdC,MAAO,EACPC,KAAM,EACNC,KAAM,EACNC,MAAO,GAEPC,EAAiBL,EAAUG,KAOxB,IAAMD,EAAOI,EAAa,QACpBH,EAAOG,EAAa,QACpBF,EAAQE,EAAa,SACrBL,EAAQK,EAAa,SAClC,SAASA,EAAaC,GAClB,GAAuB,oBAAZC,SAA2BA,QAAQD,IAAgD,mBAA5BC,QAAQD,GAAUE,MAAsB,CACtG,IAAMC,EAAkBV,EAAUO,GAClC,OAAO,WACCG,GAAmBL,GACnBG,QAAQD,GAAUE,MAAMD,QAASG,UAExC,CACL,CACA,OAAOd,CACX,CC5BA,IAAMe,EAAuBC,OAAOC,UAAUC,eAIvC,SAASA,EAAeC,EAAKC,GAChC,OAAOL,EAAqBM,KAAKF,EAAKC,EAC1C,CCJO,IAAME,EAAwB,oBAAXC,OAAyBA,YAASC,EAC/CC,EAAMH,aAAG,EAAHA,EAAKI,SACXC,EAAML,aAAG,EAAHA,EAAKM,UACXC,EAA0B,oBAAbC,SAA2BA,cAAWN,EACnDO,GAAOT,aAAAA,EAAAA,EAAKU,eAAeV,aAAAA,EAAAA,EAAKW,qBAAqBX,eAAAA,EAAKY,iBAAiBZ,aAAAA,EAAAA,EAAKa,gBAC3Db,SAAAA,EAAKc,mBAChC,IAAMC,EAAQf,aAAG,EAAHA,EAAKe,MACbC,EAAgB,WACzB,IAAI,IAAAC,EACA,OAAwBA,QAAxBA,EAAOjB,aAAAA,EAAAA,EAAKgB,oBAAYC,IAAAA,EAAAA,EAAI,IAC/B,CACD,MAAAC,GAGI,OAAO,IACX,CACJ,CAT6B,GAUhBC,EAAkB,WAC3B,IAAI,IAAAC,EACA,OAA0BA,QAA1BA,EAAOpB,aAAAA,EAAAA,EAAKmB,sBAAcC,IAAAA,EAAAA,EAAI,IACjC,CACD,MAAAC,GAGI,OAAO,IACX,CACJ,CAT+B,GCbzBC,EAA0BC,MAAM,IAC/B,SAASC,EAAiBC,GAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAgB,EAAZD,EAAeC,IAC/BJ,EAAwBI,GAAKC,KAAKC,MAAsB,GAAhBD,KAAKE,UAAiB,GAE1DP,EAAwBI,IAAM,KAC9BJ,EAAwBI,IAAM,IAGtC,OAAOI,OAAOC,aAAazC,MAAM,KAAMgC,EAAwBU,MAAM,EAAe,EAAZP,GAC5E,CCdO,SAASQ,EAAiBC,EAAQC,EAAWC,GAC5CF,EAAOD,iBACPC,EAAOD,iBAAiBE,EAAWC,GAAU,GAExCF,EAAOG,aACZH,EAAOG,YAAY,KAAOF,EAAWC,EAE7C,CACO,SAASE,EAAoBJ,EAAQC,EAAWC,GAC/CF,EAAOI,oBACPJ,EAAOI,oBAAoBH,EAAWC,GAAU,GAE3CF,EAAOK,aACZL,EAAOK,YAAY,KAAOJ,EAAWC,EAE7C,CCfO,IAAMI,EAA8B,MAAhBxB,GAAwD,mBAAzBA,EAAayB,SAA0D,mBAAzBzB,EAAa0B,+pUCD9G,SAASC,IACZ,OAAO,IAAIC,MAAOC,SACtB,CACO,SAASC,IACZ,IAAMC,EAAaC,IACbC,EAAc,IAAIL,KACxB,GAAIG,EAAY,CACZ,IAAMG,EAAWzC,EAAKkC,MAAQI,EACxBI,EAAWF,EAAYJ,UAK7B,GAAIlB,KAAKyB,IAAIF,EAAWC,GAAY,IAChC,OAAOrB,OAAkB,IAAXoB,EAEtB,CACA,OAAOG,EAAUJ,EACrB,CACO,SAASI,EAAUC,GACtB,MAAoB,WAAhBC,EAAOD,GACAD,EAAUC,EAAKT,WAGnBf,OAAOwB,GAAQ,QAC1B,CACO,SAASN,IACZ,IACoCQ,EADhCT,EAAatC,aAAAA,EAAAA,EAAMsC,WACG,iBAAfA,IACPA,EAAatC,SAAY+C,QAARA,EAAJ/C,EAAMgD,cAAND,IAAYA,OAAZA,EAAAA,EAAcE,YAE/B,OAAOX,CACX,CCrBA,IAAMY,EAAU,CACZC,WAAY5D,aAAAA,EAAAA,EAAK4D,WACjBC,aAAc7D,aAAAA,EAAAA,EAAK6D,aACnBC,YAAa9D,aAAAA,EAAAA,EAAK8D,YAClBC,cAAe/D,aAAG,EAAHA,EAAK+D,eAIXC,EAAyB,MAAPhE,GAA8B,MAAfA,EAAU,MAAoC,MAAvBA,EAAU,KAAQ,MAAmD,mBAA/BA,EAAU,KAAQ,KAAO,IAI7H,SAAS4D,IAAiB,IAAA,IAAAK,EAAAzE,UAAA0E,OAAHC,EAAC5C,IAAAA,MAAA0C,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAADD,EAACC,GAAA5E,UAAA4E,GAC3B,OAAOC,EAAgB/E,MAAM,aAAcE,UAC/C,CACO,SAASqE,IAAmB,IAAA,IAAAS,EAAA9E,UAAA0E,OAAHC,EAAC5C,IAAAA,MAAA+C,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAADJ,EAACI,GAAA/E,UAAA+E,GAC7B,OAAOF,EAAgB/E,MAAM,eAAgBE,UACjD,CACO,SAASsE,IAAkB,IAAA,IAAAU,EAAAhF,UAAA0E,OAAHC,EAAC5C,IAAAA,MAAAiD,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAADN,EAACM,GAAAjF,UAAAiF,GAC5B,OAAOJ,EAAgB/E,MAAM,cAAeE,UAChD,CAIA,SAAS6E,IAAkB,IAAAK,EAMjBC,EAAqBC,KAC3B,GAAIZ,EACA,IAII,IAAMa,EAAOtD,MAAM5B,UAAUqC,MAAM1C,MAAME,WAEzC,OAAOQ,EAAU,KAAQ,KAAO,IAAE2D,EAAQgB,GAAqB3E,EAAK6E,EACvE,CACD,MAAOC,GACH9F,EAAK,6GACe2F,EAAoBG,EAG5C,CAGJ,OAAkCJ,QAAlCA,EAAOf,EAAQgB,UAARD,IAA2BA,OAA3BA,EAAAA,EAA6BpF,MAAMU,EAAKR,UACnD,CAxCIwE,GACAlF,EAAM,yFCbkC2B,GAAQA,EAAKsE,iBAClD,IAAMC,EAAiCvE,GAA8C,mBAA/BT,EAAyB,qBAA2C,mBAAhBS,EAAU,IAC9GwE,EAAyBvF,OAAOwF,OAAO,CAChDC,YAAa,aACbC,cAAe,eACfC,kBAAmB,kBACnBC,aAAc,cACdC,6BAA8B,2BAC9BC,+BAAgC,6BAChCC,gBAAiB,iBACjBC,kBAAmB,kBACnBC,oBAAqB,oBACrBC,kBAAmB,kBACnBC,YAAa,aACbC,eAAgB,eAChBC,iBAAkB,iBAClBC,iBAAkB,kBAClBC,aAAc,cACdC,eAAgB,gBAChBC,cAAe,eACfC,aAAc,cACdC,eAAgB,gBAChBC,wBAAyB,wBACzBC,WAAY,YACZC,iBAAkB,iBAClBC,mBAAoB,qBAElBC,EAAgB,IAAIC,QACnB,SAASC,EAA2BC,GACvC,IAAK7B,EACD,OAsJR,SAAkD8B,GAC9C,IAAIC,EAAQ,EACZ,MAAO,CACHA,MAAO,WACHA,EAAQpE,GACX,EACDqE,IAAK,WAAF,OAAQF,EAAM,CAAEG,SAAUtE,IAAQoE,GAAQ,EAC7CG,OAAQxI,EAEhB,CA/JeyI,CAAyCN,EAAKC,OAEzD,IAAIM,EACAC,EAGAC,EACAC,EACAC,EAJEC,EAAY,GAKlB,MAAO,CACHV,MAIJ,WACIK,EAAY3G,EAAKkC,MACjB,IACI,IACyB+E,EADnBC,EAAsB3H,aAAAA,EAAAA,EAAK2H,oBACjC,GAAIA,EAEQ,QAARD,EADAJ,EAAW,IAAIK,EAAoBC,UACnCF,IAAQA,GAARA,EAAUG,QAAQ,CAAEC,KAAM,YAEjC,CACD,MAAOC,GAMH,CAEJP,EAAoC5D,EAAWoE,EAjEzB,IAkE1B,EArBIhB,IAsBJ,SAAeiB,GAEX,GAAIZ,EACA,OAGJ,GAFAA,EAAUY,QAAAA,EAASxH,EAAKkC,MACxBuF,KACKC,IACD,OAAOnB,IAEXpD,GAAW,WAAA,OAAMoD,GAAOrF,GAAAA,KAAKyG,IA1EP,IA0EkCvB,EAAKwB,2BAC7DpG,EAAiB9B,EAAK,mBAAoBmI,GAC1Cf,EAAqC3D,EAAWoD,EAAKH,EAAKwB,yBAC9D,EAjCInB,OAAQc,GAkCZ,SAAShB,IACLgB,IACA,IAAMO,EAqEV,WACI,IAAKd,EAAUvD,OACX,OACJ,IAAIsE,EAQAC,EAPEC,EAAoBjB,EAAUkB,QAAO,SAACC,GAAG,OAAKA,EAAIC,aAAexB,EAAUR,EAAKiC,uCAAyCpC,EAAcqC,IAAIH,MACjJ,IAAKF,EAAkBxE,OACnB,OAE6B,IAA7BwE,EAAkBxE,SAClBsE,EAAYE,EAAkB,IAGlC,IAAKF,EAAW,CAAA,IACuBQ,EADvBC,EAAAC,EACMR,GAAiB,IAAnC,IAAAO,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAqC,CAAA,IAA1BT,EAAGI,EAAAM,MACJC,EAAQ5H,KAAKyB,IAAIiE,EAAUD,EAAYwB,EAAI3B,UAAYtF,KAAKyB,IAAIwF,EAAIC,YAAcxB,SACtEnH,IAAduI,GAA2Bc,EAAQd,KACnCA,EAAYc,EACZf,EAAYI,EAEpB,CAAC,CAAA,MAAAY,GAAAP,EAAAnE,EAAA0E,EAAA,CAAA,QAAAP,EAAAQ,GAAA,CACL,CACA,IAAKjB,EACD,OAEJ,OADA9B,EAAcgD,IAAIlB,GACXA,CACX,CA9FqBmB,GAKbpB,SAAAA,EAAUtB,UAAYsB,EAAStB,SAtFjB,MAuFdJ,EAAKC,MAAM,CAAEyB,SAAAA,EAAUtB,SAAUsB,EAAStB,WAG1CJ,EAAKC,MAAM,CAAEyB,SAAAA,EAAUtB,SAAUI,EAAUD,GAEnD,CACA,SAASQ,EAAgBgC,GACrBA,EACK7E,iBAAiB,YACjB4D,QAAO,SAAC7D,GAET,IAAM+E,EAAQ/E,EACd,OAAO+E,EAAMzC,WAAaA,GAAaP,EAAKiD,gBAAgBD,EAChE,IACKE,SAAQ,SAACF,GAENpC,EAAUvD,QArGI,KAyGduD,EAAUuC,QAEdvC,EAAUwC,KAAKJ,EACnB,GACJ,CACA,SAASvB,IACAH,KACDnB,GACR,CACA,SAASgB,KAMT,WACI,GAAIV,EAAU,CACV,IAAI,IAAA4C,EACQA,QAARA,EAAA5C,aAAQ4C,GAARA,EAAUC,YACb,CACD,MAAOpC,GACH,CAEJT,OAAWpH,CACf,CACJ,CAfIkK,GAiBI7C,IACA1D,aAAa0D,GACbA,OAAqCrH,GAjBzCgI,IA0BJ,WACI,IAAK/H,EACD,OACJmC,EAAoBnC,EAAK,mBAAoBmI,EACjD,CA7BI+B,EACJ,CAkBA,SAASnC,IACDV,IACA3D,aAAa2D,GACbA,OAAoCtH,EAE5C,CAgCJ,CAIA,SAASiI,IACL,MAAgC,aAAzBhI,eAAAA,EAAKmK,kBAA0D,eAAzBnK,aAAG,EAAHA,EAAKmK,gBACtD,CC5LO,IAAMC,GAAoB,YCA1B,SAASC,GAAmBpB,GAC/B,OAAOzH,KAAK8I,MAAU,IAAJrB,GAAW,GACjC,CCIO,SAASsB,GAASC,GAAK,IAAAC,EAC1B,MAAmB,iBAARD,EACAA,EACJ,IAAIE,IAAIF,EAAiBC,QAAdA,EAAEzK,aAAG,EAAHA,EAAK2K,eAAOF,IAAAA,EAAAA,EAAIrK,aAAAA,EAAAA,EAAKwK,KAC7C,CCLO,SAASC,GAAaL,GACzB,IAEI,OADkBD,GAASC,GACVM,UALM,oBAAbzK,SAA2BA,SAASyK,YAAS/K,EAM1D,CACD,MAAO6H,GACH,OAAO,CACX,CACJ,CCbA,IAAMmD,GAAmB,yBCCzB,IAAMC,GAA+BC,OAAOC,IAAI,yBAKhD,SAASC,GAAmBC,GAExBA,EAAcJ,KAAgC,CAClD,CACO,SAASK,GAAKC,EAAQvJ,EAAQwJ,GACjC,IAAMC,EAAWF,EAAOvJ,GACxB,GAAKyJ,EAIL,IAZuD,IAY7BA,EAZLR,IAgBrB,IACI,IAAMS,EAAUF,EAAQC,GAGxBL,GAAmBK,GACfC,GACAN,GAAmBM,GAEvBH,EAAOvJ,GAAU0J,CACpB,CACD,MAAO9G,GAGH9F,EAAI,wBAAA6M,OAAyB/J,OAAOI,GAAkD4C,2CAAAA,EAC1F,MAjBIhG,EAAK,GAAA+M,OAAI/J,OAAOI,qDAJhBpD,EAAK,GAAA+M,OAAI/J,OAAOI,4CAsBxB,CCjCA,IAFA,IACM4J,GAAQ,IAAIC,YAAY,KACrBrK,GAAI,EAAGA,GAAI,IAAKA,KAAK,CAE1B,IADA,IAAIsK,GAAItK,GACCuK,GAAI,EAAGA,GAAI,EAAGA,KACnBD,GAAQ,EAAJA,GALO,WAKeA,KAAM,EAAKA,KAAM,EAE/CF,GAAMpK,IAAKsK,KAAM,CACrB,CACO,SAASE,GAAMC,GAElB,IADA,IAAMC,EAAQ,IAAIC,WAAWF,EAAOjI,OAAS,GACpCxC,EAAI,EAAGA,EAAIyK,EAAOjI,OAAQxC,GAAK,EACpC0K,EAAM1K,EAAI,GAAK4K,SAASH,EAAOI,UAAU7K,EAAGA,EAAI,GAAI,IAGxD,IADA,IAAI8K,EAAM,WACD9K,EAAI,EAAGA,EAAI0K,EAAMlI,OAAQxC,IAAK,CACnC,IAAM+K,EAAOL,EAAM1K,GACnB8K,EAAOA,IAAQ,EAAKV,GAAqB,KAAdU,EAAMC,GACrC,CACA,OAAc,WAAND,KAAsB,CAClC,CCnBO,IAAME,GAAO,CAChBC,UAAW,GACXpE,SAAU,CACNqE,WAAY,IAEhBC,MAAO,CACHC,KAAM,gBACNC,QAASC,SACTJ,WAAY,IAEhBK,iBAAkB,GAClBC,WAAY,GACZC,oBAAqB,GACrBC,mBAAmB,EACnBC,YAAY,EACZC,8BAA+B,GAC/BC,gCAAiC,IACjCzE,qCAAsC,GACtC0E,iBAAkB,GAClBC,qBAAsB9O,EACtB+O,wBAAyB,CACrBC,uBAAuB,EACvBC,aAAc,IAElBC,4BAA4B,EAC5BC,kBAAkB,GCzBf,SAASC,GAAWC,EAAQ7E,GAC/B,IAAK,IAAIzH,EAAI,EAAGuM,EAAMD,EAAO9J,OAAQxC,EAAIuM,EAAKvM,IAC1C,GAAIsM,EAAOtM,GAAGwM,KAAK/E,GACf,OAAO,EAGf,OAAO,CACX,CACA,IAAMgF,GAAkB,QACjB,SAASC,GAAazD,GACzB,OAAKA,MAKLA,EAAM7I,OAAO6I,MAOQ,MAAjBA,EAAI4B,WAAqB5B,EAAI4B,UAAU,EAAG4B,GAAwBE,gBAAkBF,OAY5F,SAA4BxD,GAExB,IADA,IAAM2D,EAAe3D,EAAI0D,cAChB3M,EAAI,EAAGuM,EAAMvB,GAAKC,UAAUzI,OAAQxC,EAAIuM,EAAKvM,IAAK,CACvD,IAAM6M,EAAW7B,GAAKC,UAAUjL,GAChC,GAAI4M,EAAaE,WAAWD,EAAS5D,KACjC,OAAO,CAEf,CACA,OAAO,CACX,CAdQ8D,CAAmB9D,IAGhBoD,GAAWrB,GAAKQ,WAAYvC,KACvC,CChCA,IAAI+D,IAAc,ECGX,SAASC,GAAWC,GACvB,IACIC,EDAqBC,ECDnBC,EAAc,GAUpB,ODTyBD,ECQZE,EDPTN,IACAI,IAEC3O,GAAQH,IAEbiC,EAAiB9B,EAAK,oBAAoB,WACV,YAAxBA,EAAImK,iBACJwE,GAER,IACA7M,EAAiBjC,EAAK,YAAY,WAC9B0O,IAAc,EACdI,GACJ,IAKA7M,EAAiBjC,EAAK,gBAAgB,WAClC0O,IAAc,EACdI,GACJ,KCbO,CACHG,KAAAA,SAAKC,GA6BuB,aAAzB/O,eAAAA,EAAKmK,kBArBJyE,EAAY9E,KAAKiF,GACbH,EAAY7K,QAtBL,GAuBP8K,IAE4B,MAAvBH,IACLA,EAAsBjL,EAAWoL,EA3BnB,OAmBdJ,EAAa,CAACM,GAUtB,GAEJ,SAASF,IACsB,MAAvBH,IACAhL,aAAagL,GACbA,EAAsB,MAEtBE,EAAY7K,OAAS,IACrB0K,EAAaG,EAAY/M,SACzB+M,EAAY7K,OAAS,EAE7B,CACJ,CCtCA,IACIiL,GAAkB,EAClBC,GAAsB,EAC1B,SAAsBH,GAAII,EAAAC,GAAA,OAAAC,GAAAjQ,MAAAsF,KAAApF,UAAA,CAuDzB,SAAA+P,KAAA,OAAAA,GAAAC,EAAAC,IAAAC,MAvDM,SAAAC,EAAoBC,EAAMC,GAAI,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAR,IAAAjE,MAAA,SAAA0E,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAMjC,GALAtR,EAAM,sCAAuC+Q,GACvCC,EAAaO,KAAKC,UAAUT,GAC9BE,EAAcD,EACdE,EAAa,IAAIO,KAAK,CAACT,IAAaU,KACpCP,GAAe,EAEc,oBAAtBQ,oBAAqC/D,GAAKmB,2BAA0B,CAAAqC,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,KAAA,EACvDM,GAAiBZ,GAAW,KAAA,EAAhDC,EAAWG,EAAAS,KACXX,EAAaD,EAAYC,WACzBC,GAAe,EAAK,KAAA,GAAA,OAAAC,EAAAE,KAAA,GAGlBQ,QAAQC,IAAInE,GAAKC,UAAUmE,IAAG,WAAA,IAAAC,EAAAvB,EAAAC,IAAAC,MAAC,SAAAsB,EAAOzC,GAAQ,IAAA5D,EAAAsG,EAAAC,EAAA,OAAAzB,IAAAjE,MAAA,SAAA2F,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,KAAA,EAc3C,GAd2Ce,EAAAhB,KAAA,GAEtCxF,EAAM,IAAIE,IAAI0D,EAAc,MAC9B6C,SAAWzG,EAAIyG,UAAYzG,EAAIyG,SAASC,SAAS,KAAOzB,EAAKrD,UAAU,GAAKqD,GAC1EqB,EAAU,CACZ,eAAgB,mBAChBK,wBAAazF,OAAY0C,EAAoB,YAE7CA,EAASgD,UACTN,EAAQ,iBAAmB1C,EAAkB,SAG7C0B,IACAgB,EAAQ,oBAAsB,QAE7BlQ,EAAK,CAAAoQ,EAAAf,KAAA,EAAA,KAAA,CACiD,OAAvDpR,EAAK,kDAAkDmS,EAAAK,OAAA,UAAA,KAAA,EAIrC,OADtBrC,IAAmBa,EACnBZ,KAAsB+B,EAAAf,KAAA,GACCrP,EAAM4J,EAAK,CAC9B8G,OAAQ,OACRR,QAAAA,EACApB,KAAME,EAEN2B,UAAWvC,IA1CI,KA0CyCC,IAAuB,KACjF,KAAA,IANI8B,EAAQC,EAAAR,MAQLgB,OAAOC,MAAMlT,GACjBwS,EAASW,IACV7S,iCAAI6M,OAAgClB,EAAG,MAAAkB,OAAKqF,EAASY,YAAMjG,OAAIqF,EAASa,aAC3EZ,EAAAf,KAAA,GAAA,MAAA,KAAA,GAAAe,EAAAhB,KAAA,GAAAgB,EAAAa,GAAAb,EAAA,MAAA,GAGDnS,EAAI6M,8BAAAA,OAA+B0C,EAAS5D,KAAGkB,OAAG+D,EAAI,KAAAuB,EAAAa,IAAY,KAAA,GAI5C,OAJ4Cb,EAAAhB,KAAA,GAGlEhB,IAAmBa,EACnBZ,KAAsB+B,EAAAc,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAd,EAAAe,OAAA,GAAAlB,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,UAE7B,OAAA,SAAAmB,GAAA,OAAApB,EAAAzR,MAAAsF,KAAApF,UAAA,CAAA,CAzCmC,KAyCjC,KAAA,GAAA,IAAA,MAAA,OAAA0Q,EAAAgC,OAAA,GAAAvC,OACNJ,GAAAjQ,MAAAsF,KAAApF,UAAA,CAAA,SACckR,GAAgB0B,GAAA,OAAAC,GAAA/S,MAAAsF,KAAApF,UAAA,CAAA,SAAA6S,KAK9B,OAL8BA,GAAA7C,EAAAC,IAAAC,MAA/B,SAAA4C,EAAgCC,GAAI,IAAAC,EAAAC,EAAAC,EAAA,OAAAjD,IAAAjE,MAAA,SAAAmH,GAAA,cAAAA,EAAAxC,KAAAwC,EAAAvC,MAAA,KAAA,EAG0C,OAFpEoC,EAAO,IAAIjC,KAAK,CAACgC,IACjBE,EAASD,EAAKC,SACdC,EAAmBD,EAAOG,YAAY,IAAInC,kBAAkB,SAAQkC,EAAAnB,OAAA,SACnE,IAAIqB,SAASH,GAAkBI,eAAa,KAAA,EAAA,IAAA,MAAA,OAAAH,EAAAT,OAAA,GAAAI,QACtDhT,MAAAsF,KAAApF,UAAA,CClED,IAEIuT,GAFEC,GAAarE,IAqBnB,SAAkBsE,GACdhE,GAAK,WAAY,CACbiE,aAAc,CACV,CACI3K,SAAUmE,GAAKnE,SACf4K,UAAW,CACP,CACItG,MAAOH,GAAKG,MACZuG,WAAYH,QAK7BrB,OAAM,SAACpI,GACNvK,EAAM,0BAA2BuK,EACrC,GACJ,IApCM6J,GAAc1E,IAgDpB,SAAmB2E,GACfrE,GAAK,aAAc,CACfsE,cAAe,CACX,CACIhL,SAAUmE,GAAKnE,SACfiL,WAAY,CACR,CACI3G,MAAOH,GAAKG,MACZyG,MAAOA,QAKxB1B,OAAM,SAACpI,GACNvK,EAAM,2BAA4BuK,EACtC,GACJ,IA9DA,SAASiK,KCNF,IAA2B5M,EACxB6M,EACAC,EACFC,EACAC,EDSJ,OANKd,KCNCW,GADwB7M,EDQM,CAC5B6M,sBAAuB,KACvBC,sBAAuB,MCTID,sBAC7BC,EAAwB9M,EAAK8M,sBAC/BC,EAA6B,EAC7BC,EAA6B,EACjC/P,GAAY,WACR8P,EAA6B,CACjC,GAAG,KACH9P,GAAY,WACR+P,EAA6B,CACjC,GAAG,KDFCd,GCGG,WACH,QAASa,EAA6BF,KAA2BG,EAA6BF,CACjG,GDAMZ,IACX,CACO,SAASe,GAAQC,GACfrH,GAAKoB,mBAEN2F,KACA3U,EAAM,4CAA6CiV,GAGvDf,GAAW/D,KAAK8E,GACpB,CAkBO,SAASC,GAASC,GAChBA,GAEAvH,GAAKoB,mBAEN2F,KACA3U,EAAM,4CAA6CmV,GAGvDZ,GAAYpE,KAAKgF,GACrB,CEnDO,IAAMC,GAAe,eACfC,GAAoB,oBACpBC,GAAkB,kBAClBC,GAA8B,8BAC9BC,GAAkB,kBAClBC,GAAgB,gBAUhBC,GAAa,aAEbC,GAAe,qBAEfC,GAAe,eAEfC,GAAa,sBAObC,GAAU,UACVC,GAAY,YACZC,GAAiB,iBACjBC,GAAa,aACbC,GAAY,YACZC,GAAa,aAEbC,GAAoB,oBACpBC,GAAiB,iBACjBC,GAAuB,uBAEvBC,GAAa,aAKbC,GAAW,WAKXC,GAAsB,sBACtBC,GAA+B,+BAE/BC,GAA4B,4BAI5BC,GAAc,CACvBC,UAAW,oBACXC,kBAAmB,4BACnBC,UAAW,oBACXC,MAAO,iBAIEC,GAAiB,CAC1BC,YAAa,EACbC,MAAO,EACPC,MAAO,EACPC,KAAM,EACNC,KAAM,GACNN,MAAO,GACPO,MAAO,IAKEC,GACA,EADAA,GAEA,EAGAC,GACH,YADGA,GAEA,eCpFPC,GAAiB,CACnB,cACA,YACA,WACA,cACA,aACA,cACA,cAQG,SAASC,GAAWnN,GACvB,GAAa,MAATA,EAAJ,CAGA,IAAIoN,EAAW,CAAE,EAmBjB,OAlBInV,MAAMoV,QAAQrN,GACdoN,EAAqB,WAAI,CAAEE,OAAQtN,EAAMwH,KAAI,SAAChM,GAAC,OAAK2R,GAAW3R,EAAE,KAE3C,iBAAVwE,EACZoN,EAAsB,YAAIpN,EAEJ,iBAAVA,EACZoN,EAAsB,YAAIpN,EAEJ,kBAAVA,EACZoN,EAAoB,UAAIpN,GArBhC,SAAoBA,GAChB,GAAa,MAATA,GAAkC,WAAjB/F,EAAO+F,GACxB,OAAO,EACX,IAAMuN,EAAOnX,OAAOmX,KAAKvN,GACzB,OAAuB,IAAhBuN,EAAK3S,QAAgBsS,GAAeM,SAASD,EAAK,GAC7D,CAkBaE,CAAWzN,GAGM,WAAjB/F,EAAO+F,KACZoN,EAAsB,YAAI,CAAEE,OAAQlX,OAAOsX,QAAQ1N,GAAOwH,KAAI,SAAAC,GAAA,IAAAkG,EAAAC,EAAAnG,EAAA,GAAY,OAAMoG,GAAbF,EAAA,GAAOA,EAAA,GAA4B,MAHtGP,EAAWpN,EAKRoN,CApBP,CAqBJ,CACO,SAASS,GAAWrX,EAAKwJ,GAC5B,MAAO,CACHxJ,IAAKA,EACLwJ,MAAOmN,GAAWnN,GAE1B,CAIO,SAAS8N,GAAaxK,EAAY9M,EAAKwJ,GACrCxJ,GAEL8M,EAAW3C,KAAKkN,GAAWrX,EAAKwJ,GACpC,CAIO,SAAS+N,GAIhBzK,EAKA0K,GACSA,GAEL5X,OAAOsX,QAAQM,GAAOvN,SAAQ,SAAAwN,GAAA,IAAAC,EAAAN,EAAAK,EAAA,GAAEzX,EAAG0X,EAAA,GAAElO,EAAKkO,EAAA,GAAA,OAAMJ,GAAaxK,EAAY9M,EAAKwJ,KAClF,CAIO,SAASmO,GAAgB7K,EAAY9M,GACxC,IAAM4X,EAAQ9K,EAAW+K,WAAU,SAACC,GAAI,OAAKA,EAAU,MAAM9X,MAC/C,IAAV4X,GACA9K,EAAWiL,OAAOH,EAAO,EAEjC,CC7EA,IAAMI,GAAsB,cAItBC,GAAuB,gDACtB,SAASC,KACZ,IAUqCC,EAAAC,EAV/BC,IAYyE,QADvEF,EAAA1W,MAAM6W,KAAsCF,QAAlCA,EAAC/X,eAAAA,EAAKkY,qBAAqB,eAAOH,IAAAA,EAAAA,EAAI,IACnDI,MAAK,SAACxT,GAAC,IAAAyT,EAAA,OAA2BA,QAAtBA,EAAAzT,EAAE0T,aAAa,mBAAOD,SAAtBA,EAAwBlK,iBAAkByJ,aAAoB,IAAAG,OAAA,EADvEA,EAEFQ,QAAQC,SAAU,IAbsBP,MAAMJ,KAexD,WACI,IAAMY,EAAKlY,EAAKsE,iBAAiB,cAAc,GAC/C,IAAK4T,EACD,MAAO,GAEX,IAAKA,EAAGC,aACJ,MAAO,GAEX,OAEJ,SAAwCC,GAAe,IACZ7P,EADYC,EAAAC,EACzB2P,GAAa,IAAvC,IAAA5P,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAyC,CAAA,IAA9ByP,EAAW9P,EAAAM,MAClB,GAAIwP,EAAYhM,OAASgL,GACrB,OAAOgB,EAAYC,YAAYL,MAEvC,CAAC,CAAA,MAAAlP,GAAAP,EAAAnE,EAAA0E,EAAA,CAAA,QAAAP,EAAAQ,GAAA,CACD,MAAO,EACX,CATWuP,CAA+BL,EAAGC,aAC7C,CAvBQK,GAAqCd,MAAMJ,IAC/C,GAAII,EACA,MAAO,CACHe,QAASf,EAAM,GACfgB,OAAQhB,EAAM,GAI1B,CAwBO,SAASiB,GAA8BtK,EAAIuK,EAAKpF,GAmBnDnF,EAAG/O,KAAKsZ,EAAK,oBAAaxN,OAAQoI,EAAKiF,aAAOrN,OAAIoI,EAAKkF,cAC3D,CACO,SAASG,GAA+BxK,EAAIuK,EAAKpF,GAYpD,IAI6BsF,EAGvBC,EACAC,EARAC,GAIuBH,EAJetF,EAAKiF,QAO3CM,EAAYD,EAAWhN,UAAU,EAAG,GACpCkN,EAAWF,EAAWhN,UAAU,EAAG,IACzC,KAAAV,OAAY2N,EAAS3N,KAAAA,OAAI4N,IARnBE,EAAU9N,QAAAA,OAAW6N,EAAW7N,YAAAA,OAAWoI,EAAKkF,OAAkB,cACxErK,EAAG/O,KAAKsZ,EAAK,kBAAmBM,EACpC,CC3EA,IAAMC,GACiB,EAShB,SAASC,KACZ,IARwBC,EACpBrN,EAUJ,MAAA,GAAAZ,QAXwBiO,EAQH,CACjBC,kBAAmB/Y,GARnByL,EAAO,EACPqN,EAAMC,mBACNtN,GAAQmN,IAELnN,EAAKuN,SAAS,IAAIC,SAAS,EAAG,OAMKpO,OAAGrK,EAAiB0Y,GAClE,CCbA,IAAMC,GAAsB,aACtBC,GAAwB,IAGxBC,GAAqC,MAChCC,GAAY,KAChB,SAASC,GAAcC,EAAgCC,GAC1D,IAAKjY,EAID,OAHA1D,EAAM,sFAENwb,GAAYT,MAGXW,IACDA,EAZ0C,OAczCC,IACDA,EAd2C,OAgB/CD,EAAiC7Y,KAAKyG,IAAIoS,EAAgCH,IAC1EI,EAAkC9Y,KAAKyG,IAAIqS,EAAiCJ,IAC5E,IACI,IAAMK,EtBvBP,SAAiBzO,GACpB,OAAIzJ,GAAexB,EACRA,EAAayB,QAAQwJ,GAEzB,IACX,CsBkB4BxJ,CAAQ0X,IACxBQ,EAmCZ,SAAsBD,GAClB,IAAKA,EACD,OAAO,KAEX,IAAM9D,EAAS8D,EAAYE,MAAMR,IACjC,GAAIxD,EAAO1S,OAAS,EAChB,OAAO,KAEX,IAAM2W,EAAKjE,EAAO,GACZxP,EAAYkF,SAASsK,EAAO,GAAI,IAChCkE,EAAmBxO,SAASsK,EAAO,GAAI,IAC7C,IAAKiE,GAAME,MAAM3T,IAAc2T,MAAMD,GACjC,OAAO,KAEX,MAAO,CACHD,GAAAA,EACAzT,UAAAA,EACA0T,iBAAAA,EAER,CAtDsBE,CAAaN,GACvBC,IAyDZ,SAAwBA,EAASH,EAAgCC,GAC7D,IAAMQ,EAA6BtY,IAAQ6X,EAC3C,GAAIG,EAAQG,iBAAmBG,EAC3B,OAAO,EAEX,IAAMC,EAAsBvY,IAAQ8X,EACpC,OAAOE,EAAQvT,WAAa8T,CAChC,CAhEwBC,CAAeR,EAASH,EAAgCC,KACpEE,EAAU,MAEVA,EACAA,EAAQG,iBAAmBnY,IAG3BgY,EAAU,CACNE,GAAIhB,KACJzS,UAAWzE,IACXmY,iBAAkBnY,KtB7B3B,SAAiBsJ,EAAGmP,GACnB5Y,GAAexB,GACfA,EAAa0B,QAAQuJ,EAAGmP,EAEhC,CsB4BQ1Y,CAAQyX,GAyChB,SAA0BQ,GACtB,OAAOA,EAAQE,GAAKT,GAAwBO,EAAQvT,UAAYgT,GAAwBO,EAAQG,gBACpG,CA3CqCO,CAAiBV,IAC9CL,GAAYK,EAAQE,EACvB,CACD,MAAO/V,GACH9F,EAAK,uCAAwC8F,EACjD,CACJ,CC9CA,IAAMwW,GAAkB,OAClBC,GACe,EAErB,SAASC,GAAiB1B,GACtB,IAAIrN,EAAO,EAIX,OAHIqN,EAAM2B,iBACNhP,GAAQ8O,IAEL9O,EAAKuN,SAAS,IAAIC,SAAS,EAAG,IACzC,CCJO,SAASyB,GAAU5O,GACtB,IAAMoM,EDIH,SAAyBoB,GAC5B,OAAKA,EAGL,GAAAzO,OAAUyP,IAAezP,OAAG2P,GAAiB,CAAEC,gBAAgB,KAAQ5P,OAAGyO,GAASzO,OAAGrK,EAAiBma,IAFnG,GAAA9P,OAAUyP,IAAezP,OAAG2P,GAAiB,CAAEC,gBAAgB,KAAO5P,OAAGrK,EAAiBma,IAGlG,CCToBC,CAAgBtB,IAC1BnB,ECPH,SAAwBD,GAC3B,IACM2C,EADW3P,GAAMgN,GACCc,SAAS,IAAIC,SAAS,EAAG,KACjD,MAAApO,GAAAA,OAAUgQ,GAAMhQ,OAAGrK,EAAiBsa,GACxC,CDGmBC,CAAe7C,GACxBtM,EAAa,GAEnB,OADAwK,GAAaxK,EAAY6H,GAAc0E,GAChC,CACHD,QAAAA,EACAC,OAAAA,EACArM,KAAAA,EAGAkP,KN0EwB,EMzExBC,kBAAmBnZ,IACnB8J,WAAAA,EACAsP,OAAQ,GACRC,MAAO,GACPrK,OAAQ,CAAEsK,KNgEe,GM9DjC,CAKO,SAASC,GAAQpI,EAAMnC,EAAQwK,GAElC,IAAMnT,EAAI8K,EACV,IAAI9K,EAAEoT,gBASN,OALIzK,IACA3I,EAAE2I,OAASA,GAEf3I,EAAEoT,gBACkB,MAAhBD,EAAuBxa,OAAOH,KAAK8I,MAAM6B,SAASnD,EAAE8S,mBAAqBK,IAAiBxZ,IACvFqG,EARHrK,EAAM,oDAAqDqK,EASnE,CAKO,SAASqT,GAAavI,EAAMnH,EAAM2P,EAAgB7P,GACrD,IAAI8P,OAAKxc,EACL0X,OAAO1X,EACmB,iBAAnBuc,EACPC,EAAKD,EAEAlb,MAAMoV,QAAQ8F,KACnB7E,EAAO6E,GAKXxI,EAAKiI,OAAOjS,KAAK,CACb6C,KAAAA,EACA6P,aAAoB,MAAND,EAAaA,EAAK5Z,IAChC8J,WAAYgL,QAAAA,EAAQ,IAE5B,CACO,SAASgF,GAAc3I,EAAMmI,EAAMS,GACtC5I,EAAKnC,OAAS,CACVsK,KAAAA,EACAS,QAAAA,EAER,CEpEO,SAASC,GAAgB7I,EAAM8I,GAClC,IAAMnQ,EAAa,GACM,iBAAdmQ,EACP3F,GAAaxK,EAAYsI,GAAmB6H,GAEvCA,IACDA,EAAUX,KACVhF,GAAaxK,EAAYuI,GAAgB4H,EAAUX,KAAKpC,YAEnD+C,EAAUjQ,MACfsK,GAAaxK,EAAYuI,GAAgB4H,EAAUjQ,MAEnDiQ,EAAUF,SACVzF,GAAaxK,EAAYsI,GAAmB6H,EAAUF,SAEtDE,EAAUC,OACV5F,GAAaxK,EAAYwI,GAAsB2H,EAAUC,OAE7DR,GAAavI,ER0CoB,YQ1CarH,GAEtD,CCnBO,SAASqQ,GAAiBrQ,EAAYjC,EAAKkR,GAC9C,IAAMqB,ER2EH,SAAoBrB,GACvB,OAAKA,EAEDta,MAAMoV,QAAQkF,GACP,SAACjE,GAAI,MAAK,GAAA/L,OAAAsR,EAAItB,GAAQjE,CAAAA,IAAMwF,KAAK,IAAI,EAEzC,SAACxF,GAAI,MAAA,GAAA/L,OAAQgQ,EAAMhQ,KAAAA,OAAI+L,EAAM,EAJzB,SAACA,GAAI,OAAKA,CAAI,CAK7B,CQlFwByF,CAAWxB,GAC/B,IACI,IAAMyB,EAAS5S,GAASC,GACpB2S,EAAOC,WACPD,EAAOC,SAAW,YAClBD,EAAOE,WACPF,EAAOE,SAAW,YACtB,IAAMlG,EAAQ5K,GAAKe,qBAAoBgQ,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,KAClCnI,GAAWgI,EAAOvS,MTiCP,WShCAuS,EAAOlM,UT6BL,aS5BAkM,EAAOI,UTiCP,aShCAJ,EAAOK,SAASC,QAAQ,IAAK,KT4B3B,eS3BAN,EAAOO,KAAOP,EAAOO,KAAKD,QAAQ,IAAK,SAAM1d,GT8BhD,YS7BAod,EAAOQ,OAASR,EAAOQ,OAAOF,QAAQ,IAAK,SAAM1d,IAElER,OAAOsX,QAAQM,GAAOvN,SAAQ,SAAAgH,GAAkB,IAAAkG,EAAAC,EAAAnG,EAAA,GAAhBjR,EAAGmX,EAAA,GAAE3N,EAAK2N,EAAA,QACxB/W,IAAVoJ,GACA8N,GAAaxK,EAAYsQ,EAAYpd,GAAMwJ,EAEnD,GACH,CACD,MAAOvB,GAIC2E,GAAKe,uBAAyB9O,GAE9ByY,GAAaxK,EAAYsQ,EAAY5H,IAAWxT,OAAO6I,GAE/D,CACJ,CCjCO,IAAMnI,GAAgC,MAAlBrB,GACW,mBAA3BA,EAAesB,SACY,mBAA3BtB,EAAeuB,QCD1B,IAAMqb,GAAqB,SAChBC,GAAQ,KAOZ,SAASC,KACZ,GAAKzb,GAIL,IACI,IAAMkY,EDZP,SAAiBzO,GACpB,OAAIzJ,IAAerB,EACRA,EAAesB,QAAQwJ,GAE3B,IACX,CCO4BxJ,CAAQsb,IAC5B,GAAIrD,EAEA,YADAsD,GAAQtD,GAGZsD,GAAQxc,E/BtBa,G8BWtB,SAAiByK,EAAGmP,GACnB5Y,IAAerB,GACfA,EAAeuB,QAAQuJ,EAAGmP,EAElC,CCQQ1Y,CAAQqb,GAAoBC,GAC/B,CACD,MAAOlZ,GACH9F,EAAK,sCAAuC8F,EAChD,MAdIhG,EAAM,4EAed,CCrBO,SAASof,GAAoBtR,EAAYuR,GAAS,IAAApN,EAAAqN,EAAAC,EAAAC,EAAAC,OACkBre,IAAnE0M,EAAW0L,MAAK,SAACkG,GAAS,OAAKA,EAAU1e,MAAQ2U,EAAa,KAC9D2C,GAAaxK,EAAY6H,GAAcjT,EhCTlB,IgCWzB,IAAK,IAAIE,EAAI,EAAGA,EAAIgL,GAAKO,iBAAiB/I,OAAQxC,IAC9CkL,EAAW3C,KAAKyC,GAAKO,iBAAiBvL,IAE1Cub,GAAiBrQ,EAA8CmE,QAApCA,EAAc,QAAdqN,EAAED,eAAAA,EAASxT,WAAGyT,IAAAA,EAAAA,EAAIpe,aAAG,EAAHA,EAAKQ,SAASuK,gBAAIgG,EAAAA,EAAIxG,GZ4BnC,QY3B5B+P,IACAlD,GAAaxK,EZKK,aYLmB0N,IAErC0D,IACA5G,GAAaxK,EZIS,iBYJmBoR,IAE7C5G,GAAaxK,EZGW,uBYH8ByR,QAAjBA,EAAEre,eAAAA,EAAKye,sBAAUJ,EAAAA,EAAI9T,IAC1D6M,GAAaxK,EZGY,wBYH+B0R,QAAlBA,EAAEte,eAAAA,EAAK0e,uBAAWJ,EAAAA,EAAI/T,IAE5D,IAAMoU,EAAiBte,SAAeke,QAAZA,EAAHle,EAAKue,kBAALL,IAAeA,OAAfA,EAAAA,EAAiBM,cACpCF,GACAvH,GAAaxK,EZAkB,6BYAmB+R,EAE1D,CCtBA,IAMIG,GAHAC,GAAiB,EACjBC,GAA8B,EAC9BC,GAAa,CAAE,EAMfC,IAAoB,EACjB,SAASC,KACZD,IAAoB,CACxB,CA0BO,SAASE,GAAqBngB,EAAO4H,GACnC5H,GAIDogB,GADiB,iBAAVpgB,EACU,CAAE4d,QAAS5d,EAAO4H,KAAAA,GAGlB,CAAEgW,QAAS5d,EAAM4d,QAAS/U,KAAM7I,EAAM6N,KAAMkQ,MAAO/d,EAAM+d,MAAOnW,KAAAA,GAEzF,CACA,SAASwY,GAAgBtO,GAAiC,IAA9B8L,EAAO9L,EAAP8L,QAAS/U,EAAIiJ,EAAJjJ,KAAMkV,EAAKjM,EAALiM,MAAOnW,EAAIkK,EAAJlK,KAC9C,GAAKgW,KAAWkC,GApDS,OnBuCtB,SAA+BlC,GAClC,OAAQA,GAAW9O,GAAWrB,GAAKS,oBAAqB0P,EAC5D,CmBcQyC,CAAsBzC,GAA1B,CAGImC,IAxD6B,KAyD7BC,GAAa,CAAE,EACfD,GAA8B,GAIlC,IACMlf,GAHN+c,EAAU/a,OAAO+a,GAAStQ,UAAU,EAAG,OACvCyQ,EAyCG,SAA2BA,GAC9B,OAAOlb,OAAOkb,GAAS,IAClBpC,MAAM,MACN5Y,MAAM,EA1GQ,IA2Gdob,KAAK,KACd,CA9CYmC,CAAkBvC,KACThd,eAAAA,EAAKQ,SAASuK,MAE3ByU,EAAeP,GAAWnf,GAC9B,GAAI0f,EACAA,EAAaC,gBAEZ,CACD,IAAM7S,EAAa,GACnBsR,GAAoBtR,GACpBwK,GAAaxK,EAAY4H,GAAYkB,GAAYI,OACjDsB,GAAaxK,EAAYsI,GAAmB2H,GACxC/U,GACAsP,GAAaxK,EAAYuI,GAAgBrN,GAEzCkV,GACA5F,GAAaxK,EAAYwI,GAAsB4H,GAE/CnW,SAAAA,EAAM6Y,gBACNtI,GAAaxK,Eb7DgB,4Ba6DuB/F,aAAI,EAAJA,EAAM6Y,eAAenT,UAAU,EAAG,OAG1F8K,GAAczK,EAAY/F,aAAAA,EAAAA,EAAM+F,YAChC4S,EAAe,CACXC,UAAW,EACXE,iBAAkB,EAClB5L,IAAK,CACD4I,aAAc7Z,IACd8J,WAAYA,EACZgT,eAAgB7J,GAAeD,MAC/B+J,aAAc,QACdhQ,KAAM,CACFiQ,YAAajD,KAIzBoC,GAAWnf,GAAO0f,EAClBR,IACJ,EASJ,WACI,GAAIF,GACA,OAEJA,GAAqClb,WAAWqL,GAAM,IAC1D,CAbI8Q,EA7CA,CA8CJ,CAaA,SAAS9Q,KAKL,IAAK,IAAMnP,KAJPgf,KACAjb,aAAaib,IACbA,GAAqC,MAEvBG,GACd,GAAIrf,EAAeqf,GAAYnf,GAAM,CACjC,IAAMkgB,EAAYf,GAAWnf,GACzBkgB,EAAUP,UAAYO,EAAUL,mBAChC7L,GAAQkM,EAAUjM,KAClBgL,KAER,CAEJE,GAAa,CAAE,EACfD,GAA8B,CAClC,CC1IA,IAAIla,IAAI,EAAOmb,GAAE,SAAAA,GAAIhe,iBAAiB,YAAY,SAAAmH,GAAIA,EAAE8W,YAAYpb,GAAEsE,EAAE+W,UAAUF,EAAE7W,GAAI,IAAE,EAAI,EAACA,GAAE,SAACtE,EAAEmb,EAAE7W,EAAE1H,GAAK,IAAI0e,EAAEjX,EAAE,OAAO,SAAAkX,GAAIJ,EAAE3W,OAAO,IAAI+W,GAAG3e,OAAKyH,EAAE8W,EAAE3W,OAAO8W,QAAAA,EAAG,UAAO,IAASA,KAAKA,EAAEH,EAAE3W,MAAM2W,EAAEK,MAAMnX,EAAE8W,EAAEM,OAAQ,SAACzb,EAAEmb,GAAC,OAAGnb,EAAEmb,EAAE,GAAG,OAAOnb,EAAEmb,EAAE,GAAG,oBAAoB,MAAM,CAAtD,CAAwDA,EAAE3W,MAAMF,GAAGtE,EAAEmb,IAAK,CAAC,EAACve,GAAE,SAAAoD,GAAI0b,uBAAuB,WAAA,OAAIA,uBAAuB,WAAA,OAAI1b,GAAG,GAAE,GAAG,EAACsb,GAAE,WAAK,IAAMtb,EAAEpE,YAAYqE,iBAAiB,cAAc,GAAG,GAAGD,GAAGA,EAAE2b,cAAc,GAAG3b,EAAE2b,cAAc/f,YAAYiC,MAAM,OAAOmC,CAAE,EAACqE,GAAE,WAAI,IAAAuX,EAAO5b,EAAEsb,KAAI,OAAyBM,QAAzBA,EAAO5b,aAAAA,EAAAA,EAAG6b,uBAAeD,IAAAA,EAAAA,EAAE,CAAE,EAACL,GAAE,SAACJ,GAAS,IAAP7W,EAAC5J,UAAA0E,OAAA,QAAAhE,IAAAV,UAAA,GAAAA,UAAA,IAAG,EAAUkC,EAAE0e,KAAQC,EAAE,WAA8J,OAAnJvb,IAAG,EAAEub,EAAE,qBAAqB3e,IAAItB,SAASwgB,cAAczX,KAAI,EAAEkX,EAAE,YAAYjgB,SAASygB,aAAaR,EAAE,UAAU3e,EAAEoG,OAAOuY,EAAE3e,EAAEoG,KAAK8V,QAAQ,KAAK,OAAa,CAAC9Q,KAAKmT,EAAE3W,MAAMF,EAAEmX,OAAO,OAAOD,MAAM,EAAEtJ,QAAQ,GAAG6D,GAAE,MAAAhP,OAAOjJ,KAAKD,MAAKkJ,KAAAA,OAAIlK,KAAKC,MAAM,cAAcD,KAAKE,UAAU,MAAOif,eAAeT,EAAG,EAACrU,GAAE,IAAI+U,QAAQ,SAASniB,GAAEkG,EAAEmb,GAAG,OAAOjU,GAAEgV,IAAIlc,IAAIkH,GAAEiV,IAAInc,EAAE,IAAImb,GAAGjU,GAAEgV,IAAIlc,EAAE,CAAC,IAA+oEoc,GAAzoEC,GAAC,WAAW,OAAAC,GAAX,SAAAD,IAAAE,OAAAF,GAAA1D,EAAA7Y,KAAA,SAAA,GAAA6Y,WAAK,GAACA,WAAG,GAAE,GAAA,CAAA,CAAA3d,IAAA,IAAAwJ,MAAC,SAAExE,GAAE,IAAAwc,EAAC,IAAGxc,EAAEyc,eAAL,CAA2B,IAAMtB,EAAErb,KAAKwb,EAAE,GAAGhX,EAAExE,KAAKwb,EAAEoB,IAAG,GAAI5c,KAAKlD,GAAGue,GAAG7W,GAAGtE,EAAEsC,UAAUgC,EAAEhC,UAAU,KAAKtC,EAAEsC,UAAU6Y,EAAE7Y,UAAU,KAAKxC,KAAKlD,GAAGoD,EAAEwE,MAAM1E,KAAKwb,EAAEnW,KAAKnF,KAAKF,KAAKlD,EAAEoD,EAAEwE,MAAM1E,KAAKwb,EAAE,CAACtb,IAAU,QAAPwc,EAAC1c,KAAKqb,SAAC,IAAAqB,GAANA,EAAAvhB,KAAI6E,KAAKE,EAAtL,CAAwL,IAAC,CAA9N,GAAqO2c,GAAE,SAAC3c,EAAEmb,GAAS,IAAP7W,EAAC5J,UAAA0E,OAAA,QAAAhE,IAAAV,UAAA,GAAAA,UAAA,GAAC,CAAE,EAAI,IAAI,GAAGmI,oBAAoB+Z,oBAAoB5K,SAAShS,GAAG,CAAC,IAAMpD,EAAE,IAAIiG,qBAAqB,SAAA7C,GAAI8L,QAAQ+Q,UAAUC,MAAM,WAAK3B,EAAEnb,EAAE+c,aAAa,GAAG,IAAI,OAAOngB,EAAEmG,QAAOia,EAAA,CAAEha,KAAKhD,EAAEid,UAAS,GAAM3Y,IAAI1H,CAAC,CAAE,CAAA,MAAAR,GAAK,CAAG,EAACuI,GAAE,SAAA3E,GAAI,IAAImb,GAAE,EAAG,OAAM,WAAKA,IAAInb,IAAImb,GAAE,EAAI,CAAC,EAAK+B,IAAI,EAAOC,GAAE,WAAD,MAAK,WAAW7hB,SAASkK,iBAAiBlK,SAASwgB,aAAa,IAAI,CAAC,EAACsB,GAAE,SAAApd,GAAI,WAAW1E,SAASkK,iBAAiB0X,IAAE,IAAKA,GAAE,qBAAqBld,EAAEgD,KAAKhD,EAAEqb,UAAU,EAAE/E,KAAK,EAAC+G,GAAE,WAAKlgB,iBAAiB,mBAAmBigB,IAAE,GAAIjgB,iBAAiB,qBAAqBigB,IAAE,EAAI,EAAC9G,GAAE,WAAK9Y,oBAAoB,mBAAmB4f,IAAE,GAAI5f,oBAAoB,qBAAqB4f,IAAE,EAAI,EAACE,GAAE,WAAK,GAAGJ,GAAE,EAAE,CAAA,IAAAK,EAAOvd,EAAEqE,KAAIC,EAAEhJ,SAASwgB,sBAAmByB,EAACC,WAAW5hB,YAAYqE,iBAAiB,oBAAoB4D,QAAQ,SAAAsX,GAAC,MAAE,WAAWA,EAAEnT,MAAMmT,EAAE7Y,UAAUtC,KAAI,UAAE,IAAAud,OAAnH,EAAOA,EAA8Gjb,UAAU4a,GAAE5Y,QAAAA,EAAG6Y,KAAIE,KAAIlC,IAAG,WAAKrc,YAAY,WAAKoe,GAAEC,KAAIE,IAAG,GAAG,GAAG,CAAC,MAAM,CAAC,mBAAII,GAAkB,OAAOP,EAAC,EAAG,EAACQ,GAAE,SAAA1d,GAAI1E,SAASwgB,aAAa3e,iBAAiB,sBAAsB,WAAA,OAAI6C,GAAG,IAAE,GAAIA,GAAI,EAAC2d,GAAE,CAAC,KAAK,KAAoYC,GAAE,CAAC,GAAG,KAAKC,GAAE,SAAC7d,GAAS,IAAPsb,EAAC5gB,UAAA0E,OAAA,QAAAhE,IAAAV,UAAA,GAAAA,UAAA,GAAC,CAAE,GAAjZ,SAACsF,GAAS,IAAPsb,EAAC5gB,UAAA0E,OAAA,QAAAhE,IAAAV,UAAA,GAAAA,UAAA,GAAC,CAAE,EAAIgjB,IAAG,WAAK,IAAgB5jB,EAAVoN,EAAEoW,KAAUjB,EAAEd,GAAE,OAAa5W,EAAEgY,GAAE,SAAS,SAAA3c,GAAG,IAAiBkE,EAAjBC,EAAAC,EAAgBpE,GAAC,IAAhB,IAAAmE,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAiB,CAAA,IAAP4W,EAACjX,EAAAM,MAAM,2BAA2B2W,EAAEnT,OAAOrD,EAAEU,aAAa8V,EAAE7Y,UAAU4E,EAAEuW,kBAAkBpB,EAAE7X,MAAM3H,KAAKihB,IAAI3C,EAAE7Y,UAAU+B,KAAI,GAAGgY,EAAEnK,QAAQ/M,KAAKgW,GAAGrhB,GAAE,IAAI,CAAC,CAAA,MAAA4K,GAAAP,EAAAnE,EAAA0E,EAAA,CAAA,QAAAP,EAAAQ,GAAA,CAAA,IAAIA,IAAI7K,EAAEwK,GAAEtE,EAAEqc,EAAEsB,GAAErC,EAAEyC,kBAAkB5C,IAAG,SAAAA,GAAIkB,EAAEd,GAAE,OAAOzhB,EAAEwK,GAAEtE,EAAEqc,EAAEsB,GAAErC,EAAEyC,kBAAkBnhB,IAAG,WAAKyf,EAAE7X,MAAM5I,YAAYiC,MAAMsd,EAAEE,UAAUvhB,GAAE,EAAG,GAAG,IAAI,GAAI,CAAyBkkB,CAAErZ,IAAG,WAAK,IAAIN,EAAE6C,EAAEqU,GAAE,MAAM,GAAS5W,EAAE7K,GAAEwhB,EAAEe,IAAGa,EAAE,SAAAld,GAAG,IAAiBie,EAAjBC,EAAA9Z,EAAgBpE,GAAC,IAAhB,IAAAke,EAAA7Z,MAAA4Z,EAAAC,EAAA5Z,KAAAC,MAAiB,CAAA,IAAP4W,EAAC8C,EAAAzZ,MAAMG,EAAEgY,EAAExB,EAAE,CAAC,CAAA,MAAAzW,GAAAwZ,EAAAle,EAAA0E,EAAA,CAAA,QAAAwZ,EAAAvZ,GAAA,CAAAA,EAAE/H,EAAEsK,EAAE1C,QAAQ0C,EAAE1C,MAAMG,EAAE/H,EAAEsK,EAAEgL,QAAQvN,EAAE2W,EAAEjX,IAAK,EAAC8Y,EAAER,GAAE,eAAeO,GAAGC,IAAI9Y,EAAEC,GAAEtE,EAAEkH,EAAE0W,GAAEtC,EAAEyC,kBAAkBziB,SAAS6B,iBAAiB,oBAAoB,WAAK,WAAW7B,SAASkK,kBAAkB0X,EAAEC,EAAEgB,eAAe9Z,GAAE,GAAI,IAAI8W,IAAG,WAAKxW,EAAE/H,EAAE,EAAEsK,EAAEqU,GAAE,MAAM,GAAGlX,EAAEC,GAAEtE,EAAEkH,EAAE0W,GAAEtC,EAAEyC,kBAAkBnhB,IAAG,WAAA,OAAIyH,GAAG,GAAE,IAAIvF,WAAWuF,GAAG,IAAK,EAAKhF,GAAE,EAAE+e,GAAE,IAAIC,GAAE,EAAQC,GAAE,SAAAte,GAAG,IAAiBue,EAAjBC,EAAApa,EAAgBpE,GAAC,IAAhB,IAAAwe,EAAAna,MAAAka,EAAAC,EAAAla,KAAAC,MAAiB,CAAA,IAAP4W,EAACoD,EAAA/Z,MAAM2W,EAAEsD,gBAAgBL,GAAEvhB,KAAKyG,IAAI8a,GAAEjD,EAAEsD,eAAeJ,GAAExhB,KAAKihB,IAAIO,GAAElD,EAAEsD,eAAepf,GAAEgf,IAAGA,GAAED,IAAG,EAAE,EAAE,EAAC,CAAC,CAAA,MAAA1Z,GAAA8Z,EAAAxe,EAAA0E,EAAA,CAAA,QAAA8Z,EAAA7Z,GAAA,CAAA,EAAc+Z,GAAE,WAAD,IAAAC,EAAA,OAAKvC,GAAE/c,GAA8Bsf,QAA7BA,EAAC/iB,YAAYgjB,wBAAgBD,IAAAA,EAAAA,EAAE,CAAC,EAAkHxX,GAAE,EAAQ0X,GAAC,WAAe,OAAAvC,GAAf,SAAAuC,IAAAtC,OAAAsC,GAAAlG,WAAG,IAAEA,EAAG7Y,KAAA,IAAA,IAAIgf,KAAGnG,EAAA7Y,KAAA,SAAA,GAAA6Y,EAAA7Y,KAAA,SAAA,EAAA,GAAA,CAAA,CAAA9E,IAAA,IAAAwJ,MAAK,WAAI2C,GAAEuX,KAAI5e,KAAKod,EAAE9d,OAAO,EAAEU,KAAKqd,EAAE4B,OAAO,GAAC,CAAA/jB,IAAA,IAAAwJ,MAAA,WAAI,IAAMxE,EAAEnD,KAAKyG,IAAIxD,KAAKod,EAAE9d,OAAO,EAAEvC,KAAKC,OAAO4hB,KAAIvX,IAAG,KAAK,OAAOrH,KAAKod,EAAEld,EAAE,GAAC,CAAAhF,IAAA,IAAAwJ,MAAAmY,SAAE3c,GAAE,IAAAgf,EAAC,GAASA,QAANA,EAAAlf,KAAKsd,SAAL4B,IAAMA,GAANA,EAAA/jB,KAAI6E,KAAKE,GAAIA,EAAEye,eAAe,gBAAgBze,EAAEif,UAAnD,CAAoE,IAAM9D,EAAErb,KAAKod,EAAER,IAAG,GAAQpY,EAAExE,KAAKqd,EAAEjB,IAAIlc,EAAEye,eAAe,GAAGna,GAAGxE,KAAKod,EAAE9d,OAAO,IAAIY,EAAEmC,SAASgZ,EAAEyC,EAAE,CAAA,IAAAsB,EAAC,GAAG5a,EAAEtE,EAAEmC,SAASmC,EAAEsZ,GAAGtZ,EAAE4N,QAAQ,CAAClS,GAAGsE,EAAEsZ,EAAE5d,EAAEmC,UAAUnC,EAAEmC,WAAWmC,EAAEsZ,GAAG5d,EAAEsC,YAAYgC,EAAE4N,QAAQ,GAAG5P,WAAWgC,EAAE4N,QAAQ/M,KAAKnF,IAAIsE,EAAE,CAACyR,GAAG/V,EAAEye,cAAcvM,QAAQ,CAAClS,GAAG4d,EAAE5d,EAAEmC,UAAUrC,KAAKqd,EAAEhB,IAAI7X,EAAEyR,GAAGzR,GAAGxE,KAAKod,EAAE/X,KAAKb,IAAIxE,KAAKod,EAAEiC,MAAM,SAACnf,EAAEmb,GAAC,OAAGA,EAAEyC,EAAE5d,EAAE4d,CAAE,IAAE9d,KAAKod,EAAE9d,OAAO,GAAG,CAAC,IAA0CggB,EAAhBC,EAAAjb,EAAlBtE,KAAKod,EAAEnK,OAAO,KAAoB,IAAhB,IAAAsM,EAAAhb,MAAA+a,EAAAC,EAAA/a,KAAAC,MAAiB,CAAA,IAAP4W,EAACiE,EAAA5a,MAAM1E,KAAKqd,EAAEmC,OAAOnE,EAAEpF,GAAE,CAAC,CAAA,MAAArR,GAAA2a,EAAArf,EAAA0E,EAAA,CAAA,QAAA2a,EAAA1a,GAAA,CAAA,CAAOua,QAANA,EAAApf,KAAKwW,SAAL4I,IAAMA,GAANA,EAAAjkB,KAAI6E,KAAKwE,EAAE,CAAlb,CAAmb,IAAC,CAAjoB,GAAwoBib,GAAE,SAAAvf,GAAI,IAAMmb,EAAEqC,WAAWgC,qBAAqB1gB,WAAW,WAAWxD,SAASkK,gBAAgBxF,KAAKA,EAAE2E,GAAE3E,GAAG1E,SAAS6B,iBAAiB,mBAAmB6C,EAAE,CAACyf,MAAK,IAAKtE,GAAG,WAAKnb,IAAI1E,SAASkC,oBAAoB,mBAAmBwC,EAAE,IAAK,EAAC0f,GAAE,CAAC,IAAI,KAAKC,GAAE,SAAC3f,GAAS,IAAPpD,EAAClC,UAAA0E,OAAA,QAAAhE,IAAAV,UAAA,GAAAA,UAAA,GAAC,CAAE,EAAI8iB,WAAWoC,wBAAwB,kBAAkBA,uBAAuB/kB,WAAW6iB,IAAG,WAAI,IAAAmC,EAA3lC,qBAAqBjkB,aAAawgB,KAAIA,GAAEO,GAAE,QAAQ2B,GAAE,CAACtb,KAAK,QAAQia,UAAS,EAAG6C,kBAAkB,KAAggC,IAAIxE,EAAEjX,EAAEkX,GAAE,OAAarU,EAAEpN,GAAE8C,EAAEiiB,IAAGxC,EAAE,SAAArc,GAAIuf,IAAG,WAAI,IAAiBQ,EAAjBC,EAAA5b,EAAgBpE,GAAC,IAAhB,IAAAggB,EAAA3b,MAAA0b,EAAAC,EAAA1b,KAAAC,MAAiB,CAAA,IAAP4W,EAAC4E,EAAAvb,MAAM0C,EAAEyV,EAAExB,EAAE,CAAC,CAAA,MAAAzW,GAAAsb,EAAAhgB,EAAA0E,EAAA,CAAA,QAAAsb,EAAArb,GAAA,CAAA,IAAMwW,EAAEjU,EAAE8W,IAAI7C,GAAGA,EAAEyC,IAAIvZ,EAAEG,QAAQH,EAAEG,MAAM2W,EAAEyC,EAAEvZ,EAAE6N,QAAQiJ,EAAEjJ,QAAQoJ,IAAI,GAAI,EAAC3W,EAAEgY,GAAE,QAAQN,EAAE,CAACyD,kBAAqCD,QAApBA,EAACjjB,EAAEkjB,yBAAiBD,IAAAA,EAAAA,EAAE,KAAKvE,EAAEhX,GAAEtE,EAAEqE,EAAEqb,GAAE9iB,EAAEmhB,kBAAkBpZ,IAAIA,EAAE5B,QAAQ,CAACC,KAAK,cAAcia,UAAS,IAAK3hB,SAAS6B,iBAAiB,oBAAoB,WAAK,WAAW7B,SAASkK,kBAAkB6W,EAAE1X,EAAEwZ,eAAe7C,GAAE,GAAI,IAAIH,IAAG,WAAKjU,EAAEoW,IAAIjZ,EAAEkX,GAAE,OAAOD,EAAEhX,GAAEtE,EAAEqE,EAAEqb,GAAE9iB,EAAEmhB,iBAAiB,IAAI,GAAI,EAAOkC,GAAC,WAAA,OAAA3D,GAAA,SAAA2D,IAAA1D,OAAA0D,GAAAtH,EAAA7Y,KAAA,SAAA,EAAA,GAAA,CAAA,CAAA9E,IAAA,IAAAwJ,MAAG,SAAExE,GAAE,IAAAkgB,EAAOA,QAANA,EAAApgB,KAAKsd,SAAL8C,IAAMA,GAANA,EAAAjlB,KAAI6E,KAAKE,EAAE,IAAC,CAApB,GAA2BmgB,GAAE,CAAC,KAAK,KCMvsJ,SAASC,MDNqsJ,SAACpgB,GAAS,IAAPsb,EAAC5gB,UAAA0E,OAAA,QAAAhE,IAAAV,UAAA,GAAAA,UAAA,GAAC,CAAE,EAAIgjB,IAAG,WAAK,IAAgBrB,EAAVnV,EAAEoW,KAAUJ,EAAE3B,GAAE,OAAa4B,EAAErjB,GAAEwhB,EAAE2E,IAAG7C,EAAE,SAAApd,GAAIsb,EAAEyC,mBAAmB/d,EAAEA,EAAE9C,OAAQ,IAAG,IAAgBmjB,EAAhBC,EAAAlc,EAAepE,GAAC,IAAhB,IAAAsgB,EAAAjc,MAAAgc,EAAAC,EAAAhc,KAAAC,MAAiB,CAAA,IAAP4W,EAACkF,EAAA7b,MAAM2Y,EAAER,EAAExB,GAAGA,EAAE7Y,UAAU4E,EAAEuW,kBAAkBP,EAAE1Y,MAAM3H,KAAKihB,IAAI3C,EAAE7Y,UAAU+B,KAAI,GAAG6Y,EAAEhL,QAAQ,CAACiJ,GAAGkB,IAAG,CAAC,CAAA,MAAA3X,GAAA4b,EAAAtgB,EAAA0E,EAAA,CAAA,QAAA4b,EAAA3b,GAAA,CAAC,EAAC0Y,EAAEV,GAAE,2BAA2BS,GAAG,GAAGC,EAAE,CAAChB,EAAE/X,GAAEtE,EAAEkd,EAAEiD,GAAE7E,EAAEyC,kBAA6E,IAA3D,IAAM1Z,EAAEM,IAAG,WAAKyY,EAAEC,EAAEc,eAAed,EAAEhY,aAAagX,GAAE,EAAG,IAAIkE,EAAAC,EAAAA,EAAc,CAAC,UAAU,QAAQ,oBAAmBD,EAAAC,EAAAphB,OAAAmhB,IAACpjB,iBAA1CqjB,EAAAD,IAA8D,WAAA,OAAIhB,GAAElb,KAAI,CAACoc,SAAQ,EAAGhB,MAAK,IAAKtE,IAAG,SAAAA,GAAI+B,EAAE3B,GAAE,OAAOc,EAAE/X,GAAEtE,EAAEkd,EAAEiD,GAAE7E,EAAEyC,kBAAkBnhB,IAAG,WAAKsgB,EAAE1Y,MAAM5I,YAAYiC,MAAMsd,EAAEE,UAAUgB,GAAE,EAAG,GAAG,GAAG,CAAC,GAAI,CCOlwKqE,CAAMC,GAAY,CAAE5C,kBAAkB,IACtC6C,GAAMD,GAAY,CAAE5C,kBAAkB,IACtC8C,GAAMF,GAAY,CAAE5C,kBAAkB,GAC1C,CACA,SAAS4C,GAAWG,GAChB,IAAMhZ,EAAa,GACnBwK,GAAaxK,EAAY4H,GAAYkB,GAAYG,WACjD,IAAMgQ,EAAiB,GACvBzO,GAAayO,EAAgB,OAAQD,EAAO9Y,MAC5CsK,GAAayO,EAAgB,QAASrb,GAAmBob,EAAOtc,QAChE8N,GAAayO,EAAgB,QAASrb,GAAmBob,EAAOtF,QAChE,IAAMvM,EAAM,CACR4I,aAAc7Z,IACd8J,WAAYA,EACZgT,eAAgB7J,GAAeI,KAC/B0J,aAAc,OACdhQ,KAAM,CACFiW,YAAa,CACTlP,OAAQiP,KAIpB3H,GAAoBnK,EAAInH,YACxBkH,GAAQC,EACZ,CC7BA,IAAMgS,GAAiB,gCACjBC,GAA4B,qEAM3B,SAASC,GAAqBC,GACb,MAAhBA,EAAMC,OACN/G,GAAqB,CACjBvC,QAASkJ,GAAiB,sBAC1B/I,MAAOgJ,KAG0B,iBAAzBE,EAAMC,OAAOtJ,QACzBuC,GAAqB,CACjBvC,QAASkJ,GAAiBG,EAAMC,OAAOtJ,QACvCG,MAAqC,iBAAvBkJ,EAAMC,OAAOnJ,MAAqBkJ,EAAMC,OAAOnJ,MAAQgJ,KAG5C,WAAxBziB,EAAO2iB,EAAMC,SAClB/G,GAAqB,CACjBvC,QAASkJ,GAAiBG,EAAMC,OAChCnJ,MAAOgJ,IAGnB,CC5BA,IAAMI,GAAuD,2BAqC7D,SAASC,GAAcC,EAAeC,GAElC,IADA,IAAMC,EAAUF,EAAcF,IACrB1kB,EAAI,EAAGA,EAAI8kB,EAAQtiB,OAAQxC,IAAK,CAErC,GAAI+kB,GADgBD,EAAQ9kB,GACS6kB,uBAAwBA,GACzD,OAAO7kB,CAEf,CACA,OAAS,CACb,CAcA,SAAS+kB,GAAqBC,EAAyBC,GACnD,GAAID,EAAwBxiB,SAAWyiB,EAAwBziB,OAC3D,OAAO,EAEX,IAAK,IAAIxC,EAAI,EAAGA,EAAIglB,EAAwBxiB,OAAQxC,IAChD,GAAIglB,EAAwBhlB,KAAOilB,EAAwBjlB,GACvD,OAAO,EAGf,OAAO,CACX,CACO,SAASklB,GAA2BN,EAAeO,EAAiBC,EAAWC,EAAeC,GACjG,OAnDG,SAA4BV,EAAeO,EAAiBN,GAC/D,IAAKD,EACD,OAAOO,EACX,IAAML,EAAWF,EAAcF,IAC3BE,EAAcF,KAAyD,GACrE1O,EAAQ2O,GAAcC,EAAeC,GAC3C,OAAc,IAAV7O,EAEO8O,EAAQ9O,GAAOmP,iBAE1BL,EAAQvc,KAAK,CACT4c,gBAAAA,EACAN,uBAAAA,IAEGM,EACX,CAoCWI,CAAmBX,EAAeO,EAAiBK,GAA0CJ,EAAWC,EAAeC,GAClI,CACA,SAASE,GAA0CJ,EAAWC,EAAeC,GACzE,MAAO,CAACF,EAAWC,EAAeI,GAAgCH,GACtE,CACO,SAASG,GAAgCH,GAiB5C,OAAwB,MAApBA,IAGiC,WAA5BzjB,EAAOyjB,GACLI,QAAQJ,EAAiBzB,SAE7B6B,QAAQJ,GACnB,CACO,SAASK,GAA2Bf,EAAeQ,EAAWC,EAAeC,EAAkBM,GAClG,OAxDG,SAA4BhB,EAAeC,EAAwBe,GACtE,IAAMd,EAAUF,aAAAA,EAAAA,EAAgBF,IAChC,GAAe,MAAXI,EACA,OAAOc,EAEX,IAAM5P,EAAQ2O,GAAcC,EAAeC,GAC3C,IAAc,IAAV7O,EACA,OAAO4P,EAEX,IAAMC,EAAcf,EAAQ9O,GAE5B,OADA8O,EAAQ3O,OAAOH,EAAO,GACf6P,EAAYV,eACvB,CA4CWW,CAAmBlB,EAAeY,GAA0CJ,EAAWC,EAAeC,GAAmBM,EACpI,CCpGO,SAASG,KACR/a,GAAKU,mBAIb,SAAyBsa,GACrB,IAAKA,GACiD,mBAA3CA,EAAY/nB,UAAUsC,kBACwB,mBAA9CylB,EAAY/nB,UAAU2C,oBAC7B,OAEJ,IAAMqlB,EAA2BD,EAAY/nB,UAAUsC,iBACjD2lB,EAA8BF,EAAY/nB,UAAU2C,oBAC1DolB,EAAY/nB,UAAUsC,iBAAmB,SAAiC6kB,EAAWhY,EAAIkY,GACrF,GAAkB,mBAAPlY,EACP,OAAO6Y,EAAyBroB,MAAMsF,KAAMpF,WAIhD,IADA,IAAMqF,EAAO,IAAItD,MAAM/B,UAAU0E,QACxBxC,EAAI,EAAGA,EAAIlC,UAAU0E,OAAQxC,IAClCmD,EAAKnD,GAAKlC,UAAUkC,GAaxB,OAXAmD,EAAK,GAAK,WACN,IACI,OAAOiK,EAAGxP,MAAMsF,KAAMpF,UACzB,CACD,MAAOsF,GAGH,MAFAsa,GAAqBta,GACrBqa,KACMra,CACV,CACH,EACDD,EAAK,GAAK+hB,GAA2BhiB,KAAMC,EAAK,GAAIiiB,EAAWhY,EAAIkY,GAC5DW,EAAyBroB,MAAMsF,KAAMC,EAC/C,EACD6iB,EAAY/nB,UAAU2C,oBAAsB,SAAoCwkB,EAAWhY,EAAIkY,GAC3F,GAAkB,mBAAPlY,EACP,OAAO8Y,EAA4BtoB,MAAMsF,KAAMpF,WAInD,IADA,IAAMqF,EAAO,IAAItD,MAAM/B,UAAU0E,QACxBxC,EAAI,EAAGA,EAAIlC,UAAU0E,OAAQxC,IAClCmD,EAAKnD,GAAKlC,UAAUkC,GAGxB,OADAmD,EAAK,GAAKwiB,GAA2BziB,KAAMkiB,EAAWhY,EAAIkY,EAAkBlY,GACrE8Y,EAA4BtoB,MAAMsF,KAAMC,EAClD,CACL,CA7CQgjB,CAAgB7nB,eAAAA,EAAK0nB,YAE7B,CCMA,SAASI,GAAUhb,GACf,IAAMnB,EAAW3L,aAAAA,EAAAA,EAAM8M,GACC,mBAAbnB,IAIX3L,EAAI8M,GAAQ,SAA4BgC,GAGpC,IADA,IAAMjK,EAAO,IAAItD,MAAM/B,UAAU0E,QACxBxC,EAAI,EAAGA,EAAIlC,UAAU0E,OAAQxC,IAClCmD,EAAKnD,GAAKlC,UAAUkC,GAGxB,OADAmD,EAAK,GAIb,SAAciK,GACV,GAAkB,mBAAPA,EAEP,OAAOA,EAEX,OAAO,WACH,IACI,OAAOA,EAAGxP,MAAMsF,KAAMpF,UACzB,CACD,MAAOsF,GAGH,MAFAijB,YAAYjjB,GACZqa,KACMra,CACV,CACH,CACL,CAnBkB0G,CAAKsD,GACRnD,EAASrM,MAAMsF,KAAMC,EAC/B,EACL,CCzBO,SAASmjB,MPiBT,WACH,GAAKhoB,EAAL,CAEA,IAAMioB,EAAgBjoB,EAAIkoB,QAC1BloB,EAAIkoB,QAAU,SAAUrL,EAASsL,EAAUC,EAAYC,EAAcppB,GACjE,GAAIigB,GAEA,OADAA,IAAoB,EACS,mBAAlB+I,EACAA,EAAc3oB,MAAMsF,KAAMpF,gBAErC,EAEJ,IAAIwd,EAAQ/d,GAASA,EAAM+d,MAQ3B,OAPKA,IACDA,EAAQ,MAAQmL,EAAW,IAAMC,EACb,MAAhBC,IACArL,GAAS,IAAMqL,IAGvBhJ,GAAiB,CAAExC,QAAS/a,OAAO+a,GAAUG,MAAAA,IAChB,mBAAlBiL,EACAA,EAAc3oB,MAAMsF,KAAMpF,gBADrC,CAGH,CArBG,CAsBR,COxCI8oB,GJAqC,mBAA1BtoB,aAAG,EAAHA,EAAKiC,mBACZjC,EAAIiC,iBAAiB,qBAAsBgkB,IIC/CwB,KDHG,WACH,GAAI/a,GAAKW,WAAY,CACjB,GAAIrJ,EAEA,YADAhF,EAAK,6HAGT8oB,GAAU,cACVA,GAAU,cACd,CACJ,CCLIS,EACJ,CCRO,SAASC,GAAqB1oB,GACjC,MAAA+L,GAAAA,OrBkD+B,sBqBlDFA,KAAAA,OAAI/L,EAAIuO,cACzC,CACO,SAASoa,GAAsB3oB,GAClC,MAAA+L,GAAAA,OrBiDgC,uBqBjDFA,KAAAA,OAAI/L,EAAIuO,cAC1C,CCCA,IAAMqa,GAAqB,CAAC,MAAO,OAAQ,OAAQ,MAAO,SAAU,UAAW,UAAW,QAAS,SACtFC,GAAoB,SAC1B,SAASC,GAAsBnX,GAClC,OAAOiX,GAAmB5R,SAASrF,EACvC,CACO,SAASoX,GAAyB5U,EAAM1L,GAC3C,IAAMugB,EAAqC,IAAvBvgB,EAASnB,UAC7B2hB,GAAoB9U,EAAMhP,EAAuBY,YAAa0C,EAAUugB,GACxEC,GAAoB9U,EAAMhP,EAAuBU,oBAAqB4C,EAAUugB,GAChFC,GAAoB9U,EAAMhP,EAAuBS,kBAAmB6C,EAAUugB,GAC9EC,GAAoB9U,EAAMhP,EAAuBG,cAAemD,EAAUugB,GAC1EC,GAAoB9U,EAAMhP,EAAuBqB,wBAAyBiC,EAAUugB,GACpFC,GAAoB9U,EAAMhP,EAAuBE,YAAaoD,EAAUugB,GACxEC,GAAoB9U,EAAMhP,EAAuBkB,cAAeoC,EAAUugB,GAC1EC,GAAoB9U,EAAMhP,EAAuBoB,eAAgBkC,EAAUugB,GAC3EC,GAAoB9U,EAAMhP,EAAuBmB,aAAcmC,EAAUugB,EAC7E,CACA,SAASC,GAAoB9U,EAAM+U,EAAczgB,GAA8B,IvCUzCmU,EuCVqBoM,IAAWtpB,UAAA0E,OAAA,QAAAhE,IAAAV,UAAA,KAAAA,UAAA,KAC5CwpB,KAAVzgB,IAC0B,iBAA3BA,EAASygB,IACfF,GAA0C,IAA3BvgB,EAASygB,IAG7BxM,GAAavI,EAAM+U,GvCIetM,EuCJqBnU,EAASygB,GvCKzDlnB,OAAOH,KAAK8I,MAA+B,KAAxBiS,EAAK1Z,QuCJnC,CACO,SAASimB,GAAgBhV,EAAM1L,GAClC,IAAM2gB,EAAgB3gB,EAAS4gB,gBACVjpB,MAAjBgpB,GACA9R,GAAanD,EAAKrH,WtBoBa,0BsBpBwBsc,EAE/D,CAOO,SAASE,GAAenV,EAAMhV,GAAO,IAAAoqB,EACxCvM,GAAgB7I,EAAMhV,GACtB,IAAMqqB,EAA6B,WAAjB/lB,EAAOtE,IAAsBA,EAAmBoqB,QAAdA,EAAIpqB,EAAM6N,YAAIuc,IAAAA,EAAAA,EAAmB,MAAdpqB,EAAMmd,KAAeta,OAAO7C,EAAMmd,MAAQ,QAAY,QAC7HhF,GAAanD,EAAKrH,WAAYyI,GAAYiU,GAC1CtV,GAASqI,GAAQpI,EdxBd,SAA2BnP,GAC9B,MAAO,CACHsX,KR+DyB,EQ9DzBS,QAAS/X,GAAkB,WAAbvB,EAAOuB,IAAkB,YAAaA,EAAIA,EAAE+X,QAAU/a,OAAOgD,GAEnF,CcmB2BykB,CAAkBtqB,QAAQiB,GACrD,CAKO,SAASspB,GAAevV,GAC3BmD,GAAanD,EAAKrH,WtBpCe,+BsBoCoB,GACrDoH,GAASqI,GAAQpI,OAAM/T,OAAWA,GACtC,CACO,SAASupB,GAAyB9e,GACrC,IAAM+e,EAAgB,GAGtB,GAFwB1e,GAAaL,GAEhB,CAIjB,GAFA+e,EAAczf,KAAK,eAEfyC,GAAKid,YAAa,CAAA,IACuB3gB,EADvBC,EAAAC,EACOwD,GAAKid,aAAW,IAAzC,IAAA1gB,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAA2C,CAAA,IAAhCugB,EAAU5gB,EAAAM,MACO,gBAApBsgB,EAAW9hB,MAA2B4hB,EAAc5S,SAAS8S,EAAW9hB,OACxE4hB,EAAczf,KAAK2f,EAAW9hB,KAEtC,CAAC,CAAA,MAAA0B,GAAAP,EAAAnE,EAAA0E,EAAA,CAAA,QAAAP,EAAAQ,GAAA,CACL,CACA,OAAOigB,CACX,CAEA,GAAIhd,GAAKid,YAAa,CAAA,IACuB5G,EADvBC,EAAA9Z,EACOwD,GAAKid,aAAW,IAAzC,IAAA3G,EAAA7Z,MAAA4Z,EAAAC,EAAA5Z,KAAAC,MAA2C,CAAA,IAAhCugB,EAAU7G,EAAAzZ,MACbyE,GAAW6b,EAAWzR,MAAOxN,KAExB+e,EAAc5S,SAAS8S,EAAW9hB,OACnC4hB,EAAczf,KAAK2f,EAAW9hB,MAG1C,CAAC,CAAA,MAAA0B,GAAAwZ,EAAAle,EAAA0E,EAAA,CAAA,QAAAwZ,EAAAvZ,GAAA,CACD,OAAOigB,CACX,CACA,MAAO,EACX,CACO,SAASG,GAA2B/a,EAAIuK,EAAKpF,EAAM6V,GAAO,IACrCzG,EADqCC,EAAApa,EAC1C4gB,GAAK,IAAxB,IAAAxG,EAAAna,MAAAka,EAAAC,EAAAla,KAAAC,MAA0B,CACT,SADFga,EAAA/Z,MAEPgQ,GAA+BxK,EAAIuK,EAAKpF,GAGxCmF,GAA8BtK,EAAIuK,EAAKpF,EAE/C,CAAC,CAAA,MAAAzK,GAAA8Z,EAAAxe,EAAA0E,EAAA,CAAA,QAAA8Z,EAAA7Z,GAAA,CACL,CCjFA,SAASsgB,GAAUpe,GACf,OAAA,WAAA,IAAAqe,EAAAxa,EAAAC,IAAAC,MAAO,SAAAsB,EAAwCiZ,EAAOC,GAAI,IAAAC,EAAAC,EAAAC,EAAAC,EAAAza,EAAA0a,EAAAC,EAAAvW,EAAAwW,EAAAC,EAAAC,EAAA,OAAAlb,IAAAjE,MAAA,SAAA2F,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,KAAA,EAkBM,GAjBxD+Z,EAAaF,EAAK9Y,EAAAhB,KAAA,EAIdqa,EAAaN,EAAOxqB,OAAOkrB,OAAO,CAAE,EAAEV,GAAQA,EAC9Cra,EAAO,KACP2a,SAAAA,EAAY3a,OACZA,EAAO2a,EAAW3a,KAClB2a,EAAW3a,UAAO3P,GAEtBkqB,EAAU,IAAIS,QAAQZ,EAAOO,GACzB3a,GAAQ2a,IACRA,EAAW3a,KAAOA,GAKtBsa,EAAaF,aAAiBY,QAAUT,EAAUH,GAC9C7b,GAAagc,EAAQzf,KAAI,CAAAwG,EAAAf,KAAA,GAAA,KAAA,CAGzB,OAFAtR,uEAAK+M,OAAsEue,EAAQzf,MAEnFwG,EAAAK,OAAA,SACO7F,EAASwe,EAAYD,IAAK,KAAA,GAErCG,EAAkBS,GAAab,EAAOC,EAAME,EAASI,GAAYrZ,EAAAf,KAAA,GAAA,MAAA,KAAA,GAGrB,OAHqBe,EAAAhB,KAAA,GAAAgB,EAAAa,GAAAb,EAAA,MAAA,GAGjErS,EAAM,kCAAiCqS,EAAAa,IAAKb,EAAAK,OAAA,SACrC7F,EAASwe,EAAYD,IAAK,KAAA,GAEQ,OAArCM,GAF6BD,EAEaF,GAA1CG,WAAYvW,EAAIsW,EAAJtW,KAAMwW,EAAmBF,EAAnBE,oBAAmBtZ,EAAAhB,KAAA,GAAAgB,EAAAf,KAAA,GAEdzE,EAASwe,EAAYK,GAAW,KAAA,GACvB,OAD9BE,EAAYvZ,EAAAR,KAClBoa,GAAgB9W,EAAMyW,GAAcvZ,EAAAK,OAC7BwZ,SAAAA,GAAaN,EAAche,GAAK5D,sCAAsC,WAAA,OAAM2hB,EAAoBzjB,KAAO,IAAA,SAAClC,GAAM,IAAAmmB,EACjHR,EAAoBvjB,SACT+jB,QAAXA,EAAIb,aAAOa,GAAQA,QAARA,EAAPA,EAASC,kBAAMD,GAAfA,EAAiBE,QACjB3B,GAAevV,GAGfmV,GAAenV,EAAMnP,EAE7B,KAAE,KAAA,GASD,MATCqM,EAAAhB,KAAA,GAAAgB,EAAAia,GAAAja,EAAA,MAAA,IAGFsZ,EAAoBvjB,SACTyjB,QAAXA,EAAIP,aAAOO,GAAQA,QAARA,EAAPA,EAASO,kBAAMP,GAAfA,EAAiBQ,QACjB3B,GAAevV,GAGfmV,GAAenV,EAAI9C,EAAAia,IACtBja,EAAAia,GAAA,KAAA,GAAA,IAAA,MAAA,OAAAja,EAAAe,OAAA,GAAAlB,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,CAAA,GAAA,UApDqC,OAuD7C,SAvD6C3B,EAAAC,GAAA,OAAA0a,EAAA1qB,MAAAsF,KAAApF,UAAA,CAAA,CAA9C,EAwDJ,CACA,SAASsrB,GAAab,EAAOC,EAAME,EAASI,GAAY,IAAAa,EAC9C1gB,EAAMyf,EAAQzf,IAGd2gB,EAA+B,QAAjBD,EAAGjB,EAAQ3Y,cAAM,IAAA4Z,EAAAA,EAAI,MACnCE,EAAoB3C,GAAsB0C,GAE1C7Z,EADqCmX,GAAsB0C,EAAeE,eAC5BF,EAAeE,cAAgB7C,GAC7E1U,EAAOyH,GAAS,QAAA7P,OAAS4F,IAC/ByM,GAAoBjK,EAAKrH,YACzBqQ,GAAiBhJ,EAAKrH,WAAYjC,GA6CtC,SAA8Bsf,EAAOC,GACjC,IAEQ,aACP,CACD,MAAOplB,GACHhG,EAAM,iDAAkDgG,EAAGmlB,EAAOC,EACtE,CACJ,CApDIuB,CAAqBxB,EAAOC,GAC5B9S,GAAanD,EAAKrH,WAAY2I,GAAqB9D,GAC9C8Z,GACDnU,GAAanD,EAAKrH,WAAY4I,GAA8B8V,GAEhE,IAEiCI,EAF3BC,EAAkBlC,GAAyB9e,GACbghB,EAAgBznB,OAAS,IAE3C,QAAdwnB,EAAIlB,SAAAkB,IAAUA,GAAVA,EAAYza,SAEZuZ,EAAWvZ,QAAU,IAAI2a,QAAQpB,EAAWvZ,SAC5C4Y,GAA2BW,EAAWvZ,QAAQ4a,OAAQrB,EAAWvZ,QAASgD,EAAM0X,IAE3E1B,aAAiBY,QACtBhB,GAA2BO,EAAQnZ,QAAQ4a,OAAQzB,EAAQnZ,QAASgD,EAAM0X,IAGrEnB,IACDA,EAAa,CAAE,GAEnBA,EAAWvZ,QAAU,IAAI2a,QACzB/B,GAA2BW,EAAWvZ,QAAQ4a,OAAQrB,EAAWvZ,QAASgD,EAAM0X,KAGxFG,GAAsB1B,EAAQnZ,QAASgD,GAAM,SAAChI,GAAC,OAAKuc,GAAqBvc,MACzE,IAAMwe,EAAsB7jB,EAA2B,CAEnDkD,gBAAiB,SAAFiH,GAAA,IAAKgb,EAAahb,EAAbgb,cAAejf,EAAIiE,EAAJjE,KAAI,OAA0B,UAAlBif,GAA+C,mBAAlBA,IAAuCjf,IAASpC,GAASC,GAAKI,IAAI,EAC9I1C,yBAA0BqE,GAAKa,gCAC/BzE,qCAAsC4D,GAAK5D,qCAC3ChC,MAAO,SAAFmQ,GAA8B,IAAzBhQ,EAAQgQ,EAARhQ,SAAUsB,EAAQ0O,EAAR1O,SACZA,IACAsgB,GAAyB5U,EAAM1L,GAC/B0gB,GAAgBhV,EAAM1L,IAG1ByL,GAASqI,GAAQpI,OAAM/T,EAAsB,IAAX+G,GACtC,IAGJ,OADAwjB,EAAoB1jB,QACb,CAAEyjB,WAAAA,EAAYvW,KAAAA,EAAMwW,oBAAAA,EAC/B,CAyBA,SAASqB,GAAsB7a,EAASgD,EAAM+X,GAC1C,IACI,IAAKtf,GAAKc,iBAAiBtJ,OACvB,OACJ+M,EAAQlH,SAAQ,SAACT,EAAOxJ,GAChB4M,GAAKc,iBAAiBye,MAAK,SAACC,GAAG,OAAKA,EAAIhe,KAAKpO,EAAI,KACjDsX,GAAanD,EAAKrH,WAAYof,EAAgBlsB,GAAMwJ,EAE5D,GACH,CACD,MAAOxE,GACHhG,EAAM,iCAAkCgG,EAC5C,CACJ,CACA,SAASimB,GAAgB9W,EAAM/C,GAC3B,IAAMY,EAASZ,EAASY,OACxB8K,GAAc3I,EAAMnC,GAAU,KAAOA,EAAS,IvBjFjB,EAEA,GuBgFd,IAAXA,GACAsF,GAAanD,EAAKrH,WAAYyI,GAAYnE,EAASpJ,MAEvDsP,GAAanD,EAAKrH,WAAY6I,GAA2B3T,OAAOgQ,IAChEga,GAAsB5a,EAASD,QAASgD,GAAM,SAAChI,GAAC,OAAKwc,GAAsBxc,KAC/E,CAQA,SAAS+e,GAAamB,EAAkBC,EAAeC,EAAQC,GAG3D,IAmEyBpb,EACnBY,EApEFya,EAAa9rB,EAAKkC,MAChBkN,EAAOsc,EAAiBtc,KAE9B,KAAKA,IAgEoBqB,EAhESib,EAiE5Bra,EAASZ,EAASY,OACjBA,GAAU,KAAiB,KAAVA,GAA2B,KAAVA,GAA2B,KAAVA,IAhEtD,OADAua,IACOF,EAEX,IAAIK,GAAW,EACTC,EAAa,SAACC,GACZF,IAEJH,EAAOK,GACPF,GAAW,EACd,EACKG,EAAc,SAAC7nB,GACb0nB,IAEJF,EAAQxnB,GACR0nB,GAAW,EACd,EACGI,EAAiChpB,GAAW,WAAA,OAAM6oB,EAAWF,EAAW,GAAEH,GACxES,EAAShd,EAAKid,YACdra,EAAS,IAAIsa,eAAe,CACxBC,KAAAA,SAAKC,GAAY,OAAAzd,EAAAC,IAAAC,eAAAC,IAAA,IAAAud,EAAA5jB,EAAA,OAAAmG,IAAAjE,MAAA,SAAA0E,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAE8B,OAF9BF,EAAAC,KAAA,EAEftM,EAAa+oB,GAAgC1c,EAAAE,KAAA,EACfyc,EAAOM,OAAM,KAAA,EAAAD,EAAAhd,EAAAS,KAAnCrH,EAAK4jB,EAAL5jB,MAAW4jB,EAAJ7jB,MAEXwjB,EAAOO,cACPH,EAAWI,QACXZ,MAGAF,EAAa9rB,EAAKkC,MAClBiqB,EAAiChpB,GAAW,WAAA,OAAM6oB,EAAWF,EAAW,GAAEH,GAC1Ea,EAAWK,QAAQhkB,IACtB4G,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAA8B,GAAA9B,EAAA,MAAA,GAGDyc,EAAWzc,EAAA8B,IACXib,EAAWhuB,MAAKiR,EAAA8B,IAChB,IACI6a,EAAOO,aACV,CACD,MAAAlsB,GAOI,CACH,KAAA,GAAA,IAAA,MAAA,OAAAgP,EAAAgC,OAAA,GAAAvC,EAAA,KAAA,CAAA,CAAA,EAAA,KAAA,IA7BcH,EA+BtB,EACDtI,OAAAA,SAAOif,GAGH,OAFAtiB,EAAa+oB,GACbH,IACOI,EAAO3lB,OAAOif,EACzB,IAEJ,OAAO,IAAItT,SAASJ,EAAQ,CACxBX,OAAQqa,EAAiBra,OACzBC,WAAYoa,EAAiBpa,WAC7Bd,QAASkb,EAAiBlb,SAElC,CClPA,IAIIsc,GAJEC,GAAYpiB,OAAO,iBAezB,SAASqiB,GAAS9hB,GACd,OAAO,SAAU8F,EAAQ9G,GAAc,IAAA1G,IAAAA,EAAAzE,UAAA0E,OAANwpB,MAAInsB,MAAA0C,EAAAA,EAAAA,OAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAJspB,EAAItpB,EAAA5E,GAAAA,UAAA4E,GACjC,IAAIupB,GAAYlc,EAAQ9G,GAAGkB,OAAK6hB,GAChC,IAGIC,EAAYlc,CAAAA,EAAQmc,GAAOhpB,KAAM6M,EAAQ9G,IAAIkB,OAAK6hB,EACrD,CACD,MAAO5oB,GAGHF,KAAK4oB,SAAattB,EAClBpB,EAAM,2CAA4CgG,EACtD,CACA,OAAO6G,EAASrM,MAAMsF,KAAM+oB,EAC/B,CACL,CACA,SAASC,GAAOC,EAAKpc,EAAQ9G,GAMzB,IAAMmjB,EAAgBD,EAAIL,IACtBM,SAAAA,EAAe7Z,OAAS6Z,EAAcC,WAsM9C,SAAiCF,EAAKG,GAElCA,EAAMD,WAAY,EAClB,IAAI,IAAAE,EAAAC,EACyD7K,EADzDC,EAAApa,EACmDglB,QADnDA,EACoCF,EAAMG,iBAASD,IAAAA,EAAAA,EAAI,IAAE,IAAzD,IAAA5K,EAAAna,MAAAka,EAAAC,EAAAla,KAAAC,MAA2D,CAAA,IAAA+kB,EAAAlX,EAAAmM,EAAA/Z,MAAA,GACvDhH,EAAoBurB,EADHO,EAAA,GAAUA,EAAA,GAE/B,CAAC,CAAA,MAAA5kB,GAAA8Z,EAAAxe,EAAA0E,EAAA,CAAA,QAAA8Z,EAAA7Z,GAAA,CACwB,QAAzBwkB,EAAAD,EAAMvD,2BAAmB,IAAAwD,GAAzBA,EAA2B/mB,SACvB8mB,EAAM/Z,MAENuV,GAAewE,EAAM/Z,KAE5B,CACD,MAAOlM,GACH,CAER,CArNQsmB,CAAwBR,EAAKC,GAEjC,IAAMQ,EAAYxsB,OAAO6I,GAInB4jB,EAAc7jB,GAAS4jB,GAAWvjB,KAClCugB,EAAiBxpB,OAAO2P,QAAAA,EAAU,OAElC+c,EADqC5F,GAAsB0C,EAAeE,eAClBF,EAAeE,cAAgB7C,GAa7F,OATAkF,EAAIL,IAAa,CACb/b,OAAQ+c,EACRlD,eAAAA,EACAC,kBAAmB3C,GAAsB0C,GACzC3gB,IAAK4jB,EACLE,QAASrgB,GAAamgB,GACtB5C,gBAAiBlC,GAAyB8E,GAC1CR,WAAW,GAERO,CACX,CACA,SAASI,GAAqB/iB,GAI1B,OADA4hB,GAA2B5hB,EACpB,SAAUmB,EAAMxD,GACnBqC,EAAS5L,KAAK6E,KAAMkI,EAAMxD,GAC1B,KAQR,SAA4BukB,EAAK/gB,EAAMxD,GAAO,IAAAqlB,EACpCX,EAAQH,EAAIL,IAClB,IAAKQ,GAASA,EAAMS,QAChB,OAGJ,IAAMG,EAAY9hB,EAAKuB,cAWL,gBAAdugB,GAA6C,oBAAdA,IAC/BZ,EAAMa,eAAgB,GAI1B,GAAqC,IAAjCniB,GAAKc,iBAAiBtJ,OACtB,OACJ,IAAKwI,GAAKc,iBAAiBye,MAAK,SAACC,GAAG,OAAKA,EAAIhe,KAAK0gB,EAAU,IACxD,OACJ,IAAM3d,EAAuC,QAAhC0d,EAAIX,EAAMc,8BAAsB,IAAAH,EAAAA,EAA5BX,EAAMc,uBAA2B,CAAG,EAGrD7d,EAAQ2d,GAAaA,KAAa3d,EAAOpF,GAAAA,OAAMoF,EAAQ2d,GAAU,MAAA/iB,OAAKvC,GAAUA,CACpF,CArCYylB,CAAmBnqB,KAAMkI,EAAMxD,EAClC,CACD,MAAOxE,GACHhG,EAAM,uDAAwDgG,EAClE,CACH,CACL,CAgCA,SAASkqB,GAASrjB,GACd,OAAO,SAAUkE,GACb,IAAMme,EAAQppB,KAAK4oB,IACnB,IAAKQ,GAASA,EAAMS,QAIhB,OAHIT,SAAAA,EAAOS,SACP3vB,2EAAK+M,OAA0EmiB,EAAMrjB,MAElFgB,EAAS5L,KAAK6E,KAAMiL,GAE/B,GAAIme,EAAMa,cAEN,OADA/vB,sGAAK+M,OAAqGmiB,EAAMrjB,MACzGgB,EAAS5L,KAAK6E,KAAMiL,GAK/B,GAAIme,EAAM/Z,OAAS+Z,EAAMD,UACrB,OAAOpiB,EAAS5L,KAAK6E,KAAMiL,GAE/B,KAwCR,SAAgBge,EAAKG,GACjB,IAAM/Z,EAAOyH,GAAS7P,QAAAA,OAASmiB,EAAMvc,SACrCyM,GAAoBjK,EAAKrH,YACzBqQ,GAAiBhJ,EAAKrH,WAAYohB,EAAMrjB,KACxCyM,GAAanD,EAAKrH,WAAY2I,GAAqByY,EAAMvc,QACpDuc,EAAMzC,mBACPnU,GAAanD,EAAKrH,WAAY4I,GAA8BwY,EAAM1C,gBAGtE,GADA0C,EAAM/Z,KAAOA,EACT+Z,EAAMrC,gBAAgBznB,OAAS,EAC/B,IACI2lB,IAA2B,SAAC/c,EAAMxD,GAAK,OAAMikB,SAAAA,GAA4BM,EAAIoB,kBAAkBlvB,KAAK8tB,EAAK/gB,EAAMxD,EAAM,GAAEukB,EAAK5Z,EAAM+Z,EAAMrC,gBAC3I,CACD,MAAO7mB,GAIHhG,EAAM,2DAA4DgG,EACtE,CAIJ,GAAIkpB,EAAMc,uBACN,IAAAI,IAAAA,IAAAC,EAA4BzvB,OAAOsX,QAAQgX,EAAMc,wBAAuBI,EAAAC,EAAAjrB,OAAAgrB,IAAE,CAArE,IAAAE,EAAAlY,EAAAiY,EAAAD,GAAA,GAAOpiB,EAAIsiB,EAAA,GAAE9lB,EAAK8lB,EAAA,GACnBhY,GAAanD,EAAKrH,WAAY4b,GAAqB1b,GAAOxD,EAC9D,CAEJ,IAAMmhB,EAAsB7jB,EAA2B,CACnDkD,gBAAiB,SAAFiH,GAAA,IAAKgb,EAAahb,EAAbgb,cAAejf,EAAIiE,EAAJjE,KAAI,MAAyB,mBAAlBif,GAAsCjf,IAASkhB,EAAMrjB,GAAG,EACtGtC,yBAA0BqE,GAAKa,gCAC/BzE,qCAAsC4D,GAAK5D,qCAC3ChC,MAAO,SAAFmQ,GAA8B,IAAzBhQ,EAAQgQ,EAARhQ,SAAUsB,EAAQ0O,EAAR1O,SACZA,IACAsgB,GAAyB5U,EAAM1L,GAC/B0gB,GAAgBhV,EAAM1L,IAE1ByL,GAASqI,GAAQpI,OAAM/T,EAAsB,IAAX+G,GACtC,IAEJ+mB,EAAMvD,oBAAsBA,EAC5BA,EAAoB1jB,QAIpBinB,EAAMG,UAAY,CACd,CACI,QACA,WACIH,EAAMqB,YAAc,OACxB,GAEJ,CACI,UACA,WACIrB,EAAMqB,YAAc,SACxB,GAEJ,CACI,QACA,WACIrB,EAAMqB,YAAc,OACxB,GAEJ,CAAC,UAAW,WAAA,OAoCpB,SAAmBxB,EAAKG,GAAO,IAAAsB,EAC3B,GAAItB,EAAMD,UACN,OACJC,EAAMD,WAAY,EAElB,IACyDlJ,EADzDC,EAAA5b,EACmDomB,QADnDA,EACoCtB,EAAMG,iBAASmB,IAAAA,EAAAA,EAAI,IAAE,IAAzD,IAAAxK,EAAA3b,MAAA0b,EAAAC,EAAA1b,KAAAC,MAA2D,CAAA,IAAAkmB,EAAArY,EAAA2N,EAAAvb,MAAA,GACvDhH,EAAoBurB,EADH0B,EAAA,GAAUA,EAAA,GAE/B,CAAC,CAAA,MAAA/lB,GAAAsb,EAAAhgB,EAAA0E,EAAA,CAAA,QAAAsb,EAAArb,GAAA,CACD,IAAMwK,EAAO+Z,EAAM/Z,KACnB,IAAKA,EACD,OACJ,IAAMwW,EAAsBuD,EAAMvD,oBAClC,GAA0B,UAAtBuD,EAAMqB,YAGN,OAFA5E,SAAAA,EAAqBvjB,cACrBsiB,GAAevV,GAGnB,IAAInC,EAAS,EACb,IACIA,EAAS+b,EAAI/b,MAChB,CACD,MAAO/J,GAEH+J,EAAS,CACb,CACA,GAA0B,UAAtBkc,EAAMqB,aAAiD,YAAtBrB,EAAMqB,aAAwC,IAAXvd,EAAc,CAAA,IAAA0d,EAMlF,OALA/E,SAAAA,EAAqBvjB,cAIrBkiB,GAAenV,EAAM,CAAEnH,KAHc,QAApB0iB,EAAGxB,EAAMqB,mBAAW,IAAAG,EAAAA,EAAI,QAGC3S,QAAOhR,0BAAAA,OAA4BmiB,EAAMrjB,MAEvF,CACAiS,GAAc3I,EAAMnC,GAAU,KAAOA,EAAS,IxB/NjB,EAEA,GwB8N7BsF,GAAanD,EAAKrH,WAAY6I,GAA2B3T,OAAOgQ,IAIpE,SAAmC+b,EAAK5Z,GACpC,IACI,IAAKvH,GAAKc,iBAAiBtJ,OACvB,OACJ,IAAMurB,EAAM5B,EAAI6B,wBAChB,IAAKD,EACD,OACJA,EACK7U,MAAM,SACNjS,QAAO,SAACgnB,GAAI,OAAKA,EAAKzrB,OAAS,CAAC,IAChC6F,SAAQ,SAAC4lB,GACV,IAAMC,EAAiBD,EAAKE,QAAQ,KACpC,IAAwB,IAApBD,EAAJ,CAEA,IAAM9iB,EAAO6iB,EAAKpjB,UAAU,EAAGqjB,GAAgBlX,OACzCpP,EAAQqmB,EAAKpjB,UAAUqjB,EAAiB,GAAGlX,OAC7ChM,GAAKc,iBAAiBye,MAAK,SAACC,GAAG,OAAKA,EAAIhe,KAAKpB,EAAK,KAClDsK,GAAanD,EAAKrH,WAAY6b,GAAsB3b,GAAOxD,EAJ3D,CAMR,GACH,CACD,MAAOxE,GACHhG,EAAM,0CAA2CgG,EACrD,CACJ,CA3BIgrB,CAA0BjC,EAAK5Z,GAC/BwW,SAAAA,EAAqBzjB,KACzB,CA1E0B+oB,CAAUlC,EAAKG,EAAM,IACzC,IACiDjL,EADjDC,EAAA9Z,EACkC8kB,EAAMG,WAAS,IAAnD,IAAAnL,EAAA7Z,MAAA4Z,EAAAC,EAAA5Z,KAAAC,MAAqD,CAAA,IAAA2mB,EAAA9Y,EAAA6L,EAAAzZ,MAAA,GAAzCnH,EAAS6tB,EAAA,GAAEC,EAAQD,EAAA,GAC3B/tB,EAAiB4rB,EAAK1rB,EAAW8tB,EACrC,CAAC,CAAA,MAAAzmB,GAAAwZ,EAAAle,EAAA0E,EAAA,CAAA,QAAAwZ,EAAAvZ,GAAA,CACL,CA3GYymB,CAAOtrB,KAAMopB,EAChB,CACD,MAAOlpB,IA2Hf,SAA2B+oB,EAAKG,GAC5B,IAAI,IAAAmC,EAAAC,EACyB,QAAzBD,EAAAnC,EAAMvD,2BAAmB,IAAA0F,GAAzBA,EAA2BjpB,SAAS,IACqBgd,EADrBC,EAAAjb,EACeknB,QADfA,EACApC,EAAMG,iBAASiC,IAAAA,EAAAA,EAAI,IAAE,IAAzD,IAAAjM,EAAAhb,MAAA+a,EAAAC,EAAA/a,KAAAC,MAA2D,CAAA,IAAAgnB,EAAAnZ,EAAAgN,EAAA5a,MAAA,GACvDhH,EAAoBurB,EADHwC,EAAA,GAAUA,EAAA,GAE/B,CAAC,CAAA,MAAA7mB,GAAA2a,EAAArf,EAAA0E,EAAA,CAAA,QAAA2a,EAAA1a,GAAA,CACJ,CACD,MAAO1B,GACH,CAGJimB,EAAM/Z,UAAO/T,CACjB,CAtIYowB,CAAkB1rB,KAAMopB,GACxBlvB,EAAM,2CAA4CgG,EACtD,CACA,IACI,OAAO6G,EAAS5L,KAAK6E,KAAMiL,EAC9B,CACD,MAAO/K,GAKH,MAIZ,SAAgC+oB,EAAKG,EAAO/uB,GACxC,GAAI+uB,EAAMD,UACN,OACJC,EAAMD,WAAY,EAClB,IAAI,IAAAwC,EAAAC,EAAAC,EACyDznB,EADzDC,EAAAC,EACmDunB,QADnDA,EACoCzC,EAAMG,iBAASsC,IAAAA,EAAAA,EAAI,IAAE,IAAzD,IAAAxnB,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAA2D,CAAA,IAAAqnB,EAAAxZ,EAAAlO,EAAAM,MAAA,GACvDhH,EAAoBurB,EADH6C,EAAA,GAAUA,EAAA,GAE/B,CAAC,CAAA,MAAAlnB,GAAAP,EAAAnE,EAAA0E,EAAA,CAAA,QAAAP,EAAAQ,GAAA,CACwB,QAAzB8mB,EAAAvC,EAAMvD,2BAAmB,IAAA8F,GAAzBA,EAA2BrpB,SAC3B,IAAM+M,EAAO+Z,EAAM/Z,KACnB,IAAKA,EACD,OACJ,IAAMob,EAA+B,QAApBmB,EAAGxC,EAAMqB,mBAAW,IAAAmB,EAAAA,EAAqB,kBAAhBvxB,aAAK,EAALA,EAAO6N,MAA0B,UAAY,QACvFgQ,GAAgB7I,EAAMhV,QAAAA,EAAS,CAAE6N,KAAMuiB,EAAaxS,QAAOhR,0BAAAA,OAA4BmiB,EAAMrjB,OAC7FyM,GAAanD,EAAKrH,WAAYyI,GAAYga,GAC1Crb,GAASqI,GAAQpI,EAAM,CAAEmI,KxBlFA,EwBkFyBS,QAAOhR,0BAAAA,OAA4BmiB,EAAMrjB,WAASzK,GACvG,CACD,MAAO6H,GACH,CAER,CAzBY4oB,CAAuB/rB,KAAMopB,EAAOlpB,GAC9BA,CACV,CACH,CACL,CChJA,SAAS8rB,GAAwB/pB,GAAM,IAAA0Q,EAAAsZ,EAC7BjkB,EAAa,GACnBwK,GAAaxK,EAAY4H,GAAYkB,GAAYC,WAC7C9O,EAAKiqB,gBACLpxB,OAAOsX,QAAQnQ,EAAKiqB,gBAAgB/mB,SAAQ,SAAAgH,GAAA,IAAAkG,EAAAC,EAAAnG,EAAA,GAAEjR,EAAGmX,EAAA,GAAE3N,EAAK2N,EAAA,GAAA,OAAMG,GAAaxK,EAAY9M,EAAKwJ,MAEhG4U,GAAoBtR,EAAY,CAAEjC,IAAK9D,EAAK8D,MAE5C0M,GAAczK,EAAY/F,EAAKkqB,kBAC/B,IAAMlL,EAAiB,GACvBzO,GAAayO,EAAgB,QAAiC,QAA1BtO,UAAAsZ,EAAEhqB,EAAKmqB,aAAK,IAAAH,EAAAA,EAAI1wB,aAAG,EAAHA,EAAK6wB,aAAK,IAAAzZ,EAAAA,EAAIhN,IAC9DpK,SAAAA,EAAK8wB,UACL7Z,GAAayO,EAAgB,WAAY1lB,EAAI8wB,UAEjD7Z,GAAayO,EzBmDa,OyBnDmBhf,EAAKqqB,cAC9CrqB,EAAKsqB,aACL/Z,GAAayO,EzBsDiB,eyBtDuBhf,EAAKsqB,aAE9D,IAAMpd,EAAM,CACR4I,aAAc9V,EAAK8V,aACnB/P,WAAYA,EACZgT,eAAgB7J,GAAeI,KAC/B0J,aAAc,OACdhQ,KAAM,CACFiW,YAAa,CACTlP,OAAQiP,KAIduL,EAAepZ,KACjBoZ,IACArd,EAAImF,QAAUkY,EAAalY,QAC3BnF,EAAIoF,OAASiY,EAAajY,QAE9BrF,GAAQC,EACZ,CACO,SAASsd,GAAsB1U,EAAchS,EAAK2mB,EAASC,GAC9D,IAAMC,EA1CV,SAAyB7mB,GAAK,IAAA8mB,EAAAC,EAAAC,EAC1B,OAAKhnB,GAEsD,QAA3D8mB,EAAoDC,QAApDA,GAAOC,EAAAjlB,GAAKgB,yBAAwBkkB,wBAA7BF,IAA6CA,OAA7CA,EAAAA,EAAA3xB,KAAA4xB,EAAgDhnB,UAAI,IAAA8mB,EAAAA,EADhD,CAAE,CAEjB,CAsCiBI,CAAgBlnB,GAC7BimB,GAAwB,CACpBjU,aAAAA,EACAhS,IAAAA,EACAqmB,MAAOQ,EAAKR,MACZF,eAAgBU,EAAK5kB,WACrBskB,aAAcI,EAAUhb,GAAgCA,GACxD6a,YAAaI,EAAWhb,GAAwCA,IAExE,CCxBA,SAASub,KACL,IAAMnZ,EAAK3Y,eAAAA,EAAKU,YAAYqE,iBAAiB,cAAc,GAC3D,GAAK4T,EAAL,CAIA,IAAM/L,EAAa,GACnBwK,GAAaxK,EAAY4H,GAAYkB,GAAYE,mBACjD,IAAMiQ,EAAiB,GACvBzO,GAAayO,EAAgB,OAAQlN,EAAG7L,MACxCilB,GAAoBlM,EAAgBlN,EAAI,kBACxCoZ,GAAoBlM,EAAgBlN,EAAI,cACxCoZ,GAAoBlM,EAAgBlN,EAAI,gBACxCoZ,GAAoBlM,EAAgBlN,EAAI,iBACxCoZ,GAAoBlM,EAAgBlN,EAAI,kBACxCoZ,GAAoBlM,EAAgBlN,EAAI,4BACxCoZ,GAAoBlM,EAAgBlN,EAAI,eACxCoZ,GAAoBlM,EAAgBlN,EAAI,gBACxCoZ,GAAoBlM,EAAgBlN,EAAI,gBACxCoZ,GAAoBlM,EAAgBlN,EAAI,mBACxCoZ,GAAoBlM,EAAgBlN,EAAI,mBACxC,IAAM5E,EAAM,CACR4I,aAAcqV,KACdplB,WAAYA,EACZgT,eAAgB7J,GAAeI,KAC/B0J,aAAc,OACdhQ,KAAM,CACFiW,YAAa,CACTlP,OAAQiP,KAIpB3H,GAAoBnK,EAAInH,YACxB,IAAMwkB,EAAepZ,KACjBoZ,IACArd,EAAImF,QAAUkY,EAAalY,QAC3BnF,EAAIoF,OAASiY,EAAajY,QAE9BrF,GAAQC,EAjCR,MAFIjV,EAAM,sEAoCd,CACA,SAASizB,GAAoBnlB,EAAY+L,EAAIsZ,GAEzC,IAAM3oB,EAAQqP,EAAGsZ,GACI,iBAAV3oB,GAAuByR,MAAMzR,IACpC8N,GAAaxK,EAAYqlB,EAAOC,OAAOC,UAAU7oB,GAASA,EAAQkB,GAAmBlB,GAE7F,CACA,SAAS0oB,KACL,OAAO3uB,EAAU1B,KAAK8I,MAAMzH,KAChC,CC/EA,IAAIovB,GAAkB,CAAE,EACpBC,IAA2B,EAC3BC,IAA6B,EAoCjC,SAASC,KAELC,GAAYxyB,aAAG,EAAHA,EAAKQ,SAASuK,KAC9B,CACA,SAAS0nB,GAAavM,GAClBsM,GAAYtM,EAAMwM,OACtB,CACA,SAASF,GAAY7nB,EAAK4mB,GAmB1B,IAA0BoB,EAlBtB,GAAKhoB,EAEL,IACI,IAAMioB,EAAY,IAAI/nB,IAAIF,EAAK3K,eAAAA,EAAKQ,SAASuK,QAe3B4nB,EAdGC,GAeVxhB,WAAaghB,GAAgBxiB,MACvC0iB,IAA8BK,EAAO7U,SAAWsU,GAAgBtU,QAChEuU,IAA4BM,EAAO9U,OAASuU,GAAgBvU,QAhBzDgV,GAAsBD,GACtBvB,GAAsBvuB,IAAY8vB,GAAW,EAAMxL,QAAQmK,IAElE,CACD,MAAOzsB,GACHhG,EAAM,8BAA+BgG,EACzC,CACJ,CACA,SAAS+tB,GAAsBloB,GAC3BynB,GAAgBxiB,KAAOjF,EAAIyG,SAC3BghB,GAAgBtU,OAASnT,EAAImT,OAC7BsU,GAAgBvU,KAAOlT,EAAIkT,IAC/B,CChEO,SAASiV,MFUT,WACH,IACIzB,GAAsBW,KAAyBhyB,SAAAA,EAAKQ,SAASuK,KAAO,IAAIF,IAAI7K,aAAAA,EAAAA,EAAKQ,SAASuK,WAAQ7K,EACrG,CACD,MAAO4E,GACH7F,EAAM,6CAA8C6F,EACxD,CACA,GAAwB,cAApB3E,aAAG,EAAHA,EAAK4yB,YACL,OAAOjB,KAEP9xB,GACAiC,EAAiBjC,EAAK,QAAQ,WAG1B4D,WAAWkuB,GAAU,EACzB,GAER,CE1BIkB,GDSG,WAA8C,IAAAvB,EAAAC,EAAAC,EAAAsB,EACjD,GAAKjzB,GAAQA,EAAIkzB,SAIjB,GAAKxmB,GAAKgB,wBAAwBC,sBAAlC,CAGA2kB,WAA0Bb,EAA4CC,QAA5CA,EAAGhlB,GAAKgB,wBAAwBE,wBAAY8jB,SAAzCA,EAA2C5a,SAAS,iBAAS,IAAA2a,GAAAA,EAC1FY,WAAwBV,EAA4CsB,QAA5CA,EAAGvmB,GAAKgB,wBAAwBE,wBAAYqlB,SAAzCA,EAA2Cnc,SAAS,eAAO,IAAA6a,GAAAA,EAKtFnmB,GAAKxL,EAAIkzB,QAAS,gBAAgB,SAACvnB,GAAQ,OAAK,SAAUqiB,EAAOmF,EAAQxoB,GAErE,OADA6nB,GAAY7nB,EAAM7I,OAAO6I,QAAOzK,GAAW,GACpCyL,EAASrM,MAAMsF,KAAM,CAACopB,EAAOmF,EAAQxoB,GAC/C,KACDa,GAAKxL,EAAIkzB,QAAS,aAAa,SAACvnB,GAAQ,OAAK,SAAUqiB,EAAOmF,EAAQxoB,GAElE,OADA6nB,GAAY7nB,EAAM7I,OAAO6I,QAAOzK,GACzByL,EAASrM,MAAMsF,KAAM,CAACopB,EAAOmF,EAAQxoB,GAC/C,KACD3K,EAAIiC,iBAAiB,aAAcwwB,IACnCzyB,EAAIiC,iBAAiB,WAAYswB,IACjC,IACIM,GAAsB,IAAIhoB,IAAI7K,EAAIQ,SAASuK,MAC9C,CACD,MAAA7J,GAAM,CApBN,OALIpC,EAAM,iEA0Bd,CCpCIs0B,EACJ,CCqBO,SAASC,KAA2B,IAAA,IAAApvB,EAAAzE,UAAA0E,OAAR0S,EAAMrV,IAAAA,MAAA0C,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAANwS,EAAMxS,GAAA5E,UAAA4E,GACrC,IAAA,IAAA8qB,EAAA,EAAAoE,EAAoB1c,EAAMsY,EAAAoE,EAAApvB,OAAAgrB,IAAE,CAAvB,IAAM5lB,EAAKgqB,EAAApE,GACZ,GAAI5lB,EACA,OAAOA,CACf,CAEJ,CCxBA,IAAMiqB,GAAyB,CAC3BC,a9BD6B,oB8BE7BC,U9BD0B,iB8BE1BC,e9BD+B,sB8BE/BC,kB9BDmC,0B8BEnCC,Y9BD6B,oB8BE7BC,gB9BDiC,wB8BEjCC,S9BDyB,iB8BWtB,SAASC,GAA2BltB,GAEvC,IADA,IAAMmtB,EAQV,SAAmBntB,GAAM,IAAAotB,EAAAljB,EAAAmjB,EAAAjd,EAAAkd,EAAA5c,EAAA6c,EAAA5c,EAAA6c,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAIfC,EAAmB,QAAXX,EAAGptB,EAAKmtB,WAAG,IAAAC,EAAAA,EAAI,CAAE,EAC/B,GAAIptB,EAAKguB,oBACL,OAAOD,EAEX,IAAME,EA+BV,WACI,IAAIC,EACAC,EACAC,EACAC,EACAC,EACArB,EACJ,IAAI,IAAAsB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GACAhE,EAAW1B,WAAe+B,EAAC4D,eAAO,IAAA5D,GAAK,QAALA,EAAPA,EAAS6D,WAAT7D,IAAYA,OAAZA,EAAAA,EAAc8D,gCAAwC7D,QAATA,EAAE2D,mBAAO3D,WAAAA,EAAPA,EAAS4D,WAAG,IAAA5D,OAAA,EAAZA,EAAc8D,gCAAwC7D,QAATA,EAAE0D,eAAO1D,IAAAA,GAAKA,QAALA,EAAPA,EAAS2D,eAAG3D,SAAZA,EAAc8D,6BAAqC,QAAT7D,EAAEyD,eAAOzD,IAAAA,GAAKA,QAALA,EAAPA,EAAS0D,eAAG1D,SAAZA,EAAc8D,8BAAsC,QAAT7D,EAAEwD,eAAOxD,IAAAA,GAAKA,QAALA,EAAPA,EAASyD,eAAGzD,SAAZA,EAAc8D,mCAA0B7D,EAAEuD,eAAO,IAAAvD,GAAK,QAALA,EAAPA,EAASwD,WAATxD,IAAYA,OAAZA,EAAAA,EAAc8D,yBAAiC7D,QAATA,EAAEsD,mBAAOtD,WAAAA,EAAPA,EAASuD,WAAG,IAAAvD,OAAA,EAAZA,EAAc8D,2BAAmC7D,QAATA,EAAEqD,mBAAOrD,GAAKA,QAALA,EAAPA,EAASsD,eAAGtD,SAAZA,EAAc8D,4BAAoC,QAAT7D,EAAEoD,eAAOpD,IAAAA,GAAKA,QAALA,EAAPA,EAASqD,eAAGrD,SAAZA,EAAc8D,gCAAwC,QAAT7D,EAAEmD,eAAOnD,IAAAA,GAAKA,QAALA,EAAPA,EAASoD,eAAGpD,SAAZA,EAAc8D,mCACtb3E,EAAQ3B,WAAeyC,EAACkD,eAAO,IAAAlD,GAAK,QAALA,EAAPA,EAASmD,WAATnD,IAAYA,OAAZA,EAAAA,EAAc8D,kCAA0C7D,QAATA,EAAEiD,mBAAOjD,WAAAA,EAAPA,EAASkD,WAAG,IAAAlD,OAAA,EAAZA,EAAc8D,kCAA0C7D,QAATA,EAAEgD,eAAOhD,IAAAA,GAAKA,QAALA,EAAPA,EAASiD,eAAGjD,SAAZA,EAAc8D,+BAAuC,QAAT7D,EAAE+C,eAAO/C,IAAAA,GAAKA,QAALA,EAAPA,EAASgD,eAAGhD,SAAZA,EAAc8D,gCAAwC,QAAT7D,EAAE8C,eAAO9C,IAAAA,GAAKA,QAALA,EAAPA,EAAS+C,eAAG/C,SAAZA,EAAc8D,qCAA4B7D,EAAE6C,eAAO,IAAA7C,GAAK,QAALA,EAAPA,EAAS8C,WAAT9C,IAAYA,OAAZA,EAAAA,EAAc8D,2BAAmC7D,QAATA,EAAE4C,mBAAO5C,WAAAA,EAAPA,EAAS6C,WAAG,IAAA7C,OAAA,EAAZA,EAAc8D,6BAAqC7D,QAATA,EAAE2C,mBAAO3C,GAAKA,QAALA,EAAPA,EAAS4C,eAAG5C,SAAZA,EAAc8D,8BAAsC,QAAT7D,EAAE0C,eAAO1C,IAAAA,GAAKA,QAALA,EAAPA,EAAS2C,eAAG3C,SAAZA,EAAc8D,kCAA0C,QAAT7D,EAAEyC,eAAOzC,IAAAA,GAAKA,QAALA,EAAPA,EAAS0C,eAAG1C,SAAZA,EAAc8D,qCACrcpF,EAAO5B,WAAemD,EAACwC,eAAO,IAAAxC,GAAK,QAALA,EAAPA,EAASyC,WAATzC,IAAYA,OAAZA,EAAAA,EAAc8D,iCAAyC7D,QAATA,EAAEuC,mBAAOvC,WAAAA,EAAPA,EAASwC,WAAG,IAAAxC,OAAA,EAAZA,EAAc8D,iCAAyC7D,QAATA,EAAEsC,eAAOtC,IAAAA,GAAKA,QAALA,EAAPA,EAASuC,eAAGvC,SAAZA,EAAc8D,8BAAsC,QAAT7D,EAAEqC,eAAOrC,IAAAA,GAAKA,QAALA,EAAPA,EAASsC,eAAGtC,SAAZA,EAAc8D,+BAAuC,QAAT7D,EAAEoC,eAAOpC,IAAAA,GAAKA,QAALA,EAAPA,EAASqC,eAAGrC,SAAZA,EAAc8D,oCAA2B7D,EAAEmC,eAAO,IAAAnC,GAAK,QAALA,EAAPA,EAASoC,WAATpC,IAAYA,OAAZA,EAAAA,EAAc8D,0BAAkC7D,QAATA,EAAEkC,mBAAOlC,WAAAA,EAAPA,EAASmC,WAAG,IAAAnC,OAAA,EAAZA,EAAc8D,4BAAoC7D,QAATA,EAAEiC,mBAAOjC,GAAKA,QAALA,EAAPA,EAASkC,eAAGlC,SAAZA,EAAc8D,6BAAqC,QAAT7D,EAAEgC,eAAOhC,IAAAA,GAAKA,QAALA,EAAPA,EAASiC,eAAGjC,SAAZA,EAAc8D,iCAAyC,QAAT7D,EAAE+B,eAAO/B,IAAAA,GAAKA,QAALA,EAAPA,EAASgC,eAAGhC,SAAZA,EAAc8D,oCAC3b7F,EAAM7B,WAAe6D,EAAC8B,eAAO,IAAA9B,GAAK,QAALA,EAAPA,EAAS+B,WAAT/B,IAAYA,OAAZA,EAAAA,EAAc8D,kCAA0C7D,QAATA,EAAE6B,mBAAO7B,WAAAA,EAAPA,EAAS8B,WAAG,IAAA9B,OAAA,EAAZA,EAAc8D,kCAA0C7D,QAATA,EAAE4B,eAAO5B,IAAAA,GAAKA,QAALA,EAAPA,EAAS6B,eAAG7B,SAAZA,EAAc8D,+BAAuC,QAAT7D,EAAE2B,eAAO3B,IAAAA,GAAKA,QAALA,EAAPA,EAAS4B,eAAG5B,SAAZA,EAAc8D,gCAAwC,QAAT7D,EAAE0B,eAAO1B,IAAAA,GAAKA,QAALA,EAAPA,EAAS2B,eAAG3B,SAAZA,EAAc8D,qCAA4B7D,EAAEyB,eAAO,IAAAzB,GAAK,QAALA,EAAPA,EAAS0B,WAAT1B,IAAYA,OAAZA,EAAAA,EAAc8D,2BAAmC7D,QAATA,EAAEwB,mBAAOxB,WAAAA,EAAPA,EAASyB,WAAG,IAAAzB,OAAA,EAAZA,EAAc8D,6BAAqC7D,QAATA,EAAEuB,mBAAOvB,GAAKA,QAALA,EAAPA,EAASwB,eAAGxB,SAAZA,EAAc8D,8BAAsC,QAAT7D,EAAEsB,eAAOtB,IAAAA,GAAKA,QAALA,EAAPA,EAASuB,eAAGvB,SAAZA,EAAc8D,kCAA0C,QAAT7D,EAAEqB,eAAOrB,IAAAA,GAAKA,QAALA,EAAPA,EAASsB,eAAGtB,SAAZA,EAAc8D,qCACnctG,EAAW9B,WAAeuE,EAACoB,eAAO,IAAApB,GAAK,QAALA,EAAPA,EAASqB,WAATrB,IAAYA,OAAZA,EAAAA,EAAc8D,kCAA0C7D,QAATA,EAAEmB,mBAAOnB,WAAAA,EAAPA,EAASoB,WAAG,IAAApB,OAAA,EAAZA,EAAc8D,kCAA0C7D,QAATA,EAAEkB,eAAOlB,IAAAA,GAAKA,QAALA,EAAPA,EAASmB,eAAGnB,SAAZA,EAAc8D,+BAAuC,QAAT7D,EAAEiB,eAAOjB,IAAAA,GAAKA,QAALA,EAAPA,EAASkB,eAAGlB,SAAZA,EAAc8D,gCAAwC,QAAT7D,EAAEgB,eAAOhB,IAAAA,GAAKA,QAALA,EAAPA,EAASiB,eAAGjB,SAAZA,EAAc8D,qCAA4B7D,EAAEe,eAAO,IAAAf,GAAK,QAALA,EAAPA,EAASgB,WAAThB,IAAYA,OAAZA,EAAAA,EAAc8D,2BAAmC7D,QAATA,EAAEc,mBAAOd,WAAAA,EAAPA,EAASe,WAAG,IAAAf,OAAA,EAAZA,EAAc8D,6BAAqC7D,QAATA,EAAEa,mBAAOb,GAAKA,QAALA,EAAPA,EAASc,eAAGd,SAAZA,EAAc8D,8BAAsC,QAAT7D,GAAEY,eAAOZ,IAAAA,IAAKA,QAALA,GAAPA,GAASa,eAAGb,UAAZA,GAAc8D,kCAA0C,QAAT7D,GAAEW,eAAOX,IAAAA,IAAKA,QAALA,GAAPA,GAASY,eAAGZ,UAAZA,GAAc8D,qCACxcrI,EAAWT,WAAeiF,GAACU,eAAO,IAAAV,IAAK,QAALA,GAAPA,GAASW,WAATX,IAAYA,QAAZA,EAAAA,GAAc8D,uCAA+C7D,QAATA,GAAES,mBAAOT,YAAAA,GAAPA,GAASU,WAAG,IAAAV,QAAA,EAAZA,GAAc8D,uCAA+C7D,QAATA,GAAEQ,eAAOR,IAAAA,IAAKA,QAALA,GAAPA,GAASS,eAAGT,UAAZA,GAAc8D,oCAA4C,QAAT7D,GAAEO,eAAOP,IAAAA,IAAKA,QAALA,GAAPA,GAASQ,eAAGR,UAAZA,GAAc8D,qCAA6C,QAAT7D,GAAEM,eAAON,IAAAA,IAAKA,QAALA,GAAPA,GAASO,eAAGP,UAAZA,GAAc8D,0CAAiC7D,GAAEK,eAAO,IAAAL,IAAK,QAALA,GAAPA,GAASM,WAATN,IAAYA,QAAZA,EAAAA,GAAc8D,gCAAwC7D,QAATA,GAAEI,mBAAOJ,YAAAA,GAAPA,GAASK,WAAG,IAAAL,QAAA,EAAZA,GAAc8D,kCAA0C7D,QAATA,GAAEG,mBAAOH,IAAKA,QAALA,GAAPA,GAASI,eAAGJ,UAAZA,GAAc8D,mCAA2C,QAAT7D,GAAEE,eAAOF,IAAAA,IAAKA,QAALA,GAAPA,GAASG,eAAGH,UAAZA,GAAc8D,uCAA+C,QAAT7D,GAAEC,eAAOD,IAAAA,IAAKA,QAALA,GAAPA,GAASE,eAAGF,UAAZA,GAAc8D,yCACxf,CACD,MAAOC,GACH,CAEJ,MAAO,CACHtJ,aAAcuB,EACdtB,UAAWuB,EACXtB,eAAgBuB,EAChBtB,kBAAmBoJ,GAA6BhI,EAAUC,EAAOC,GACjErB,YAAasB,EACbrB,gBAAiBsB,EACjBrB,SAAAA,EAER,CA1DmBkJ,GACTC,EA0DV,WAOI,IAAIC,EACAC,EACAC,EACAC,EACJ,IAAI,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA3C,EAAgB7J,WAAeiK,EAACtE,eAAO,IAAAsE,GAAK,QAALA,EAAPA,EAASrE,WAATqE,IAAYA,OAAZA,EAAAA,EAAcwC,2BAAmCvC,QAATA,EAAEvE,mBAAOuE,WAAAA,EAAPA,EAAStE,WAAG,IAAAsE,OAAA,EAAZA,EAAcwC,2BAAmCvC,QAATA,EAAExE,eAAOwE,IAAAA,GAAKA,QAALA,EAAPA,EAASvE,eAAGuE,SAAZA,EAAcwC,wBAAgC,QAATvC,EAAEzE,eAAOyE,IAAAA,GAAKA,QAALA,EAAPA,EAASxE,eAAGwE,SAAZA,EAAcwC,yBAAiC,QAATvC,EAAE1E,eAAO0E,IAAAA,GAAKA,QAALA,EAAPA,EAASzE,eAAGyE,SAAZA,EAAcwC,8BAAqBvC,EAAE3E,eAAO,IAAA2E,GAAK,QAALA,EAAPA,EAAS1E,WAAT0E,IAAYA,OAAZA,EAAAA,EAAcwC,oBAA4BvC,QAATA,EAAE5E,mBAAO4E,WAAAA,EAAPA,EAAS3E,WAAG,IAAA2E,OAAA,EAAZA,EAAcwC,sBAA8BvC,QAATA,EAAE7E,mBAAO6E,GAAKA,QAALA,EAAPA,EAAS5E,eAAG4E,SAAZA,EAAcwC,uBAA+B,QAATvC,EAAE9E,eAAO8E,IAAAA,GAAKA,QAALA,EAAPA,EAAS7E,eAAG6E,SAAZA,EAAcwC,2BAAmC,QAATvC,EAAE/E,eAAO+E,IAAAA,GAAKA,QAALA,EAAPA,EAAS9E,eAAG8E,SAAZA,EAAcwC,8BAC9YpD,EAAS9J,WAAe2K,EAAChF,eAAO,IAAAgF,GAAK,QAALA,EAAPA,EAAS/E,WAAT+E,IAAYA,OAAZA,EAAAA,EAAcwC,mBAA2BvC,QAATA,EAAEjF,mBAAOiF,WAAAA,EAAPA,EAAShF,WAAG,IAAAgF,OAAA,EAAZA,EAAcwC,mBAA2BvC,QAATA,EAAElF,eAAOkF,IAAAA,GAAKA,QAALA,EAAPA,EAASjF,eAAGiF,SAAZA,EAAcwC,gBAAwB,QAATvC,EAAEnF,eAAOmF,IAAAA,GAAKA,QAALA,EAAPA,EAASlF,eAAGkF,SAAZA,EAAcwC,iBAAyB,QAATvC,EAAEpF,eAAOoF,IAAAA,GAAKA,QAALA,EAAPA,EAASnF,eAAGmF,SAAZA,EAAcwC,sBAAavC,EAAErF,eAAO,IAAAqF,GAAK,QAALA,EAAPA,EAASpF,WAAToF,IAAYA,OAAZA,EAAAA,EAAcwC,YAAoBvC,QAATA,EAAEtF,mBAAOsF,WAAAA,EAAPA,EAASrF,WAAG,IAAAqF,OAAA,EAAZA,EAAcwC,cAAsBvC,QAATA,EAAEvF,mBAAOuF,GAAKA,QAALA,EAAPA,EAAStF,eAAGsF,SAAZA,EAAcwC,eAAuB,QAATvC,EAAExF,eAAOwF,IAAAA,GAAKA,QAALA,EAAPA,EAASvF,eAAGuF,SAAZA,EAAcwC,mBAA2B,QAATvC,EAAEzF,eAAOyF,IAAAA,GAAKA,QAALA,EAAPA,EAASxF,eAAGwF,SAAZA,EAAcwC,sBAC/T7D,EAAS/J,WAAeqL,EAAC1F,eAAO,IAAA0F,GAAK,QAALA,EAAPA,EAASzF,WAATyF,IAAYA,OAAZA,EAAAA,EAAcwC,uBAA+BvC,QAATA,EAAE3F,mBAAO2F,WAAAA,EAAPA,EAAS1F,WAAG,IAAA0F,OAAA,EAAZA,EAAcwC,uBAA+BvC,QAATA,EAAE5F,eAAO4F,IAAAA,GAAKA,QAALA,EAAPA,EAAS3F,eAAG2F,SAAZA,EAAcwC,oBAA4B,QAATvC,EAAE7F,eAAO6F,IAAAA,GAAKA,QAALA,EAAPA,EAAS5F,eAAG4F,SAAZA,EAAcwC,qBAA6B,QAATvC,EAAE9F,eAAO8F,IAAAA,GAAKA,QAALA,EAAPA,EAAS7F,eAAG6F,SAAZA,EAAcwC,0BAAiBvC,EAAE/F,eAAO,IAAA+F,GAAK,QAALA,EAAPA,EAAS9F,WAAT8F,IAAYA,OAAZA,EAAAA,EAAcwC,gBAAwBvC,QAATA,EAAEhG,mBAAOgG,WAAAA,EAAPA,EAAS/F,WAAG,IAAA+F,OAAA,EAAZA,EAAcwC,kBAA0BvC,QAATA,EAAEjG,mBAAOiG,GAAKA,QAALA,EAAPA,EAAShG,eAAGgG,SAAZA,EAAcwC,mBAA2B,QAATvC,EAAElG,eAAOkG,IAAAA,GAAKA,QAALA,EAAPA,EAASjG,eAAGiG,SAAZA,EAAcwC,uBAA+B,QAATvC,EAAEnG,eAAOmG,IAAAA,GAAKA,QAALA,EAAPA,EAASlG,eAAGkG,SAAZA,EAAcwC,0BACnWtE,EAAWhK,WAAe+L,EAACpG,eAAO,IAAAoG,GAAK,QAALA,EAAPA,EAASnG,WAATmG,IAAYA,OAAZA,EAAAA,EAAcwC,sBAA8BvC,QAATA,EAAErG,mBAAOqG,WAAAA,EAAPA,EAASpG,WAAG,IAAAoG,OAAA,EAAZA,EAAcwC,sBAA8BvC,QAATA,EAAEtG,eAAOsG,IAAAA,GAAKA,QAALA,EAAPA,EAASrG,eAAGqG,SAAZA,EAAcwC,mBAA2B,QAATvC,EAAEvG,eAAOuG,IAAAA,GAAKA,QAALA,EAAPA,EAAStG,eAAGsG,SAAZA,EAAcwC,oBAA4B,QAATvC,EAAExG,eAAOwG,IAAAA,GAAKA,QAALA,EAAPA,EAASvG,eAAGuG,SAAZA,EAAcwC,yBAAgBvC,EAAEzG,eAAO,IAAAyG,GAAK,QAALA,EAAPA,EAASxG,WAATwG,IAAYA,OAAZA,EAAAA,EAAcwC,eAAuBvC,QAATA,EAAE1G,mBAAO0G,WAAAA,EAAPA,EAASzG,WAAG,IAAAyG,OAAA,EAAZA,EAAcwC,iBAAyBvC,QAATA,EAAE3G,mBAAO2G,GAAKA,QAALA,EAAPA,EAAS1G,eAAG0G,SAAZA,EAAcwC,kBAA0B,QAATvC,EAAE5G,eAAO4G,IAAAA,GAAKA,QAALA,EAAPA,EAAS3G,eAAG2G,SAAZA,EAAcwC,sBAA8B,QAATvC,EAAE7G,eAAO6G,IAAAA,GAAKA,QAALA,EAAPA,EAAS5G,eAAG4G,SAAZA,EAAcwC,wBAC/V,CACD,MAAOvF,GACH,CAEJ,IAAMxf,EAkCV,SAA4B3S,GACxB,IAAKA,EACD,OACJ,IAAI23B,EACAlxB,EACJ,IACI,IAAMkM,EAAS,IAAIzS,IAAIF,GACvB23B,EAAOhlB,EAAOglB,KACdlxB,EAAWkM,EAAOlM,QACrB,CACD,MAAO0rB,GACH,MACJ,CACA,IAAM/H,EAeV,SAA4BuN,GACxB,IAAA,IAAAjd,EAAA8J,EAAAA,EAAgCzvB,OAAOsX,QAAQurB,IAAmBld,EAAA8J,EAAAjrB,OAAAmhB,IAAE,CAA/D,IAAA+J,EAAAlY,EAAAiY,EAAA9J,GAAA,GAAO0P,EAAQ3F,EAAA,GAChB,GADuBA,EAAA,GACbtY,SAASwrB,GACf,OAAOvN,CACf,CACA,MACJ,CArBqByN,CAAmBF,GACpC,IAAKvN,EACD,OACJ,IACM0N,EADUrxB,EAASwM,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IACtChD,MAAM,KAC/B,GAAI6nB,EAASv+B,OAAS,EAClB,OACJ,IAAMuvB,EAAYgP,EAAS,GAGrB/O,EAAiB+O,EAASA,EAASv+B,OAAS,GAClD,OAAKuvB,GAAcC,EAEZ,CAAEF,aAAcuB,EAAUtB,UAAAA,EAAWC,eAAAA,QADxC,CAER,CA7DmBgP,CAAmBxF,GAClC,MAAO,CACH1J,aAAclW,aAAAA,EAAAA,EAAQkW,aACtBC,UAAWnW,aAAAA,EAAAA,EAAQmW,UACnBC,eAAgBpW,aAAAA,EAAAA,EAAQoW,eACxBC,kBAAmBuJ,EACnBtJ,YAAauJ,EACbtJ,gBAAiBuJ,EACjBtJ,SAAUuJ,EAElB,CAxFoBsF,GAChB,MAAO,CACHnP,aAA0DziB,QAA9CA,EAAuB,QAAvBmjB,EAAEU,EAASpB,oBAAY,IAAAU,EAAAA,EAAIY,EAAOtB,wBAAYziB,EAAAA,EAAIksB,EAAQzJ,aACtEC,UAAiDxc,QAAxCA,EAAoB,QAApBkd,EAAES,EAASnB,iBAAS,IAAAU,EAAAA,EAAIW,EAAOrB,qBAASxc,EAAAA,EAAIgmB,EAAQxJ,UAC7DC,eAAgEnc,QAAlDA,EAAyB,QAAzB6c,EAAEQ,EAASlB,sBAAc,IAAAU,EAAAA,EAAIU,EAAOpB,0BAAcnc,EAAAA,EAAI0lB,EAAQvJ,eAC5EC,kBAAyEnc,QAAxDA,EAA4B,QAA5B6c,EAAEO,EAASjB,yBAAiB,IAAAU,EAAAA,EAAIS,EAAOnB,6BAAiBnc,EAAAA,EAAIylB,EAAQtJ,kBACrFC,YAAuDU,QAA5CA,EAAsB,QAAtBC,EAAEK,EAAShB,mBAAW,IAAAW,EAAAA,EAAIO,EAAOlB,uBAAWU,EAAAA,EAAI2I,EAAQrJ,YACnEC,gBAAmEW,QAApDA,EAA0B,QAA1BC,EAAEG,EAASf,uBAAe,IAAAY,EAAAA,EAAIK,EAAOjB,2BAAeW,EAAAA,EAAIyI,EAAQpJ,gBAC/EC,SAA8C,QAAtCY,EAAmB,QAAnBC,EAAEC,EAASd,gBAAQ,IAAAa,EAAAA,EAAIG,EAAOhB,gBAAQY,IAAAA,EAAAA,EAAIuI,EAAQnJ,SAElE,CA3BgB8O,CAAU/7B,GACtBqoB,EAAA2T,EAAAA,EAAoBnjC,OAAOmX,KAAK0c,IAAuBrE,EAAA2T,EAAA3+B,OAAAgrB,IAAE,CAApD,IAAM+C,EAAK4Q,EAAA3T,GACN5lB,EAAQ0qB,EAAI/B,GACd3oB,GACA8N,GAAa1K,GAAKnE,SAASqE,WAAY2mB,GAAuBtB,GAAQ3oB,EAE9E,CACJ,CAmGA,SAASyzB,GAA6BhI,EAAUC,EAAOC,GACnD,GAAKF,GAAaC,GAAUC,EAA5B,CAEA,IAAMqN,EAiBV,SAA4BvN,GAAU,IAAA+N,EAClC,OAAmCA,QAAnCA,EAAOP,GAAmBxN,UAAnB+N,IAA4BA,OAA5BA,EAAAA,EAA+B,EAC1C,CAnBiBC,CAAmBhO,GAChC,GAAKuN,EAEL,MAAAz2B,WAAAA,OAAkBy2B,EAAIz2B,KAAAA,OAAImpB,EAAK,KAAAnpB,OAAIopB,EAJf,CAKxB,CAQA,IAAMsN,GAAqB,CACvBS,OAAQ,CAAC,aAAc,mBACvBC,OAAQ,CAAC,cACTC,UAAW,CAAC,kBCzIhB,IAAIC,IAAqB,EAiLzB,SAASC,GAAyBt2B,EAAMjG,GACpC,IAAMw8B,EAAmBx8B,EAAKy8B,wBAC9B,OAAKD,GAEEA,EAAiBvsB,SAAShK,EACrC,CCtLA,IAAMy2B,GAAa,CACfrZ,KDAG,SAAcrjB,GACjB,GAAIs8B,GACArkC,EAAM,uDAGV,GAqGc,MAAPkB,EAjGP,GA8FwB,mBAAVe,GAAwBN,GAAQA,EAAKsE,iBA9FnD,CAIA,IACyBy+B,EzCnBKl6B,EyCkBxBm6B,EAAqB58B,EAAK68B,YAAYhrB,OAC5C,GAAK+qB,GAIA,IAAyC,IAArC58B,EAAK88B,8BzCvBgBr6B,EyCuB4Cm6B,EzCtBlEv4B,GAAiBgD,KAAK5E,IyCsBiE,CAAA,IAAAs6B,EAC3F9kC,EAAM,kFACN+H,EAAK68B,YAA2B,QAAhBE,EAAGrjC,aAAAA,EAAAA,EAAKmd,gBAAQkmB,IAAAA,EAAAA,EAAI,SACxC,OANI9kC,EAAM,0EACN+H,EAAK68B,YAA2B,QAAhBF,EAAGjjC,aAAAA,EAAAA,EAAKmd,gBAAQ8lB,IAAAA,EAAAA,EAAI,UAOxC,GADA92B,GAAKC,UAAY9F,EAAK0H,oBAAoBhN,MAAQsF,EAAK0H,SAAW,CAAC1H,EAAK0H,UAC1C,IAA1B7B,GAAKC,UAAUzI,OAAnB,CAsBA,GAlBAxE,OAAOkrB,OAAOle,GA2JlB,SAAexK,EAAQ2hC,GAEnB,IADA,IAAMC,EAAMhiB,EAAA,CAAA,EAAQ5f,GACpBgtB,EAAA2T,EAAAA,EAAkBnjC,OAAOmX,KAAKgtB,GAAO3U,EAAA2T,EAAA3+B,OAAAgrB,IAAE,CAAlC,IAAMpvB,EAAG+iC,EAAA3T,GACJ6U,EAASF,EAAO/jC,GAChBkkC,EAAS9hC,EAAOpC,QACPI,IAAX6jC,IACe,OAAXA,GACkB,WAAlBxgC,EAAOwgC,IACNxiC,MAAMoV,QAAQotB,IACG,WAAlBxgC,EAAOygC,IACI,OAAXA,GACCziC,MAAMoV,QAAQqtB,GAIfF,EAAOhkC,GAAOikC,EAHdD,EAAOhkC,GAAIgiB,EAAAA,EAAQkiB,GAAAA,GAAWD,GAM1C,CACA,OAAOD,CACX,CA/KwBG,CAAMv3B,GEjCvB,SAAc7M,EAAKgX,GACtB,IACsB7N,EADhB86B,EAAS,CAAE,EAAC76B,EAAAC,EACA2N,GAAI,IAAtB,IAAA5N,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAwB,CAAA,IAAbvJ,EAAGkJ,EAAAM,MACNxJ,KAAOD,IACPikC,EAAOhkC,GAAOD,EAAIC,GAE1B,CAAC,CAAA,MAAA0J,GAAAP,EAAAnE,EAAA0E,EAAA,CAAA,QAAAP,EAAAQ,GAAA,CACD,OAAOq6B,CACX,CFyBoCI,CAAKr9B,EAAM,CACvC,aACA,sBACA,oBACA,aACA,gCACA,kCACA,uCACA,mBACA,uBACA,0BACA,iCA6GR,SAA+BA,GACvBA,EAAK8iB,aACD9iB,EAAKyG,+BACLtO,EAAK,uKAET0N,GAAKid,YAAc9iB,EAAK8iB,aAGnB9iB,EAAKyG,+BAAiCzG,EAAKyG,8BAA8BpJ,OAAS,GACvFlF,EAAK,kGAEL0N,GAAKid,YAAc,CACf,CACI7hB,KAAM,cACNqQ,MAAKgF,EAAMtW,EAAKyG,kCAOxBZ,GAAKid,YAAc,CACf,CACI7hB,KAAM,cACNqQ,MAAO,IAIvB,CAvIIgsB,CAAsBt9B,GA+B1B,SAAsCA,GAClCuQ,GAAa1K,GAAKnE,SAASqE,WAAYsH,GAAcrN,EAAkB,aACnEA,EAAKu9B,kBACLhtB,GAAa1K,GAAKnE,SAASqE,WAAYuH,GAAmBtN,EAAuB,kBAEjFA,EAAKw9B,gBACLjtB,GAAa1K,GAAKnE,SAASqE,WAAYwH,GAAiBvN,EAAqB,gBAEjF,IAAMoyB,EAmCV,SAA2BpyB,GACvB,GAAIA,EAAKy9B,YACL,OAAOz9B,EAAKy9B,YAEhB,IAAI,IAAAlP,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA,OAAOxC,GAAuB,QAAR+B,EAAC4D,eAAO5D,IAAAA,GAAKA,QAALA,EAAPA,EAAS6D,eAAG7D,SAAZA,EAAcmP,+BAAsBlP,EAAE2D,eAAO,IAAA3D,GAAK,QAALA,EAAPA,EAAS4D,WAAT5D,IAAYA,OAAZA,EAAAA,EAAcmP,+BAAsBlP,EAAE0D,eAAO,IAAA1D,WAAAA,EAAPA,EAAS2D,WAAG,IAAA3D,OAAA,EAAZA,EAAcmP,oBAA4BlP,QAATA,EAAEyD,mBAAOzD,GAAKA,QAALA,EAAPA,EAAS0D,eAAG1D,SAAZA,EAAcmP,qBAA6B,QAATlP,EAAEwD,eAAOxD,IAAAA,GAAKA,QAALA,EAAPA,EAASyD,eAAGzD,SAAZA,EAAcmP,0BAAiBlP,EAAEuD,eAAO,IAAAvD,GAAK,QAALA,EAAPA,EAASwD,WAATxD,IAAYA,OAAZA,EAAAA,EAAcmP,gBAAwBlP,QAATA,EAAEsD,mBAAOtD,WAAAA,EAAPA,EAASuD,WAAG,IAAAvD,OAAA,EAAZA,EAAcmP,kBAA0BlP,QAATA,EAAEqD,mBAAOrD,GAAKA,QAALA,EAAPA,EAASsD,eAAGtD,SAAZA,EAAcmP,mBAA2B,QAATlP,EAAEoD,eAAOpD,IAAAA,GAAKA,QAALA,EAAPA,EAASqD,eAAGrD,SAAZA,EAAcmP,uBAA+B,QAATlP,EAAEmD,eAAOnD,IAAAA,GAAKA,QAALA,EAAPA,EAASoD,eAAGpD,SAAZA,EAAcmP,yBACpW,CACD,MAAOlI,GACH,MACJ,CACJ,CA7CgBmI,CAAkBp+B,GAC1BoyB,GACA7hB,GAAa1K,GAAKnE,SAASqE,WAAYyH,GAA6B4kB,GAExE,IAAMiM,EA0CV,SAA8Br+B,GAC1B,GAAIA,EAAKq+B,eACL,OAAOr+B,EAAKq+B,eAEhB,IAAI,IAAApP,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA,OAAOlD,GAAuB,QAARyC,EAACkD,eAAOlD,IAAAA,GAAKA,QAALA,EAAPA,EAASmD,eAAGnD,SAAZA,EAAcqP,sCAA6BpP,EAAEiD,eAAO,IAAAjD,GAAK,QAALA,EAAPA,EAASkD,WAATlD,IAAYA,OAAZA,EAAAA,EAAcqP,sCAA6BpP,EAAEgD,eAAO,IAAAhD,WAAAA,EAAPA,EAASiD,WAAG,IAAAjD,OAAA,EAAZA,EAAcqP,2BAAmCpP,QAATA,EAAE+C,mBAAO/C,GAAKA,QAALA,EAAPA,EAASgD,eAAGhD,SAAZA,EAAcqP,4BAAoC,QAATpP,EAAE8C,eAAO9C,IAAAA,GAAKA,QAALA,EAAPA,EAAS+C,eAAG/C,SAAZA,EAAcqP,iCAAwBpP,EAAE6C,eAAO,IAAA7C,GAAK,QAALA,EAAPA,EAAS8C,WAAT9C,IAAYA,OAAZA,EAAAA,EAAcqP,uBAA+BpP,QAATA,EAAE4C,mBAAO5C,WAAAA,EAAPA,EAAS6C,WAAG,IAAA7C,OAAA,EAAZA,EAAcqP,yBAAiCpP,QAATA,EAAE2C,mBAAO3C,GAAKA,QAALA,EAAPA,EAAS4C,eAAG5C,SAAZA,EAAcqP,0BAAkC,QAATpP,EAAE0C,eAAO1C,IAAAA,GAAKA,QAALA,EAAPA,EAAS2C,eAAG3C,SAAZA,EAAcqP,8BAAsC,QAATpP,EAAEyC,eAAOzC,IAAAA,GAAKA,QAALA,EAAPA,EAAS0C,eAAG1C,SAAZA,EAAcqP,gCACna,CACD,MAAO9I,GACH,MACJ,CACJ,CApD2B+I,CAAqBh/B,GACxCq+B,GACA9tB,GAAa1K,GAAKnE,SAASqE,WAAY0H,GAAiB4wB,GAE5D,IAAMY,EAiDV,SAA4Bj/B,GACxB,GAAIA,EAAKi/B,aACL,OAAOj/B,EAAKi/B,aAEhB,IAAI,IAAAtP,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA,OAAO5D,GAAuB,QAARmD,EAACwC,eAAOxC,IAAAA,GAAKA,QAALA,EAAPA,EAASyC,eAAGzC,SAAZA,EAAcuP,sCAA6BtP,EAAEuC,eAAO,IAAAvC,GAAK,QAALA,EAAPA,EAASwC,WAATxC,IAAYA,OAAZA,EAAAA,EAAcuP,sCAA6BtP,EAAEsC,eAAO,IAAAtC,WAAAA,EAAPA,EAASuC,WAAG,IAAAvC,OAAA,EAAZA,EAAcuP,2BAAmCtP,QAATA,EAAEqC,mBAAOrC,GAAKA,QAALA,EAAPA,EAASsC,eAAGtC,SAAZA,EAAcuP,4BAAoC,QAATtP,EAAEoC,eAAOpC,IAAAA,GAAKA,QAALA,EAAPA,EAASqC,eAAGrC,SAAZA,EAAcuP,iCAAwBtP,EAAEmC,eAAO,IAAAnC,GAAK,QAALA,EAAPA,EAASoC,WAATpC,IAAYA,OAAZA,EAAAA,EAAcuP,uBAA+BtP,QAATA,EAAEkC,mBAAOlC,WAAAA,EAAPA,EAASmC,WAAG,IAAAnC,OAAA,EAAZA,EAAcuP,yBAAiCtP,QAATA,EAAEiC,mBAAOjC,GAAKA,QAALA,EAAPA,EAASkC,eAAGlC,SAAZA,EAAcuP,0BAAkC,QAATtP,EAAEgC,eAAOhC,IAAAA,GAAKA,QAALA,EAAPA,EAASiC,eAAGjC,SAAZA,EAAcuP,8BAAsC,QAATtP,EAAE+B,eAAO/B,IAAAA,GAAKA,QAALA,EAAPA,EAASgC,eAAGhC,SAAZA,EAAcuP,gCACna,CACD,MAAO1J,GACH,MACJ,CACJ,CA3DyB2J,CAAmB5/B,GACpCi/B,GACA1uB,GAAa1K,GAAKnE,SAASqE,WAAY2H,GAAeuxB,GAE1D/R,GAA2BltB,EAC/B,CAnDI6/B,CAA6B7/B,GAoDjC,SAAoCA,GAAM,IAAA8/B,EACtCvvB,GAAa1K,GAAKO,iBAAkByH,GAAclT,EnD3GxB,KmD4G1B4V,GAAa1K,GAAKO,iBAAkB0H,GAA0B,QAAhBgyB,EAAEtmC,aAAAA,EAAAA,EAAKumC,iBAASD,IAAAA,EAAAA,EAAIp8B,IAC9D1D,EAAKggC,4BACLnnC,OAAOsX,QAAQnQ,EAAKggC,4BAA4B98B,SAAQ,SAAAgH,GAAkB,IAAAkG,EAAAC,EAAAnG,EAAA,GAAhBjR,EAAGmX,EAAA,GAAE3N,EAAK2N,EAAA,GAChEG,GAAa1K,GAAKO,iBAAkBnN,EAAKwJ,EAC7C,GAER,CA3DIw9B,CAA2BjgC,GAC3BoX,KACA1D,GAAc1T,EAAK2T,+BAAgC3T,EAAK4T,iCACxB,MAA5B5T,EAAKkgC,oBAA6B,CAClC,IAAMC,EAAOrlC,KAAKihB,IAAI,EAAGjhB,KAAKyG,IAAI,IAAKvB,EAAKkgC,sBAC5Cr6B,GAAKoB,iBAAgC,MAAbwM,GGpDzB,SAA4BA,EAAW2sB,GAC1C,QAAIA,GAAgB,KAEhBA,GAAgB,KAEb/6B,GAAMoO,GAAa,IAAM2sB,EACpC,CH8CoDC,CAAmB5sB,GAAW0sB,GAAQA,EAAO,CAC7F,CACA,IAAKt6B,GAAKoB,iBAGN,OAFAhP,EAAM,mFACNqkC,IAAqB,GAGrBC,GAAyB,oBAAqBv8B,IAC9CisB,KAEAsQ,GAAyB,oBAAqBv8B,IAC9Cqe,KAEAke,GAAyB,eAAgBv8B,IACzCmhB,KAEAob,GAAyB,eAAgBv8B,KRnExC7G,GAAQA,EAAIe,OAAUf,EAAI6qB,QAI/Brf,GAAKxL,EAAK,QAAS+pB,IAHfjrB,EAAM,qEQqENskC,GAAyB,aAAcv8B,IPlExC,WACH,GAAK7G,GAAQA,EAAImnC,eAAjB,CAIA,IAAMC,EAAQpnC,EAAImnC,eAAexnC,UACjC6L,GAAK47B,EAAO,OAAQ3Z,IACpBjiB,GAAK47B,EAAO,mBAAoB1Y,IAChCljB,GAAK47B,EAAO,OAAQpY,GAJpB,MAFIlwB,EAAM,oEAOd,CO0DQuoC,GAEJlE,IAAqB,CA3CrB,MAFInkC,EAAK,mFAZT,MAFIF,EAAM,iGAJNA,EAAM,6FAgEd,ECrEIA,MGbG,WACHwoC,EAAY,qCAAsC56B,GACtD,EHYI66B,SIbG,SAAkB1sB,EAAIhU,GACzB4Q,GAAgB/K,GAAKO,iBAAkB2H,IAC7B,MAANiG,GACAzD,GAAa1K,GAAKO,iBAAkB2H,GAASiG,GAEjDpD,GAAgB/K,GAAKO,iBAAkB4H,IACrB,OAAdhO,aAAI,EAAJA,EAAMiG,OACNsK,GAAa1K,GAAKO,iBAAkB4H,GAAWhO,EAAKiG,MAExD2K,GAAgB/K,GAAKO,iBAAkB6H,IACjB,OAAlBjO,aAAI,EAAJA,EAAM2gC,WACNpwB,GAAa1K,GAAKO,iBAAkB6H,GAAgBjO,EAAK2gC,UAE7D/vB,GAAgB/K,GAAKO,iBAAkB8H,IACpB,OAAflO,aAAI,EAAJA,EAAM4gC,QACNrwB,GAAa1K,GAAKO,iBAAkB8H,GAAYlO,EAAK4gC,OAEzDhwB,GAAgB/K,GAAKO,iBAAkB+H,IACrB,OAAdnO,aAAI,EAAJA,EAAMgX,OACNzG,GAAa1K,GAAKO,iBAAkB+H,GAAWnO,EAAKgX,MAExDpG,GAAgB/K,GAAKO,iBAAkBgI,IACpB,OAAfpO,aAAI,EAAJA,EAAM6gC,QACNtwB,GAAa1K,GAAKO,iBAAkBgI,GAAYpO,EAAK6gC,MAE7D,EJXIC,iB5BkCG,WACH,GAAKnlC,EAGL,KtBzCG,SAAoByJ,GACnBzJ,GAAexB,GACfA,EAAa4mC,WAAW37B,EAEhC,CsBsCQ27B,CAAWztB,GACd,CACD,MAAOrV,GACH/F,EAAK,8BAA+B+F,EACxC,CACJ,E4B3CIijB,YKjBG,SAAqB9oB,EAAO4H,GAC/BghC,GAAoB5oC,EAAO4H,EAC/B,ELgBIihC,mBMZG,SAA4Bh7B,EAAMxD,GACrC8N,GAAa1K,GAAKO,iBAAkBH,EAAMxD,EAC9C,ENWIy+B,sBMPG,SAA+Bj7B,GAClC2K,GAAgB/K,GAAKO,iBAAkBH,EAC3C,ENMIk7B,kBvDVG,SAA2BC,GAAO,IAAAC,EACrChpC,EAAiCgpC,QAAnBA,EAAGrpC,EAAUopC,UAAMC,IAAAA,EAAAA,EAAIrpC,EAAUG,IACnD,EuDSImpC,UOZG,SAAmBr7B,EAAMjG,GAC5B,GAAInH,OAAOkX,OAAOlB,IAAaoB,SAAShK,GACpC9N,EAAI6M,+BAAAA,OAAgCiB,8GADxC,CAIA,IAAMF,EAAa,GACnBsR,GAAoBtR,GACpBwK,GAAaxK,EAAY4H,GAAY1H,GACjCjG,SAAAA,EAAMmqB,OACN5Z,GAAaxK,EvCFU,wBuCEmB/F,EAAKmqB,OAGnD3Z,GAAczK,EAAY/F,aAAAA,EAAAA,EAAM+F,YAChCkH,GAAQ,CACJ6I,aAAiC,OAAnB9V,aAAAA,EAAAA,EAAM2S,WAAoBnW,EAAUwD,EAAK2S,WAAa1W,IACpE8J,WAAAA,EACAiD,KAAM4G,GAAW5P,aAAAA,EAAAA,EAAM0L,MACvBsN,aAAchZ,aAAAA,EAAAA,EAAMuhC,SACpBxoB,eAAgB/Y,SAAAA,EAAMuhC,SAAWryB,GAAelP,EAAKuhC,eAAYloC,GAdrE,CAgBJ,EPPImoC,UQJG,SAAmBv7B,EAAMjG,GAC5B,GAA8B,IAA1B6F,GAAKC,UAAUzI,OAOnB,GAAoB,iBAAT4I,GAAqC,IAAhBA,EAAK5I,OAArC,CAIA,IAAIyG,EACJ,GAAiB,OAAb9D,aAAI,EAAJA,EAAM8D,KACN,IACIA,EAAM,IAAIE,IAAIhE,EAAK8D,IAAK3K,aAAAA,EAAAA,EAAKQ,SAASuK,KACzC,CACD,MAAOjG,GACHhG,EAAM,8EAA+EgG,EACzF,Ef6BD,SAAqC+B,GACxC+pB,GAAwB,CACpBjU,aAAc9V,EAAK8V,aACnBhS,IAAK9D,EAAK8D,IACVqmB,MAAOnqB,EAAKmqB,MACZD,iBAAkBlqB,EAAK+F,WACvBskB,aAAc5a,IAEtB,CenCIgyB,CAA4B,CACxB3rB,aAAc7Z,IACdkuB,MAAOlkB,EACPnC,IAAAA,EACAiC,WAAY/F,aAAI,EAAJA,EAAM+F,YAdtB,MAFI9N,EAAM,2EAPNA,EAAM,+DAyBd,GRDA,SAASypC,GAAqBC,GAC1B,IAAMC,EAAUD,EAAQ,GAElBE,EAAQnF,GAAWkF,GACzB,GAAKC,EAAL,CAKA,IADA,IAAM7jC,EAAO,GACJnD,EAAI,EAAGA,EAAI8mC,EAAQtkC,OAAQxC,IAChCmD,EAAKoF,KAAKu+B,EAAQ9mC,IAEtBgnC,EAAMppC,MAAM,KAAMuF,EALlB,MAFI7F,EAAK,kCAAmCwpC,EAAQ,GAQxD,EAhCA,WACI1pC,EAAK+M,GAAAA,O9C1BmB,+C8C2BxB,IAAM88B,EAAe3oC,EAAW,MAChC,IAAK2oC,EAED,YADA3pC,EAAK,gFAGT,IAAK2pC,EAAiB,GAElB,YADA3pC,EAAK,wGAMb,SAA+B4pC,GAC3B,IAAK,IAAIlnC,EAAI,EAAGuM,EAAM26B,EAAS1kC,OAAQxC,EAAIuM,EAAKvM,IAC5C6mC,GAAqBK,EAASlnC,GAEtC,EAPImnC,CAAsBF,EAAiB,IAuBvC3oC,EAAW,MAAI,WACX,OAAOuoC,GAAqB/oC,UAC/B,CAvBL,CAdA0qB","x_google_ignoreList":[38]}
|