@anyreplay/browser 0.1.0 → 0.1.1
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/index.cjs +3652 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3655 -5
- package/dist/index.js.map +1 -1
- package/package.json +3 -5
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/recorder.ts","../src/config.ts","../src/events.ts","../src/sampling.ts","../src/transport.ts","../src/visitor.ts"],"sourcesContent":["export { createRecorder, type RecorderHandle, type RecorderStatus } from './recorder.js';\nexport { resolveOptions, ConfigError, DEFAULTS, type AnyReplayOptions, type ResolvedOptions } from './config.js';\nexport { isSampledIn, hashToUnitInterval } from './sampling.js';\nexport { Transport, type RecordedEvent, type SessionMeta } from './transport.js';\nexport { resolveIdentity, safeStorage, uuidv4 } from './visitor.js';\nexport { TRACK_TAG, NAVIGATE_TAG, EVENT_NAME_PATTERN, MAX_PROPERTIES_BYTES, validateTrack, type TrackPayload } from './events.js';\n","import { record } from 'rrweb';\nimport type { AnyReplayOptions, ResolvedOptions } from './config.js';\nimport { resolveOptions } from './config.js';\nimport { NAVIGATE_TAG, TRACK_TAG, validateTrack } from './events.js';\nimport { isSampledIn } from './sampling.js';\nimport { Transport, type RecordedEvent, type SessionMeta } from './transport.js';\nimport {\n inCooldown, notePageCount, resolveIdentity, reserveSeq, safeStorage, startCooldown, touchSession,\n} from './visitor.js';\n\nexport type RecorderStatus = 'idle' | 'awaiting-consent' | 'recording' | 'sampled-out' | 'stopped';\n\nexport interface RecorderHandle {\n status: () => RecorderStatus;\n sessionId: () => string | null;\n consent: (granted: boolean) => void;\n identify: (traits: { userId?: string; email?: string }) => void;\n /**\n * Tags this moment of the recording so it shows on the player's timeline.\n *\n * `name` is 1–64 characters of `[A-Za-z0-9_.:-]`; `properties` must be a\n * plain JSON object of at most 4 KB. Anything else is dropped with a warning\n * in debug mode — never an exception, since this runs inside the page's\n * own handlers.\n */\n track: (name: string, properties?: Record<string, unknown>) => void;\n stop: () => void;\n flush: () => Promise<void>;\n}\n\n/** Rage click: several clicks in nearly the same spot in quick succession. */\nconst RAGE_CLICK_COUNT = 3;\nconst RAGE_CLICK_WINDOW_MS = 1000;\nconst RAGE_CLICK_RADIUS_PX = 30;\n\n/**\n * Events tracked before rrweb is emitting — while consent is pending, or\n * while the document is still loading — wait here. Enough for an app's boot\n * sequence; a page that tracks more than this before anything is recorded is\n * looping, and keeping the oldest ones tells the story better than the newest.\n */\nconst MAX_PENDING_EVENTS = 32;\n\nexport function createRecorder(rawOptions: AnyReplayOptions): RecorderHandle {\n const options: ResolvedOptions = resolveOptions(rawOptions);\n\n const local = safeStorage(() => globalThis.localStorage);\n const session = safeStorage(() => globalThis.sessionStorage);\n const identity = resolveIdentity(local, session);\n\n let status: RecorderStatus = 'idle';\n let stopRecording: (() => void) | undefined;\n let pageCount = identity.pageCount;\n\n if (!isSampledIn(identity.visitorId, options.sampleRate)) {\n // Decided from the visitor id, so this answer is stable across pages.\n return inertHandle('sampled-out', identity.sessionId);\n }\n\n if (inCooldown(session)) {\n // The previous page was told this session may not be started. That answer\n // will not have changed a page load later.\n if (options.debug) console.warn('[anyreplay] not recording: ingest refused a new session recently');\n return inertHandle('stopped', identity.sessionId);\n }\n\n const transport = new Transport(\n options,\n {\n projectKey: options.projectKey,\n sessionId: identity.sessionId,\n visitorId: identity.visitorId,\n initialSeq: identity.nextSeq,\n },\n {\n onSeqReserved: (next) => reserveSeq(session, next),\n onStopped: (reason) => {\n status = 'stopped';\n stopRecording?.();\n stopRecording = undefined;\n // Only the verdict about the session itself is remembered across pages.\n // A transport failure or an origin problem is either transient or one\n // request per page load to notice it is fixed; a full quota is neither.\n if (reason === 'rejected_402') startCooldown(session);\n if (options.debug) console.warn(`[anyreplay] recording stopped: ${reason}`);\n },\n },\n );\n\n const collectMeta = (): SessionMeta => ({\n startedAt: Date.now(),\n url: safeLocation(),\n lang: typeof navigator !== 'undefined' ? navigator.language : undefined,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n screenWidth: typeof window !== 'undefined' ? window.innerWidth : undefined,\n screenHeight: typeof window !== 'undefined' ? window.innerHeight : undefined,\n referrer: typeof document !== 'undefined' ? document.referrer || undefined : undefined,\n // The cap is a decision about starting a session, so it goes only where\n // ingest makes that decision: chunk 0. A resumed page starts later.\n ...(options.maxSessionsPerMonth !== undefined && identity.nextSeq === 0\n ? { sessionCap: options.maxSessionsPerMonth }\n : {}),\n });\n\n const recentClicks: { x: number; y: number; t: number }[] = [];\n\n const noteInteraction = (event: RecordedEvent): void => {\n // rrweb IncrementalSnapshot(3) with MouseInteraction(2) source carries clicks.\n const data = event.data as { source?: number; type?: number; x?: number; y?: number } | undefined;\n if (event.type !== 3 || data?.source !== 2 || typeof data.x !== 'number') return;\n\n const now = event.timestamp;\n recentClicks.push({ x: data.x, y: data.y ?? 0, t: now });\n while (recentClicks.length > 0 && now - recentClicks[0]!.t > RAGE_CLICK_WINDOW_MS) recentClicks.shift();\n\n if (recentClicks.length >= RAGE_CLICK_COUNT) {\n const first = recentClicks[0]!;\n const clustered = recentClicks.every(\n (c) => Math.abs(c.x - first.x) < RAGE_CLICK_RADIUS_PX && Math.abs(c.y - first.y) < RAGE_CLICK_RADIUS_PX,\n );\n if (clustered) transport.mergeFlags({ hasRageClick: true });\n }\n };\n\n /* ----------------------------- custom events ---------------------------- */\n\n const pending: { tag: string; payload: unknown }[] = [];\n let draining = false;\n let drainScheduled = false;\n\n /**\n * Hands the queue of waiting events to rrweb, in order.\n *\n * `addCustomEvent` throws until rrweb has finished its first snapshot,\n * which it takes on `load` when the recorder starts in a still-loading\n * document — and it flips to accepting only after the snapshot's own\n * events have been emitted, so draining from inside `emit` can be refused\n * too. A refusal is retried on the next event and, in case no event comes,\n * on a timer. A queued event is stamped with the time it is handed over,\n * not the time `track` was called: a marker a few hundred milliseconds late\n * is still on the timeline, and one dated before the snapshot is not.\n */\n const drainPending = (): void => {\n if (draining || pending.length === 0) return;\n draining = true;\n try {\n while (pending.length > 0) {\n const next = pending[0]!;\n record.addCustomEvent(next.tag, next.payload);\n pending.shift();\n }\n } catch {\n if (!drainScheduled && status === 'recording') {\n drainScheduled = true;\n setTimeout(() => { drainScheduled = false; drainPending(); }, 50);\n }\n } finally {\n draining = false;\n }\n };\n\n const emitCustom = (tag: string, payload: unknown): void => {\n if (status === 'stopped') return;\n if (status === 'recording') {\n try {\n record.addCustomEvent(tag, payload);\n return;\n } catch {\n /* not emitting yet — queue it */\n }\n }\n if (pending.length >= MAX_PENDING_EVENTS) {\n if (options.debug) console.warn(`[anyreplay] dropped ${tag}: too many events before recording started`);\n return;\n }\n pending.push({ tag, payload });\n };\n\n /* ------------------------------ navigation ------------------------------ */\n\n let lastUrl = safeLocation();\n\n /**\n * A route change in a single-page app is a page view.\n *\n * rrweb records the DOM mutations that come with it, but nothing in the\n * stream says \"this is a new page\" — so the marker is emitted here, and\n * ingest indexes it for the player. Same-URL changes are ignored: routers\n * call `replaceState` for scroll positions and query tweaks, and each of\n * those is not a page.\n */\n const noteNavigation = (): void => {\n const url = safeLocation();\n if (!url || url === lastUrl) return;\n lastUrl = url;\n pageCount += 1;\n notePageCount(session, pageCount);\n transport.mergeFlags({ pageCount });\n emitCustom(NAVIGATE_TAG, { url, title: typeof document !== 'undefined' ? document.title : '' });\n };\n\n const begin = (): void => {\n if (status === 'recording' || status === 'stopped') return;\n status = 'recording';\n transport.setMeta(collectMeta());\n // The page the recorder starts on is a page view. Without this the\n // counter only ever reflects in-app navigations, so a single-page visit\n // reports zero pages — and on a resumed session it is the previous page's\n // count plus one, so the hop is visible.\n transport.mergeFlags({ pageCount });\n transport.start();\n\n stopRecording = record({\n emit: (event) => {\n const typed = event as unknown as RecordedEvent;\n noteInteraction(typed);\n touchSession(session, typed.timestamp);\n transport.push(typed);\n drainPending();\n },\n maskAllInputs: options.maskAllInputs,\n maskTextClass: options.maskClass,\n blockClass: options.blockClass,\n // Passwords are never recorded, regardless of configuration.\n maskInputOptions: { password: true, email: true, tel: true },\n // Canvas capture is expensive and off unless a customer opts in later.\n recordCanvas: false,\n collectFonts: false,\n });\n // Every page begins with a full snapshot (rrweb takes one on start), so\n // events tracked before this point land right after it.\n drainPending();\n\n attachLifecycleHooks();\n };\n\n const attachLifecycleHooks = (): void => {\n if (typeof window === 'undefined') return;\n\n // pagehide is the reliable end-of-page signal; unload does not fire on\n // mobile Safari and beforeunload breaks the back/forward cache.\n window.addEventListener('pagehide', () => { transport.flushWithBeacon(); }, { capture: true });\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') transport.flushWithBeacon();\n });\n window.addEventListener('error', () => transport.mergeFlags({ hasError: true }));\n window.addEventListener('unhandledrejection', () => transport.mergeFlags({ hasError: true }));\n\n // Wrapped after the original runs, so `location` already shows the new URL.\n const patch = (method: 'pushState' | 'replaceState'): void => {\n const original = history[method].bind(history);\n history[method] = function patched(...args: Parameters<History['pushState']>) {\n const result = original(...args);\n noteNavigation();\n return result;\n };\n };\n patch('pushState');\n patch('replaceState');\n window.addEventListener('popstate', noteNavigation);\n };\n\n if (options.requireConsent) {\n status = 'awaiting-consent';\n } else {\n begin();\n }\n\n return {\n status: () => status,\n sessionId: () => identity.sessionId,\n consent: (granted) => {\n if (granted) begin();\n else transport.stop('consent_withdrawn');\n },\n identify: (traits) => {\n if (!traits.userId && !traits.email) return;\n void fetch(`${options.ingestUrl}/v1/ingest/identify`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'omit',\n body: JSON.stringify({\n projectKey: options.projectKey,\n sessionId: identity.sessionId,\n ...traits,\n }),\n }).catch(() => { /* identity is best-effort; never surface to the page */ });\n },\n track: (name, properties) => {\n const payload = validateTrack(name, properties);\n if (typeof payload === 'string') {\n if (options.debug) console.warn(`[anyreplay] track() ignored: ${payload}`);\n return;\n }\n emitCustom(TRACK_TAG, payload);\n },\n stop: () => transport.stop('stopped_by_page'),\n flush: () => transport.flush(),\n };\n}\n\nfunction safeLocation(): string | undefined {\n try {\n return typeof location !== 'undefined' ? location.href : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction inertHandle(status: RecorderStatus, sessionId: string | null): RecorderHandle {\n return {\n status: () => status,\n sessionId: () => sessionId,\n consent: () => {},\n identify: () => {},\n track: () => {},\n stop: () => {},\n flush: async () => {},\n };\n}\n","export interface AnyReplayOptions {\n /** Public project key from the dashboard. */\n projectKey: string;\n /** Ingest endpoint. Override only for self-hosted deployments. */\n ingestUrl?: string;\n /** Fraction of visitors recorded, 0–1. Decided once per visitor, not per page. */\n sampleRate?: number;\n /** Mask every text input. Leaving this on is the supported configuration. */\n maskAllInputs?: boolean;\n /** Elements with this class have their text masked. */\n maskClass?: string;\n /** Elements with this class are not recorded at all. */\n blockClass?: string;\n /** Wait for `anyreplay('consent', true)` before recording anything. */\n requireConsent?: boolean;\n /** Flush when the buffer reaches this many events. */\n maxEventsPerChunk?: number;\n /** Flush at least this often, in milliseconds. */\n flushIntervalMs?: number;\n /** Recording stops after this many consecutive transport failures. */\n maxConsecutiveFailures?: number;\n /**\n * The most sessions this project may record per calendar month (UTC).\n *\n * Sent with the first chunk of every new session; ingest refuses a session\n * that would exceed it with 402 `session_cap_reached` and the recorder stops\n * for that visit. A cap set in the dashboard also applies, and the lower one\n * wins. Positive integer, at most 1,000,000.\n */\n maxSessionsPerMonth?: number;\n debug?: boolean;\n}\n\nexport interface ResolvedOptions extends Required<Omit<AnyReplayOptions, 'ingestUrl' | 'maxSessionsPerMonth'>> {\n ingestUrl: string;\n maxSessionsPerMonth?: number;\n}\n\nexport const DEFAULTS: Omit<ResolvedOptions, 'projectKey'> = {\n ingestUrl: 'https://in.anyreplay.com',\n sampleRate: 1,\n // Default-deny. Recording a customer's password field once is a breach; the\n // cost of the safe default is a configuration line for the rare field that\n // genuinely needs to be visible.\n maskAllInputs: true,\n maskClass: 'ar-mask',\n blockClass: 'ar-block',\n requireConsent: false,\n maxEventsPerChunk: 200,\n flushIntervalMs: 5000,\n maxConsecutiveFailures: 5,\n debug: false,\n};\n\nexport class ConfigError extends Error {}\n\nconst KEY_PATTERN = /^ar_pk_(live|test)_[0-9a-f]{24}$/;\n/** Matches what ingest's schema accepts, so a value that passes here is never a 422 later. */\nconst MAX_SESSION_CAP = 1_000_000;\n\nexport function resolveOptions(input: AnyReplayOptions): ResolvedOptions {\n if (!input || typeof input !== 'object') throw new ConfigError('anyreplay: options object required');\n if (!KEY_PATTERN.test(input.projectKey ?? '')) {\n throw new ConfigError('anyreplay: projectKey looks wrong — copy it from the dashboard');\n }\n\n const sampleRate = input.sampleRate ?? DEFAULTS.sampleRate;\n if (!(sampleRate >= 0 && sampleRate <= 1)) {\n throw new ConfigError('anyreplay: sampleRate must be between 0 and 1');\n }\n\n const cap = input.maxSessionsPerMonth;\n if (cap !== undefined && !(Number.isInteger(cap) && cap >= 1 && cap <= MAX_SESSION_CAP)) {\n throw new ConfigError(`anyreplay: maxSessionsPerMonth must be a whole number between 1 and ${MAX_SESSION_CAP}`);\n }\n\n return {\n ...DEFAULTS,\n ...input,\n projectKey: input.projectKey,\n sampleRate,\n ingestUrl: (input.ingestUrl ?? DEFAULTS.ingestUrl).replace(/\\/+$/, ''),\n // A caller who explicitly passes false gets what they asked for; anything\n // else (including undefined) keeps masking on.\n maskAllInputs: input.maskAllInputs === false ? false : true,\n };\n}\n","/**\n * Custom events: the moments a page tags with `track()`.\n *\n * They travel inside the rrweb stream as rrweb's own Custom event type, so\n * they carry the recording's clock and replay in order with everything else.\n * Ingest recognises them by these tags; the names are a contract with\n * apps/ingest/src/custom-events.ts.\n */\nexport const TRACK_TAG = 'anyreplay.track';\nexport const NAVIGATE_TAG = 'anyreplay.navigate';\n\n/** Short and URL-safe: an event name is a label, not a message. Ingest applies the same rule. */\nexport const EVENT_NAME_PATTERN = /^[A-Za-z0-9_.:-]{1,64}$/;\n/** Properties are stored with the event and indexed by nobody; a bag bigger than this is a payload, not context. */\nexport const MAX_PROPERTIES_BYTES = 4 * 1024;\n\nexport interface TrackPayload {\n name: string;\n properties: Record<string, unknown>;\n}\n\n/**\n * Checks what the page passed to `track()`, returning the payload to send or\n * the reason it was refused. Never throws: the page's own code is calling\n * this on a click handler, and a recorder that throws there breaks the click.\n */\nexport function validateTrack(name: unknown, properties: unknown): TrackPayload | string {\n if (typeof name !== 'string' || !EVENT_NAME_PATTERN.test(name)) {\n return `event name must be 1-64 characters of [A-Za-z0-9_.:-], got ${JSON.stringify(name)}`;\n }\n if (properties === undefined || properties === null) return { name, properties: {} };\n if (typeof properties !== 'object' || Array.isArray(properties)) {\n return `properties for \"${name}\" must be a plain object`;\n }\n let serialised: string;\n try {\n serialised = JSON.stringify(properties);\n } catch {\n return `properties for \"${name}\" are not JSON-serialisable`;\n }\n if (serialised === undefined || byteLength(serialised) > MAX_PROPERTIES_BYTES) {\n return `properties for \"${name}\" exceed ${MAX_PROPERTIES_BYTES} bytes once serialised`;\n }\n // The parsed copy, not the original: a getter or a class instance on the\n // caller's object must not reach the wire, and a later mutation must not\n // change what was tracked.\n return { name, properties: JSON.parse(serialised) as Record<string, unknown> };\n}\n\nfunction byteLength(text: string): number {\n return typeof TextEncoder === 'function' ? new TextEncoder().encode(text).length : text.length * 3;\n}\n","/**\n * FNV-1a. Small, fast, and good enough to spread visitor ids uniformly across\n * the unit interval — this is a bucketing decision, not a security one.\n */\nexport function hashToUnitInterval(input: string): number {\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return hash / 0xffffffff;\n}\n\n/**\n * Decides sampling from the visitor id rather than a coin flip.\n *\n * The same visitor therefore gets the same answer on every page and every\n * visit: a recorded journey stays whole instead of appearing as disconnected\n * fragments, and changing the rate moves a predictable slice of the population.\n */\nexport function isSampledIn(visitorId: string, sampleRate: number): boolean {\n if (sampleRate >= 1) return true;\n if (sampleRate <= 0) return false;\n return hashToUnitInterval(visitorId) < sampleRate;\n}\n","import type { ResolvedOptions } from './config.js';\n\nexport interface RecordedEvent {\n type: number;\n timestamp: number;\n data?: unknown;\n}\n\nexport interface SessionMeta {\n startedAt: number;\n url?: string;\n lang?: string;\n userAgent?: string;\n screenWidth?: number;\n screenHeight?: number;\n referrer?: string;\n /** `maxSessionsPerMonth`, sent only with chunk 0 of a new session. */\n sessionCap?: number;\n}\n\nexport interface ChunkFlags {\n hasError?: boolean;\n hasRageClick?: boolean;\n pageCount?: number;\n}\n\nexport interface TransportContext {\n projectKey: string;\n sessionId: string;\n visitorId: string;\n /** The first chunk number to use. Non-zero when a page resumes a session. */\n initialSeq?: number;\n}\n\n/** How many times one flush may move to a new chunk number before giving up. */\nconst MAX_STALE_RECOVERIES = 3;\n\n/**\n * The first free chunk number, when ingest says the one just sent was taken.\n *\n * Ingest answers a repeated (session, seq) with 202 and `duplicate: true`,\n * because to the server it looks like a retry. When this transport had never\n * sent that number before, it was not a retry: the number was used by an\n * earlier page of the session, or by another tab sharing it, and the events\n * were discarded. Servers that know the answer say where numbering continues.\n */\nasync function staleSeqHint(response: Response, sent: number): Promise<number | undefined> {\n try {\n if (typeof response.json !== 'function') return undefined;\n const reply = await response.json() as { duplicate?: unknown; nextSeq?: unknown };\n if (reply.duplicate !== true) return undefined;\n const next = reply.nextSeq;\n return typeof next === 'number' && Number.isInteger(next) && next > sent ? next : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport type TransportState = 'open' | 'stopped';\n\n/**\n * The Fetch standard caps the total body size of in-flight `keepalive`\n * requests at 64 KiB, and a browser rejects an oversized one outright — the\n * promise rejects with a bare TypeError, indistinguishable from being offline.\n *\n * The margin below is for the request headers, which count towards the same\n * budget, and for a second flush overlapping the first.\n */\nconst KEEPALIVE_BODY_LIMIT_BYTES = 56 * 1024;\n\n/**\n * Whether a payload may be sent with `keepalive`.\n *\n * Deciding this from the event *count* is the trap: the first chunk of every\n * session is a Meta plus a single full DOM snapshot — two events, and on a real\n * page routinely several hundred kilobytes. Sizing by count marks it as small,\n * the browser refuses it, and the recorder counts a network failure it can\n * never recover from; after `maxConsecutiveFailures` it stops for good. The\n * symptom is a site that records nothing at all while the snippet looks\n * perfectly installed.\n */\nexport function withinKeepaliveLimit(payload: string): boolean {\n const bytes = typeof TextEncoder === 'function'\n ? new TextEncoder().encode(payload).length\n // No TextEncoder: assume the worst rather than risk the rejection.\n : payload.length * 3;\n return bytes <= KEEPALIVE_BODY_LIMIT_BYTES;\n}\n\nexport interface TransportHooks {\n onStopped?: (reason: string) => void;\n onSent?: (seq: number, eventCount: number) => void;\n /** Called with the next free chunk number before a request using the current one leaves. */\n onSeqReserved?: (nextSeq: number) => void;\n}\n\n/**\n * Ships buffered events to ingest.\n *\n * Three properties matter more than throughput here, because this code runs\n * inside somebody else's product:\n *\n * - It must never throw into the host page.\n * - It must never keep retrying a request the server has rejected on its\n * merits (a bad key, a disallowed origin) — that is an infinite loop.\n * - It must not lose the tail of a session when the tab closes.\n */\nexport class Transport {\n private buffer: RecordedEvent[] = [];\n private seq = 0;\n private consecutiveFailures = 0;\n private state: TransportState = 'open';\n private timer: ReturnType<typeof setInterval> | undefined;\n private pendingMeta: SessionMeta | undefined;\n private flags: ChunkFlags = {};\n private inFlight = false;\n /** The chunk number of the last request that left, to tell a retry from a first attempt. */\n private lastAttemptedSeq = -1;\n private staleRecoveries = 0;\n\n constructor(\n private readonly options: ResolvedOptions,\n private readonly context: TransportContext,\n private readonly hooks: TransportHooks = {},\n ) {\n this.seq = context.initialSeq ?? 0;\n }\n\n get isStopped(): boolean {\n return this.state === 'stopped';\n }\n\n get bufferedCount(): number {\n return this.buffer.length;\n }\n\n get sentChunks(): number {\n return this.seq;\n }\n\n /** Attaches metadata to the next chunk. Sent once, with the session's first chunk. */\n setMeta(meta: SessionMeta): void {\n this.pendingMeta = meta;\n }\n\n mergeFlags(flags: ChunkFlags): void {\n this.flags = { ...this.flags, ...flags };\n }\n\n start(): void {\n if (this.timer) return;\n this.timer = setInterval(() => void this.flush(), this.options.flushIntervalMs);\n // Never hold a Node process open; harmless in browsers.\n (this.timer as unknown as { unref?: () => void }).unref?.();\n }\n\n stop(reason: string): void {\n this.state = 'stopped';\n if (this.timer) clearInterval(this.timer);\n this.timer = undefined;\n this.buffer = [];\n this.hooks.onStopped?.(reason);\n }\n\n push(event: RecordedEvent): void {\n if (this.state === 'stopped') return;\n this.buffer.push(event);\n if (this.buffer.length >= this.options.maxEventsPerChunk) void this.flush();\n }\n\n private body(events: RecordedEvent[]): string {\n return JSON.stringify({\n projectKey: this.context.projectKey,\n sessionId: this.context.sessionId,\n visitorId: this.context.visitorId,\n seq: this.seq,\n events,\n ...(this.pendingMeta ? { meta: this.pendingMeta } : {}),\n ...(Object.keys(this.flags).length > 0 ? { flags: this.flags } : {}),\n });\n }\n\n /** Sends whatever is buffered. Safe to call when there is nothing to send. */\n async flush(): Promise<void> {\n if (this.state === 'stopped' || this.inFlight || this.buffer.length === 0) return;\n\n this.inFlight = true;\n const events = this.buffer;\n this.buffer = [];\n let resend = false;\n\n try {\n const retry = this.lastAttemptedSeq === this.seq;\n this.lastAttemptedSeq = this.seq;\n // Reserved before the request leaves: a page that is closed mid-flight\n // must not hand this number to the next page of the same session.\n this.hooks.onSeqReserved?.(this.seq + 1);\n const payload = this.body(events);\n const response = await fetch(`${this.options.ingestUrl}/v1/ingest/events`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: payload,\n // Ingest is unauthenticated by design; sending credentials would be a\n // cross-site cookie leak for no benefit.\n credentials: 'omit',\n keepalive: withinKeepaliveLimit(payload),\n });\n\n if (response.ok) {\n const nextSeq = retry ? undefined : await staleSeqHint(response, this.seq);\n if (nextSeq !== undefined && this.staleRecoveries < MAX_STALE_RECOVERIES) {\n // These events were new and the server discarded them. Send them\n // again under the first number it has not seen.\n this.staleRecoveries += 1;\n this.seq = nextSeq;\n this.requeue(events);\n resend = true;\n return;\n }\n this.staleRecoveries = 0;\n this.seq += 1;\n this.pendingMeta = undefined;\n this.consecutiveFailures = 0;\n this.hooks.onSent?.(this.seq - 1, events.length);\n return;\n }\n\n // 4xx other than 429 is a verdict, not a hiccup: the key is wrong, the\n // origin is not allowed, or the payload is malformed. Retrying cannot\n // change the answer, so stop instead of hammering the endpoint forever.\n if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n this.stop(`rejected_${response.status}`);\n return;\n }\n\n this.requeue(events);\n this.registerFailure();\n } catch {\n // Network error: the user may simply be offline. Keep the events.\n this.requeue(events);\n this.registerFailure();\n } finally {\n this.inFlight = false;\n if (resend) void this.flush();\n }\n }\n\n /**\n * Puts a failed batch back at the front of the queue.\n *\n * Bounded on purpose: a long offline period must not grow the buffer until\n * the tab runs out of memory. Older events are dropped first — a replay\n * missing its beginning is still useful; a crashed page is not.\n */\n private requeue(events: RecordedEvent[]): void {\n const limit = this.options.maxEventsPerChunk * 10;\n this.buffer = [...events, ...this.buffer].slice(-limit);\n }\n\n private registerFailure(): void {\n this.consecutiveFailures += 1;\n if (this.consecutiveFailures >= this.options.maxConsecutiveFailures) {\n this.stop('too_many_failures');\n }\n }\n\n /**\n * Last-gasp send when the page is going away.\n *\n * `fetch` is cancelled once the document unloads, so the tail of every\n * session would be lost. `sendBeacon` hands the payload to the browser, which\n * delivers it after the page is gone.\n */\n flushWithBeacon(): boolean {\n if (this.state === 'stopped' || this.buffer.length === 0) return false;\n\n const events = this.buffer;\n const payload = this.body(events);\n this.buffer = [];\n\n try {\n if (typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function') {\n // text/plain avoids a CORS preflight, which cannot complete during unload.\n this.hooks.onSeqReserved?.(this.seq + 1);\n const blob = new Blob([payload], { type: 'text/plain;charset=UTF-8' });\n const queued = navigator.sendBeacon(`${this.options.ingestUrl}/v1/ingest/events`, blob);\n if (queued) {\n this.seq += 1;\n this.pendingMeta = undefined;\n return true;\n }\n }\n } catch {\n /* fall through */\n }\n\n this.buffer = events;\n return false;\n }\n}\n","const VISITOR_KEY = 'anyreplay.vid';\nconst SESSION_KEY = 'anyreplay.sid';\nconst SESSION_TS_KEY = 'anyreplay.sts';\n/** The next chunk number the current session may use. */\nconst SEQ_KEY = 'anyreplay.seq';\n/** Page views so far in the current session, so a reload continues the count. */\nconst PAGE_KEY = 'anyreplay.pc';\n/** Until when (epoch ms) this tab should not try to record, after ingest refused a new session. */\nconst COOLDOWN_KEY = 'anyreplay.cd';\n\n/**\n * How long a tab waits after a 402 before trying to record again.\n *\n * A quota or cap is a monthly fact; retrying on every page load would put one\n * refused request per navigation on ingest, from every visitor, for the rest\n * of the month. Two minutes is long enough to make that negligible and short\n * enough that an upgrade takes effect while the customer is still watching.\n */\nconst QUOTA_COOLDOWN_MS = 2 * 60 * 1000;\n\n/** A new session starts after this much inactivity, matching common analytics. */\nconst SESSION_IDLE_MS = 30 * 60 * 1000;\n\nfunction randomId(bytes = 16): string {\n const array = new Uint8Array(bytes);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(array);\n } else {\n for (let i = 0; i < bytes; i += 1) array[i] = Math.floor(Math.random() * 256);\n }\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/** RFC 4122 v4, formatted. Ingest requires a UUID for the session id. */\nexport function uuidv4(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n const hex = randomId(16).split('');\n hex[12] = '4';\n hex[16] = ((parseInt(hex[16]!, 16) & 0x3) | 0x8).toString(16);\n const s = hex.join('');\n return `${s.slice(0, 8)}-${s.slice(8, 12)}-${s.slice(12, 16)}-${s.slice(16, 20)}-${s.slice(20)}`;\n}\n\ninterface Storage {\n get(key: string): string | null;\n set(key: string, value: string): void;\n remove(key: string): void;\n}\n\n/**\n * Storage that degrades instead of throwing.\n *\n * `localStorage` throws on access in some privacy modes, and a recorder that\n * throws inside the customer's page is far worse than one that stops recording.\n */\nexport function safeStorage(source: () => globalThis.Storage | undefined): Storage {\n const read = (): globalThis.Storage | undefined => {\n try { return source(); } catch { return undefined; }\n };\n return {\n get: (key) => { try { return read()?.getItem(key) ?? null; } catch { return null; } },\n set: (key, value) => { try { read()?.setItem(key, value); } catch { /* ignore */ } },\n remove: (key) => { try { read()?.removeItem(key); } catch { /* ignore */ } },\n };\n}\n\nexport interface Identity {\n visitorId: string;\n sessionId: string;\n isNewSession: boolean;\n /** The chunk number to continue from: 0 for a new session, later for a resumed one. */\n nextSeq: number;\n /** Which page view of the session this is: 1 for a new session, previous + 1 for a resumed one. */\n pageCount: number;\n}\n\n/**\n * Resolves who this is and which session they are in.\n *\n * The visitor id persists across visits (it is what sampling is decided on, so\n * a sampled-out visitor stays sampled out rather than flickering). The session\n * id resets after a period of inactivity.\n */\nexport function resolveIdentity(\n local: Storage,\n session: Storage,\n now: number = Date.now(),\n): Identity {\n let visitorId = local.get(VISITOR_KEY);\n if (!visitorId || !/^[A-Za-z0-9_-]{8,64}$/.test(visitorId)) {\n visitorId = `v${randomId(12)}`;\n local.set(VISITOR_KEY, visitorId);\n }\n\n const previousId = session.get(SESSION_KEY);\n const previousTs = Number(session.get(SESSION_TS_KEY) ?? 0);\n const expired = !previousId || !previousTs || now - previousTs > SESSION_IDLE_MS;\n\n const sessionId = expired ? uuidv4() : previousId;\n session.set(SESSION_KEY, sessionId);\n session.set(SESSION_TS_KEY, String(now));\n\n // A resumed session continues its chunk numbering. Starting again at 0 on\n // every page load collides with chunks the server already holds for this\n // session, and ingest drops a repeated (session, seq) as a retry — silently\n // losing everything recorded after the first page.\n const storedSeq = Number(session.get(SEQ_KEY));\n const nextSeq = !expired && Number.isInteger(storedSeq) && storedSeq > 0 ? storedSeq : 0;\n session.set(SEQ_KEY, String(nextSeq));\n\n // A full navigation is a page view of the same session. Starting the count\n // at 1 on every page would report a ten-page visit as one page.\n const storedPages = Number(session.get(PAGE_KEY));\n const pageCount = !expired && Number.isInteger(storedPages) && storedPages > 0 ? storedPages + 1 : 1;\n session.set(PAGE_KEY, String(pageCount));\n\n return { visitorId, sessionId, isNewSession: expired, nextSeq, pageCount };\n}\n\n/** Records the page count so the next page of the session continues from it. */\nexport function notePageCount(session: { set(key: string, value: string): void }, count: number): void {\n session.set(PAGE_KEY, String(count));\n}\n\n/** True while this tab is still inside the cool-down that followed a 402. */\nexport function inCooldown(session: Storage, now: number = Date.now()): boolean {\n const until = Number(session.get(COOLDOWN_KEY));\n return Number.isFinite(until) && until > now;\n}\n\nexport function startCooldown(session: Storage, now: number = Date.now()): void {\n session.set(COOLDOWN_KEY, String(now + QUOTA_COOLDOWN_MS));\n}\n\n/** Records that chunk numbers below `next` are taken, before the request that uses one leaves. */\nexport function reserveSeq(session: { set(key: string, value: string): void }, next: number): void {\n session.set(SEQ_KEY, String(next));\n}\n\nexport function touchSession(session: Storage, now: number = Date.now()): void {\n session.set(SESSION_TS_KEY, String(now));\n}\n\nexport { VISITOR_KEY, SESSION_KEY, SESSION_TS_KEY, SEQ_KEY, PAGE_KEY, COOLDOWN_KEY, SESSION_IDLE_MS, QUOTA_COOLDOWN_MS };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAuB;;;ACsChB,IAAM,WAAgD;AAAA,EAC3D,WAAW;AAAA,EACX,YAAY;AAAA;AAAA;AAAA;AAAA,EAIZ,eAAe;AAAA,EACf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,wBAAwB;AAAA,EACxB,OAAO;AACT;AAEO,IAAM,cAAN,cAA0B,MAAM;AAAC;AAExC,IAAM,cAAc;AAEpB,IAAM,kBAAkB;AAEjB,SAAS,eAAe,OAA0C;AA5DzE;AA6DE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,OAAM,IAAI,YAAY,oCAAoC;AACnG,MAAI,CAAC,YAAY,MAAK,WAAM,eAAN,YAAoB,EAAE,GAAG;AAC7C,UAAM,IAAI,YAAY,qEAAgE;AAAA,EACxF;AAEA,QAAM,cAAa,WAAM,eAAN,YAAoB,SAAS;AAChD,MAAI,EAAE,cAAc,KAAK,cAAc,IAAI;AACzC,UAAM,IAAI,YAAY,+CAA+C;AAAA,EACvE;AAEA,QAAM,MAAM,MAAM;AAClB,MAAI,QAAQ,UAAa,EAAE,OAAO,UAAU,GAAG,KAAK,OAAO,KAAK,OAAO,kBAAkB;AACvF,UAAM,IAAI,YAAY,uEAAuE,eAAe,EAAE;AAAA,EAChH;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,YAAY,MAAM;AAAA,IAClB;AAAA,IACA,aAAY,WAAM,cAAN,YAAmB,SAAS,WAAW,QAAQ,QAAQ,EAAE;AAAA;AAAA;AAAA,IAGrE,eAAe,MAAM,kBAAkB,QAAQ,QAAQ;AAAA,EACzD;AACF;;;AC9EO,IAAM,YAAY;AAClB,IAAM,eAAe;AAGrB,IAAM,qBAAqB;AAE3B,IAAM,uBAAuB,IAAI;AAYjC,SAAS,cAAc,MAAe,YAA4C;AACvF,MAAI,OAAO,SAAS,YAAY,CAAC,mBAAmB,KAAK,IAAI,GAAG;AAC9D,WAAO,8DAA8D,KAAK,UAAU,IAAI,CAAC;AAAA,EAC3F;AACA,MAAI,eAAe,UAAa,eAAe,KAAM,QAAO,EAAE,MAAM,YAAY,CAAC,EAAE;AACnF,MAAI,OAAO,eAAe,YAAY,MAAM,QAAQ,UAAU,GAAG;AAC/D,WAAO,mBAAmB,IAAI;AAAA,EAChC;AACA,MAAI;AACJ,MAAI;AACF,iBAAa,KAAK,UAAU,UAAU;AAAA,EACxC,SAAQ;AACN,WAAO,mBAAmB,IAAI;AAAA,EAChC;AACA,MAAI,eAAe,UAAa,WAAW,UAAU,IAAI,sBAAsB;AAC7E,WAAO,mBAAmB,IAAI,YAAY,oBAAoB;AAAA,EAChE;AAIA,SAAO,EAAE,MAAM,YAAY,KAAK,MAAM,UAAU,EAA6B;AAC/E;AAEA,SAAS,WAAW,MAAsB;AACxC,SAAO,OAAO,gBAAgB,aAAa,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE,SAAS,KAAK,SAAS;AACnG;;;AC/CO,SAAS,mBAAmB,OAAuB;AACxD,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,YAAQ,MAAM,WAAW,CAAC;AAC1B,WAAO,KAAK,KAAK,MAAM,QAAU,MAAM;AAAA,EACzC;AACA,SAAO,OAAO;AAChB;AASO,SAAS,YAAY,WAAmB,YAA6B;AAC1E,MAAI,cAAc,EAAG,QAAO;AAC5B,MAAI,cAAc,EAAG,QAAO;AAC5B,SAAO,mBAAmB,SAAS,IAAI;AACzC;;;ACWA,IAAM,uBAAuB;AAW7B,eAAe,aAAa,UAAoB,MAA2C;AACzF,MAAI;AACF,QAAI,OAAO,SAAS,SAAS,WAAY,QAAO;AAChD,UAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,QAAI,MAAM,cAAc,KAAM,QAAO;AACrC,UAAM,OAAO,MAAM;AACnB,WAAO,OAAO,SAAS,YAAY,OAAO,UAAU,IAAI,KAAK,OAAO,OAAO,OAAO;AAAA,EACpF,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAYA,IAAM,6BAA6B,KAAK;AAajC,SAAS,qBAAqB,SAA0B;AAC7D,QAAM,QAAQ,OAAO,gBAAgB,aACjC,IAAI,YAAY,EAAE,OAAO,OAAO,EAAE,SAElC,QAAQ,SAAS;AACrB,SAAO,SAAS;AAClB;AAoBO,IAAM,YAAN,MAAgB;AAAA,EAarB,YACmB,SACA,SACA,QAAwB,CAAC,GAC1C;AAHiB;AACA;AACA;AAfnB,wBAAQ,UAA0B,CAAC;AACnC,wBAAQ,OAAM;AACd,wBAAQ,uBAAsB;AAC9B,wBAAQ,SAAwB;AAChC,wBAAQ;AACR,wBAAQ;AACR,wBAAQ,SAAoB,CAAC;AAC7B,wBAAQ,YAAW;AAEnB;AAAA,wBAAQ,oBAAmB;AAC3B,wBAAQ,mBAAkB;AAtH5B;AA6HI,SAAK,OAAM,aAAQ,eAAR,YAAsB;AAAA,EACnC;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAI,gBAAwB;AAC1B,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,QAAQ,MAAyB;AAC/B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,WAAW,OAAyB;AAClC,SAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,MAAM;AAAA,EACzC;AAAA,EAEA,QAAc;AArJhB;AAsJI,QAAI,KAAK,MAAO;AAChB,SAAK,QAAQ,YAAY,MAAM,KAAK,KAAK,MAAM,GAAG,KAAK,QAAQ,eAAe;AAE9E,KAAC,gBAAK,OAA4C,UAAjD;AAAA,EACH;AAAA,EAEA,KAAK,QAAsB;AA5J7B;AA6JI,SAAK,QAAQ;AACb,QAAI,KAAK,MAAO,eAAc,KAAK,KAAK;AACxC,SAAK,QAAQ;AACb,SAAK,SAAS,CAAC;AACf,qBAAK,OAAM,cAAX,4BAAuB;AAAA,EACzB;AAAA,EAEA,KAAK,OAA4B;AAC/B,QAAI,KAAK,UAAU,UAAW;AAC9B,SAAK,OAAO,KAAK,KAAK;AACtB,QAAI,KAAK,OAAO,UAAU,KAAK,QAAQ,kBAAmB,MAAK,KAAK,MAAM;AAAA,EAC5E;AAAA,EAEQ,KAAK,QAAiC;AAC5C,WAAO,KAAK,UAAU;AAAA,MACpB,YAAY,KAAK,QAAQ;AAAA,MACzB,WAAW,KAAK,QAAQ;AAAA,MACxB,WAAW,KAAK,QAAQ;AAAA,MACxB,KAAK,KAAK;AAAA,MACV;AAAA,MACA,GAAI,KAAK,cAAc,EAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AAAA,MACrD,GAAI,OAAO,KAAK,KAAK,KAAK,EAAE,SAAS,IAAI,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,IACpE,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAuB;AAvL/B;AAwLI,QAAI,KAAK,UAAU,aAAa,KAAK,YAAY,KAAK,OAAO,WAAW,EAAG;AAE3E,SAAK,WAAW;AAChB,UAAM,SAAS,KAAK;AACpB,SAAK,SAAS,CAAC;AACf,QAAI,SAAS;AAEb,QAAI;AACF,YAAM,QAAQ,KAAK,qBAAqB,KAAK;AAC7C,WAAK,mBAAmB,KAAK;AAG7B,uBAAK,OAAM,kBAAX,4BAA2B,KAAK,MAAM;AACtC,YAAM,UAAU,KAAK,KAAK,MAAM;AAChC,YAAM,WAAW,MAAM,MAAM,GAAG,KAAK,QAAQ,SAAS,qBAAqB;AAAA,QACzE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM;AAAA;AAAA;AAAA,QAGN,aAAa;AAAA,QACb,WAAW,qBAAqB,OAAO;AAAA,MACzC,CAAC;AAED,UAAI,SAAS,IAAI;AACf,cAAM,UAAU,QAAQ,SAAY,MAAM,aAAa,UAAU,KAAK,GAAG;AACzE,YAAI,YAAY,UAAa,KAAK,kBAAkB,sBAAsB;AAGxE,eAAK,mBAAmB;AACxB,eAAK,MAAM;AACX,eAAK,QAAQ,MAAM;AACnB,mBAAS;AACT;AAAA,QACF;AACA,aAAK,kBAAkB;AACvB,aAAK,OAAO;AACZ,aAAK,cAAc;AACnB,aAAK,sBAAsB;AAC3B,yBAAK,OAAM,WAAX,4BAAoB,KAAK,MAAM,GAAG,OAAO;AACzC;AAAA,MACF;AAKA,UAAI,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO,SAAS,WAAW,KAAK;AAC9E,aAAK,KAAK,YAAY,SAAS,MAAM,EAAE;AACvC;AAAA,MACF;AAEA,WAAK,QAAQ,MAAM;AACnB,WAAK,gBAAgB;AAAA,IACvB,SAAQ;AAEN,WAAK,QAAQ,MAAM;AACnB,WAAK,gBAAgB;AAAA,IACvB,UAAE;AACA,WAAK,WAAW;AAChB,UAAI,OAAQ,MAAK,KAAK,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,QAAQ,QAA+B;AAC7C,UAAM,QAAQ,KAAK,QAAQ,oBAAoB;AAC/C,SAAK,SAAS,CAAC,GAAG,QAAQ,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,KAAK;AAAA,EACxD;AAAA,EAEQ,kBAAwB;AAC9B,SAAK,uBAAuB;AAC5B,QAAI,KAAK,uBAAuB,KAAK,QAAQ,wBAAwB;AACnE,WAAK,KAAK,mBAAmB;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAA2B;AAjR7B;AAkRI,QAAI,KAAK,UAAU,aAAa,KAAK,OAAO,WAAW,EAAG,QAAO;AAEjE,UAAM,SAAS,KAAK;AACpB,UAAM,UAAU,KAAK,KAAK,MAAM;AAChC,SAAK,SAAS,CAAC;AAEf,QAAI;AACF,UAAI,OAAO,cAAc,eAAe,OAAO,UAAU,eAAe,YAAY;AAElF,yBAAK,OAAM,kBAAX,4BAA2B,KAAK,MAAM;AACtC,cAAM,OAAO,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACrE,cAAM,SAAS,UAAU,WAAW,GAAG,KAAK,QAAQ,SAAS,qBAAqB,IAAI;AACtF,YAAI,QAAQ;AACV,eAAK,OAAO;AACZ,eAAK,cAAc;AACnB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,SAAQ;AAAA,IAER;AAEA,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AACF;;;AC3SA,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AAEvB,IAAM,UAAU;AAEhB,IAAM,WAAW;AAEjB,IAAM,eAAe;AAUrB,IAAM,oBAAoB,IAAI,KAAK;AAGnC,IAAM,kBAAkB,KAAK,KAAK;AAElC,SAAS,SAAS,QAAQ,IAAY;AACpC,QAAM,QAAQ,IAAI,WAAW,KAAK;AAClC,MAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAC3D,WAAO,gBAAgB,KAAK;AAAA,EAC9B,OAAO;AACL,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK,EAAG,OAAM,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,EAC9E;AACA,SAAO,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC1E;AAGO,SAAS,SAAiB;AAC/B,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,OAAO,WAAW;AAAA,EAC3B;AACA,QAAM,MAAM,SAAS,EAAE,EAAE,MAAM,EAAE;AACjC,MAAI,EAAE,IAAI;AACV,MAAI,EAAE,KAAM,SAAS,IAAI,EAAE,GAAI,EAAE,IAAI,IAAO,GAAK,SAAS,EAAE;AAC5D,QAAM,IAAI,IAAI,KAAK,EAAE;AACrB,SAAO,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAChG;AAcO,SAAS,YAAY,QAAuD;AACjF,QAAM,OAAO,MAAsC;AACjD,QAAI;AAAE,aAAO,OAAO;AAAA,IAAG,SAAQ;AAAE,aAAO;AAAA,IAAW;AAAA,EACrD;AACA,SAAO;AAAA,IACL,KAAK,CAAC,QAAQ;AA9DlB;AA8DoB,UAAI;AAAE,gBAAO,gBAAK,MAAL,mBAAQ,QAAQ,SAAhB,YAAwB;AAAA,MAAM,SAAQ;AAAE,eAAO;AAAA,MAAM;AAAA,IAAE;AAAA,IACpF,KAAK,CAAC,KAAK,UAAU;AA/DzB;AA+D2B,UAAI;AAAE,mBAAK,MAAL,mBAAQ,QAAQ,KAAK;AAAA,MAAQ,SAAQ;AAAA,MAAe;AAAA,IAAE;AAAA,IACnF,QAAQ,CAAC,QAAQ;AAhErB;AAgEuB,UAAI;AAAE,mBAAK,MAAL,mBAAQ,WAAW;AAAA,MAAM,SAAQ;AAAA,MAAe;AAAA,IAAE;AAAA,EAC7E;AACF;AAmBO,SAAS,gBACd,OACA,SACA,MAAc,KAAK,IAAI,GACb;AAzFZ;AA0FE,MAAI,YAAY,MAAM,IAAI,WAAW;AACrC,MAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,SAAS,GAAG;AAC1D,gBAAY,IAAI,SAAS,EAAE,CAAC;AAC5B,UAAM,IAAI,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,aAAa,QAAQ,IAAI,WAAW;AAC1C,QAAM,aAAa,QAAO,aAAQ,IAAI,cAAc,MAA1B,YAA+B,CAAC;AAC1D,QAAM,UAAU,CAAC,cAAc,CAAC,cAAc,MAAM,aAAa;AAEjE,QAAM,YAAY,UAAU,OAAO,IAAI;AACvC,UAAQ,IAAI,aAAa,SAAS;AAClC,UAAQ,IAAI,gBAAgB,OAAO,GAAG,CAAC;AAMvC,QAAM,YAAY,OAAO,QAAQ,IAAI,OAAO,CAAC;AAC7C,QAAM,UAAU,CAAC,WAAW,OAAO,UAAU,SAAS,KAAK,YAAY,IAAI,YAAY;AACvF,UAAQ,IAAI,SAAS,OAAO,OAAO,CAAC;AAIpC,QAAM,cAAc,OAAO,QAAQ,IAAI,QAAQ,CAAC;AAChD,QAAM,YAAY,CAAC,WAAW,OAAO,UAAU,WAAW,KAAK,cAAc,IAAI,cAAc,IAAI;AACnG,UAAQ,IAAI,UAAU,OAAO,SAAS,CAAC;AAEvC,SAAO,EAAE,WAAW,WAAW,cAAc,SAAS,SAAS,UAAU;AAC3E;AAGO,SAAS,cAAc,SAAoD,OAAqB;AACrG,UAAQ,IAAI,UAAU,OAAO,KAAK,CAAC;AACrC;AAGO,SAAS,WAAW,SAAkB,MAAc,KAAK,IAAI,GAAY;AAC9E,QAAM,QAAQ,OAAO,QAAQ,IAAI,YAAY,CAAC;AAC9C,SAAO,OAAO,SAAS,KAAK,KAAK,QAAQ;AAC3C;AAEO,SAAS,cAAc,SAAkB,MAAc,KAAK,IAAI,GAAS;AAC9E,UAAQ,IAAI,cAAc,OAAO,MAAM,iBAAiB,CAAC;AAC3D;AAGO,SAAS,WAAW,SAAoD,MAAoB;AACjG,UAAQ,IAAI,SAAS,OAAO,IAAI,CAAC;AACnC;AAEO,SAAS,aAAa,SAAkB,MAAc,KAAK,IAAI,GAAS;AAC7E,UAAQ,IAAI,gBAAgB,OAAO,GAAG,CAAC;AACzC;;;ALhHA,IAAM,mBAAmB;AACzB,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAQ7B,IAAM,qBAAqB;AAEpB,SAAS,eAAe,YAA8C;AAC3E,QAAM,UAA2B,eAAe,UAAU;AAE1D,QAAM,QAAQ,YAAY,MAAM,WAAW,YAAY;AACvD,QAAM,UAAU,YAAY,MAAM,WAAW,cAAc;AAC3D,QAAM,WAAW,gBAAgB,OAAO,OAAO;AAE/C,MAAI,SAAyB;AAC7B,MAAI;AACJ,MAAI,YAAY,SAAS;AAEzB,MAAI,CAAC,YAAY,SAAS,WAAW,QAAQ,UAAU,GAAG;AAExD,WAAO,YAAY,eAAe,SAAS,SAAS;AAAA,EACtD;AAEA,MAAI,WAAW,OAAO,GAAG;AAGvB,QAAI,QAAQ,MAAO,SAAQ,KAAK,kEAAkE;AAClG,WAAO,YAAY,WAAW,SAAS,SAAS;AAAA,EAClD;AAEA,QAAM,YAAY,IAAI;AAAA,IACpB;AAAA,IACA;AAAA,MACE,YAAY,QAAQ;AAAA,MACpB,WAAW,SAAS;AAAA,MACpB,WAAW,SAAS;AAAA,MACpB,YAAY,SAAS;AAAA,IACvB;AAAA,IACA;AAAA,MACE,eAAe,CAAC,SAAS,WAAW,SAAS,IAAI;AAAA,MACjD,WAAW,CAAC,WAAW;AACrB,iBAAS;AACT;AACA,wBAAgB;AAIhB,YAAI,WAAW,eAAgB,eAAc,OAAO;AACpD,YAAI,QAAQ,MAAO,SAAQ,KAAK,kCAAkC,MAAM,EAAE;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,OAAoB;AAAA,IACtC,WAAW,KAAK,IAAI;AAAA,IACpB,KAAK,aAAa;AAAA,IAClB,MAAM,OAAO,cAAc,cAAc,UAAU,WAAW;AAAA,IAC9D,WAAW,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,IACpE,aAAa,OAAO,WAAW,cAAc,OAAO,aAAa;AAAA,IACjE,cAAc,OAAO,WAAW,cAAc,OAAO,cAAc;AAAA,IACnE,UAAU,OAAO,aAAa,cAAc,SAAS,YAAY,SAAY;AAAA;AAAA;AAAA,IAG7E,GAAI,QAAQ,wBAAwB,UAAa,SAAS,YAAY,IAClE,EAAE,YAAY,QAAQ,oBAAoB,IAC1C,CAAC;AAAA,EACP;AAEA,QAAM,eAAsD,CAAC;AAE7D,QAAM,kBAAkB,CAAC,UAA+B;AA1G1D;AA4GI,UAAM,OAAO,MAAM;AACnB,QAAI,MAAM,SAAS,MAAK,6BAAM,YAAW,KAAK,OAAO,KAAK,MAAM,SAAU;AAE1E,UAAM,MAAM,MAAM;AAClB,iBAAa,KAAK,EAAE,GAAG,KAAK,GAAG,IAAG,UAAK,MAAL,YAAU,GAAG,GAAG,IAAI,CAAC;AACvD,WAAO,aAAa,SAAS,KAAK,MAAM,aAAa,CAAC,EAAG,IAAI,qBAAsB,cAAa,MAAM;AAEtG,QAAI,aAAa,UAAU,kBAAkB;AAC3C,YAAM,QAAQ,aAAa,CAAC;AAC5B,YAAM,YAAY,aAAa;AAAA,QAC7B,CAAC,MAAM,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,wBAAwB,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI;AAAA,MACrF;AACA,UAAI,UAAW,WAAU,WAAW,EAAE,cAAc,KAAK,CAAC;AAAA,IAC5D;AAAA,EACF;AAIA,QAAM,UAA+C,CAAC;AACtD,MAAI,WAAW;AACf,MAAI,iBAAiB;AAcrB,QAAM,eAAe,MAAY;AAC/B,QAAI,YAAY,QAAQ,WAAW,EAAG;AACtC,eAAW;AACX,QAAI;AACF,aAAO,QAAQ,SAAS,GAAG;AACzB,cAAM,OAAO,QAAQ,CAAC;AACtB,4BAAO,eAAe,KAAK,KAAK,KAAK,OAAO;AAC5C,gBAAQ,MAAM;AAAA,MAChB;AAAA,IACF,SAAQ;AACN,UAAI,CAAC,kBAAkB,WAAW,aAAa;AAC7C,yBAAiB;AACjB,mBAAW,MAAM;AAAE,2BAAiB;AAAO,uBAAa;AAAA,QAAG,GAAG,EAAE;AAAA,MAClE;AAAA,IACF,UAAE;AACA,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,KAAa,YAA2B;AAC1D,QAAI,WAAW,UAAW;AAC1B,QAAI,WAAW,aAAa;AAC1B,UAAI;AACF,4BAAO,eAAe,KAAK,OAAO;AAClC;AAAA,MACF,SAAQ;AAAA,MAER;AAAA,IACF;AACA,QAAI,QAAQ,UAAU,oBAAoB;AACxC,UAAI,QAAQ,MAAO,SAAQ,KAAK,uBAAuB,GAAG,4CAA4C;AACtG;AAAA,IACF;AACA,YAAQ,KAAK,EAAE,KAAK,QAAQ,CAAC;AAAA,EAC/B;AAIA,MAAI,UAAU,aAAa;AAW3B,QAAM,iBAAiB,MAAY;AACjC,UAAM,MAAM,aAAa;AACzB,QAAI,CAAC,OAAO,QAAQ,QAAS;AAC7B,cAAU;AACV,iBAAa;AACb,kBAAc,SAAS,SAAS;AAChC,cAAU,WAAW,EAAE,UAAU,CAAC;AAClC,eAAW,cAAc,EAAE,KAAK,OAAO,OAAO,aAAa,cAAc,SAAS,QAAQ,GAAG,CAAC;AAAA,EAChG;AAEA,QAAM,QAAQ,MAAY;AACxB,QAAI,WAAW,eAAe,WAAW,UAAW;AACpD,aAAS;AACT,cAAU,QAAQ,YAAY,CAAC;AAK/B,cAAU,WAAW,EAAE,UAAU,CAAC;AAClC,cAAU,MAAM;AAEhB,wBAAgB,qBAAO;AAAA,MACrB,MAAM,CAAC,UAAU;AACf,cAAM,QAAQ;AACd,wBAAgB,KAAK;AACrB,qBAAa,SAAS,MAAM,SAAS;AACrC,kBAAU,KAAK,KAAK;AACpB,qBAAa;AAAA,MACf;AAAA,MACA,eAAe,QAAQ;AAAA,MACvB,eAAe,QAAQ;AAAA,MACvB,YAAY,QAAQ;AAAA;AAAA,MAEpB,kBAAkB,EAAE,UAAU,MAAM,OAAO,MAAM,KAAK,KAAK;AAAA;AAAA,MAE3D,cAAc;AAAA,MACd,cAAc;AAAA,IAChB,CAAC;AAGD,iBAAa;AAEb,yBAAqB;AAAA,EACvB;AAEA,QAAM,uBAAuB,MAAY;AACvC,QAAI,OAAO,WAAW,YAAa;AAInC,WAAO,iBAAiB,YAAY,MAAM;AAAE,gBAAU,gBAAgB;AAAA,IAAG,GAAG,EAAE,SAAS,KAAK,CAAC;AAC7F,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAI,SAAS,oBAAoB,SAAU,WAAU,gBAAgB;AAAA,IACvE,CAAC;AACD,WAAO,iBAAiB,SAAS,MAAM,UAAU,WAAW,EAAE,UAAU,KAAK,CAAC,CAAC;AAC/E,WAAO,iBAAiB,sBAAsB,MAAM,UAAU,WAAW,EAAE,UAAU,KAAK,CAAC,CAAC;AAG5F,UAAM,QAAQ,CAAC,WAA+C;AAC5D,YAAM,WAAW,QAAQ,MAAM,EAAE,KAAK,OAAO;AAC7C,cAAQ,MAAM,IAAI,SAAS,WAAW,MAAwC;AAC5E,cAAM,SAAS,SAAS,GAAG,IAAI;AAC/B,uBAAe;AACf,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,WAAW;AACjB,UAAM,cAAc;AACpB,WAAO,iBAAiB,YAAY,cAAc;AAAA,EACpD;AAEA,MAAI,QAAQ,gBAAgB;AAC1B,aAAS;AAAA,EACX,OAAO;AACL,UAAM;AAAA,EACR;AAEA,SAAO;AAAA,IACL,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM,SAAS;AAAA,IAC1B,SAAS,CAAC,YAAY;AACpB,UAAI,QAAS,OAAM;AAAA,UACd,WAAU,KAAK,mBAAmB;AAAA,IACzC;AAAA,IACA,UAAU,CAAC,WAAW;AACpB,UAAI,CAAC,OAAO,UAAU,CAAC,OAAO,MAAO;AACrC,WAAK,MAAM,GAAG,QAAQ,SAAS,uBAAuB;AAAA,QACpD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,aAAa;AAAA,QACb,MAAM,KAAK,UAAU;AAAA,UACnB,YAAY,QAAQ;AAAA,UACpB,WAAW,SAAS;AAAA,UACpB,GAAG;AAAA,QACL,CAAC;AAAA,MACH,CAAC,EAAE,MAAM,MAAM;AAAA,MAA2D,CAAC;AAAA,IAC7E;AAAA,IACA,OAAO,CAAC,MAAM,eAAe;AAC3B,YAAM,UAAU,cAAc,MAAM,UAAU;AAC9C,UAAI,OAAO,YAAY,UAAU;AAC/B,YAAI,QAAQ,MAAO,SAAQ,KAAK,gCAAgC,OAAO,EAAE;AACzE;AAAA,MACF;AACA,iBAAW,WAAW,OAAO;AAAA,IAC/B;AAAA,IACA,MAAM,MAAM,UAAU,KAAK,iBAAiB;AAAA,IAC5C,OAAO,MAAM,UAAU,MAAM;AAAA,EAC/B;AACF;AAEA,SAAS,eAAmC;AAC1C,MAAI;AACF,WAAO,OAAO,aAAa,cAAc,SAAS,OAAO;AAAA,EAC3D,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,YAAY,QAAwB,WAA0C;AACrF,SAAO;AAAA,IACL,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IAAC;AAAA,IAChB,UAAU,MAAM;AAAA,IAAC;AAAA,IACjB,OAAO,MAAM;AAAA,IAAC;AAAA,IACd,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,OAAO,YAAY;AAAA,IAAC;AAAA,EACtB;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/utils.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/types/dist/types.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/ext/tslib/tslib.es6.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../../../node_modules/.pnpm/rrweb@2.0.0-alpha.4/node_modules/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../src/config.ts","../src/events.ts","../src/sampling.ts","../src/transport.ts","../src/visitor.ts","../src/recorder.ts"],"sourcesContent":["export { createRecorder, type RecorderHandle, type RecorderStatus } from './recorder.js';\nexport { resolveOptions, ConfigError, DEFAULTS, type AnyReplayOptions, type ResolvedOptions } from './config.js';\nexport { isSampledIn, hashToUnitInterval } from './sampling.js';\nexport { Transport, type RecordedEvent, type SessionMeta } from './transport.js';\nexport { resolveIdentity, safeStorage, uuidv4 } from './visitor.js';\nexport { TRACK_TAG, NAVIGATE_TAG, EVENT_NAME_PATTERN, MAX_PROPERTIES_BYTES, validateTrack, type TrackPayload } from './events.js';\n","var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n var host = n === null || n === void 0 ? void 0 : n.host;\r\n return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction getCssRulesString(s) {\r\n try {\r\n var rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules).map(getCssRuleString).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction getCssRuleString(rule) {\r\n var cssStringified = rule.cssText;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n cssStringified = getCssRulesString(rule.styleSheet) || cssStringified;\r\n }\r\n catch (_a) {\r\n }\r\n }\r\n return cssStringified;\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nvar Mirror = (function () {\r\n function Mirror() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n Mirror.prototype.getId = function (n) {\r\n var _a;\r\n if (!n)\r\n return -1;\r\n var id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n return id !== null && id !== void 0 ? id : -1;\r\n };\r\n Mirror.prototype.getNode = function (id) {\r\n return this.idNodeMap.get(id) || null;\r\n };\r\n Mirror.prototype.getIds = function () {\r\n return Array.from(this.idNodeMap.keys());\r\n };\r\n Mirror.prototype.getMeta = function (n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n };\r\n Mirror.prototype.removeNodeFromMap = function (n) {\r\n var _this = this;\r\n var id = this.getId(n);\r\n this.idNodeMap[\"delete\"](id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach(function (childNode) {\r\n return _this.removeNodeFromMap(childNode);\r\n });\r\n }\r\n };\r\n Mirror.prototype.has = function (id) {\r\n return this.idNodeMap.has(id);\r\n };\r\n Mirror.prototype.hasNode = function (node) {\r\n return this.nodeMetaMap.has(node);\r\n };\r\n Mirror.prototype.add = function (n, meta) {\r\n var id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n };\r\n Mirror.prototype.replace = function (id, n) {\r\n var oldNode = this.getNode(id);\r\n if (oldNode) {\r\n var meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n };\r\n Mirror.prototype.reset = function () {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n };\r\n return Mirror;\r\n}());\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction maskInputValue(_a) {\r\n var maskInputOptions = _a.maskInputOptions, tagName = _a.tagName, type = _a.type, value = _a.value, maskInputFn = _a.maskInputFn;\r\n var text = value || '';\r\n if (maskInputOptions[tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n if (maskInputFn) {\r\n text = maskInputFn(text);\r\n }\r\n else {\r\n text = '*'.repeat(text.length);\r\n }\r\n }\r\n return text;\r\n}\r\nvar ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n var chunkSize = 50;\r\n for (var x = 0; x < canvas.width; x += chunkSize) {\r\n for (var y = 0; y < canvas.height; y += chunkSize) {\r\n var getImageData = ctx.getImageData;\r\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n var pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some(function (pixel) { return pixel !== 0; }))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\n\nvar _id = 1;\r\nvar tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nvar IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n var processedTagName = element.tagName.toLowerCase().trim();\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction stringifyStyleSheet(sheet) {\r\n return sheet.cssRules\r\n ? Array.from(sheet.cssRules)\r\n .map(function (rule) { return rule.cssText || ''; })\r\n .join('')\r\n : '';\r\n}\r\nfunction extractOrigin(url) {\r\n var origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nvar canvasService;\r\nvar canvasCtx;\r\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nvar RELATIVE_PATH = /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/|#).*/;\r\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, function (origin, quote1, path1, quote2, path2, path3) {\r\n var filePath = path1 || path2 || path3;\r\n var maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (!RELATIVE_PATH.test(filePath)) {\r\n return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n }\r\n if (filePath[0] === '/') {\r\n return \"url(\".concat(maybeQuote).concat(extractOrigin(href) + filePath).concat(maybeQuote, \")\");\r\n }\r\n var stack = href.split('/');\r\n var parts = filePath.split('/');\r\n stack.pop();\r\n for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\r\n var part = parts_1[_i];\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return \"url(\".concat(maybeQuote).concat(stack.join('/')).concat(maybeQuote, \")\");\r\n });\r\n}\r\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n var pos = 0;\r\n function collectCharacters(regEx) {\r\n var chars;\r\n var match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n var output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n var url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n var descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n var inParens = false;\r\n while (true) {\r\n var c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n var a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n var a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value) {\r\n if (name === 'src' ||\r\n (name === 'href' && value && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n value &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset' && value) {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style' && value) {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data' && value) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else {\r\n return value;\r\n }\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector) {\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (var eIndex = element.classList.length; eIndex--;) {\r\n var className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n if (!node)\r\n return false;\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n }\r\n for (var eIndex = node.classList.length; eIndex--;) {\r\n var className = node.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector) {\r\n var el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n if (typeof maskTextClass === 'string') {\r\n if (el.classList.contains(maskTextClass))\r\n return true;\r\n if (el.closest(\".\".concat(maskTextClass)))\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, maskTextClass, true))\r\n return true;\r\n }\r\n if (maskTextSelector) {\r\n if (el.matches(maskTextSelector))\r\n return true;\r\n if (el.closest(maskTextSelector))\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n var win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n var fired = false;\r\n var readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n var timer_1 = setTimeout(function () {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', function () {\r\n clearTimeout(timer_1);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n var blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n var fired = false;\r\n var styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n var timer = setTimeout(function () {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', function () {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c;\r\n var rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: []\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId: rootId\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc: doc,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskInputFn: maskInputFn,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: newlyAddedElement,\r\n rootId: rootId\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n maskTextFn: maskTextFn,\r\n rootId: rootId\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId: rootId\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId: rootId\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n var docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n var _a;\r\n var maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, maskTextFn = options.maskTextFn, rootId = options.rootId;\r\n var parentTagName = n.parentNode && n.parentNode.tagName;\r\n var textContent = n.textContent;\r\n var isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n var isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n textContent = stringifyStyleSheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(\"Cannot get CSS styles from text's parentNode. Error: \".concat(err), n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n if (!isStyle &&\r\n !isScript &&\r\n textContent &&\r\n needMaskingText(n, maskTextClass, maskTextSelector)) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle: isStyle,\r\n rootId: rootId\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c, rootId = options.rootId;\r\n var needBlock = _isBlockedElement(n, blockClass, blockSelector);\r\n var tagName = getValidTagName(n);\r\n var attributes = {};\r\n var len = n.attributes.length;\r\n for (var i = 0; i < len; i++) {\r\n var attr = n.attributes[i];\r\n attributes[attr.name] = transformAttribute(doc, tagName, attr.name, attr.value);\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n var stylesheet = Array.from(doc.styleSheets).find(function (s) {\r\n return s.href === n.href;\r\n });\r\n var cssText = null;\r\n if (stylesheet) {\r\n cssText = getCssRulesString(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n var cssText = getCssRulesString(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\r\n var value = n.value;\r\n var checked = n.checked;\r\n if (attributes.type !== 'radio' &&\r\n attributes.type !== 'checkbox' &&\r\n attributes.type !== 'submit' &&\r\n attributes.type !== 'button' &&\r\n value) {\r\n attributes.value = maskInputValue({\r\n type: attributes.type,\r\n tagName: tagName,\r\n value: value,\r\n maskInputOptions: maskInputOptions,\r\n maskInputFn: maskInputFn\r\n });\r\n }\r\n else if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n var canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n var blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n var image_1 = n;\r\n var oldValue_1 = image_1.crossOrigin;\r\n image_1.crossOrigin = 'anonymous';\r\n var recordInlineImage = function () {\r\n try {\r\n canvasService.width = image_1.naturalWidth;\r\n canvasService.height = image_1.naturalHeight;\r\n canvasCtx.drawImage(image_1, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(\"Cannot inline img src=\".concat(image_1.currentSrc, \"! Error: \").concat(err));\r\n }\r\n oldValue_1\r\n ? (attributes.crossOrigin = oldValue_1)\r\n : image_1.removeAttribute('crossorigin');\r\n };\r\n if (image_1.complete && image_1.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image_1.onload = recordInlineImage;\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n attributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n attributes.rr_mediaCurrentTime = n.currentTime;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;\r\n attributes = {\r\n \"class\": attributes[\"class\"],\r\n rr_width: \"\".concat(width, \"px\"),\r\n rr_height: \"\".concat(height, \"px\")\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName: tagName,\r\n attributes: attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock: needBlock,\r\n rootId: rootId\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'preload' &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n sn.attributes.href.endsWith('.js')))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.inlineStylesheet, inlineStylesheet = _b === void 0 ? true : _b, _c = options.maskInputOptions, maskInputOptions = _c === void 0 ? {} : _c, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _d = options.dataURLOptions, dataURLOptions = _d === void 0 ? {} : _d, _e = options.inlineImages, inlineImages = _e === void 0 ? false : _e, _f = options.recordCanvas, recordCanvas = _f === void 0 ? false : _f, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _g = options.iframeLoadTimeout, iframeLoadTimeout = _g === void 0 ? 5000 : _g, onStylesheetLoad = options.onStylesheetLoad, _h = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _h === void 0 ? 5000 : _h, _j = options.keepIframeSrcFn, keepIframeSrcFn = _j === void 0 ? function () { return false; } : _j, _k = options.newlyAddedElement, newlyAddedElement = _k === void 0 ? false : _k;\r\n var _l = options.preserveWhiteSpace, preserveWhiteSpace = _l === void 0 ? true : _l;\r\n var _serializedNode = serializeNode(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: newlyAddedElement\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n var id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n var serializedNode = Object.assign(_serializedNode, { id: id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n var recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n var shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n var bypassOptions = {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: skipChild,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n };\r\n for (var _i = 0, _m = Array.from(n.childNodes); _i < _m.length; _i++) {\r\n var childN = _m[_i];\r\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (var _o = 0, _p = Array.from(n.shadowRoot.childNodes); _o < _p.length; _o++) {\r\n var childN = _p[_o];\r\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, function () {\r\n var iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n serializedNode.attributes.rel === 'stylesheet') {\r\n onceStylesheetLoaded(n, function () {\r\n if (onStylesheetLoad) {\r\n var serializedLinkNode = serializeNodeWithId(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n var _a = options || {}, _b = _a.mirror, mirror = _b === void 0 ? new Mirror() : _b, _c = _a.blockClass, blockClass = _c === void 0 ? 'rr-block' : _c, _d = _a.blockSelector, blockSelector = _d === void 0 ? null : _d, _e = _a.maskTextClass, maskTextClass = _e === void 0 ? 'rr-mask' : _e, _f = _a.maskTextSelector, maskTextSelector = _f === void 0 ? null : _f, _g = _a.inlineStylesheet, inlineStylesheet = _g === void 0 ? true : _g, _h = _a.inlineImages, inlineImages = _h === void 0 ? false : _h, _j = _a.recordCanvas, recordCanvas = _j === void 0 ? false : _j, _k = _a.maskAllInputs, maskAllInputs = _k === void 0 ? false : _k, maskTextFn = _a.maskTextFn, maskInputFn = _a.maskInputFn, _l = _a.slimDOM, slimDOM = _l === void 0 ? false : _l, dataURLOptions = _a.dataURLOptions, preserveWhiteSpace = _a.preserveWhiteSpace, onSerialize = _a.onSerialize, onIframeLoad = _a.onIframeLoad, iframeLoadTimeout = _a.iframeLoadTimeout, onStylesheetLoad = _a.onStylesheetLoad, stylesheetLoadTimeout = _a.stylesheetLoadTimeout, _m = _a.keepIframeSrcFn, keepIframeSrcFn = _m === void 0 ? function () { return false; } : _m;\r\n var maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true\r\n }\r\n : maskAllInputs === false\r\n ? {\r\n password: true\r\n }\r\n : maskAllInputs;\r\n var slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: false\r\n });\r\n}\r\n\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options) {\r\n if (options === void 0) { options = {}; }\r\n var lineno = 1;\r\n var column = 1;\r\n function updatePosition(str) {\r\n var lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n var i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n var start = { line: lineno, column: column };\r\n return function (node) {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n var Position = (function () {\r\n function Position(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column: column };\r\n this.source = options.source;\r\n }\r\n return Position;\r\n }());\r\n Position.prototype.content = css;\r\n var errorsList = [];\r\n function error(msg) {\r\n var err = new Error(\"\".concat(options.source || '', \":\").concat(lineno, \":\").concat(column, \": \").concat(msg));\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n var rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList\r\n }\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n var node;\r\n var rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node !== false) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n var m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n var str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules) {\r\n if (rules === void 0) { rules = []; }\r\n var c;\r\n while ((c = comment())) {\r\n if (c !== false) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n var pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n var i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n var str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str\r\n });\r\n }\r\n function selector() {\r\n var m = match(/^([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n return trim(m[0])\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\r\n return m.replace(/,/g, '\\u200C');\r\n })\r\n .split(/\\s*(?![^(]*\\)),\\s*/)\r\n .map(function (s) {\r\n return s.replace(/\\u200C/g, ',');\r\n });\r\n }\r\n function declaration() {\r\n var pos = position();\r\n var propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n var prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(\"property missing ':'\");\r\n }\r\n var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n var ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : ''\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n var decls = [];\r\n if (!open()) {\r\n return error(\"missing '{'\");\r\n }\r\n comments(decls);\r\n var decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(\"missing '}'\");\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n var m;\r\n var vals = [];\r\n var pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations()\r\n });\r\n }\r\n function atkeyframes() {\r\n var pos = position();\r\n var m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n var vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n var name = m[1];\r\n if (!open()) {\r\n return error(\"@keyframes missing '{'\");\r\n }\r\n var frame;\r\n var frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@keyframes missing '}'\");\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name: name,\r\n vendor: vendor,\r\n keyframes: frames\r\n });\r\n }\r\n function atsupports() {\r\n var pos = position();\r\n var m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var supports = trim(m[1]);\r\n if (!open()) {\r\n return error(\"@supports missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@supports missing '}'\");\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports: supports,\r\n rules: style\r\n });\r\n }\r\n function athost() {\r\n var pos = position();\r\n var m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(\"@host missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@host missing '}'\");\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style\r\n });\r\n }\r\n function atmedia() {\r\n var pos = position();\r\n var m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var media = trim(m[1]);\r\n if (!open()) {\r\n return error(\"@media missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@media missing '}'\");\r\n }\r\n return pos({\r\n type: 'media',\r\n media: media,\r\n rules: style\r\n });\r\n }\r\n function atcustommedia() {\r\n var pos = position();\r\n var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2])\r\n });\r\n }\r\n function atpage() {\r\n var pos = position();\r\n var m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n var sel = selector() || [];\r\n if (!open()) {\r\n return error(\"@page missing '{'\");\r\n }\r\n var decls = comments();\r\n var decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@page missing '}'\");\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls\r\n });\r\n }\r\n function atdocument() {\r\n var pos = position();\r\n var m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var vendor = trim(m[1]);\r\n var doc = trim(m[2]);\r\n if (!open()) {\r\n return error(\"@document missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@document missing '}'\");\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor: vendor,\r\n rules: style\r\n });\r\n }\r\n function atfontface() {\r\n var pos = position();\r\n var m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(\"@font-face missing '{'\");\r\n }\r\n var decls = comments();\r\n var decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@font-face missing '}'\");\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls\r\n });\r\n }\r\n var atimport = _compileAtrule('import');\r\n var atcharset = _compileAtrule('charset');\r\n var atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return function () {\r\n var pos = position();\r\n var m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n var ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n var pos = position();\r\n var sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations()\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n var isNode = obj && typeof obj.type === 'string';\r\n var childParent = isNode ? obj : parent;\r\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\r\n var k = _a[_i];\r\n var value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach(function (v) {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null\r\n });\r\n }\r\n return obj;\r\n}\n\nvar tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient'\r\n};\r\nfunction getTagName(n) {\r\n var tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nvar HOVER_SELECTOR = /([^\\\\]):hover/;\r\nvar HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n var cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n var ast = parse(cssText, {\r\n silent: true\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n var selectors = [];\r\n ast.stylesheet.rules.forEach(function (rule) {\r\n if ('selectors' in rule) {\r\n (rule.selectors || []).forEach(function (selector) {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n });\r\n if (selectors.length === 0) {\r\n return cssText;\r\n }\r\n var selectorMatcher = new RegExp(selectors\r\n .filter(function (selector, index) { return selectors.indexOf(selector) === index; })\r\n .sort(function (a, b) { return b.length - a.length; })\r\n .map(function (selector) {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n var result = cssText.replace(selectorMatcher, function (selector) {\r\n var newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return \"\".concat(selector, \", \").concat(newSelector);\r\n });\r\n cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n var stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass: stylesWithHoverClass\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n var doc = options.doc, hackCss = options.hackCss, cache = options.cache;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n var tagName = getTagName(n);\r\n var node_1;\r\n if (n.isSVG) {\r\n node_1 = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n node_1 = doc.createElement(tagName);\r\n }\r\n var specialAttributes = {};\r\n for (var name_1 in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name_1)) {\r\n continue;\r\n }\r\n var value = n.attributes[name_1];\r\n if (tagName === 'option' &&\r\n name_1 === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name_1.startsWith('rr_')) {\r\n specialAttributes[name_1] = value;\r\n continue;\r\n }\r\n var isTextarea = tagName === 'textarea' && name_1 === 'value';\r\n var isRemoteOrDynamicCss = tagName === 'style' && name_1 === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = addHoverClass(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n var child = doc.createTextNode(value);\r\n for (var _i = 0, _a = Array.from(node_1.childNodes); _i < _a.length; _i++) {\r\n var c = _a[_i];\r\n if (c.nodeType === node_1.TEXT_NODE) {\r\n node_1.removeChild(c);\r\n }\r\n }\r\n node_1.appendChild(child);\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name_1 === 'xlink:href') {\r\n node_1.setAttributeNS('http://www.w3.org/1999/xlink', name_1, value.toString());\r\n }\r\n else if (name_1 === 'onload' ||\r\n name_1 === 'onclick' ||\r\n name_1.substring(0, 7) === 'onmouse') {\r\n node_1.setAttribute('_' + name_1, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name_1 === 'content') {\r\n node_1.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'preload' &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node_1.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node_1.setAttribute(name_1, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n var _loop_1 = function (name_2) {\r\n var value = specialAttributes[name_2];\r\n if (tagName === 'canvas' && name_2 === 'rr_dataURL') {\r\n var image_1 = document.createElement('img');\r\n image_1.onload = function () {\r\n var ctx = node_1.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image_1, 0, 0, image_1.width, image_1.height);\r\n }\r\n };\r\n image_1.src = value.toString();\r\n if (node_1.RRNodeType)\r\n node_1.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name_2 === 'rr_dataURL') {\r\n var image = node_1;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name_2 === 'rr_width') {\r\n node_1.style.width = value.toString();\r\n }\r\n else if (name_2 === 'rr_height') {\r\n node_1.style.height = value.toString();\r\n }\r\n else if (name_2 === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node_1.currentTime = value;\r\n }\r\n else if (name_2 === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node_1\r\n .play()[\"catch\"](function (e) { return console.warn('media playback error', e); });\r\n break;\r\n case 'paused':\r\n node_1.pause();\r\n break;\r\n }\r\n }\r\n };\r\n for (var name_2 in specialAttributes) {\r\n _loop_1(name_2);\r\n }\r\n if (n.isShadowHost) {\r\n if (!node_1.shadowRoot) {\r\n node_1.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node_1.shadowRoot.firstChild) {\r\n node_1.shadowRoot.removeChild(node_1.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node_1;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? addHoverClass(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n var doc = options.doc, mirror = options.mirror, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.hackCss, hackCss = _b === void 0 ? true : _b, afterAppend = options.afterAppend, cache = options.cache;\r\n var node = buildNode(n, { doc: doc, hackCss: hackCss, cache: cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n }\r\n else {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (var _i = 0, _c = n.childNodes; _i < _c.length; _i++) {\r\n var childN = _c[_i];\r\n var childNode = buildNodeWithSN(childN, {\r\n doc: doc,\r\n mirror: mirror,\r\n skipChild: false,\r\n hackCss: hackCss,\r\n afterAppend: afterAppend,\r\n cache: cache\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (var _i = 0, _a = mirror.getIds(); _i < _a.length; _i++) {\r\n var id = _a[_i];\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n var n = mirror.getMeta(node);\r\n if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n return;\r\n }\r\n var el = node;\r\n for (var name_3 in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name_3) &&\r\n name_3.startsWith('rr_'))) {\r\n continue;\r\n }\r\n var value = n.attributes[name_3];\r\n if (name_3 === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name_3 === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n var doc = options.doc, onVisit = options.onVisit, _a = options.hackCss, hackCss = _a === void 0 ? true : _a, afterAppend = options.afterAppend, cache = options.cache, _b = options.mirror, mirror = _b === void 0 ? new Mirror() : _b;\r\n var node = buildNodeWithSN(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n skipChild: false,\r\n hackCss: hackCss,\r\n afterAppend: afterAppend,\r\n cache: cache\r\n });\r\n visit(mirror, function (visitedNode) {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, createCache, createMirror, genId, getCssRuleString, getCssRulesString, is2DCanvasBlank, isCSSImportRule, isElement, isNativeShadowDom, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, transformAttribute };\n","import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n const options = { capture: true, passive: true };\r\n target.addEventListener(type, fn, options);\r\n return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n '\\r\\n' +\r\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n '\\r\\n' +\r\n 'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n map: {},\r\n getId() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return -1;\r\n },\r\n getNode() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return null;\r\n },\r\n removeNodeFromMap() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n has() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return false;\r\n },\r\n reset() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n _mirror = new Proxy(_mirror, {\r\n get(target, prop, receiver) {\r\n if (prop === 'map') {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n let timeout = null;\r\n let previous = 0;\r\n return function (...args) {\r\n const now = Date.now();\r\n if (!previous && options.leading === false) {\r\n previous = now;\r\n }\r\n const remaining = wait - (now - previous);\r\n const context = this;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n func.apply(context, args);\r\n }\r\n else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(() => {\r\n previous = options.leading === false ? 0 : Date.now();\r\n timeout = null;\r\n func.apply(context, args);\r\n }, remaining);\r\n }\r\n };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n win.Object.defineProperty(target, key, isRevoked\r\n ? d\r\n : {\r\n set(value) {\r\n setTimeout(() => {\r\n d.set.call(this, value);\r\n }, 0);\r\n if (original && original.set) {\r\n original.set.call(this, value);\r\n }\r\n },\r\n });\r\n return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n try {\r\n if (!(name in source)) {\r\n return () => {\r\n };\r\n }\r\n const original = source[name];\r\n const wrapped = replacement(original);\r\n if (typeof wrapped === 'function') {\r\n wrapped.prototype = wrapped.prototype || {};\r\n Object.defineProperties(wrapped, {\r\n __rrweb_original__: {\r\n enumerable: false,\r\n value: original,\r\n },\r\n });\r\n }\r\n source[name] = wrapped;\r\n return () => {\r\n source[name] = original;\r\n };\r\n }\r\n catch (_a) {\r\n return () => {\r\n };\r\n }\r\n}\r\nfunction getWindowHeight() {\r\n return (window.innerHeight ||\r\n (document.documentElement && document.documentElement.clientHeight) ||\r\n (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n return (window.innerWidth ||\r\n (document.documentElement && document.documentElement.clientWidth) ||\r\n (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (!el)\r\n return false;\r\n if (typeof blockClass === 'string') {\r\n if (el.classList.contains(blockClass))\r\n return true;\r\n if (checkAncestors && el.closest('.' + blockClass) !== null)\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, blockClass, checkAncestors))\r\n return true;\r\n }\r\n if (blockSelector) {\r\n if (node.matches(blockSelector))\r\n return true;\r\n if (checkAncestors && el.closest(blockSelector) !== null)\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n if (isShadowRoot(target)) {\r\n return false;\r\n }\r\n const id = mirror.getId(target);\r\n if (!mirror.has(id)) {\r\n return true;\r\n }\r\n if (target.parentNode &&\r\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n if (!target.parentNode) {\r\n return true;\r\n }\r\n return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction isTouchEvent(event) {\r\n return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n win.NodeList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n win.DOMTokenList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if (!Node.prototype.contains) {\r\n Node.prototype.contains = (...args) => {\r\n let node = args[0];\r\n if (!(0 in args)) {\r\n throw new TypeError('1 argument is required');\r\n }\r\n do {\r\n if (this === node) {\r\n return true;\r\n }\r\n } while ((node = node && node.parentNode));\r\n return false;\r\n };\r\n }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n const queueNodeMap = {};\r\n const putIntoMap = (m, parent) => {\r\n const nodeInTree = {\r\n value: m,\r\n parent,\r\n children: [],\r\n };\r\n queueNodeMap[m.node.id] = nodeInTree;\r\n return nodeInTree;\r\n };\r\n const queueNodeTrees = [];\r\n for (const mutation of queue) {\r\n const { nextId, parentId } = mutation;\r\n if (nextId && nextId in queueNodeMap) {\r\n const nextInTree = queueNodeMap[nextId];\r\n if (nextInTree.parent) {\r\n const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n }\r\n else {\r\n const idx = queueNodeTrees.indexOf(nextInTree);\r\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n }\r\n continue;\r\n }\r\n if (parentId in queueNodeMap) {\r\n const parentInTree = queueNodeMap[parentId];\r\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n continue;\r\n }\r\n queueNodeTrees.push(putIntoMap(mutation, null));\r\n }\r\n return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n cb(tree.value);\r\n for (let i = tree.children.length - 1; i >= 0; i--) {\r\n iterateResolveTree(tree.children[i], cb);\r\n }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n return Boolean(n.nodeName === 'LINK' &&\r\n n.nodeType === n.ELEMENT_NODE &&\r\n n.getAttribute &&\r\n n.getAttribute('rel') === 'stylesheet' &&\r\n mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n var _a, _b;\r\n const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n if (!frameElement || frameElement === rootIframe) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n relativeScale: 1,\r\n absoluteScale: 1,\r\n };\r\n }\r\n const frameDimension = frameElement.getBoundingClientRect();\r\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n return {\r\n x: frameDimension.x * frameBaseDimension.relativeScale +\r\n frameBaseDimension.x,\r\n y: frameDimension.y * frameBaseDimension.relativeScale +\r\n frameBaseDimension.y,\r\n relativeScale,\r\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n };\r\n}\r\nfunction hasShadowRoot(n) {\r\n return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n const rule = rules[position[0]];\r\n if (position.length === 1) {\r\n return rule;\r\n }\r\n else {\r\n return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n const positions = [...nestedIndex];\r\n const index = positions.pop();\r\n return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n const idSet = new Set();\r\n const uniqueMutations = [];\r\n for (let i = mutations.length; i--;) {\r\n const mutation = mutations[i];\r\n if (!idSet.has(mutation.id)) {\r\n uniqueMutations.push(mutation);\r\n idSet.add(mutation.id);\r\n }\r\n }\r\n return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n constructor() {\r\n this.id = 1;\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n }\r\n getId(stylesheet) {\r\n var _a;\r\n return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n }\r\n has(stylesheet) {\r\n return this.styleIDMap.has(stylesheet);\r\n }\r\n add(stylesheet, id) {\r\n if (this.has(stylesheet))\r\n return this.getId(stylesheet);\r\n let newId;\r\n if (id === undefined) {\r\n newId = this.id++;\r\n }\r\n else\r\n newId = id;\r\n this.styleIDMap.set(stylesheet, newId);\r\n this.idStyleMap.set(newId, stylesheet);\r\n return newId;\r\n }\r\n getStyle(id) {\r\n return this.idStyleMap.get(id) || null;\r\n }\r\n reset() {\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n this.id = 1;\r\n }\r\n generateId() {\r\n return this.id++;\r\n }\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getWindowHeight, getWindowWidth, hasShadowRoot, hookSetter, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, isTouchEvent, iterateResolveTree, on, patch, polyfill, queueToResolveTrees, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, maskInputValue, transformAttribute, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n constructor() {\r\n this.length = 0;\r\n this.head = null;\r\n }\r\n get(position) {\r\n if (position >= this.length) {\r\n throw new Error('Position outside of list range');\r\n }\r\n let current = this.head;\r\n for (let index = 0; index < position; index++) {\r\n current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n }\r\n return current;\r\n }\r\n addNode(n) {\r\n const node = {\r\n value: n,\r\n previous: null,\r\n next: null,\r\n };\r\n n.__ln = node;\r\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n const current = n.previousSibling.__ln.next;\r\n node.next = current;\r\n node.previous = n.previousSibling.__ln;\r\n n.previousSibling.__ln.next = node;\r\n if (current) {\r\n current.previous = node;\r\n }\r\n }\r\n else if (n.nextSibling &&\r\n isNodeInLinkedList(n.nextSibling) &&\r\n n.nextSibling.__ln.previous) {\r\n const current = n.nextSibling.__ln.previous;\r\n node.previous = current;\r\n node.next = n.nextSibling.__ln;\r\n n.nextSibling.__ln.previous = node;\r\n if (current) {\r\n current.next = node;\r\n }\r\n }\r\n else {\r\n if (this.head) {\r\n this.head.previous = node;\r\n }\r\n node.next = this.head;\r\n this.head = node;\r\n }\r\n this.length++;\r\n }\r\n removeNode(n) {\r\n const current = n.__ln;\r\n if (!this.head) {\r\n return;\r\n }\r\n if (!current.previous) {\r\n this.head = current.next;\r\n if (this.head) {\r\n this.head.previous = null;\r\n }\r\n }\r\n else {\r\n current.previous.next = current.next;\r\n if (current.next) {\r\n current.next.previous = current.previous;\r\n }\r\n }\r\n if (n.__ln) {\r\n delete n.__ln;\r\n }\r\n this.length--;\r\n }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n constructor() {\r\n this.frozen = false;\r\n this.locked = false;\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.mapRemoves = [];\r\n this.movedMap = {};\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.processMutations = (mutations) => {\r\n mutations.forEach(this.processMutation);\r\n this.emit();\r\n };\r\n this.emit = () => {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const adds = [];\r\n const addList = new DoubleLinkedList();\r\n const getNextId = (n) => {\r\n let ns = n;\r\n let nextId = IGNORED_NODE;\r\n while (nextId === IGNORED_NODE) {\r\n ns = ns && ns.nextSibling;\r\n nextId = ns && this.mirror.getId(ns);\r\n }\r\n return nextId;\r\n };\r\n const pushAdd = (n) => {\r\n var _a, _b, _c, _d;\r\n let shadowHost = null;\r\n if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n n.getRootNode().host)\r\n shadowHost = n.getRootNode().host;\r\n let rootShadowHost = shadowHost;\r\n while (((_d = (_c = rootShadowHost === null || rootShadowHost === void 0 ? void 0 : rootShadowHost.getRootNode) === null || _c === void 0 ? void 0 : _c.call(rootShadowHost)) === null || _d === void 0 ? void 0 : _d.nodeType) ===\r\n Node.DOCUMENT_FRAGMENT_NODE &&\r\n rootShadowHost.getRootNode().host)\r\n rootShadowHost = rootShadowHost.getRootNode().host;\r\n const notInDoc = !this.doc.contains(n) &&\r\n (!rootShadowHost || !this.doc.contains(rootShadowHost));\r\n if (!n.parentNode || notInDoc) {\r\n return;\r\n }\r\n const parentId = isShadowRoot(n.parentNode)\r\n ? this.mirror.getId(shadowHost)\r\n : this.mirror.getId(n.parentNode);\r\n const nextId = getNextId(n);\r\n if (parentId === -1 || nextId === -1) {\r\n return addList.addNode(n);\r\n }\r\n const sn = serializeNodeWithId(n, {\r\n doc: this.doc,\r\n mirror: this.mirror,\r\n blockClass: this.blockClass,\r\n blockSelector: this.blockSelector,\r\n maskTextClass: this.maskTextClass,\r\n maskTextSelector: this.maskTextSelector,\r\n skipChild: true,\r\n newlyAddedElement: true,\r\n inlineStylesheet: this.inlineStylesheet,\r\n maskInputOptions: this.maskInputOptions,\r\n maskTextFn: this.maskTextFn,\r\n maskInputFn: this.maskInputFn,\r\n slimDOMOptions: this.slimDOMOptions,\r\n dataURLOptions: this.dataURLOptions,\r\n recordCanvas: this.recordCanvas,\r\n inlineImages: this.inlineImages,\r\n onSerialize: (currentN) => {\r\n if (isSerializedIframe(currentN, this.mirror)) {\r\n this.iframeManager.addIframe(currentN);\r\n }\r\n if (isSerializedStylesheet(currentN, this.mirror)) {\r\n this.stylesheetManager.trackLinkElement(currentN);\r\n }\r\n if (hasShadowRoot(n)) {\r\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n this.iframeManager.attachIframe(iframe, childSn);\r\n this.shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (link, childSn) => {\r\n this.stylesheetManager.attachLinkElement(link, childSn);\r\n },\r\n });\r\n if (sn) {\r\n adds.push({\r\n parentId,\r\n nextId,\r\n node: sn,\r\n });\r\n }\r\n };\r\n while (this.mapRemoves.length) {\r\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n }\r\n for (const n of Array.from(this.movedSet.values())) {\r\n if (isParentRemoved(this.removes, n, this.mirror) &&\r\n !this.movedSet.has(n.parentNode)) {\r\n continue;\r\n }\r\n pushAdd(n);\r\n }\r\n for (const n of Array.from(this.addedSet.values())) {\r\n if (!isAncestorInSet(this.droppedSet, n) &&\r\n !isParentRemoved(this.removes, n, this.mirror)) {\r\n pushAdd(n);\r\n }\r\n else if (isAncestorInSet(this.movedSet, n)) {\r\n pushAdd(n);\r\n }\r\n else {\r\n this.droppedSet.add(n);\r\n }\r\n }\r\n let candidate = null;\r\n while (addList.length) {\r\n let node = null;\r\n if (candidate) {\r\n const parentId = this.mirror.getId(candidate.value.parentNode);\r\n const nextId = getNextId(candidate.value);\r\n if (parentId !== -1 && nextId !== -1) {\r\n node = candidate;\r\n }\r\n }\r\n if (!node) {\r\n for (let index = addList.length - 1; index >= 0; index--) {\r\n const _node = addList.get(index);\r\n if (_node) {\r\n const parentId = this.mirror.getId(_node.value.parentNode);\r\n const nextId = getNextId(_node.value);\r\n if (nextId === -1)\r\n continue;\r\n else if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n else {\r\n const unhandledNode = _node.value;\r\n if (unhandledNode.parentNode &&\r\n unhandledNode.parentNode.nodeType ===\r\n Node.DOCUMENT_FRAGMENT_NODE) {\r\n const shadowHost = unhandledNode.parentNode\r\n .host;\r\n const parentId = this.mirror.getId(shadowHost);\r\n if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!node) {\r\n while (addList.head) {\r\n addList.removeNode(addList.head.value);\r\n }\r\n break;\r\n }\r\n candidate = node.previous;\r\n addList.removeNode(node.value);\r\n pushAdd(node.value);\r\n }\r\n const payload = {\r\n texts: this.texts\r\n .map((text) => ({\r\n id: this.mirror.getId(text.node),\r\n value: text.value,\r\n }))\r\n .filter((text) => this.mirror.has(text.id)),\r\n attributes: this.attributes\r\n .map((attribute) => ({\r\n id: this.mirror.getId(attribute.node),\r\n attributes: attribute.attributes,\r\n }))\r\n .filter((attribute) => this.mirror.has(attribute.id)),\r\n removes: this.removes,\r\n adds,\r\n };\r\n if (!payload.texts.length &&\r\n !payload.attributes.length &&\r\n !payload.removes.length &&\r\n !payload.adds.length) {\r\n return;\r\n }\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.movedMap = {};\r\n this.mutationCb(payload);\r\n };\r\n this.processMutation = (m) => {\r\n if (isIgnored(m.target, this.mirror)) {\r\n return;\r\n }\r\n switch (m.type) {\r\n case 'characterData': {\r\n const value = m.target.textContent;\r\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) &&\r\n value !== m.oldValue) {\r\n this.texts.push({\r\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector) && value\r\n ? this.maskTextFn\r\n ? this.maskTextFn(value)\r\n : value.replace(/[\\S]/g, '*')\r\n : value,\r\n node: m.target,\r\n });\r\n }\r\n break;\r\n }\r\n case 'attributes': {\r\n const target = m.target;\r\n let value = m.target.getAttribute(m.attributeName);\r\n if (m.attributeName === 'value') {\r\n value = maskInputValue({\r\n maskInputOptions: this.maskInputOptions,\r\n tagName: m.target.tagName,\r\n type: m.target.getAttribute('type'),\r\n value,\r\n maskInputFn: this.maskInputFn,\r\n });\r\n }\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n value === m.oldValue) {\r\n return;\r\n }\r\n let item = this.attributes.find((a) => a.node === m.target);\r\n if (target.tagName === 'IFRAME' &&\r\n m.attributeName === 'src' &&\r\n !this.keepIframeSrcFn(value)) {\r\n if (!target.contentDocument) {\r\n m.attributeName = 'rr_src';\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!item) {\r\n item = {\r\n node: m.target,\r\n attributes: {},\r\n };\r\n this.attributes.push(item);\r\n }\r\n if (m.attributeName === 'style') {\r\n const old = this.doc.createElement('span');\r\n if (m.oldValue) {\r\n old.setAttribute('style', m.oldValue);\r\n }\r\n if (item.attributes.style === undefined ||\r\n item.attributes.style === null) {\r\n item.attributes.style = {};\r\n }\r\n const styleObj = item.attributes.style;\r\n for (const pname of Array.from(target.style)) {\r\n const newValue = target.style.getPropertyValue(pname);\r\n const newPriority = target.style.getPropertyPriority(pname);\r\n if (newValue !== old.style.getPropertyValue(pname) ||\r\n newPriority !== old.style.getPropertyPriority(pname)) {\r\n if (newPriority === '') {\r\n styleObj[pname] = newValue;\r\n }\r\n else {\r\n styleObj[pname] = [newValue, newPriority];\r\n }\r\n }\r\n }\r\n for (const pname of Array.from(old.style)) {\r\n if (target.style.getPropertyValue(pname) === '') {\r\n styleObj[pname] = false;\r\n }\r\n }\r\n }\r\n else {\r\n item.attributes[m.attributeName] = transformAttribute(this.doc, target.tagName, m.attributeName, value);\r\n }\r\n break;\r\n }\r\n case 'childList': {\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\r\n return;\r\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n m.removedNodes.forEach((n) => {\r\n const nodeId = this.mirror.getId(n);\r\n const parentId = isShadowRoot(m.target)\r\n ? this.mirror.getId(m.target.host)\r\n : this.mirror.getId(m.target);\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n isIgnored(n, this.mirror) ||\r\n !isSerialized(n, this.mirror)) {\r\n return;\r\n }\r\n if (this.addedSet.has(n)) {\r\n deepDelete(this.addedSet, n);\r\n this.droppedSet.add(n);\r\n }\r\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n else if (this.movedSet.has(n) &&\r\n this.movedMap[moveKey(nodeId, parentId)]) {\r\n deepDelete(this.movedSet, n);\r\n }\r\n else {\r\n this.removes.push({\r\n parentId,\r\n id: nodeId,\r\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n ? true\r\n : undefined,\r\n });\r\n }\r\n this.mapRemoves.push(n);\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n this.genAdds = (n, target) => {\r\n if (this.mirror.hasNode(n)) {\r\n if (isIgnored(n, this.mirror)) {\r\n return;\r\n }\r\n this.movedSet.add(n);\r\n let targetId = null;\r\n if (target && this.mirror.hasNode(target)) {\r\n targetId = this.mirror.getId(target);\r\n }\r\n if (targetId && targetId !== -1) {\r\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n }\r\n }\r\n else {\r\n this.addedSet.add(n);\r\n this.droppedSet.delete(n);\r\n }\r\n if (!isBlocked(n, this.blockClass, this.blockSelector, false))\r\n n.childNodes.forEach((childN) => this.genAdds(childN));\r\n };\r\n }\r\n init(options) {\r\n [\r\n 'mutationCb',\r\n 'blockClass',\r\n 'blockSelector',\r\n 'maskTextClass',\r\n 'maskTextSelector',\r\n 'inlineStylesheet',\r\n 'maskInputOptions',\r\n 'maskTextFn',\r\n 'maskInputFn',\r\n 'keepIframeSrcFn',\r\n 'recordCanvas',\r\n 'inlineImages',\r\n 'slimDOMOptions',\r\n 'dataURLOptions',\r\n 'doc',\r\n 'mirror',\r\n 'iframeManager',\r\n 'stylesheetManager',\r\n 'shadowDomManager',\r\n 'canvasManager',\r\n ].forEach((key) => {\r\n this[key] = options[key];\r\n });\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n this.canvasManager.freeze();\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n this.canvasManager.unfreeze();\r\n this.emit();\r\n }\r\n isFrozen() {\r\n return this.frozen;\r\n }\r\n lock() {\r\n this.locked = true;\r\n this.canvasManager.lock();\r\n }\r\n unlock() {\r\n this.locked = false;\r\n this.canvasManager.unlock();\r\n this.emit();\r\n }\r\n reset() {\r\n this.shadowDomManager.reset();\r\n this.canvasManager.reset();\r\n }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n addsSet.delete(n);\r\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n if (removes.length === 0)\r\n return false;\r\n return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const parentId = mirror.getId(parentNode);\r\n if (removes.some((r) => r.id === parentId)) {\r\n return true;\r\n }\r\n return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n if (set.size === 0)\r\n return false;\r\n return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n if (set.has(parentNode)) {\r\n return true;\r\n }\r\n return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","import { maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowHeight, getWindowWidth, hookSetter, patch, isTouchEvent } from '../utils.js';\nimport { MouseInteractions, IncrementalSource } from '../../../types/dist/types.js';\nimport MutationBuffer from './mutation.js';\n\nconst mutationBuffers = [];\r\nconst isCSSGroupingRuleSupported = typeof CSSGroupingRule !== 'undefined';\r\nconst isCSSMediaRuleSupported = typeof CSSMediaRule !== 'undefined';\r\nconst isCSSSupportsRuleSupported = typeof CSSSupportsRule !== 'undefined';\r\nconst isCSSConditionRuleSupported = typeof CSSConditionRule !== 'undefined';\r\nfunction getEventTarget(event) {\r\n try {\r\n if ('composedPath' in event) {\r\n const path = event.composedPath();\r\n if (path.length) {\r\n return path[0];\r\n }\r\n }\r\n else if ('path' in event && event.path.length) {\r\n return event.path[0];\r\n }\r\n return event.target;\r\n }\r\n catch (_a) {\r\n return event.target;\r\n }\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n var _a, _b;\r\n const mutationBuffer = new MutationBuffer();\r\n mutationBuffers.push(mutationBuffer);\r\n mutationBuffer.init(options);\r\n let mutationObserverCtor = window.MutationObserver ||\r\n window.__rrMutationObserver;\r\n const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n if (angularZoneSymbol &&\r\n window[angularZoneSymbol]) {\r\n mutationObserverCtor = window[angularZoneSymbol];\r\n }\r\n const observer = new mutationObserverCtor(mutationBuffer.processMutations.bind(mutationBuffer));\r\n observer.observe(rootEl, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n characterData: true,\r\n characterDataOldValue: true,\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n if (sampling.mousemove === false) {\r\n return () => {\r\n };\r\n }\r\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n ? sampling.mousemoveCallback\r\n : 500;\r\n let positions = [];\r\n let timeBaseline;\r\n const wrappedCb = throttle((source) => {\r\n const totalOffset = Date.now() - timeBaseline;\r\n mousemoveCb(positions.map((p) => {\r\n p.timeOffset -= totalOffset;\r\n return p;\r\n }), source);\r\n positions = [];\r\n timeBaseline = null;\r\n }, callbackThreshold);\r\n const updatePosition = throttle((evt) => {\r\n const target = getEventTarget(evt);\r\n const { clientX, clientY } = isTouchEvent(evt)\r\n ? evt.changedTouches[0]\r\n : evt;\r\n if (!timeBaseline) {\r\n timeBaseline = Date.now();\r\n }\r\n positions.push({\r\n x: clientX,\r\n y: clientY,\r\n id: mirror.getId(target),\r\n timeOffset: Date.now() - timeBaseline,\r\n });\r\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n ? IncrementalSource.Drag\r\n : evt instanceof MouseEvent\r\n ? IncrementalSource.MouseMove\r\n : IncrementalSource.TouchMove);\r\n }, threshold, {\r\n trailing: false,\r\n });\r\n const handlers = [\r\n on('mousemove', updatePosition, doc),\r\n on('touchmove', updatePosition, doc),\r\n on('drag', updatePosition, doc),\r\n ];\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n if (sampling.mouseInteraction === false) {\r\n return () => {\r\n };\r\n }\r\n const disableMap = sampling.mouseInteraction === true ||\r\n sampling.mouseInteraction === undefined\r\n ? {}\r\n : sampling.mouseInteraction;\r\n const handlers = [];\r\n const getHandler = (eventKey) => {\r\n return (event) => {\r\n const target = getEventTarget(event);\r\n if (isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const e = isTouchEvent(event) ? event.changedTouches[0] : event;\r\n if (!e) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n const { clientX, clientY } = e;\r\n mouseInteractionCb({\r\n type: MouseInteractions[eventKey],\r\n id,\r\n x: clientX,\r\n y: clientY,\r\n });\r\n };\r\n };\r\n Object.keys(MouseInteractions)\r\n .filter((key) => Number.isNaN(Number(key)) &&\r\n !key.endsWith('_Departed') &&\r\n disableMap[key] !== false)\r\n .forEach((eventKey) => {\r\n const eventName = eventKey.toLowerCase();\r\n const handler = getHandler(eventKey);\r\n handlers.push(on(eventName, handler, doc));\r\n });\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n const updatePosition = throttle((evt) => {\r\n const target = getEventTarget(evt);\r\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n if (target === doc) {\r\n const scrollEl = (doc.scrollingElement || doc.documentElement);\r\n scrollCb({\r\n id,\r\n x: scrollEl.scrollLeft,\r\n y: scrollEl.scrollTop,\r\n });\r\n }\r\n else {\r\n scrollCb({\r\n id,\r\n x: target.scrollLeft,\r\n y: target.scrollTop,\r\n });\r\n }\r\n }, sampling.scroll || 100);\r\n return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb, }) {\r\n let lastH = -1;\r\n let lastW = -1;\r\n const updateDimension = throttle(() => {\r\n const height = getWindowHeight();\r\n const width = getWindowWidth();\r\n if (lastH !== height || lastW !== width) {\r\n viewportResizeCb({\r\n width: Number(width),\r\n height: Number(height),\r\n });\r\n lastH = height;\r\n lastW = width;\r\n }\r\n }, 200);\r\n return on('resize', updateDimension, window);\r\n}\r\nfunction wrapEventWithUserTriggeredFlag(v, enable) {\r\n const value = Object.assign({}, v);\r\n if (!enable)\r\n delete value.userTriggered;\r\n return value;\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, ignoreClass, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, }) {\r\n function eventHandler(event) {\r\n let target = getEventTarget(event);\r\n const userTriggered = event.isTrusted;\r\n if (target && target.tagName === 'OPTION')\r\n target = target.parentElement;\r\n if (!target ||\r\n !target.tagName ||\r\n INPUT_TAGS.indexOf(target.tagName) < 0 ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const type = target.type;\r\n if (target.classList.contains(ignoreClass)) {\r\n return;\r\n }\r\n let text = target.value;\r\n let isChecked = false;\r\n if (type === 'radio' || type === 'checkbox') {\r\n isChecked = target.checked;\r\n }\r\n else if (maskInputOptions[target.tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n text = maskInputValue({\r\n maskInputOptions,\r\n tagName: target.tagName,\r\n type,\r\n value: text,\r\n maskInputFn,\r\n });\r\n }\r\n cbWithDedup(target, wrapEventWithUserTriggeredFlag({ text, isChecked, userTriggered }, userTriggeredOnInput));\r\n const name = target.name;\r\n if (type === 'radio' && name && isChecked) {\r\n doc\r\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n .forEach((el) => {\r\n if (el !== target) {\r\n cbWithDedup(el, wrapEventWithUserTriggeredFlag({\r\n text: el.value,\r\n isChecked: !isChecked,\r\n userTriggered: false,\r\n }, userTriggeredOnInput));\r\n }\r\n });\r\n }\r\n }\r\n function cbWithDedup(target, v) {\r\n const lastInputValue = lastInputValueMap.get(target);\r\n if (!lastInputValue ||\r\n lastInputValue.text !== v.text ||\r\n lastInputValue.isChecked !== v.isChecked) {\r\n lastInputValueMap.set(target, v);\r\n const id = mirror.getId(target);\r\n inputCb(Object.assign(Object.assign({}, v), { id }));\r\n }\r\n }\r\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n const handlers = events.map((eventName) => on(eventName, eventHandler, doc));\r\n const currentWindow = doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n }\r\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n const hookProperties = [\r\n [currentWindow.HTMLInputElement.prototype, 'value'],\r\n [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n ];\r\n if (propertyDescriptor && propertyDescriptor.set) {\r\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n set() {\r\n eventHandler({ target: this });\r\n },\r\n }, false, currentWindow)));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n const positions = [];\r\n function recurse(childRule, pos) {\r\n if ((isCSSGroupingRuleSupported &&\r\n childRule.parentRule instanceof CSSGroupingRule) ||\r\n (isCSSMediaRuleSupported &&\r\n childRule.parentRule instanceof CSSMediaRule) ||\r\n (isCSSSupportsRuleSupported &&\r\n childRule.parentRule instanceof CSSSupportsRule) ||\r\n (isCSSConditionRuleSupported &&\r\n childRule.parentRule instanceof CSSConditionRule)) {\r\n const rules = Array.from(childRule.parentRule.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n else if (childRule.parentStyleSheet) {\r\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n return pos;\r\n }\r\n return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n let id, styleId;\r\n if (!sheet)\r\n return {};\r\n if (sheet.ownerNode)\r\n id = mirror.getId(sheet.ownerNode);\r\n else\r\n styleId = styleMirror.getId(sheet);\r\n return {\r\n styleId,\r\n id,\r\n };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n win.CSSStyleSheet.prototype.insertRule = function (rule, index) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [{ rule, index }],\r\n });\r\n }\r\n return insertRule.apply(this, [rule, index]);\r\n };\r\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n win.CSSStyleSheet.prototype.deleteRule = function (index) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [{ index }],\r\n });\r\n }\r\n return deleteRule.apply(this, [index]);\r\n };\r\n let replace;\r\n if (win.CSSStyleSheet.prototype.replace) {\r\n replace = win.CSSStyleSheet.prototype.replace;\r\n win.CSSStyleSheet.prototype.replace = function (text) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replace: text,\r\n });\r\n }\r\n return replace.apply(this, [text]);\r\n };\r\n }\r\n let replaceSync;\r\n if (win.CSSStyleSheet.prototype.replaceSync) {\r\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n win.CSSStyleSheet.prototype.replaceSync = function (text) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replaceSync: text,\r\n });\r\n }\r\n return replaceSync.apply(this, [text]);\r\n };\r\n }\r\n const supportedNestedCSSRuleTypes = {};\r\n if (isCSSGroupingRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n }\r\n else {\r\n if (isCSSMediaRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n }\r\n if (isCSSConditionRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n }\r\n if (isCSSSupportsRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n }\r\n }\r\n const unmodifiedFunctions = {};\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n unmodifiedFunctions[typeKey] = {\r\n insertRule: type.prototype.insertRule,\r\n deleteRule: type.prototype.deleteRule,\r\n };\r\n type.prototype.insertRule = function (rule, index) {\r\n const { id, styleId } = getIdAndStyleId(this.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [\r\n {\r\n rule,\r\n index: [\r\n ...getNestedCSSRulePositions(this),\r\n index || 0,\r\n ],\r\n },\r\n ],\r\n });\r\n }\r\n return unmodifiedFunctions[typeKey].insertRule.apply(this, [rule, index]);\r\n };\r\n type.prototype.deleteRule = function (index) {\r\n const { id, styleId } = getIdAndStyleId(this.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [\r\n { index: [...getNestedCSSRulePositions(this), index] },\r\n ],\r\n });\r\n }\r\n return unmodifiedFunctions[typeKey].deleteRule.apply(this, [index]);\r\n };\r\n });\r\n return () => {\r\n win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n });\r\n };\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n var _a, _b, _c;\r\n let hostId = null;\r\n if (host.nodeName === '#document')\r\n hostId = mirror.getId(host);\r\n else\r\n hostId = mirror.getId(host.host);\r\n const patchTarget = host.nodeName === '#document'\r\n ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n const originalPropertyDescriptor = Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets');\r\n if (hostId === null ||\r\n hostId === -1 ||\r\n !patchTarget ||\r\n !originalPropertyDescriptor)\r\n return () => {\r\n };\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get() {\r\n var _a;\r\n return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n },\r\n set(sheets) {\r\n var _a;\r\n const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n if (hostId !== null && hostId !== -1) {\r\n try {\r\n stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return result;\r\n },\r\n });\r\n return () => {\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get: originalPropertyDescriptor.get,\r\n set: originalPropertyDescriptor.set,\r\n });\r\n };\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n win.CSSStyleDeclaration.prototype.setProperty = function (property, value, priority) {\r\n var _a;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return setProperty.apply(this, [property, value, priority]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n set: {\r\n property,\r\n value,\r\n priority,\r\n },\r\n index: getNestedCSSRulePositions(this.parentRule),\r\n });\r\n }\r\n return setProperty.apply(this, [property, value, priority]);\r\n };\r\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = function (property) {\r\n var _a;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return removeProperty.apply(this, [property]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n remove: {\r\n property,\r\n },\r\n index: getNestedCSSRulePositions(this.parentRule),\r\n });\r\n }\r\n return removeProperty.apply(this, [property]);\r\n };\r\n return () => {\r\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n };\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, mirror, sampling, }) {\r\n const handler = (type) => throttle((event) => {\r\n const target = getEventTarget(event);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const { currentTime, volume, muted, playbackRate, } = target;\r\n mediaInteractionCb({\r\n type,\r\n id: mirror.getId(target),\r\n currentTime,\r\n volume,\r\n muted,\r\n playbackRate,\r\n });\r\n }, sampling.media || 500);\r\n const handlers = [\r\n on('play', handler(0)),\r\n on('pause', handler(1)),\r\n on('seeked', handler(2)),\r\n on('volumechange', handler(3)),\r\n on('ratechange', handler(4)),\r\n ];\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return () => {\r\n };\r\n }\r\n const handlers = [];\r\n const fontMap = new WeakMap();\r\n const originalFontFace = win.FontFace;\r\n win.FontFace = function FontFace(family, source, descriptors) {\r\n const fontFace = new originalFontFace(family, source, descriptors);\r\n fontMap.set(fontFace, {\r\n family,\r\n buffer: typeof source !== 'string',\r\n descriptors,\r\n fontSource: typeof source === 'string'\r\n ? source\r\n : JSON.stringify(Array.from(new Uint8Array(source))),\r\n });\r\n return fontFace;\r\n };\r\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n return function (fontFace) {\r\n setTimeout(() => {\r\n const p = fontMap.get(fontFace);\r\n if (p) {\r\n fontCb(p);\r\n fontMap.delete(fontFace);\r\n }\r\n }, 0);\r\n return original.apply(this, [fontFace]);\r\n };\r\n });\r\n handlers.push(() => {\r\n win.FontFace = originalFontFace;\r\n });\r\n handlers.push(restoreHandler);\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initSelectionObserver(param) {\r\n const { doc, mirror, blockClass, blockSelector, selectionCb } = param;\r\n let collapsed = true;\r\n const updateSelection = () => {\r\n const selection = doc.getSelection();\r\n if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n return;\r\n collapsed = selection.isCollapsed || false;\r\n const ranges = [];\r\n const count = selection.rangeCount || 0;\r\n for (let i = 0; i < count; i++) {\r\n const range = selection.getRangeAt(i);\r\n const { startContainer, startOffset, endContainer, endOffset } = range;\r\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) ||\r\n isBlocked(endContainer, blockClass, blockSelector, true);\r\n if (blocked)\r\n continue;\r\n ranges.push({\r\n start: mirror.getId(startContainer),\r\n startOffset,\r\n end: mirror.getId(endContainer),\r\n endOffset,\r\n });\r\n }\r\n selectionCb({ ranges });\r\n };\r\n updateSelection();\r\n return on('selectionchange', updateSelection);\r\n}\r\nfunction mergeHooks(o, hooks) {\r\n const { mutationCb, mousemoveCb, mouseInteractionCb, scrollCb, viewportResizeCb, inputCb, mediaInteractionCb, styleSheetRuleCb, styleDeclarationCb, canvasMutationCb, fontCb, selectionCb, } = o;\r\n o.mutationCb = (...p) => {\r\n if (hooks.mutation) {\r\n hooks.mutation(...p);\r\n }\r\n mutationCb(...p);\r\n };\r\n o.mousemoveCb = (...p) => {\r\n if (hooks.mousemove) {\r\n hooks.mousemove(...p);\r\n }\r\n mousemoveCb(...p);\r\n };\r\n o.mouseInteractionCb = (...p) => {\r\n if (hooks.mouseInteraction) {\r\n hooks.mouseInteraction(...p);\r\n }\r\n mouseInteractionCb(...p);\r\n };\r\n o.scrollCb = (...p) => {\r\n if (hooks.scroll) {\r\n hooks.scroll(...p);\r\n }\r\n scrollCb(...p);\r\n };\r\n o.viewportResizeCb = (...p) => {\r\n if (hooks.viewportResize) {\r\n hooks.viewportResize(...p);\r\n }\r\n viewportResizeCb(...p);\r\n };\r\n o.inputCb = (...p) => {\r\n if (hooks.input) {\r\n hooks.input(...p);\r\n }\r\n inputCb(...p);\r\n };\r\n o.mediaInteractionCb = (...p) => {\r\n if (hooks.mediaInteaction) {\r\n hooks.mediaInteaction(...p);\r\n }\r\n mediaInteractionCb(...p);\r\n };\r\n o.styleSheetRuleCb = (...p) => {\r\n if (hooks.styleSheetRule) {\r\n hooks.styleSheetRule(...p);\r\n }\r\n styleSheetRuleCb(...p);\r\n };\r\n o.styleDeclarationCb = (...p) => {\r\n if (hooks.styleDeclaration) {\r\n hooks.styleDeclaration(...p);\r\n }\r\n styleDeclarationCb(...p);\r\n };\r\n o.canvasMutationCb = (...p) => {\r\n if (hooks.canvasMutation) {\r\n hooks.canvasMutation(...p);\r\n }\r\n canvasMutationCb(...p);\r\n };\r\n o.fontCb = (...p) => {\r\n if (hooks.font) {\r\n hooks.font(...p);\r\n }\r\n fontCb(...p);\r\n };\r\n o.selectionCb = (...p) => {\r\n if (hooks.selection) {\r\n hooks.selection(...p);\r\n }\r\n selectionCb(...p);\r\n };\r\n}\r\nfunction initObservers(o, hooks = {}) {\r\n const currentWindow = o.doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n };\r\n }\r\n mergeHooks(o, hooks);\r\n const mutationObserver = initMutationObserver(o, o.doc);\r\n const mousemoveHandler = initMoveObserver(o);\r\n const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n const scrollHandler = initScrollObserver(o);\r\n const viewportResizeHandler = initViewportResizeObserver(o);\r\n const inputHandler = initInputObserver(o);\r\n const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n win: currentWindow,\r\n });\r\n const fontObserver = o.collectFonts\r\n ? initFontObserver(o)\r\n : () => {\r\n };\r\n const selectionObserver = initSelectionObserver(o);\r\n const pluginHandlers = [];\r\n for (const plugin of o.plugins) {\r\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n }\r\n return () => {\r\n mutationBuffers.forEach((b) => b.reset());\r\n mutationObserver.disconnect();\r\n mousemoveHandler();\r\n mouseInteractionHandler();\r\n scrollHandler();\r\n viewportResizeHandler();\r\n inputHandler();\r\n mediaInteractionHandler();\r\n styleSheetObserver();\r\n adoptedStyleSheetObserver();\r\n styleDeclarationObserver();\r\n fontObserver();\r\n selectionObserver();\r\n pluginHandlers.forEach((h) => h());\r\n };\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n constructor(generateIdFn) {\r\n this.generateIdFn = generateIdFn;\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n }\r\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n let id = idToRemoteIdMap.get(remoteId);\r\n if (!id) {\r\n id = this.generateIdFn();\r\n idToRemoteIdMap.set(remoteId, id);\r\n remoteIdToIdMap.set(id, remoteId);\r\n }\r\n return id;\r\n }\r\n getIds(iframe, remoteId) {\r\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n }\r\n getRemoteId(iframe, id, map) {\r\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n if (typeof id !== 'number')\r\n return id;\r\n const remoteId = remoteIdToIdMap.get(id);\r\n if (!remoteId)\r\n return -1;\r\n return remoteId;\r\n }\r\n getRemoteIds(iframe, ids) {\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n }\r\n reset(iframe) {\r\n if (!iframe) {\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n return;\r\n }\r\n this.iframeIdToRemoteIdMap.delete(iframe);\r\n this.iframeRemoteIdToIdMap.delete(iframe);\r\n }\r\n getIdToRemoteIdMap(iframe) {\r\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n if (!idToRemoteIdMap) {\r\n idToRemoteIdMap = new Map();\r\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n }\r\n return idToRemoteIdMap;\r\n }\r\n getRemoteIdToIdMap(iframe) {\r\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n if (!remoteIdToIdMap) {\r\n remoteIdToIdMap = new Map();\r\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n }\r\n return remoteIdToIdMap;\r\n }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\n\nclass IframeManager {\r\n constructor(options) {\r\n this.iframes = new WeakMap();\r\n this.crossOriginIframeMap = new WeakMap();\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.mutationCb = options.mutationCb;\r\n this.wrappedEmit = options.wrappedEmit;\r\n this.stylesheetManager = options.stylesheetManager;\r\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n this.mirror = options.mirror;\r\n if (this.recordCrossOriginIframes) {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n }\r\n }\r\n addIframe(iframeEl) {\r\n this.iframes.set(iframeEl, true);\r\n if (iframeEl.contentWindow)\r\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n }\r\n addLoadListener(cb) {\r\n this.loadListener = cb;\r\n }\r\n attachIframe(iframeEl, childSn) {\r\n var _a;\r\n this.mutationCb({\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: childSn,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n });\r\n (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n if (iframeEl.contentDocument &&\r\n iframeEl.contentDocument.adoptedStyleSheets &&\r\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n }\r\n handleMessage(message) {\r\n if (message.data.type === 'rrweb') {\r\n const iframeSourceWindow = message.source;\r\n if (!iframeSourceWindow)\r\n return;\r\n const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n if (!iframeEl)\r\n return;\r\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, message.data.event);\r\n if (transformedEvent)\r\n this.wrappedEmit(transformedEvent, message.data.isCheckout);\r\n }\r\n }\r\n transformCrossOriginEvent(iframeEl, e) {\r\n var _a;\r\n switch (e.type) {\r\n case EventType.FullSnapshot: {\r\n this.crossOriginIframeMirror.reset(iframeEl);\r\n this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n this.replaceIdOnNode(e.data.node, iframeEl);\r\n return {\r\n timestamp: e.timestamp,\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: e.data.node,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n },\r\n };\r\n }\r\n case EventType.Meta:\r\n case EventType.Load:\r\n case EventType.DomContentLoaded: {\r\n return false;\r\n }\r\n case EventType.Plugin: {\r\n return e;\r\n }\r\n case EventType.Custom: {\r\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n return e;\r\n }\r\n case EventType.IncrementalSnapshot: {\r\n switch (e.data.source) {\r\n case IncrementalSource.Mutation: {\r\n e.data.adds.forEach((n) => {\r\n this.replaceIds(n, iframeEl, [\r\n 'parentId',\r\n 'nextId',\r\n 'previousId',\r\n ]);\r\n this.replaceIdOnNode(n.node, iframeEl);\r\n });\r\n e.data.removes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n });\r\n e.data.attributes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n e.data.texts.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.Drag:\r\n case IncrementalSource.TouchMove:\r\n case IncrementalSource.MouseMove: {\r\n e.data.positions.forEach((p) => {\r\n this.replaceIds(p, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.ViewportResize: {\r\n return false;\r\n }\r\n case IncrementalSource.MediaInteraction:\r\n case IncrementalSource.MouseInteraction:\r\n case IncrementalSource.Scroll:\r\n case IncrementalSource.CanvasMutation:\r\n case IncrementalSource.Input: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n return e;\r\n }\r\n case IncrementalSource.StyleSheetRule:\r\n case IncrementalSource.StyleDeclaration: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n return e;\r\n }\r\n case IncrementalSource.Font: {\r\n return e;\r\n }\r\n case IncrementalSource.Selection: {\r\n e.data.ranges.forEach((range) => {\r\n this.replaceIds(range, iframeEl, ['start', 'end']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.AdoptedStyleSheet: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n });\r\n return e;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n replace(iframeMirror, obj, iframeEl, keys) {\r\n for (const key of keys) {\r\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n continue;\r\n if (Array.isArray(obj[key])) {\r\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n }\r\n else {\r\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n }\r\n }\r\n return obj;\r\n }\r\n replaceIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n }\r\n replaceStyleIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n }\r\n replaceIdOnNode(node, iframeEl) {\r\n this.replaceIds(node, iframeEl, ['id']);\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.replaceIdOnNode(child, iframeEl);\r\n });\r\n }\r\n }\r\n}\n\nexport { IframeManager };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManager {\r\n constructor(options) {\r\n this.shadowDoms = new WeakSet();\r\n this.restorePatches = [];\r\n this.mutationCb = options.mutationCb;\r\n this.scrollCb = options.scrollCb;\r\n this.bypassOptions = options.bypassOptions;\r\n this.mirror = options.mirror;\r\n const manager = this;\r\n this.restorePatches.push(patch(Element.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot)\r\n manager.addShadowRoot(this.shadowRoot, this.ownerDocument);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n addShadowRoot(shadowRoot, doc) {\r\n if (!isNativeShadowDom(shadowRoot))\r\n return;\r\n if (this.shadowDoms.has(shadowRoot))\r\n return;\r\n this.shadowDoms.add(shadowRoot);\r\n initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror }));\r\n setTimeout(() => {\r\n if (shadowRoot.adoptedStyleSheets &&\r\n shadowRoot.adoptedStyleSheets.length > 0)\r\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n initAdoptedStyleSheetObserver({\r\n mirror: this.mirror,\r\n stylesheetManager: this.bypassOptions.stylesheetManager,\r\n }, shadowRoot);\r\n }, 0);\r\n }\r\n observeAttachShadow(iframeElement) {\r\n if (iframeElement.contentWindow) {\r\n const manager = this;\r\n this.restorePatches.push(patch(iframeElement.contentWindow.HTMLElement.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot)\r\n manager.addShadowRoot(this.shadowRoot, iframeElement.contentDocument);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n }\r\n reset() {\r\n this.restorePatches.forEach((restorePatch) => restorePatch());\r\n this.shadowDoms = new WeakSet();\r\n }\r\n}\n\nexport { ShadowDomManager };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\nexport { decode, encode };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n let contextMap = canvasVarMap.get(ctx);\r\n if (!contextMap) {\r\n contextMap = new Map();\r\n canvasVarMap.set(ctx, contextMap);\r\n }\r\n if (!contextMap.has(ctor)) {\r\n contextMap.set(ctor, []);\r\n }\r\n return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n if (!value ||\r\n !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n return;\r\n const name = value.constructor.name;\r\n const list = variableListFor(ctx, name);\r\n let index = list.indexOf(value);\r\n if (index === -1) {\r\n index = list.length;\r\n list.push(value);\r\n }\r\n return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n if (value instanceof Array) {\r\n return value.map((arg) => serializeArg(arg, win, ctx));\r\n }\r\n else if (value === null) {\r\n return value;\r\n }\r\n else if (value instanceof Float32Array ||\r\n value instanceof Float64Array ||\r\n value instanceof Int32Array ||\r\n value instanceof Uint32Array ||\r\n value instanceof Uint8Array ||\r\n value instanceof Uint16Array ||\r\n value instanceof Int16Array ||\r\n value instanceof Int8Array ||\r\n value instanceof Uint8ClampedArray) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [Object.values(value)],\r\n };\r\n }\r\n else if (value instanceof ArrayBuffer) {\r\n const name = value.constructor.name;\r\n const base64 = encode(value);\r\n return {\r\n rr_type: name,\r\n base64,\r\n };\r\n }\r\n else if (value instanceof DataView) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [\r\n serializeArg(value.buffer, win, ctx),\r\n value.byteOffset,\r\n value.byteLength,\r\n ],\r\n };\r\n }\r\n else if (value instanceof HTMLImageElement) {\r\n const name = value.constructor.name;\r\n const { src } = value;\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof HTMLCanvasElement) {\r\n const name = 'HTMLImageElement';\r\n const src = value.toDataURL();\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof ImageData) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n };\r\n }\r\n else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n const name = value.constructor.name;\r\n const index = saveWebGLVar(value, win, ctx);\r\n return {\r\n rr_type: name,\r\n index: index,\r\n };\r\n }\r\n return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n return [...args].map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n const webGLConstructorNames = [\r\n 'WebGLActiveInfo',\r\n 'WebGLBuffer',\r\n 'WebGLFramebuffer',\r\n 'WebGLProgram',\r\n 'WebGLRenderbuffer',\r\n 'WebGLShader',\r\n 'WebGLShaderPrecisionFormat',\r\n 'WebGLTexture',\r\n 'WebGLUniformLocation',\r\n 'WebGLVertexArrayObject',\r\n 'WebGLVertexArrayObjectOES',\r\n ];\r\n const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\r\n const handlers = [];\r\n const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n for (const prop of props2D) {\r\n try {\r\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n return function (...args) {\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n setTimeout(() => {\r\n const recordArgs = serializeArgs([...args], win, this);\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: recordArgs,\r\n });\r\n }, 0);\r\n }\r\n return original.apply(this, args);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction initCanvasContextObserver(win, blockClass, blockSelector) {\r\n const handlers = [];\r\n try {\r\n const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n return function (contextType, ...args) {\r\n if (!isBlocked(this, blockClass, blockSelector, true)) {\r\n if (!('__context' in this))\r\n this.__context = contextType;\r\n }\r\n return original.apply(this, [contextType, ...args]);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, mirror, win) {\r\n const handlers = [];\r\n const props = Object.getOwnPropertyNames(prototype);\r\n for (const prop of props) {\r\n if ([\r\n 'isContextLost',\r\n 'canvas',\r\n 'drawingBufferWidth',\r\n 'drawingBufferHeight',\r\n ].includes(prop)) {\r\n continue;\r\n }\r\n try {\r\n if (typeof prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(prototype, prop, function (original) {\r\n return function (...args) {\r\n const result = original.apply(this, args);\r\n saveWebGLVar(result, win, this);\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n const recordArgs = serializeArgs([...args], win, this);\r\n const mutation = {\r\n type,\r\n property: prop,\r\n args: recordArgs,\r\n };\r\n cb(this.canvas, mutation);\r\n }\r\n return result;\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type,\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, mirror) {\r\n const handlers = [];\r\n handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, mirror, win));\r\n if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, mirror, win));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","var WorkerClass = null;\n\ntry {\n var WorkerThreads =\n typeof module !== 'undefined' && typeof module.require === 'function' && module.require('worker_threads') ||\n typeof __non_webpack_require__ === 'function' && __non_webpack_require__('worker_threads') ||\n typeof require === 'function' && require('worker_threads');\n WorkerClass = WorkerThreads.Worker;\n} catch(e) {} // eslint-disable-line\n\nexport { WorkerClass };\n","import { WorkerClass } from './_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js';\n\nfunction decodeBase64(base64, enableUnicode) {\n return Buffer.from(base64, 'base64').toString(enableUnicode ? 'utf16' : 'utf8');\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n var source = decodeBase64(base64, enableUnicode);\n var start = source.indexOf('\\n', 10) + 1;\n var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n return function WorkerFactory(options) {\n return new WorkerClass(body, Object.assign({}, options, { eval: true }));\n };\n}\n\nexport { createBase64WorkerFactory };\n","function decodeBase64(base64, enableUnicode) {\n var binaryString = atob(base64);\n if (enableUnicode) {\n var binaryView = new Uint8Array(binaryString.length);\n for (var i = 0, n = binaryString.length; i < n; ++i) {\n binaryView[i] = binaryString.charCodeAt(i);\n }\n return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer));\n }\n return binaryString;\n}\n\nfunction createURL(base64, sourcemapArg, enableUnicodeArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n var source = decodeBase64(base64, enableUnicode);\n var start = source.indexOf('\\n', 10) + 1;\n var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n var blob = new Blob([body], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n var url;\n return function WorkerFactory(options) {\n url = url || createURL(base64, sourcemapArg, enableUnicodeArg);\n return new Worker(url, options);\n };\n}\n\nexport { createBase64WorkerFactory };\n","var kIsNodeJS = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n\nfunction isNodeJS() {\n return kIsNodeJS;\n}\n\nexport { isNodeJS };\n","import { createBase64WorkerFactory as createBase64WorkerFactory$1 } from './_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js';\nimport { createBase64WorkerFactory as createBase64WorkerFactory$2 } from './_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';\nimport { isNodeJS } from './_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js';\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n if (isNodeJS()) {\n return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);\n }\n return createBase64WorkerFactory$2(base64, sourcemapArg, enableUnicodeArg);\n}\n\nexport { createBase64WorkerFactory };\n","import { createBase64WorkerFactory } from './_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js';\n\nvar WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucykgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgY29uc3QgaWQgPSBgJHt3aWR0aH0tJHtoZWlnaHR9YDsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRCbG9iTWFwLmdldChpZCk7DQogICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0geWllbGQgYmxvYi5hcnJheUJ1ZmZlcigpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQogICAgY29uc3Qgd29ya2VyID0gc2VsZjsNCiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgY29uc3QgeyBpZCwgYml0bWFwLCB3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucyB9ID0gZS5kYXRhOw0KICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zKTsNCiAgICAgICAgICAgICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICBiaXRtYXAuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKGFycmF5QnVmZmVyKTsNCiAgICAgICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgICAgIGxhc3RCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7DQogICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgICAgaWQsDQogICAgICAgICAgICAgICAgICAgIHR5cGUsDQogICAgICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfTsKCn0pKCk7Cgo=', null, false);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\n\nclass CanvasManager {\r\n constructor(options) {\r\n this.pendingCanvasMutations = new Map();\r\n this.rafStamps = { latestId: 0, invokeId: null };\r\n this.frozen = false;\r\n this.locked = false;\r\n this.processMutation = (target, mutation) => {\r\n const newFrame = this.rafStamps.invokeId &&\r\n this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n if (newFrame || !this.rafStamps.invokeId)\r\n this.rafStamps.invokeId = this.rafStamps.latestId;\r\n if (!this.pendingCanvasMutations.has(target)) {\r\n this.pendingCanvasMutations.set(target, []);\r\n }\r\n this.pendingCanvasMutations.get(target).push(mutation);\r\n };\r\n const { sampling = 'all', win, blockClass, blockSelector, recordCanvas, dataURLOptions, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n if (recordCanvas && sampling === 'all')\r\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\r\n if (recordCanvas && typeof sampling === 'number')\r\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\r\n dataURLOptions,\r\n });\r\n }\r\n reset() {\r\n this.pendingCanvasMutations.clear();\r\n this.resetObservers && this.resetObservers();\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n }\r\n lock() {\r\n this.locked = true;\r\n }\r\n unlock() {\r\n this.locked = false;\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector);\r\n const snapshotInProgressMap = new Map();\r\n const worker = new WorkerFactory();\r\n worker.onmessage = (e) => {\r\n const { id } = e.data;\r\n snapshotInProgressMap.set(id, false);\r\n if (!('base64' in e.data))\r\n return;\r\n const { base64, type, width, height } = e.data;\r\n this.mutationCb({\r\n id,\r\n type: CanvasContext['2D'],\r\n commands: [\r\n {\r\n property: 'clearRect',\r\n args: [0, 0, width, height],\r\n },\r\n {\r\n property: 'drawImage',\r\n args: [\r\n {\r\n rr_type: 'ImageBitmap',\r\n args: [\r\n {\r\n rr_type: 'Blob',\r\n data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n type,\r\n },\r\n ],\r\n },\r\n 0,\r\n 0,\r\n ],\r\n },\r\n ],\r\n });\r\n };\r\n const timeBetweenSnapshots = 1000 / fps;\r\n let lastSnapshotTime = 0;\r\n let rafId;\r\n const getCanvas = () => {\r\n const matchedCanvas = [];\r\n win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\r\n matchedCanvas.push(canvas);\r\n }\r\n });\r\n return matchedCanvas;\r\n };\r\n const takeCanvasSnapshots = (timestamp) => {\r\n if (lastSnapshotTime &&\r\n timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n return;\r\n }\r\n lastSnapshotTime = timestamp;\r\n getCanvas()\r\n .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n var _a;\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n const context = canvas.getContext(canvas.__context);\r\n if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n context === null || context === void 0 ? void 0 : context.clear(context.COLOR_BUFFER_BIT);\r\n }\r\n }\r\n const bitmap = yield createImageBitmap(canvas);\r\n worker.postMessage({\r\n id,\r\n bitmap,\r\n width: canvas.width,\r\n height: canvas.height,\r\n dataURLOptions: options.dataURLOptions,\r\n }, [bitmap]);\r\n }));\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n };\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n initCanvasMutationObserver(win, blockClass, blockSelector) {\r\n this.startRAFTimestamping();\r\n this.startPendingCanvasMutationFlusher();\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector);\r\n const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\r\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, this.mirror);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n canvas2DReset();\r\n canvasWebGL1and2Reset();\r\n };\r\n }\r\n startPendingCanvasMutationFlusher() {\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n startRAFTimestamping() {\r\n const setLatestRAFTimestamp = (timestamp) => {\r\n this.rafStamps.latestId = timestamp;\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n };\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n }\r\n flushPendingCanvasMutations() {\r\n this.pendingCanvasMutations.forEach((values, canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n this.flushPendingCanvasMutationFor(canvas, id);\r\n });\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n flushPendingCanvasMutationFor(canvas, id) {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n if (!valuesWithType || id === -1)\r\n return;\r\n const values = valuesWithType.map((value) => {\r\n const rest = __rest(value, [\"type\"]);\r\n return rest;\r\n });\r\n const { type } = valuesWithType[0];\r\n this.mutationCb({ id, type, commands: values });\r\n this.pendingCanvasMutations.delete(canvas);\r\n }\r\n}\n\nexport { CanvasManager };\n","import { getCssRuleString } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n constructor(options) {\r\n this.trackedLinkElements = new WeakSet();\r\n this.styleMirror = new StyleSheetMirror();\r\n this.mutationCb = options.mutationCb;\r\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n }\r\n attachLinkElement(linkEl, childSn) {\r\n if ('_cssText' in childSn.attributes)\r\n this.mutationCb({\r\n adds: [],\r\n removes: [],\r\n texts: [],\r\n attributes: [\r\n {\r\n id: childSn.id,\r\n attributes: childSn\r\n .attributes,\r\n },\r\n ],\r\n });\r\n this.trackLinkElement(linkEl);\r\n }\r\n trackLinkElement(linkEl) {\r\n if (this.trackedLinkElements.has(linkEl))\r\n return;\r\n this.trackedLinkElements.add(linkEl);\r\n this.trackStylesheetInLinkElement(linkEl);\r\n }\r\n adoptStyleSheets(sheets, hostId) {\r\n if (sheets.length === 0)\r\n return;\r\n const adoptedStyleSheetData = {\r\n id: hostId,\r\n styleIds: [],\r\n };\r\n const styles = [];\r\n for (const sheet of sheets) {\r\n let styleId;\r\n if (!this.styleMirror.has(sheet)) {\r\n styleId = this.styleMirror.add(sheet);\r\n const rules = Array.from(sheet.rules || CSSRule);\r\n styles.push({\r\n styleId,\r\n rules: rules.map((r, index) => {\r\n return {\r\n rule: getCssRuleString(r),\r\n index,\r\n };\r\n }),\r\n });\r\n }\r\n else\r\n styleId = this.styleMirror.getId(sheet);\r\n adoptedStyleSheetData.styleIds.push(styleId);\r\n }\r\n if (styles.length > 0)\r\n adoptedStyleSheetData.styles = styles;\r\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n }\r\n reset() {\r\n this.styleMirror.reset();\r\n this.trackedLinkElements = new WeakSet();\r\n }\r\n trackStylesheetInLinkElement(linkEl) {\r\n }\r\n}\n\nexport { StylesheetManager };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, getWindowWidth, getWindowHeight, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\nimport { IframeManager } from './iframe-manager.js';\nimport { ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\n\nfunction wrapEvent(e) {\r\n return Object.assign(Object.assign({}, e), { timestamp: Date.now() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, ignoreClass = 'rr-ignore', maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), } = options;\r\n const inEmittingFrame = recordCrossOriginIframes\r\n ? window.parent === window\r\n : true;\r\n let passEmitsToParent = false;\r\n if (!inEmittingFrame) {\r\n try {\r\n window.parent.document;\r\n passEmitsToParent = false;\r\n }\r\n catch (e) {\r\n passEmitsToParent = true;\r\n }\r\n }\r\n if (inEmittingFrame && !emit) {\r\n throw new Error('emit function is required');\r\n }\r\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n sampling.mousemove = mousemoveWait;\r\n }\r\n mirror.reset();\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true,\r\n }\r\n : _maskInputOptions !== undefined\r\n ? _maskInputOptions\r\n : { password: true };\r\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n ? {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaVerification: true,\r\n headMetaAuthorship: _slimDOMOptions === 'all',\r\n headMetaDescKeywords: _slimDOMOptions === 'all',\r\n }\r\n : _slimDOMOptions\r\n ? _slimDOMOptions\r\n : {};\r\n polyfill();\r\n let lastFullSnapshotEvent;\r\n let incrementalSnapshotCount = 0;\r\n const eventProcessor = (e) => {\r\n for (const plugin of plugins || []) {\r\n if (plugin.eventProcessor) {\r\n e = plugin.eventProcessor(e);\r\n }\r\n }\r\n if (packFn) {\r\n e = packFn(e);\r\n }\r\n return e;\r\n };\r\n wrappedEmit = (e, isCheckout) => {\r\n var _a;\r\n if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n e.type !== EventType.FullSnapshot &&\r\n !(e.type === EventType.IncrementalSnapshot &&\r\n e.data.source === IncrementalSource.Mutation)) {\r\n mutationBuffers.forEach((buf) => buf.unfreeze());\r\n }\r\n if (inEmittingFrame) {\r\n emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n }\r\n else if (passEmitsToParent) {\r\n const message = {\r\n type: 'rrweb',\r\n event: eventProcessor(e),\r\n isCheckout,\r\n };\r\n window.parent.postMessage(message, '*');\r\n }\r\n if (e.type === EventType.FullSnapshot) {\r\n lastFullSnapshotEvent = e;\r\n incrementalSnapshotCount = 0;\r\n }\r\n else if (e.type === EventType.IncrementalSnapshot) {\r\n if (e.data.source === IncrementalSource.Mutation &&\r\n e.data.isAttachIframe) {\r\n return;\r\n }\r\n incrementalSnapshotCount++;\r\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n const exceedTime = checkoutEveryNms &&\r\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n if (exceedCount || exceedTime) {\r\n takeFullSnapshot(true);\r\n }\r\n }\r\n };\r\n const wrappedMutationEmit = (m) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n }));\r\n };\r\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n }));\r\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n }));\r\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n }));\r\n const stylesheetManager = new StylesheetManager({\r\n mutationCb: wrappedMutationEmit,\r\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n });\r\n const iframeManager = new IframeManager({\r\n mirror,\r\n mutationCb: wrappedMutationEmit,\r\n stylesheetManager: stylesheetManager,\r\n recordCrossOriginIframes,\r\n wrappedEmit,\r\n });\r\n for (const plugin of plugins || []) {\r\n if (plugin.getMirror)\r\n plugin.getMirror({\r\n nodeMirror: mirror,\r\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n });\r\n }\r\n canvasManager = new CanvasManager({\r\n recordCanvas,\r\n mutationCb: wrappedCanvasMutationEmit,\r\n win: window,\r\n blockClass,\r\n blockSelector,\r\n mirror,\r\n sampling: sampling.canvas,\r\n dataURLOptions,\r\n });\r\n const shadowDomManager = new ShadowDomManager({\r\n mutationCb: wrappedMutationEmit,\r\n scrollCb: wrappedScrollEmit,\r\n bypassOptions: {\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n dataURLOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n recordCanvas,\r\n inlineImages,\r\n sampling,\r\n slimDOMOptions,\r\n iframeManager,\r\n stylesheetManager,\r\n canvasManager,\r\n keepIframeSrcFn,\r\n },\r\n mirror,\r\n });\r\n takeFullSnapshot = (isCheckout = false) => {\r\n var _a, _b, _c, _d, _e, _f;\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Meta,\r\n data: {\r\n href: window.location.href,\r\n width: getWindowWidth(),\r\n height: getWindowHeight(),\r\n },\r\n }), isCheckout);\r\n stylesheetManager.reset();\r\n mutationBuffers.forEach((buf) => buf.lock());\r\n const node = snapshot(document, {\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskAllInputs: maskInputOptions,\r\n maskTextFn,\r\n slimDOM: slimDOMOptions,\r\n dataURLOptions,\r\n recordCanvas,\r\n inlineImages,\r\n onSerialize: (n) => {\r\n if (isSerializedIframe(n, mirror)) {\r\n iframeManager.addIframe(n);\r\n }\r\n if (isSerializedStylesheet(n, mirror)) {\r\n stylesheetManager.trackLinkElement(n);\r\n }\r\n if (hasShadowRoot(n)) {\r\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n iframeManager.attachIframe(iframe, childSn);\r\n shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (linkEl, childSn) => {\r\n stylesheetManager.attachLinkElement(linkEl, childSn);\r\n },\r\n keepIframeSrcFn,\r\n });\r\n if (!node) {\r\n return console.warn('Failed to snapshot the document');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.FullSnapshot,\r\n data: {\r\n node,\r\n initialOffset: {\r\n left: window.pageXOffset !== undefined\r\n ? window.pageXOffset\r\n : (document === null || document === void 0 ? void 0 : document.documentElement.scrollLeft) ||\r\n ((_b = (_a = document === null || document === void 0 ? void 0 : document.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n ((_c = document === null || document === void 0 ? void 0 : document.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n 0,\r\n top: window.pageYOffset !== undefined\r\n ? window.pageYOffset\r\n : (document === null || document === void 0 ? void 0 : document.documentElement.scrollTop) ||\r\n ((_e = (_d = document === null || document === void 0 ? void 0 : document.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n ((_f = document === null || document === void 0 ? void 0 : document.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n 0,\r\n },\r\n },\r\n }));\r\n mutationBuffers.forEach((buf) => buf.unlock());\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n };\r\n try {\r\n const handlers = [];\r\n handlers.push(on('DOMContentLoaded', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.DomContentLoaded,\r\n data: {},\r\n }));\r\n }));\r\n const observe = (doc) => {\r\n var _a;\r\n return initObservers({\r\n mutationCb: wrappedMutationEmit,\r\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n })),\r\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n })),\r\n scrollCb: wrappedScrollEmit,\r\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n })),\r\n inputCb: (v) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Input }, v),\r\n })),\r\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n })),\r\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n })),\r\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n })),\r\n canvasMutationCb: wrappedCanvasMutationEmit,\r\n fontCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Font }, p),\r\n })),\r\n selectionCb: (p) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n }));\r\n },\r\n blockClass,\r\n ignoreClass,\r\n maskTextClass,\r\n maskTextSelector,\r\n maskInputOptions,\r\n inlineStylesheet,\r\n sampling,\r\n recordCanvas,\r\n inlineImages,\r\n userTriggeredOnInput,\r\n collectFonts,\r\n doc,\r\n maskInputFn,\r\n maskTextFn,\r\n keepIframeSrcFn,\r\n blockSelector,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n mirror,\r\n iframeManager,\r\n stylesheetManager,\r\n shadowDomManager,\r\n canvasManager,\r\n ignoreCSSAttributes,\r\n plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n observer: p.observer,\r\n options: p.options,\r\n callback: (payload) => wrappedEmit(wrapEvent({\r\n type: EventType.Plugin,\r\n data: {\r\n plugin: p.name,\r\n payload,\r\n },\r\n })),\r\n }))) || [],\r\n }, hooks);\r\n };\r\n iframeManager.addLoadListener((iframeEl) => {\r\n handlers.push(observe(iframeEl.contentDocument));\r\n });\r\n const init = () => {\r\n takeFullSnapshot();\r\n handlers.push(observe(document));\r\n recording = true;\r\n };\r\n if (document.readyState === 'interactive' ||\r\n document.readyState === 'complete') {\r\n init();\r\n }\r\n else {\r\n handlers.push(on('load', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Load,\r\n data: {},\r\n }));\r\n init();\r\n }, window));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n recording = false;\r\n };\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n if (!recording) {\r\n throw new Error('please add custom event after start recording');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Custom,\r\n data: {\r\n tag,\r\n payload,\r\n },\r\n }));\r\n};\r\nrecord.freezePage = () => {\r\n mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n if (!recording) {\r\n throw new Error('please take full snapshot after start recording');\r\n }\r\n takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","export interface AnyReplayOptions {\n /** Public project key from the dashboard. */\n projectKey: string;\n /** Ingest endpoint. Override only for self-hosted deployments. */\n ingestUrl?: string;\n /** Fraction of visitors recorded, 0–1. Decided once per visitor, not per page. */\n sampleRate?: number;\n /** Mask every text input. Leaving this on is the supported configuration. */\n maskAllInputs?: boolean;\n /** Elements with this class have their text masked. */\n maskClass?: string;\n /** Elements with this class are not recorded at all. */\n blockClass?: string;\n /** Wait for `anyreplay('consent', true)` before recording anything. */\n requireConsent?: boolean;\n /** Flush when the buffer reaches this many events. */\n maxEventsPerChunk?: number;\n /** Flush at least this often, in milliseconds. */\n flushIntervalMs?: number;\n /** Recording stops after this many consecutive transport failures. */\n maxConsecutiveFailures?: number;\n /**\n * The most sessions this project may record per calendar month (UTC).\n *\n * Sent with the first chunk of every new session; ingest refuses a session\n * that would exceed it with 402 `session_cap_reached` and the recorder stops\n * for that visit. A cap set in the dashboard also applies, and the lower one\n * wins. Positive integer, at most 1,000,000.\n */\n maxSessionsPerMonth?: number;\n debug?: boolean;\n}\n\nexport interface ResolvedOptions extends Required<Omit<AnyReplayOptions, 'ingestUrl' | 'maxSessionsPerMonth'>> {\n ingestUrl: string;\n maxSessionsPerMonth?: number;\n}\n\nexport const DEFAULTS: Omit<ResolvedOptions, 'projectKey'> = {\n ingestUrl: 'https://in.anyreplay.com',\n sampleRate: 1,\n // Default-deny. Recording a customer's password field once is a breach; the\n // cost of the safe default is a configuration line for the rare field that\n // genuinely needs to be visible.\n maskAllInputs: true,\n maskClass: 'ar-mask',\n blockClass: 'ar-block',\n requireConsent: false,\n maxEventsPerChunk: 200,\n flushIntervalMs: 5000,\n maxConsecutiveFailures: 5,\n debug: false,\n};\n\nexport class ConfigError extends Error {}\n\nconst KEY_PATTERN = /^ar_pk_(live|test)_[0-9a-f]{24}$/;\n/** Matches what ingest's schema accepts, so a value that passes here is never a 422 later. */\nconst MAX_SESSION_CAP = 1_000_000;\n\nexport function resolveOptions(input: AnyReplayOptions): ResolvedOptions {\n if (!input || typeof input !== 'object') throw new ConfigError('anyreplay: options object required');\n if (!KEY_PATTERN.test(input.projectKey ?? '')) {\n throw new ConfigError('anyreplay: projectKey looks wrong — copy it from the dashboard');\n }\n\n const sampleRate = input.sampleRate ?? DEFAULTS.sampleRate;\n if (!(sampleRate >= 0 && sampleRate <= 1)) {\n throw new ConfigError('anyreplay: sampleRate must be between 0 and 1');\n }\n\n const cap = input.maxSessionsPerMonth;\n if (cap !== undefined && !(Number.isInteger(cap) && cap >= 1 && cap <= MAX_SESSION_CAP)) {\n throw new ConfigError(`anyreplay: maxSessionsPerMonth must be a whole number between 1 and ${MAX_SESSION_CAP}`);\n }\n\n return {\n ...DEFAULTS,\n ...input,\n projectKey: input.projectKey,\n sampleRate,\n ingestUrl: (input.ingestUrl ?? DEFAULTS.ingestUrl).replace(/\\/+$/, ''),\n // A caller who explicitly passes false gets what they asked for; anything\n // else (including undefined) keeps masking on.\n maskAllInputs: input.maskAllInputs === false ? false : true,\n };\n}\n","/**\n * Custom events: the moments a page tags with `track()`.\n *\n * They travel inside the rrweb stream as rrweb's own Custom event type, so\n * they carry the recording's clock and replay in order with everything else.\n * Ingest recognises them by these tags; the names are a contract with\n * apps/ingest/src/custom-events.ts.\n */\nexport const TRACK_TAG = 'anyreplay.track';\nexport const NAVIGATE_TAG = 'anyreplay.navigate';\n\n/** Short and URL-safe: an event name is a label, not a message. Ingest applies the same rule. */\nexport const EVENT_NAME_PATTERN = /^[A-Za-z0-9_.:-]{1,64}$/;\n/** Properties are stored with the event and indexed by nobody; a bag bigger than this is a payload, not context. */\nexport const MAX_PROPERTIES_BYTES = 4 * 1024;\n\nexport interface TrackPayload {\n name: string;\n properties: Record<string, unknown>;\n}\n\n/**\n * Checks what the page passed to `track()`, returning the payload to send or\n * the reason it was refused. Never throws: the page's own code is calling\n * this on a click handler, and a recorder that throws there breaks the click.\n */\nexport function validateTrack(name: unknown, properties: unknown): TrackPayload | string {\n if (typeof name !== 'string' || !EVENT_NAME_PATTERN.test(name)) {\n return `event name must be 1-64 characters of [A-Za-z0-9_.:-], got ${JSON.stringify(name)}`;\n }\n if (properties === undefined || properties === null) return { name, properties: {} };\n if (typeof properties !== 'object' || Array.isArray(properties)) {\n return `properties for \"${name}\" must be a plain object`;\n }\n let serialised: string;\n try {\n serialised = JSON.stringify(properties);\n } catch {\n return `properties for \"${name}\" are not JSON-serialisable`;\n }\n if (serialised === undefined || byteLength(serialised) > MAX_PROPERTIES_BYTES) {\n return `properties for \"${name}\" exceed ${MAX_PROPERTIES_BYTES} bytes once serialised`;\n }\n // The parsed copy, not the original: a getter or a class instance on the\n // caller's object must not reach the wire, and a later mutation must not\n // change what was tracked.\n return { name, properties: JSON.parse(serialised) as Record<string, unknown> };\n}\n\nfunction byteLength(text: string): number {\n return typeof TextEncoder === 'function' ? new TextEncoder().encode(text).length : text.length * 3;\n}\n","/**\n * FNV-1a. Small, fast, and good enough to spread visitor ids uniformly across\n * the unit interval — this is a bucketing decision, not a security one.\n */\nexport function hashToUnitInterval(input: string): number {\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return hash / 0xffffffff;\n}\n\n/**\n * Decides sampling from the visitor id rather than a coin flip.\n *\n * The same visitor therefore gets the same answer on every page and every\n * visit: a recorded journey stays whole instead of appearing as disconnected\n * fragments, and changing the rate moves a predictable slice of the population.\n */\nexport function isSampledIn(visitorId: string, sampleRate: number): boolean {\n if (sampleRate >= 1) return true;\n if (sampleRate <= 0) return false;\n return hashToUnitInterval(visitorId) < sampleRate;\n}\n","import type { ResolvedOptions } from './config.js';\n\nexport interface RecordedEvent {\n type: number;\n timestamp: number;\n data?: unknown;\n}\n\nexport interface SessionMeta {\n startedAt: number;\n url?: string;\n lang?: string;\n userAgent?: string;\n screenWidth?: number;\n screenHeight?: number;\n referrer?: string;\n /** `maxSessionsPerMonth`, sent only with chunk 0 of a new session. */\n sessionCap?: number;\n}\n\nexport interface ChunkFlags {\n hasError?: boolean;\n hasRageClick?: boolean;\n pageCount?: number;\n}\n\nexport interface TransportContext {\n projectKey: string;\n sessionId: string;\n visitorId: string;\n /** The first chunk number to use. Non-zero when a page resumes a session. */\n initialSeq?: number;\n}\n\n/** How many times one flush may move to a new chunk number before giving up. */\nconst MAX_STALE_RECOVERIES = 3;\n\n/**\n * The first free chunk number, when ingest says the one just sent was taken.\n *\n * Ingest answers a repeated (session, seq) with 202 and `duplicate: true`,\n * because to the server it looks like a retry. When this transport had never\n * sent that number before, it was not a retry: the number was used by an\n * earlier page of the session, or by another tab sharing it, and the events\n * were discarded. Servers that know the answer say where numbering continues.\n */\nasync function staleSeqHint(response: Response, sent: number): Promise<number | undefined> {\n try {\n if (typeof response.json !== 'function') return undefined;\n const reply = await response.json() as { duplicate?: unknown; nextSeq?: unknown };\n if (reply.duplicate !== true) return undefined;\n const next = reply.nextSeq;\n return typeof next === 'number' && Number.isInteger(next) && next > sent ? next : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport type TransportState = 'open' | 'stopped';\n\n/**\n * The Fetch standard caps the total body size of in-flight `keepalive`\n * requests at 64 KiB, and a browser rejects an oversized one outright — the\n * promise rejects with a bare TypeError, indistinguishable from being offline.\n *\n * The margin below is for the request headers, which count towards the same\n * budget, and for a second flush overlapping the first.\n */\nconst KEEPALIVE_BODY_LIMIT_BYTES = 56 * 1024;\n\n/**\n * Whether a payload may be sent with `keepalive`.\n *\n * Deciding this from the event *count* is the trap: the first chunk of every\n * session is a Meta plus a single full DOM snapshot — two events, and on a real\n * page routinely several hundred kilobytes. Sizing by count marks it as small,\n * the browser refuses it, and the recorder counts a network failure it can\n * never recover from; after `maxConsecutiveFailures` it stops for good. The\n * symptom is a site that records nothing at all while the snippet looks\n * perfectly installed.\n */\nexport function withinKeepaliveLimit(payload: string): boolean {\n const bytes = typeof TextEncoder === 'function'\n ? new TextEncoder().encode(payload).length\n // No TextEncoder: assume the worst rather than risk the rejection.\n : payload.length * 3;\n return bytes <= KEEPALIVE_BODY_LIMIT_BYTES;\n}\n\nexport interface TransportHooks {\n onStopped?: (reason: string) => void;\n onSent?: (seq: number, eventCount: number) => void;\n /** Called with the next free chunk number before a request using the current one leaves. */\n onSeqReserved?: (nextSeq: number) => void;\n}\n\n/**\n * Ships buffered events to ingest.\n *\n * Three properties matter more than throughput here, because this code runs\n * inside somebody else's product:\n *\n * - It must never throw into the host page.\n * - It must never keep retrying a request the server has rejected on its\n * merits (a bad key, a disallowed origin) — that is an infinite loop.\n * - It must not lose the tail of a session when the tab closes.\n */\nexport class Transport {\n private buffer: RecordedEvent[] = [];\n private seq = 0;\n private consecutiveFailures = 0;\n private state: TransportState = 'open';\n private timer: ReturnType<typeof setInterval> | undefined;\n private pendingMeta: SessionMeta | undefined;\n private flags: ChunkFlags = {};\n private inFlight = false;\n /** The chunk number of the last request that left, to tell a retry from a first attempt. */\n private lastAttemptedSeq = -1;\n private staleRecoveries = 0;\n\n constructor(\n private readonly options: ResolvedOptions,\n private readonly context: TransportContext,\n private readonly hooks: TransportHooks = {},\n ) {\n this.seq = context.initialSeq ?? 0;\n }\n\n get isStopped(): boolean {\n return this.state === 'stopped';\n }\n\n get bufferedCount(): number {\n return this.buffer.length;\n }\n\n get sentChunks(): number {\n return this.seq;\n }\n\n /** Attaches metadata to the next chunk. Sent once, with the session's first chunk. */\n setMeta(meta: SessionMeta): void {\n this.pendingMeta = meta;\n }\n\n mergeFlags(flags: ChunkFlags): void {\n this.flags = { ...this.flags, ...flags };\n }\n\n start(): void {\n if (this.timer) return;\n this.timer = setInterval(() => void this.flush(), this.options.flushIntervalMs);\n // Never hold a Node process open; harmless in browsers.\n (this.timer as unknown as { unref?: () => void }).unref?.();\n }\n\n stop(reason: string): void {\n this.state = 'stopped';\n if (this.timer) clearInterval(this.timer);\n this.timer = undefined;\n this.buffer = [];\n this.hooks.onStopped?.(reason);\n }\n\n push(event: RecordedEvent): void {\n if (this.state === 'stopped') return;\n this.buffer.push(event);\n if (this.buffer.length >= this.options.maxEventsPerChunk) void this.flush();\n }\n\n private body(events: RecordedEvent[]): string {\n return JSON.stringify({\n projectKey: this.context.projectKey,\n sessionId: this.context.sessionId,\n visitorId: this.context.visitorId,\n seq: this.seq,\n events,\n ...(this.pendingMeta ? { meta: this.pendingMeta } : {}),\n ...(Object.keys(this.flags).length > 0 ? { flags: this.flags } : {}),\n });\n }\n\n /** Sends whatever is buffered. Safe to call when there is nothing to send. */\n async flush(): Promise<void> {\n if (this.state === 'stopped' || this.inFlight || this.buffer.length === 0) return;\n\n this.inFlight = true;\n const events = this.buffer;\n this.buffer = [];\n let resend = false;\n\n try {\n const retry = this.lastAttemptedSeq === this.seq;\n this.lastAttemptedSeq = this.seq;\n // Reserved before the request leaves: a page that is closed mid-flight\n // must not hand this number to the next page of the same session.\n this.hooks.onSeqReserved?.(this.seq + 1);\n const payload = this.body(events);\n const response = await fetch(`${this.options.ingestUrl}/v1/ingest/events`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: payload,\n // Ingest is unauthenticated by design; sending credentials would be a\n // cross-site cookie leak for no benefit.\n credentials: 'omit',\n keepalive: withinKeepaliveLimit(payload),\n });\n\n if (response.ok) {\n const nextSeq = retry ? undefined : await staleSeqHint(response, this.seq);\n if (nextSeq !== undefined && this.staleRecoveries < MAX_STALE_RECOVERIES) {\n // These events were new and the server discarded them. Send them\n // again under the first number it has not seen.\n this.staleRecoveries += 1;\n this.seq = nextSeq;\n this.requeue(events);\n resend = true;\n return;\n }\n this.staleRecoveries = 0;\n this.seq += 1;\n this.pendingMeta = undefined;\n this.consecutiveFailures = 0;\n this.hooks.onSent?.(this.seq - 1, events.length);\n return;\n }\n\n // 4xx other than 429 is a verdict, not a hiccup: the key is wrong, the\n // origin is not allowed, or the payload is malformed. Retrying cannot\n // change the answer, so stop instead of hammering the endpoint forever.\n if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n this.stop(`rejected_${response.status}`);\n return;\n }\n\n this.requeue(events);\n this.registerFailure();\n } catch {\n // Network error: the user may simply be offline. Keep the events.\n this.requeue(events);\n this.registerFailure();\n } finally {\n this.inFlight = false;\n if (resend) void this.flush();\n }\n }\n\n /**\n * Puts a failed batch back at the front of the queue.\n *\n * Bounded on purpose: a long offline period must not grow the buffer until\n * the tab runs out of memory. Older events are dropped first — a replay\n * missing its beginning is still useful; a crashed page is not.\n */\n private requeue(events: RecordedEvent[]): void {\n const limit = this.options.maxEventsPerChunk * 10;\n this.buffer = [...events, ...this.buffer].slice(-limit);\n }\n\n private registerFailure(): void {\n this.consecutiveFailures += 1;\n if (this.consecutiveFailures >= this.options.maxConsecutiveFailures) {\n this.stop('too_many_failures');\n }\n }\n\n /**\n * Last-gasp send when the page is going away.\n *\n * `fetch` is cancelled once the document unloads, so the tail of every\n * session would be lost. `sendBeacon` hands the payload to the browser, which\n * delivers it after the page is gone.\n */\n flushWithBeacon(): boolean {\n if (this.state === 'stopped' || this.buffer.length === 0) return false;\n\n const events = this.buffer;\n const payload = this.body(events);\n this.buffer = [];\n\n try {\n if (typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function') {\n // text/plain avoids a CORS preflight, which cannot complete during unload.\n this.hooks.onSeqReserved?.(this.seq + 1);\n const blob = new Blob([payload], { type: 'text/plain;charset=UTF-8' });\n const queued = navigator.sendBeacon(`${this.options.ingestUrl}/v1/ingest/events`, blob);\n if (queued) {\n this.seq += 1;\n this.pendingMeta = undefined;\n return true;\n }\n }\n } catch {\n /* fall through */\n }\n\n this.buffer = events;\n return false;\n }\n}\n","const VISITOR_KEY = 'anyreplay.vid';\nconst SESSION_KEY = 'anyreplay.sid';\nconst SESSION_TS_KEY = 'anyreplay.sts';\n/** The next chunk number the current session may use. */\nconst SEQ_KEY = 'anyreplay.seq';\n/** Page views so far in the current session, so a reload continues the count. */\nconst PAGE_KEY = 'anyreplay.pc';\n/** Until when (epoch ms) this tab should not try to record, after ingest refused a new session. */\nconst COOLDOWN_KEY = 'anyreplay.cd';\n\n/**\n * How long a tab waits after a 402 before trying to record again.\n *\n * A quota or cap is a monthly fact; retrying on every page load would put one\n * refused request per navigation on ingest, from every visitor, for the rest\n * of the month. Two minutes is long enough to make that negligible and short\n * enough that an upgrade takes effect while the customer is still watching.\n */\nconst QUOTA_COOLDOWN_MS = 2 * 60 * 1000;\n\n/** A new session starts after this much inactivity, matching common analytics. */\nconst SESSION_IDLE_MS = 30 * 60 * 1000;\n\nfunction randomId(bytes = 16): string {\n const array = new Uint8Array(bytes);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(array);\n } else {\n for (let i = 0; i < bytes; i += 1) array[i] = Math.floor(Math.random() * 256);\n }\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/** RFC 4122 v4, formatted. Ingest requires a UUID for the session id. */\nexport function uuidv4(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n const hex = randomId(16).split('');\n hex[12] = '4';\n hex[16] = ((parseInt(hex[16]!, 16) & 0x3) | 0x8).toString(16);\n const s = hex.join('');\n return `${s.slice(0, 8)}-${s.slice(8, 12)}-${s.slice(12, 16)}-${s.slice(16, 20)}-${s.slice(20)}`;\n}\n\ninterface Storage {\n get(key: string): string | null;\n set(key: string, value: string): void;\n remove(key: string): void;\n}\n\n/**\n * Storage that degrades instead of throwing.\n *\n * `localStorage` throws on access in some privacy modes, and a recorder that\n * throws inside the customer's page is far worse than one that stops recording.\n */\nexport function safeStorage(source: () => globalThis.Storage | undefined): Storage {\n const read = (): globalThis.Storage | undefined => {\n try { return source(); } catch { return undefined; }\n };\n return {\n get: (key) => { try { return read()?.getItem(key) ?? null; } catch { return null; } },\n set: (key, value) => { try { read()?.setItem(key, value); } catch { /* ignore */ } },\n remove: (key) => { try { read()?.removeItem(key); } catch { /* ignore */ } },\n };\n}\n\nexport interface Identity {\n visitorId: string;\n sessionId: string;\n isNewSession: boolean;\n /** The chunk number to continue from: 0 for a new session, later for a resumed one. */\n nextSeq: number;\n /** Which page view of the session this is: 1 for a new session, previous + 1 for a resumed one. */\n pageCount: number;\n}\n\n/**\n * Resolves who this is and which session they are in.\n *\n * The visitor id persists across visits (it is what sampling is decided on, so\n * a sampled-out visitor stays sampled out rather than flickering). The session\n * id resets after a period of inactivity.\n */\nexport function resolveIdentity(\n local: Storage,\n session: Storage,\n now: number = Date.now(),\n): Identity {\n let visitorId = local.get(VISITOR_KEY);\n if (!visitorId || !/^[A-Za-z0-9_-]{8,64}$/.test(visitorId)) {\n visitorId = `v${randomId(12)}`;\n local.set(VISITOR_KEY, visitorId);\n }\n\n const previousId = session.get(SESSION_KEY);\n const previousTs = Number(session.get(SESSION_TS_KEY) ?? 0);\n const expired = !previousId || !previousTs || now - previousTs > SESSION_IDLE_MS;\n\n const sessionId = expired ? uuidv4() : previousId;\n session.set(SESSION_KEY, sessionId);\n session.set(SESSION_TS_KEY, String(now));\n\n // A resumed session continues its chunk numbering. Starting again at 0 on\n // every page load collides with chunks the server already holds for this\n // session, and ingest drops a repeated (session, seq) as a retry — silently\n // losing everything recorded after the first page.\n const storedSeq = Number(session.get(SEQ_KEY));\n const nextSeq = !expired && Number.isInteger(storedSeq) && storedSeq > 0 ? storedSeq : 0;\n session.set(SEQ_KEY, String(nextSeq));\n\n // A full navigation is a page view of the same session. Starting the count\n // at 1 on every page would report a ten-page visit as one page.\n const storedPages = Number(session.get(PAGE_KEY));\n const pageCount = !expired && Number.isInteger(storedPages) && storedPages > 0 ? storedPages + 1 : 1;\n session.set(PAGE_KEY, String(pageCount));\n\n return { visitorId, sessionId, isNewSession: expired, nextSeq, pageCount };\n}\n\n/** Records the page count so the next page of the session continues from it. */\nexport function notePageCount(session: { set(key: string, value: string): void }, count: number): void {\n session.set(PAGE_KEY, String(count));\n}\n\n/** True while this tab is still inside the cool-down that followed a 402. */\nexport function inCooldown(session: Storage, now: number = Date.now()): boolean {\n const until = Number(session.get(COOLDOWN_KEY));\n return Number.isFinite(until) && until > now;\n}\n\nexport function startCooldown(session: Storage, now: number = Date.now()): void {\n session.set(COOLDOWN_KEY, String(now + QUOTA_COOLDOWN_MS));\n}\n\n/** Records that chunk numbers below `next` are taken, before the request that uses one leaves. */\nexport function reserveSeq(session: { set(key: string, value: string): void }, next: number): void {\n session.set(SEQ_KEY, String(next));\n}\n\nexport function touchSession(session: Storage, now: number = Date.now()): void {\n session.set(SESSION_TS_KEY, String(now));\n}\n\nexport { VISITOR_KEY, SESSION_KEY, SESSION_TS_KEY, SEQ_KEY, PAGE_KEY, COOLDOWN_KEY, SESSION_IDLE_MS, QUOTA_COOLDOWN_MS };\n","import { record } from 'rrweb';\nimport type { AnyReplayOptions, ResolvedOptions } from './config.js';\nimport { resolveOptions } from './config.js';\nimport { NAVIGATE_TAG, TRACK_TAG, validateTrack } from './events.js';\nimport { isSampledIn } from './sampling.js';\nimport { Transport, type RecordedEvent, type SessionMeta } from './transport.js';\nimport {\n inCooldown, notePageCount, resolveIdentity, reserveSeq, safeStorage, startCooldown, touchSession,\n} from './visitor.js';\n\nexport type RecorderStatus = 'idle' | 'awaiting-consent' | 'recording' | 'sampled-out' | 'stopped';\n\nexport interface RecorderHandle {\n status: () => RecorderStatus;\n sessionId: () => string | null;\n consent: (granted: boolean) => void;\n identify: (traits: { userId?: string; email?: string }) => void;\n /**\n * Tags this moment of the recording so it shows on the player's timeline.\n *\n * `name` is 1–64 characters of `[A-Za-z0-9_.:-]`; `properties` must be a\n * plain JSON object of at most 4 KB. Anything else is dropped with a warning\n * in debug mode — never an exception, since this runs inside the page's\n * own handlers.\n */\n track: (name: string, properties?: Record<string, unknown>) => void;\n stop: () => void;\n flush: () => Promise<void>;\n}\n\n/** Rage click: several clicks in nearly the same spot in quick succession. */\nconst RAGE_CLICK_COUNT = 3;\nconst RAGE_CLICK_WINDOW_MS = 1000;\nconst RAGE_CLICK_RADIUS_PX = 30;\n\n/**\n * Events tracked before rrweb is emitting — while consent is pending, or\n * while the document is still loading — wait here. Enough for an app's boot\n * sequence; a page that tracks more than this before anything is recorded is\n * looping, and keeping the oldest ones tells the story better than the newest.\n */\nconst MAX_PENDING_EVENTS = 32;\n\nexport function createRecorder(rawOptions: AnyReplayOptions): RecorderHandle {\n const options: ResolvedOptions = resolveOptions(rawOptions);\n\n const local = safeStorage(() => globalThis.localStorage);\n const session = safeStorage(() => globalThis.sessionStorage);\n const identity = resolveIdentity(local, session);\n\n let status: RecorderStatus = 'idle';\n let stopRecording: (() => void) | undefined;\n let pageCount = identity.pageCount;\n\n if (!isSampledIn(identity.visitorId, options.sampleRate)) {\n // Decided from the visitor id, so this answer is stable across pages.\n return inertHandle('sampled-out', identity.sessionId);\n }\n\n if (inCooldown(session)) {\n // The previous page was told this session may not be started. That answer\n // will not have changed a page load later.\n if (options.debug) console.warn('[anyreplay] not recording: ingest refused a new session recently');\n return inertHandle('stopped', identity.sessionId);\n }\n\n const transport = new Transport(\n options,\n {\n projectKey: options.projectKey,\n sessionId: identity.sessionId,\n visitorId: identity.visitorId,\n initialSeq: identity.nextSeq,\n },\n {\n onSeqReserved: (next) => reserveSeq(session, next),\n onStopped: (reason) => {\n status = 'stopped';\n stopRecording?.();\n stopRecording = undefined;\n // Only the verdict about the session itself is remembered across pages.\n // A transport failure or an origin problem is either transient or one\n // request per page load to notice it is fixed; a full quota is neither.\n if (reason === 'rejected_402') startCooldown(session);\n if (options.debug) console.warn(`[anyreplay] recording stopped: ${reason}`);\n },\n },\n );\n\n const collectMeta = (): SessionMeta => ({\n startedAt: Date.now(),\n url: safeLocation(),\n lang: typeof navigator !== 'undefined' ? navigator.language : undefined,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n screenWidth: typeof window !== 'undefined' ? window.innerWidth : undefined,\n screenHeight: typeof window !== 'undefined' ? window.innerHeight : undefined,\n referrer: typeof document !== 'undefined' ? document.referrer || undefined : undefined,\n // The cap is a decision about starting a session, so it goes only where\n // ingest makes that decision: chunk 0. A resumed page starts later.\n ...(options.maxSessionsPerMonth !== undefined && identity.nextSeq === 0\n ? { sessionCap: options.maxSessionsPerMonth }\n : {}),\n });\n\n const recentClicks: { x: number; y: number; t: number }[] = [];\n\n const noteInteraction = (event: RecordedEvent): void => {\n // rrweb IncrementalSnapshot(3) with MouseInteraction(2) source carries clicks.\n const data = event.data as { source?: number; type?: number; x?: number; y?: number } | undefined;\n if (event.type !== 3 || data?.source !== 2 || typeof data.x !== 'number') return;\n\n const now = event.timestamp;\n recentClicks.push({ x: data.x, y: data.y ?? 0, t: now });\n while (recentClicks.length > 0 && now - recentClicks[0]!.t > RAGE_CLICK_WINDOW_MS) recentClicks.shift();\n\n if (recentClicks.length >= RAGE_CLICK_COUNT) {\n const first = recentClicks[0]!;\n const clustered = recentClicks.every(\n (c) => Math.abs(c.x - first.x) < RAGE_CLICK_RADIUS_PX && Math.abs(c.y - first.y) < RAGE_CLICK_RADIUS_PX,\n );\n if (clustered) transport.mergeFlags({ hasRageClick: true });\n }\n };\n\n /* ----------------------------- custom events ---------------------------- */\n\n const pending: { tag: string; payload: unknown }[] = [];\n let draining = false;\n let drainScheduled = false;\n\n /**\n * Hands the queue of waiting events to rrweb, in order.\n *\n * `addCustomEvent` throws until rrweb has finished its first snapshot,\n * which it takes on `load` when the recorder starts in a still-loading\n * document — and it flips to accepting only after the snapshot's own\n * events have been emitted, so draining from inside `emit` can be refused\n * too. A refusal is retried on the next event and, in case no event comes,\n * on a timer. A queued event is stamped with the time it is handed over,\n * not the time `track` was called: a marker a few hundred milliseconds late\n * is still on the timeline, and one dated before the snapshot is not.\n */\n const drainPending = (): void => {\n if (draining || pending.length === 0) return;\n draining = true;\n try {\n while (pending.length > 0) {\n const next = pending[0]!;\n record.addCustomEvent(next.tag, next.payload);\n pending.shift();\n }\n } catch {\n if (!drainScheduled && status === 'recording') {\n drainScheduled = true;\n setTimeout(() => { drainScheduled = false; drainPending(); }, 50);\n }\n } finally {\n draining = false;\n }\n };\n\n const emitCustom = (tag: string, payload: unknown): void => {\n if (status === 'stopped') return;\n if (status === 'recording') {\n try {\n record.addCustomEvent(tag, payload);\n return;\n } catch {\n /* not emitting yet — queue it */\n }\n }\n if (pending.length >= MAX_PENDING_EVENTS) {\n if (options.debug) console.warn(`[anyreplay] dropped ${tag}: too many events before recording started`);\n return;\n }\n pending.push({ tag, payload });\n };\n\n /* ------------------------------ navigation ------------------------------ */\n\n let lastUrl = safeLocation();\n\n /**\n * A route change in a single-page app is a page view.\n *\n * rrweb records the DOM mutations that come with it, but nothing in the\n * stream says \"this is a new page\" — so the marker is emitted here, and\n * ingest indexes it for the player. Same-URL changes are ignored: routers\n * call `replaceState` for scroll positions and query tweaks, and each of\n * those is not a page.\n */\n const noteNavigation = (): void => {\n const url = safeLocation();\n if (!url || url === lastUrl) return;\n lastUrl = url;\n pageCount += 1;\n notePageCount(session, pageCount);\n transport.mergeFlags({ pageCount });\n emitCustom(NAVIGATE_TAG, { url, title: typeof document !== 'undefined' ? document.title : '' });\n };\n\n const begin = (): void => {\n if (status === 'recording' || status === 'stopped') return;\n status = 'recording';\n transport.setMeta(collectMeta());\n // The page the recorder starts on is a page view. Without this the\n // counter only ever reflects in-app navigations, so a single-page visit\n // reports zero pages — and on a resumed session it is the previous page's\n // count plus one, so the hop is visible.\n transport.mergeFlags({ pageCount });\n transport.start();\n\n stopRecording = record({\n emit: (event) => {\n const typed = event as unknown as RecordedEvent;\n noteInteraction(typed);\n touchSession(session, typed.timestamp);\n transport.push(typed);\n drainPending();\n },\n maskAllInputs: options.maskAllInputs,\n maskTextClass: options.maskClass,\n blockClass: options.blockClass,\n // Passwords are never recorded, regardless of configuration.\n maskInputOptions: { password: true, email: true, tel: true },\n // Canvas capture is expensive and off unless a customer opts in later.\n recordCanvas: false,\n collectFonts: false,\n });\n // Every page begins with a full snapshot (rrweb takes one on start), so\n // events tracked before this point land right after it.\n drainPending();\n\n attachLifecycleHooks();\n };\n\n const attachLifecycleHooks = (): void => {\n if (typeof window === 'undefined') return;\n\n // pagehide is the reliable end-of-page signal; unload does not fire on\n // mobile Safari and beforeunload breaks the back/forward cache.\n window.addEventListener('pagehide', () => { transport.flushWithBeacon(); }, { capture: true });\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') transport.flushWithBeacon();\n });\n window.addEventListener('error', () => transport.mergeFlags({ hasError: true }));\n window.addEventListener('unhandledrejection', () => transport.mergeFlags({ hasError: true }));\n\n // Wrapped after the original runs, so `location` already shows the new URL.\n const patch = (method: 'pushState' | 'replaceState'): void => {\n const original = history[method].bind(history);\n history[method] = function patched(...args: Parameters<History['pushState']>) {\n const result = original(...args);\n noteNavigation();\n return result;\n };\n };\n patch('pushState');\n patch('replaceState');\n window.addEventListener('popstate', noteNavigation);\n };\n\n if (options.requireConsent) {\n status = 'awaiting-consent';\n } else {\n begin();\n }\n\n return {\n status: () => status,\n sessionId: () => identity.sessionId,\n consent: (granted) => {\n if (granted) begin();\n else transport.stop('consent_withdrawn');\n },\n identify: (traits) => {\n if (!traits.userId && !traits.email) return;\n void fetch(`${options.ingestUrl}/v1/ingest/identify`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'omit',\n body: JSON.stringify({\n projectKey: options.projectKey,\n sessionId: identity.sessionId,\n ...traits,\n }),\n }).catch(() => { /* identity is best-effort; never surface to the page */ });\n },\n track: (name, properties) => {\n const payload = validateTrack(name, properties);\n if (typeof payload === 'string') {\n if (options.debug) console.warn(`[anyreplay] track() ignored: ${payload}`);\n return;\n }\n emitCustom(TRACK_TAG, payload);\n },\n stop: () => transport.stop('stopped_by_page'),\n flush: () => transport.flush(),\n };\n}\n\nfunction safeLocation(): string | undefined {\n try {\n return typeof location !== 'undefined' ? location.href : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction inertHandle(status: RecorderStatus, sessionId: string | null): RecorderHandle {\n return {\n status: () => status,\n sessionId: () => sessionId,\n consent: () => {},\n identify: () => {},\n track: () => {},\n stop: () => {},\n flush: async () => {},\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAI;AAAA,CACH,SAAUA,WAAU;AACjB,EAAAA,UAASA,UAAS,UAAU,IAAI,CAAC,IAAI;AACrC,EAAAA,UAASA,UAAS,cAAc,IAAI,CAAC,IAAI;AACzC,EAAAA,UAASA,UAAS,SAAS,IAAI,CAAC,IAAI;AACpC,EAAAA,UAASA,UAAS,MAAM,IAAI,CAAC,IAAI;AACjC,EAAAA,UAASA,UAAS,OAAO,IAAI,CAAC,IAAI;AAClC,EAAAA,UAASA,UAAS,SAAS,IAAI,CAAC,IAAI;AACxC,GAAG,aAAa,WAAW,CAAC,EAAE;AAE9B,SAAS,UAAU,GAAG;AAClB,SAAO,EAAE,aAAa,EAAE;AAC5B;AACA,SAAS,aAAa,GAAG;AACrB,MAAI,OAAO,MAAM,QAAQ,MAAM,SAAS,SAAS,EAAE;AACnD,SAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,SAAS,KAAK,gBAAgB,CAAC;AACtF;AACA,SAAS,kBAAkB,YAAY;AACnC,SAAO,OAAO,UAAU,SAAS,KAAK,UAAU,MAAM;AAC1D;AACA,SAAS,mCAAmC,SAAS;AACjD,MAAI,QAAQ,SAAS,yBAAyB,KAC1C,CAAC,QAAQ,SAAS,iCAAiC,GAAG;AACtD,cAAU,QAAQ,QAAQ,2BAA2B,wDAAwD;AAAA,EACjH;AACA,SAAO;AACX;AACA,SAAS,kBAAkB,GAAG;AAC1B,MAAI;AACA,QAAI,QAAQ,EAAE,SAAS,EAAE;AACzB,WAAO,QACD,mCAAmC,MAAM,KAAK,KAAK,EAAE,IAAI,gBAAgB,EAAE,KAAK,EAAE,CAAC,IACnF;AAAA,EACV,SACO,OAAO;AACV,WAAO;AAAA,EACX;AACJ;AACA,SAAS,iBAAiB,MAAM;AAC5B,MAAI,iBAAiB,KAAK;AAC1B,MAAI,gBAAgB,IAAI,GAAG;AACvB,QAAI;AACA,uBAAiB,kBAAkB,KAAK,UAAU,KAAK;AAAA,IAC3D,SACO,IAAI;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AACA,SAAS,gBAAgB,MAAM;AAC3B,SAAO,gBAAgB;AAC3B;AACA,IAAI,SAAU,WAAY;AACtB,WAASC,UAAS;AACd,SAAK,YAAY,oBAAI,IAAI;AACzB,SAAK,cAAc,oBAAI,QAAQ;AAAA,EACnC;AACA,EAAAA,QAAO,UAAU,QAAQ,SAAU,GAAG;AAClC,QAAI;AACJ,QAAI,CAAC;AACD,aAAO;AACX,QAAI,MAAM,KAAK,KAAK,QAAQ,CAAC,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG;AACxE,WAAO,OAAO,QAAQ,OAAO,SAAS,KAAK;AAAA,EAC/C;AACA,EAAAA,QAAO,UAAU,UAAU,SAAU,IAAI;AACrC,WAAO,KAAK,UAAU,IAAI,EAAE,KAAK;AAAA,EACrC;AACA,EAAAA,QAAO,UAAU,SAAS,WAAY;AAClC,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EAC3C;AACA,EAAAA,QAAO,UAAU,UAAU,SAAU,GAAG;AACpC,WAAO,KAAK,YAAY,IAAI,CAAC,KAAK;AAAA,EACtC;AACA,EAAAA,QAAO,UAAU,oBAAoB,SAAU,GAAG;AAC9C,QAAI,QAAQ;AACZ,QAAI,KAAK,KAAK,MAAM,CAAC;AACrB,SAAK,UAAU,QAAQ,EAAE,EAAE;AAC3B,QAAI,EAAE,YAAY;AACd,QAAE,WAAW,QAAQ,SAAU,WAAW;AACtC,eAAO,MAAM,kBAAkB,SAAS;AAAA,MAC5C,CAAC;AAAA,IACL;AAAA,EACJ;AACA,EAAAA,QAAO,UAAU,MAAM,SAAU,IAAI;AACjC,WAAO,KAAK,UAAU,IAAI,EAAE;AAAA,EAChC;AACA,EAAAA,QAAO,UAAU,UAAU,SAAU,MAAM;AACvC,WAAO,KAAK,YAAY,IAAI,IAAI;AAAA,EACpC;AACA,EAAAA,QAAO,UAAU,MAAM,SAAU,GAAG,MAAM;AACtC,QAAI,KAAK,KAAK;AACd,SAAK,UAAU,IAAI,IAAI,CAAC;AACxB,SAAK,YAAY,IAAI,GAAG,IAAI;AAAA,EAChC;AACA,EAAAA,QAAO,UAAU,UAAU,SAAU,IAAI,GAAG;AACxC,QAAI,UAAU,KAAK,QAAQ,EAAE;AAC7B,QAAI,SAAS;AACT,UAAI,OAAO,KAAK,YAAY,IAAI,OAAO;AACvC,UAAI;AACA,aAAK,YAAY,IAAI,GAAG,IAAI;AAAA,IACpC;AACA,SAAK,UAAU,IAAI,IAAI,CAAC;AAAA,EAC5B;AACA,EAAAA,QAAO,UAAU,QAAQ,WAAY;AACjC,SAAK,YAAY,oBAAI,IAAI;AACzB,SAAK,cAAc,oBAAI,QAAQ;AAAA,EACnC;AACA,SAAOA;AACX,EAAE;AACF,SAAS,eAAe;AACpB,SAAO,IAAI,OAAO;AACtB;AACA,SAAS,eAAe,IAAI;AACxB,MAAI,mBAAmB,GAAG,kBAAkB,UAAU,GAAG,SAAS,OAAO,GAAG,MAAM,QAAQ,GAAG,OAAO,cAAc,GAAG;AACrH,MAAI,OAAO,SAAS;AACpB,MAAI,iBAAiB,QAAQ,YAAY,CAAC,KACtC,iBAAiB,IAAI,GAAG;AACxB,QAAI,aAAa;AACb,aAAO,YAAY,IAAI;AAAA,IAC3B,OACK;AACD,aAAO,IAAI,OAAO,KAAK,MAAM;AAAA,IACjC;AAAA,EACJ;AACA,SAAO;AACX;AACA,IAAI,0BAA0B;AAC9B,SAAS,gBAAgB,QAAQ;AAC7B,MAAI,MAAM,OAAO,WAAW,IAAI;AAChC,MAAI,CAAC;AACD,WAAO;AACX,MAAI,YAAY;AAChB,WAAS,IAAI,GAAG,IAAI,OAAO,OAAO,KAAK,WAAW;AAC9C,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW;AAC/C,UAAI,eAAe,IAAI;AACvB,UAAI,uBAAuB,2BAA2B,eAChD,aAAa,uBAAuB,IACpC;AACN,UAAI,cAAc,IAAI,YAAY,qBAAqB,KAAK,KAAK,GAAG,GAAG,KAAK,IAAI,WAAW,OAAO,QAAQ,CAAC,GAAG,KAAK,IAAI,WAAW,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,MAAM;AACjK,UAAI,YAAY,KAAK,SAAU,OAAO;AAAE,eAAO,UAAU;AAAA,MAAG,CAAC;AACzD,eAAO;AAAA,IACf;AAAA,EACJ;AACA,SAAO;AACX;AAEA,IAAI,MAAM;AACV,IAAI,eAAe,IAAI,OAAO,cAAc;AAC5C,IAAI,eAAe;AACnB,SAAS,QAAQ;AACb,SAAO;AACX;AACA,SAAS,gBAAgB,SAAS;AAC9B,MAAI,mBAAmB,iBAAiB;AACpC,WAAO;AAAA,EACX;AACA,MAAI,mBAAmB,QAAQ,QAAQ,YAAY,EAAE,KAAK;AAC1D,MAAI,aAAa,KAAK,gBAAgB,GAAG;AACrC,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,SAAS,oBAAoB,OAAO;AAChC,SAAO,MAAM,WACP,MAAM,KAAK,MAAM,QAAQ,EACtB,IAAI,SAAU,MAAM;AAAE,WAAO,KAAK,WAAW;AAAA,EAAI,CAAC,EAClD,KAAK,EAAE,IACV;AACV;AACA,SAAS,cAAc,KAAK;AACxB,MAAI,SAAS;AACb,MAAI,IAAI,QAAQ,IAAI,IAAI,IAAI;AACxB,aAAS,IAAI,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,EAChD,OACK;AACD,aAAS,IAAI,MAAM,GAAG,EAAE,CAAC;AAAA,EAC7B;AACA,WAAS,OAAO,MAAM,GAAG,EAAE,CAAC;AAC5B,SAAO;AACX;AACA,IAAI;AACJ,IAAI;AACJ,IAAI,iBAAiB;AACrB,IAAI,gBAAgB;AACpB,IAAI,WAAW;AACf,SAAS,qBAAqB,SAAS,MAAM;AACzC,UAAQ,WAAW,IAAI,QAAQ,gBAAgB,SAAU,QAAQ,QAAQ,OAAO,QAAQ,OAAO,OAAO;AAClG,QAAI,WAAW,SAAS,SAAS;AACjC,QAAI,aAAa,UAAU,UAAU;AACrC,QAAI,CAAC,UAAU;AACX,aAAO;AAAA,IACX;AACA,QAAI,CAAC,cAAc,KAAK,QAAQ,GAAG;AAC/B,aAAO,OAAO,OAAO,UAAU,EAAE,OAAO,QAAQ,EAAE,OAAO,YAAY,GAAG;AAAA,IAC5E;AACA,QAAI,SAAS,KAAK,QAAQ,GAAG;AACzB,aAAO,OAAO,OAAO,UAAU,EAAE,OAAO,QAAQ,EAAE,OAAO,YAAY,GAAG;AAAA,IAC5E;AACA,QAAI,SAAS,CAAC,MAAM,KAAK;AACrB,aAAO,OAAO,OAAO,UAAU,EAAE,OAAO,cAAc,IAAI,IAAI,QAAQ,EAAE,OAAO,YAAY,GAAG;AAAA,IAClG;AACA,QAAI,QAAQ,KAAK,MAAM,GAAG;AAC1B,QAAI,QAAQ,SAAS,MAAM,GAAG;AAC9B,UAAM,IAAI;AACV,aAAS,KAAK,GAAG,UAAU,OAAO,KAAK,QAAQ,QAAQ,MAAM;AACzD,UAAI,OAAO,QAAQ,EAAE;AACrB,UAAI,SAAS,KAAK;AACd;AAAA,MACJ,WACS,SAAS,MAAM;AACpB,cAAM,IAAI;AAAA,MACd,OACK;AACD,cAAM,KAAK,IAAI;AAAA,MACnB;AAAA,IACJ;AACA,WAAO,OAAO,OAAO,UAAU,EAAE,OAAO,MAAM,KAAK,GAAG,CAAC,EAAE,OAAO,YAAY,GAAG;AAAA,EACnF,CAAC;AACL;AACA,IAAI,oBAAoB;AACxB,IAAI,0BAA0B;AAC9B,SAAS,wBAAwB,KAAK,gBAAgB;AAClD,MAAI,eAAe,KAAK,MAAM,IAAI;AAC9B,WAAO;AAAA,EACX;AACA,MAAI,MAAM;AACV,WAAS,kBAAkB,OAAO;AAC9B,QAAIC;AACJ,QAAI,QAAQ,MAAM,KAAK,eAAe,UAAU,GAAG,CAAC;AACpD,QAAI,OAAO;AACP,MAAAA,SAAQ,MAAM,CAAC;AACf,aAAOA,OAAM;AACb,aAAOA;AAAA,IACX;AACA,WAAO;AAAA,EACX;AACA,MAAI,SAAS,CAAC;AACd,SAAO,MAAM;AACT,sBAAkB,uBAAuB;AACzC,QAAI,OAAO,eAAe,QAAQ;AAC9B;AAAA,IACJ;AACA,QAAI,MAAM,kBAAkB,iBAAiB;AAC7C,QAAI,IAAI,MAAM,EAAE,MAAM,KAAK;AACvB,YAAM,cAAc,KAAK,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC,CAAC;AACzD,aAAO,KAAK,GAAG;AAAA,IACnB,OACK;AACD,UAAI,iBAAiB;AACrB,YAAM,cAAc,KAAK,GAAG;AAC5B,UAAI,WAAW;AACf,aAAO,MAAM;AACT,YAAI,IAAI,eAAe,OAAO,GAAG;AACjC,YAAI,MAAM,IAAI;AACV,iBAAO,MAAM,MAAM,gBAAgB,KAAK,CAAC;AACzC;AAAA,QACJ,WACS,CAAC,UAAU;AAChB,cAAI,MAAM,KAAK;AACX,mBAAO;AACP,mBAAO,MAAM,MAAM,gBAAgB,KAAK,CAAC;AACzC;AAAA,UACJ,WACS,MAAM,KAAK;AAChB,uBAAW;AAAA,UACf;AAAA,QACJ,OACK;AACD,cAAI,MAAM,KAAK;AACX,uBAAW;AAAA,UACf;AAAA,QACJ;AACA,0BAAkB;AAClB,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AACA,SAAO,OAAO,KAAK,IAAI;AAC3B;AACA,SAAS,cAAc,KAAK,gBAAgB;AACxC,MAAI,CAAC,kBAAkB,eAAe,KAAK,MAAM,IAAI;AACjD,WAAO;AAAA,EACX;AACA,MAAI,IAAI,IAAI,cAAc,GAAG;AAC7B,IAAE,OAAO;AACT,SAAO,EAAE;AACb;AACA,SAAS,aAAa,IAAI;AACtB,SAAO,QAAQ,GAAG,YAAY,SAAS,GAAG,eAAe;AAC7D;AACA,SAAS,UAAU;AACf,MAAI,IAAI,SAAS,cAAc,GAAG;AAClC,IAAE,OAAO;AACT,SAAO,EAAE;AACb;AACA,SAAS,mBAAmB,KAAK,SAAS,MAAM,OAAO;AACnD,MAAI,SAAS,SACR,SAAS,UAAU,SAAS,EAAE,YAAY,SAAS,MAAM,CAAC,MAAM,MAAO;AACxE,WAAO,cAAc,KAAK,KAAK;AAAA,EACnC,WACS,SAAS,gBAAgB,SAAS,MAAM,CAAC,MAAM,KAAK;AACzD,WAAO,cAAc,KAAK,KAAK;AAAA,EACnC,WACS,SAAS,gBACd,UACC,YAAY,WAAW,YAAY,QAAQ,YAAY,OAAO;AAC/D,WAAO,cAAc,KAAK,KAAK;AAAA,EACnC,WACS,SAAS,YAAY,OAAO;AACjC,WAAO,wBAAwB,KAAK,KAAK;AAAA,EAC7C,WACS,SAAS,WAAW,OAAO;AAChC,WAAO,qBAAqB,OAAO,QAAQ,CAAC;AAAA,EAChD,WACS,YAAY,YAAY,SAAS,UAAU,OAAO;AACvD,WAAO,cAAc,KAAK,KAAK;AAAA,EACnC,OACK;AACD,WAAO;AAAA,EACX;AACJ;AACA,SAAS,kBAAkB,SAAS,YAAY,eAAe;AAC3D,MAAI,OAAO,eAAe,UAAU;AAChC,QAAI,QAAQ,UAAU,SAAS,UAAU,GAAG;AACxC,aAAO;AAAA,IACX;AAAA,EACJ,OACK;AACD,aAAS,SAAS,QAAQ,UAAU,QAAQ,YAAW;AACnD,UAAI,YAAY,QAAQ,UAAU,MAAM;AACxC,UAAI,WAAW,KAAK,SAAS,GAAG;AAC5B,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,eAAe;AACf,WAAO,QAAQ,QAAQ,aAAa;AAAA,EACxC;AACA,SAAO;AACX;AACA,SAAS,kBAAkB,MAAM,OAAO,gBAAgB;AACpD,MAAI,CAAC;AACD,WAAO;AACX,MAAI,KAAK,aAAa,KAAK,cAAc;AACrC,QAAI,CAAC;AACD,aAAO;AACX,WAAO,kBAAkB,KAAK,YAAY,OAAO,cAAc;AAAA,EACnE;AACA,WAAS,SAAS,KAAK,UAAU,QAAQ,YAAW;AAChD,QAAI,YAAY,KAAK,UAAU,MAAM;AACrC,QAAI,MAAM,KAAK,SAAS,GAAG;AACvB,aAAO;AAAA,IACX;AAAA,EACJ;AACA,MAAI,CAAC;AACD,WAAO;AACX,SAAO,kBAAkB,KAAK,YAAY,OAAO,cAAc;AACnE;AACA,SAAS,gBAAgB,MAAM,eAAe,kBAAkB;AAC5D,MAAI,KAAK,KAAK,aAAa,KAAK,eAC1B,OACA,KAAK;AACX,MAAI,OAAO;AACP,WAAO;AACX,MAAI,OAAO,kBAAkB,UAAU;AACnC,QAAI,GAAG,UAAU,SAAS,aAAa;AACnC,aAAO;AACX,QAAI,GAAG,QAAQ,IAAI,OAAO,aAAa,CAAC;AACpC,aAAO;AAAA,EACf,OACK;AACD,QAAI,kBAAkB,IAAI,eAAe,IAAI;AACzC,aAAO;AAAA,EACf;AACA,MAAI,kBAAkB;AAClB,QAAI,GAAG,QAAQ,gBAAgB;AAC3B,aAAO;AACX,QAAI,GAAG,QAAQ,gBAAgB;AAC3B,aAAO;AAAA,EACf;AACA,SAAO;AACX;AACA,SAAS,iBAAiB,UAAU,UAAU,mBAAmB;AAC7D,MAAI,MAAM,SAAS;AACnB,MAAI,CAAC,KAAK;AACN;AAAA,EACJ;AACA,MAAI,QAAQ;AACZ,MAAI;AACJ,MAAI;AACA,iBAAa,IAAI,SAAS;AAAA,EAC9B,SACO,OAAO;AACV;AAAA,EACJ;AACA,MAAI,eAAe,YAAY;AAC3B,QAAI,UAAU,WAAW,WAAY;AACjC,UAAI,CAAC,OAAO;AACR,iBAAS;AACT,gBAAQ;AAAA,MACZ;AAAA,IACJ,GAAG,iBAAiB;AACpB,aAAS,iBAAiB,QAAQ,WAAY;AAC1C,mBAAa,OAAO;AACpB,cAAQ;AACR,eAAS;AAAA,IACb,CAAC;AACD;AAAA,EACJ;AACA,MAAI,WAAW;AACf,MAAI,IAAI,SAAS,SAAS,YACtB,SAAS,QAAQ,YACjB,SAAS,QAAQ,IAAI;AACrB,eAAW,UAAU,CAAC;AACtB,WAAO,SAAS,iBAAiB,QAAQ,QAAQ;AAAA,EACrD;AACA,WAAS,iBAAiB,QAAQ,QAAQ;AAC9C;AACA,SAAS,qBAAqB,MAAM,UAAU,uBAAuB;AACjE,MAAI,QAAQ;AACZ,MAAI;AACJ,MAAI;AACA,uBAAmB,KAAK;AAAA,EAC5B,SACO,OAAO;AACV;AAAA,EACJ;AACA,MAAI;AACA;AACJ,MAAI,QAAQ,WAAW,WAAY;AAC/B,QAAI,CAAC,OAAO;AACR,eAAS;AACT,cAAQ;AAAA,IACZ;AAAA,EACJ,GAAG,qBAAqB;AACxB,OAAK,iBAAiB,QAAQ,WAAY;AACtC,iBAAa,KAAK;AAClB,YAAQ;AACR,aAAS;AAAA,EACb,CAAC;AACL;AACA,SAAS,cAAc,GAAG,SAAS;AAC/B,MAAI,MAAM,QAAQ,KAAKC,UAAS,QAAQ,QAAQ,aAAa,QAAQ,YAAY,gBAAgB,QAAQ,eAAe,gBAAgB,QAAQ,eAAe,mBAAmB,QAAQ,kBAAkB,mBAAmB,QAAQ,kBAAkB,KAAK,QAAQ,kBAAkB,mBAAmB,OAAO,SAAS,CAAC,IAAI,IAAI,aAAa,QAAQ,YAAY,cAAc,QAAQ,aAAa,KAAK,QAAQ,gBAAgB,iBAAiB,OAAO,SAAS,CAAC,IAAI,IAAI,eAAe,QAAQ,cAAc,eAAe,QAAQ,cAAc,kBAAkB,QAAQ,iBAAiB,KAAK,QAAQ,mBAAmB,oBAAoB,OAAO,SAAS,QAAQ;AAChpB,MAAI,SAAS,UAAU,KAAKA,OAAM;AAClC,UAAQ,EAAE,UAAU;AAAA,IAChB,KAAK,EAAE;AACH,UAAI,EAAE,eAAe,cAAc;AAC/B,eAAO;AAAA,UACH,MAAM,SAAS;AAAA,UACf,YAAY,CAAC;AAAA,UACb,YAAY,EAAE;AAAA,QAClB;AAAA,MACJ,OACK;AACD,eAAO;AAAA,UACH,MAAM,SAAS;AAAA,UACf,YAAY,CAAC;AAAA,QACjB;AAAA,MACJ;AAAA,IACJ,KAAK,EAAE;AACH,aAAO;AAAA,QACH,MAAM,SAAS;AAAA,QACf,MAAM,EAAE;AAAA,QACR,UAAU,EAAE;AAAA,QACZ,UAAU,EAAE;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ,KAAK,EAAE;AACH,aAAO,qBAAqB,GAAG;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,KAAK,EAAE;AACH,aAAO,kBAAkB,GAAG;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,KAAK,EAAE;AACH,aAAO;AAAA,QACH,MAAM,SAAS;AAAA,QACf,aAAa;AAAA,QACb;AAAA,MACJ;AAAA,IACJ,KAAK,EAAE;AACH,aAAO;AAAA,QACH,MAAM,SAAS;AAAA,QACf,aAAa,EAAE,eAAe;AAAA,QAC9B;AAAA,MACJ;AAAA,IACJ;AACI,aAAO;AAAA,EACf;AACJ;AACA,SAAS,UAAU,KAAKA,SAAQ;AAC5B,MAAI,CAACA,QAAO,QAAQ,GAAG;AACnB,WAAO;AACX,MAAI,QAAQA,QAAO,MAAM,GAAG;AAC5B,SAAO,UAAU,IAAI,SAAY;AACrC;AACA,SAAS,kBAAkB,GAAG,SAAS;AACnC,MAAI;AACJ,MAAI,gBAAgB,QAAQ,eAAe,mBAAmB,QAAQ,kBAAkB,aAAa,QAAQ,YAAY,SAAS,QAAQ;AAC1I,MAAI,gBAAgB,EAAE,cAAc,EAAE,WAAW;AACjD,MAAI,cAAc,EAAE;AACpB,MAAI,UAAU,kBAAkB,UAAU,OAAO;AACjD,MAAI,WAAW,kBAAkB,WAAW,OAAO;AACnD,MAAI,WAAW,aAAa;AACxB,QAAI;AACA,UAAI,EAAE,eAAe,EAAE,iBAAiB;AAAA,MACxC,YACU,KAAK,EAAE,WAAW,WAAW,QAAQ,OAAO,SAAS,SAAS,GAAG,UAAU;AACjF,sBAAc,oBAAoB,EAAE,WAAW,KAAK;AAAA,MACxD;AAAA,IACJ,SACO,KAAK;AACR,cAAQ,KAAK,wDAAwD,OAAO,GAAG,GAAG,CAAC;AAAA,IACvF;AACA,kBAAc,qBAAqB,aAAa,QAAQ,CAAC;AAAA,EAC7D;AACA,MAAI,UAAU;AACV,kBAAc;AAAA,EAClB;AACA,MAAI,CAAC,WACD,CAAC,YACD,eACA,gBAAgB,GAAG,eAAe,gBAAgB,GAAG;AACrD,kBAAc,aACR,WAAW,WAAW,IACtB,YAAY,QAAQ,SAAS,GAAG;AAAA,EAC1C;AACA,SAAO;AAAA,IACH,MAAM,SAAS;AAAA,IACf,aAAa,eAAe;AAAA,IAC5B;AAAA,IACA;AAAA,EACJ;AACJ;AACA,SAAS,qBAAqB,GAAG,SAAS;AACtC,MAAI,MAAM,QAAQ,KAAK,aAAa,QAAQ,YAAY,gBAAgB,QAAQ,eAAe,mBAAmB,QAAQ,kBAAkB,KAAK,QAAQ,kBAAkB,mBAAmB,OAAO,SAAS,CAAC,IAAI,IAAI,cAAc,QAAQ,aAAa,KAAK,QAAQ,gBAAgB,iBAAiB,OAAO,SAAS,CAAC,IAAI,IAAI,eAAe,QAAQ,cAAc,eAAe,QAAQ,cAAc,kBAAkB,QAAQ,iBAAiB,KAAK,QAAQ,mBAAmB,oBAAoB,OAAO,SAAS,QAAQ,IAAI,SAAS,QAAQ;AACvhB,MAAI,YAAY,kBAAkB,GAAG,YAAY,aAAa;AAC9D,MAAI,UAAU,gBAAgB,CAAC;AAC/B,MAAI,aAAa,CAAC;AAClB,MAAI,MAAM,EAAE,WAAW;AACvB,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,QAAI,OAAO,EAAE,WAAW,CAAC;AACzB,eAAW,KAAK,IAAI,IAAI,mBAAmB,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;AAAA,EAClF;AACA,MAAI,YAAY,UAAU,kBAAkB;AACxC,QAAI,aAAa,MAAM,KAAK,IAAI,WAAW,EAAE,KAAK,SAAU,GAAG;AAC3D,aAAO,EAAE,SAAS,EAAE;AAAA,IACxB,CAAC;AACD,QAAI,UAAU;AACd,QAAI,YAAY;AACZ,gBAAU,kBAAkB,UAAU;AAAA,IAC1C;AACA,QAAI,SAAS;AACT,aAAO,WAAW;AAClB,aAAO,WAAW;AAClB,iBAAW,WAAW,qBAAqB,SAAS,WAAW,IAAI;AAAA,IACvE;AAAA,EACJ;AACA,MAAI,YAAY,WACZ,EAAE,SACF,EAAE,EAAE,aAAa,EAAE,eAAe,IAAI,KAAK,EAAE,QAAQ;AACrD,QAAI,UAAU,kBAAkB,EAAE,KAAK;AACvC,QAAI,SAAS;AACT,iBAAW,WAAW,qBAAqB,SAAS,QAAQ,CAAC;AAAA,IACjE;AAAA,EACJ;AACA,MAAI,YAAY,WAAW,YAAY,cAAc,YAAY,UAAU;AACvE,QAAI,QAAQ,EAAE;AACd,QAAI,UAAU,EAAE;AAChB,QAAI,WAAW,SAAS,WACpB,WAAW,SAAS,cACpB,WAAW,SAAS,YACpB,WAAW,SAAS,YACpB,OAAO;AACP,iBAAW,QAAQ,eAAe;AAAA,QAC9B,MAAM,WAAW;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,WACS,SAAS;AACd,iBAAW,UAAU;AAAA,IACzB;AAAA,EACJ;AACA,MAAI,YAAY,UAAU;AACtB,QAAI,EAAE,YAAY,CAAC,iBAAiB,QAAQ,GAAG;AAC3C,iBAAW,WAAW;AAAA,IAC1B,OACK;AACD,aAAO,WAAW;AAAA,IACtB;AAAA,EACJ;AACA,MAAI,YAAY,YAAY,cAAc;AACtC,QAAI,EAAE,cAAc,MAAM;AACtB,UAAI,CAAC,gBAAgB,CAAC,GAAG;AACrB,mBAAW,aAAa,EAAE,UAAU,eAAe,MAAM,eAAe,OAAO;AAAA,MACnF;AAAA,IACJ,WACS,EAAE,eAAe,IAAI;AAC1B,UAAI,gBAAgB,EAAE,UAAU,eAAe,MAAM,eAAe,OAAO;AAC3E,UAAI,cAAc,SAAS,cAAc,QAAQ;AACjD,kBAAY,QAAQ,EAAE;AACtB,kBAAY,SAAS,EAAE;AACvB,UAAI,qBAAqB,YAAY,UAAU,eAAe,MAAM,eAAe,OAAO;AAC1F,UAAI,kBAAkB,oBAAoB;AACtC,mBAAW,aAAa;AAAA,MAC5B;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,YAAY,SAAS,cAAc;AACnC,QAAI,CAAC,eAAe;AAChB,sBAAgB,IAAI,cAAc,QAAQ;AAC1C,kBAAY,cAAc,WAAW,IAAI;AAAA,IAC7C;AACA,QAAI,UAAU;AACd,QAAI,aAAa,QAAQ;AACzB,YAAQ,cAAc;AACtB,QAAI,oBAAoB,WAAY;AAChC,UAAI;AACA,sBAAc,QAAQ,QAAQ;AAC9B,sBAAc,SAAS,QAAQ;AAC/B,kBAAU,UAAU,SAAS,GAAG,CAAC;AACjC,mBAAW,aAAa,cAAc,UAAU,eAAe,MAAM,eAAe,OAAO;AAAA,MAC/F,SACO,KAAK;AACR,gBAAQ,KAAK,yBAAyB,OAAO,QAAQ,YAAY,WAAW,EAAE,OAAO,GAAG,CAAC;AAAA,MAC7F;AACA,mBACO,WAAW,cAAc,aAC1B,QAAQ,gBAAgB,aAAa;AAAA,IAC/C;AACA,QAAI,QAAQ,YAAY,QAAQ,iBAAiB;AAC7C,wBAAkB;AAAA;AAElB,cAAQ,SAAS;AAAA,EACzB;AACA,MAAI,YAAY,WAAW,YAAY,SAAS;AAC5C,eAAW,gBAAgB,EAAE,SACvB,WACA;AACN,eAAW,sBAAsB,EAAE;AAAA,EACvC;AACA,MAAI,CAAC,mBAAmB;AACpB,QAAI,EAAE,YAAY;AACd,iBAAW,gBAAgB,EAAE;AAAA,IACjC;AACA,QAAI,EAAE,WAAW;AACb,iBAAW,eAAe,EAAE;AAAA,IAChC;AAAA,EACJ;AACA,MAAI,WAAW;AACX,QAAI,KAAK,EAAE,sBAAsB,GAAG,QAAQ,GAAG,OAAO,SAAS,GAAG;AAClE,iBAAa;AAAA,MACT,SAAS,WAAW,OAAO;AAAA,MAC3B,UAAU,GAAG,OAAO,OAAO,IAAI;AAAA,MAC/B,WAAW,GAAG,OAAO,QAAQ,IAAI;AAAA,IACrC;AAAA,EACJ;AACA,MAAI,YAAY,YAAY,CAAC,gBAAgB,WAAW,GAAG,GAAG;AAC1D,QAAI,CAAC,EAAE,iBAAiB;AACpB,iBAAW,SAAS,WAAW;AAAA,IACnC;AACA,WAAO,WAAW;AAAA,EACtB;AACA,SAAO;AAAA,IACH,MAAM,SAAS;AAAA,IACf;AAAA,IACA;AAAA,IACA,YAAY,CAAC;AAAA,IACb,OAAO,aAAa,CAAC,KAAK;AAAA,IAC1B;AAAA,IACA;AAAA,EACJ;AACJ;AACA,SAAS,cAAc,WAAW;AAC9B,MAAI,cAAc,QAAW;AACzB,WAAO;AAAA,EACX,OACK;AACD,WAAO,UAAU,YAAY;AAAA,EACjC;AACJ;AACA,SAAS,gBAAgB,IAAI,gBAAgB;AACzC,MAAI,eAAe,WAAW,GAAG,SAAS,SAAS,SAAS;AACxD,WAAO;AAAA,EACX,WACS,GAAG,SAAS,SAAS,SAAS;AACnC,QAAI,eAAe,WACd,GAAG,YAAY,YACX,GAAG,YAAY,UACZ,GAAG,WAAW,QAAQ,aACtB,GAAG,WAAW,OAAO,YACxB,GAAG,YAAY,UACZ,GAAG,WAAW,QAAQ,cACtB,OAAO,GAAG,WAAW,SAAS,YAC9B,GAAG,WAAW,KAAK,SAAS,KAAK,IAAK;AAC9C,aAAO;AAAA,IACX,WACS,eAAe,gBAClB,GAAG,YAAY,UAAU,GAAG,WAAW,QAAQ,mBAC5C,GAAG,YAAY,WACX,cAAc,GAAG,WAAW,IAAI,EAAE,MAAM,mCAAmC,KACxE,cAAc,GAAG,WAAW,IAAI,MAAM,sBACtC,cAAc,GAAG,WAAW,GAAG,MAAM,UACrC,cAAc,GAAG,WAAW,GAAG,MAAM,sBACrC,cAAc,GAAG,WAAW,GAAG,MAAM,mBAAoB;AACrE,aAAO;AAAA,IACX,WACS,GAAG,YAAY,QAAQ;AAC5B,UAAI,eAAe,wBACf,cAAc,GAAG,WAAW,IAAI,EAAE,MAAM,wBAAwB,GAAG;AACnE,eAAO;AAAA,MACX,WACS,eAAe,mBACnB,cAAc,GAAG,WAAW,QAAQ,EAAE,MAAM,mBAAmB,KAC5D,cAAc,GAAG,WAAW,IAAI,EAAE,MAAM,gBAAgB,KACxD,cAAc,GAAG,WAAW,IAAI,MAAM,cAAc;AACxD,eAAO;AAAA,MACX,WACS,eAAe,mBACnB,cAAc,GAAG,WAAW,IAAI,MAAM,YACnC,cAAc,GAAG,WAAW,IAAI,MAAM,eACtC,cAAc,GAAG,WAAW,IAAI,MAAM,YAAY;AACtD,eAAO;AAAA,MACX,WACS,eAAe,qBACpB,GAAG,WAAW,YAAY,MAAM,QAAW;AAC3C,eAAO;AAAA,MACX,WACS,eAAe,uBACnB,cAAc,GAAG,WAAW,IAAI,MAAM,YACnC,cAAc,GAAG,WAAW,IAAI,MAAM,eACtC,cAAc,GAAG,WAAW,IAAI,MAAM,eACtC,cAAc,GAAG,WAAW,IAAI,MAAM,eACtC,cAAc,GAAG,WAAW,IAAI,MAAM,YACtC,cAAc,GAAG,WAAW,QAAQ,EAAE,MAAM,WAAW,KACvD,cAAc,GAAG,WAAW,QAAQ,EAAE,MAAM,WAAW,IAAI;AAC/D,eAAO;AAAA,MACX,WACS,eAAe,yBACnB,cAAc,GAAG,WAAW,IAAI,MAAM,8BACnC,cAAc,GAAG,WAAW,IAAI,MAAM,yBACtC,cAAc,GAAG,WAAW,IAAI,MAAM,gBACtC,cAAc,GAAG,WAAW,IAAI,MAAM,qBACtC,cAAc,GAAG,WAAW,IAAI,MAAM,eACtC,cAAc,GAAG,WAAW,IAAI,MAAM,kBACtC,cAAc,GAAG,WAAW,IAAI,MAAM,+BAA+B;AACzE,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AACA,SAAS,oBAAoB,GAAG,SAAS;AACrC,MAAI,MAAM,QAAQ,KAAKA,UAAS,QAAQ,QAAQ,aAAa,QAAQ,YAAY,gBAAgB,QAAQ,eAAe,gBAAgB,QAAQ,eAAe,mBAAmB,QAAQ,kBAAkB,KAAK,QAAQ,WAAW,YAAY,OAAO,SAAS,QAAQ,IAAI,KAAK,QAAQ,kBAAkB,mBAAmB,OAAO,SAAS,OAAO,IAAI,KAAK,QAAQ,kBAAkB,mBAAmB,OAAO,SAAS,CAAC,IAAI,IAAI,aAAa,QAAQ,YAAY,cAAc,QAAQ,aAAa,iBAAiB,QAAQ,gBAAgB,KAAK,QAAQ,gBAAgB,iBAAiB,OAAO,SAAS,CAAC,IAAI,IAAI,KAAK,QAAQ,cAAc,eAAe,OAAO,SAAS,QAAQ,IAAI,KAAK,QAAQ,cAAc,eAAe,OAAO,SAAS,QAAQ,IAAI,cAAc,QAAQ,aAAa,eAAe,QAAQ,cAAc,KAAK,QAAQ,mBAAmB,oBAAoB,OAAO,SAAS,MAAO,IAAI,mBAAmB,QAAQ,kBAAkB,KAAK,QAAQ,uBAAuB,wBAAwB,OAAO,SAAS,MAAO,IAAI,KAAK,QAAQ,iBAAiB,kBAAkB,OAAO,SAAS,WAAY;AAAE,WAAO;AAAA,EAAO,IAAI,IAAI,KAAK,QAAQ,mBAAmB,oBAAoB,OAAO,SAAS,QAAQ;AAC/qC,MAAI,KAAK,QAAQ,oBAAoB,qBAAqB,OAAO,SAAS,OAAO;AACjF,MAAI,kBAAkB,cAAc,GAAG;AAAA,IACnC;AAAA,IACA,QAAQA;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACD,MAAI,CAAC,iBAAiB;AAClB,YAAQ,KAAK,GAAG,gBAAgB;AAChC,WAAO;AAAA,EACX;AACA,MAAI;AACJ,MAAIA,QAAO,QAAQ,CAAC,GAAG;AACnB,SAAKA,QAAO,MAAM,CAAC;AAAA,EACvB,WACS,gBAAgB,iBAAiB,cAAc,KACnD,CAAC,sBACE,gBAAgB,SAAS,SAAS,QAClC,CAAC,gBAAgB,WACjB,CAAC,gBAAgB,YAAY,QAAQ,eAAe,EAAE,EAAE,QAAS;AACrE,SAAK;AAAA,EACT,OACK;AACD,SAAK,MAAM;AAAA,EACf;AACA,MAAI,iBAAiB,OAAO,OAAO,iBAAiB,EAAE,GAAO,CAAC;AAC9D,EAAAA,QAAO,IAAI,GAAG,cAAc;AAC5B,MAAI,OAAO,cAAc;AACrB,WAAO;AAAA,EACX;AACA,MAAI,aAAa;AACb,gBAAY,CAAC;AAAA,EACjB;AACA,MAAI,cAAc,CAAC;AACnB,MAAI,eAAe,SAAS,SAAS,SAAS;AAC1C,kBAAc,eAAe,CAAC,eAAe;AAC7C,WAAO,eAAe;AACtB,QAAI,aAAa,EAAE;AACnB,QAAI,cAAc,kBAAkB,UAAU;AAC1C,qBAAe,eAAe;AAAA,EACtC;AACA,OAAK,eAAe,SAAS,SAAS,YAClC,eAAe,SAAS,SAAS,YACjC,aAAa;AACb,QAAI,eAAe,kBACf,eAAe,SAAS,SAAS,WACjC,eAAe,YAAY,QAAQ;AACnC,2BAAqB;AAAA,IACzB;AACA,QAAI,gBAAgB;AAAA,MAChB;AAAA,MACA,QAAQA;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AACA,aAAS,KAAK,GAAG,KAAK,MAAM,KAAK,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,MAAM;AAClE,UAAI,SAAS,GAAG,EAAE;AAClB,UAAI,sBAAsB,oBAAoB,QAAQ,aAAa;AACnE,UAAI,qBAAqB;AACrB,uBAAe,WAAW,KAAK,mBAAmB;AAAA,MACtD;AAAA,IACJ;AACA,QAAI,UAAU,CAAC,KAAK,EAAE,YAAY;AAC9B,eAAS,KAAK,GAAG,KAAK,MAAM,KAAK,EAAE,WAAW,UAAU,GAAG,KAAK,GAAG,QAAQ,MAAM;AAC7E,YAAI,SAAS,GAAG,EAAE;AAClB,YAAI,sBAAsB,oBAAoB,QAAQ,aAAa;AACnE,YAAI,qBAAqB;AACrB,4BAAkB,EAAE,UAAU,MACzB,oBAAoB,WAAW;AACpC,yBAAe,WAAW,KAAK,mBAAmB;AAAA,QACtD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,EAAE,cACF,aAAa,EAAE,UAAU,KACzB,kBAAkB,EAAE,UAAU,GAAG;AACjC,mBAAe,WAAW;AAAA,EAC9B;AACA,MAAI,eAAe,SAAS,SAAS,WACjC,eAAe,YAAY,UAAU;AACrC,qBAAiB,GAAG,WAAY;AAC5B,UAAI,YAAY,EAAE;AAClB,UAAI,aAAa,cAAc;AAC3B,YAAI,uBAAuB,oBAAoB,WAAW;AAAA,UACtD,KAAK;AAAA,UACL,QAAQA;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,YAAI,sBAAsB;AACtB,uBAAa,GAAG,oBAAoB;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ,GAAG,iBAAiB;AAAA,EACxB;AACA,MAAI,eAAe,SAAS,SAAS,WACjC,eAAe,YAAY,UAC3B,eAAe,WAAW,QAAQ,cAAc;AAChD,yBAAqB,GAAG,WAAY;AAChC,UAAI,kBAAkB;AAClB,YAAI,qBAAqB,oBAAoB,GAAG;AAAA,UAC5C;AAAA,UACA,QAAQA;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,YAAI,oBAAoB;AACpB,2BAAiB,GAAG,kBAAkB;AAAA,QAC1C;AAAA,MACJ;AAAA,IACJ,GAAG,qBAAqB;AAAA,EAC5B;AACA,SAAO;AACX;AACA,SAAS,SAAS,GAAG,SAAS;AAC1B,MAAI,KAAK,WAAW,CAAC,GAAG,KAAK,GAAG,QAAQA,UAAS,OAAO,SAAS,IAAI,OAAO,IAAI,IAAI,KAAK,GAAG,YAAY,aAAa,OAAO,SAAS,aAAa,IAAI,KAAK,GAAG,eAAe,gBAAgB,OAAO,SAAS,OAAO,IAAI,KAAK,GAAG,eAAe,gBAAgB,OAAO,SAAS,YAAY,IAAI,KAAK,GAAG,kBAAkB,mBAAmB,OAAO,SAAS,OAAO,IAAI,KAAK,GAAG,kBAAkB,mBAAmB,OAAO,SAAS,OAAO,IAAI,KAAK,GAAG,cAAc,eAAe,OAAO,SAAS,QAAQ,IAAI,KAAK,GAAG,cAAc,eAAe,OAAO,SAAS,QAAQ,IAAI,KAAK,GAAG,eAAe,gBAAgB,OAAO,SAAS,QAAQ,IAAI,aAAa,GAAG,YAAY,cAAc,GAAG,aAAa,KAAK,GAAG,SAAS,UAAU,OAAO,SAAS,QAAQ,IAAI,iBAAiB,GAAG,gBAAgB,qBAAqB,GAAG,oBAAoB,cAAc,GAAG,aAAa,eAAe,GAAG,cAAc,oBAAoB,GAAG,mBAAmB,mBAAmB,GAAG,kBAAkB,wBAAwB,GAAG,uBAAuB,KAAK,GAAG,iBAAiB,kBAAkB,OAAO,SAAS,WAAY;AAAE,WAAO;AAAA,EAAO,IAAI;AACllC,MAAI,mBAAmB,kBAAkB,OACnC;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,EACd,IACE,kBAAkB,QACd;AAAA,IACE,UAAU;AAAA,EACd,IACE;AACV,MAAI,iBAAiB,YAAY,QAAQ,YAAY,QAE7C;AAAA,IACI,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB,YAAY;AAAA,IAClC,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,EAC1B,IACF,YAAY,QACR,CAAC,IACD;AACV,SAAO,oBAAoB,GAAG;AAAA,IAC1B,KAAK;AAAA,IACL,QAAQA;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EACvB,CAAC;AACL;AA2eA,IAAI,iBAAiB;AACrB,IAAI,wBAAwB,IAAI,OAAO,eAAe,QAAQ,GAAG;;;ACt+CjE,SAAS,GAAG,MAAM,IAAI,SAAS,UAAU;AACrC,QAAM,UAAU,EAAE,SAAS,MAAM,SAAS,KAAK;AAC/C,SAAO,iBAAiB,MAAM,IAAI,OAAO;AACzC,SAAO,MAAM,OAAO,oBAAoB,MAAM,IAAI,OAAO;AAC7D;AACA,IAAM,iCAAiC;AAKvC,IAAI,UAAU;AAAA,EACV,KAAK,CAAC;AAAA,EACN,QAAQ;AACJ,YAAQ,MAAM,8BAA8B;AAC5C,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,YAAQ,MAAM,8BAA8B;AAC5C,WAAO;AAAA,EACX;AAAA,EACA,oBAAoB;AAChB,YAAQ,MAAM,8BAA8B;AAAA,EAChD;AAAA,EACA,MAAM;AACF,YAAQ,MAAM,8BAA8B;AAC5C,WAAO;AAAA,EACX;AAAA,EACA,QAAQ;AACJ,YAAQ,MAAM,8BAA8B;AAAA,EAChD;AACJ;AACA,IAAI,OAAO,WAAW,eAAe,OAAO,SAAS,OAAO,SAAS;AACjE,YAAU,IAAI,MAAM,SAAS;AAAA,IACzB,IAAI,QAAQ,MAAM,UAAU;AACxB,UAAI,SAAS,OAAO;AAChB,gBAAQ,MAAM,8BAA8B;AAAA,MAChD;AACA,aAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,IAC7C;AAAA,EACJ,CAAC;AACL;AACA,SAAS,SAAS,MAAM,MAAM,UAAU,CAAC,GAAG;AACxC,MAAI,UAAU;AACd,MAAI,WAAW;AACf,SAAO,YAAa,MAAM;AACtB,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,CAAC,YAAY,QAAQ,YAAY,OAAO;AACxC,iBAAW;AAAA,IACf;AACA,UAAM,YAAY,QAAQ,MAAM;AAChC,UAAM,UAAU;AAChB,QAAI,aAAa,KAAK,YAAY,MAAM;AACpC,UAAI,SAAS;AACT,qBAAa,OAAO;AACpB,kBAAU;AAAA,MACd;AACA,iBAAW;AACX,WAAK,MAAM,SAAS,IAAI;AAAA,IAC5B,WACS,CAAC,WAAW,QAAQ,aAAa,OAAO;AAC7C,gBAAU,WAAW,MAAM;AACvB,mBAAW,QAAQ,YAAY,QAAQ,IAAI,KAAK,IAAI;AACpD,kBAAU;AACV,aAAK,MAAM,SAAS,IAAI;AAAA,MAC5B,GAAG,SAAS;AAAA,IAChB;AAAA,EACJ;AACJ;AACA,SAAS,WAAW,QAAQ,KAAK,GAAG,WAAW,MAAM,QAAQ;AACzD,QAAM,WAAW,IAAI,OAAO,yBAAyB,QAAQ,GAAG;AAChE,MAAI,OAAO,eAAe,QAAQ,KAAK,YACjC,IACA;AAAA,IACE,IAAI,OAAO;AACP,iBAAW,MAAM;AACb,UAAE,IAAI,KAAK,MAAM,KAAK;AAAA,MAC1B,GAAG,CAAC;AACJ,UAAI,YAAY,SAAS,KAAK;AAC1B,iBAAS,IAAI,KAAK,MAAM,KAAK;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ,CAAC;AACL,SAAO,MAAM,WAAW,QAAQ,KAAK,YAAY,CAAC,GAAG,IAAI;AAC7D;AACA,SAAS,MAAM,QAAQ,MAAM,aAAa;AACtC,MAAI;AACA,QAAI,EAAE,QAAQ,SAAS;AACnB,aAAO,MAAM;AAAA,MACb;AAAA,IACJ;AACA,UAAM,WAAW,OAAO,IAAI;AAC5B,UAAM,UAAU,YAAY,QAAQ;AACpC,QAAI,OAAO,YAAY,YAAY;AAC/B,cAAQ,YAAY,QAAQ,aAAa,CAAC;AAC1C,aAAO,iBAAiB,SAAS;AAAA,QAC7B,oBAAoB;AAAA,UAChB,YAAY;AAAA,UACZ,OAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,IAAI,IAAI;AACf,WAAO,MAAM;AACT,aAAO,IAAI,IAAI;AAAA,IACnB;AAAA,EACJ,SACO,IAAI;AACP,WAAO,MAAM;AAAA,IACb;AAAA,EACJ;AACJ;AACA,SAAS,kBAAkB;AACvB,SAAQ,OAAO,eACV,SAAS,mBAAmB,SAAS,gBAAgB,gBACrD,SAAS,QAAQ,SAAS,KAAK;AACxC;AACA,SAAS,iBAAiB;AACtB,SAAQ,OAAO,cACV,SAAS,mBAAmB,SAAS,gBAAgB,eACrD,SAAS,QAAQ,SAAS,KAAK;AACxC;AACA,SAAS,UAAU,MAAM,YAAY,eAAe,gBAAgB;AAChE,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,QAAM,KAAK,KAAK,aAAa,KAAK,eAC5B,OACA,KAAK;AACX,MAAI,CAAC;AACD,WAAO;AACX,MAAI,OAAO,eAAe,UAAU;AAChC,QAAI,GAAG,UAAU,SAAS,UAAU;AAChC,aAAO;AACX,QAAI,kBAAkB,GAAG,QAAQ,MAAM,UAAU,MAAM;AACnD,aAAO;AAAA,EACf,OACK;AACD,QAAI,kBAAkB,IAAI,YAAY,cAAc;AAChD,aAAO;AAAA,EACf;AACA,MAAI,eAAe;AACf,QAAI,KAAK,QAAQ,aAAa;AAC1B,aAAO;AACX,QAAI,kBAAkB,GAAG,QAAQ,aAAa,MAAM;AAChD,aAAO;AAAA,EACf;AACA,SAAO;AACX;AACA,SAAS,aAAa,GAAGC,SAAQ;AAC7B,SAAOA,QAAO,MAAM,CAAC,MAAM;AAC/B;AACA,SAAS,UAAU,GAAGA,SAAQ;AAC1B,SAAOA,QAAO,MAAM,CAAC,MAAM;AAC/B;AACA,SAAS,kBAAkB,QAAQA,SAAQ;AACvC,MAAI,aAAa,MAAM,GAAG;AACtB,WAAO;AAAA,EACX;AACA,QAAM,KAAKA,QAAO,MAAM,MAAM;AAC9B,MAAI,CAACA,QAAO,IAAI,EAAE,GAAG;AACjB,WAAO;AAAA,EACX;AACA,MAAI,OAAO,cACP,OAAO,WAAW,aAAa,OAAO,eAAe;AACrD,WAAO;AAAA,EACX;AACA,MAAI,CAAC,OAAO,YAAY;AACpB,WAAO;AAAA,EACX;AACA,SAAO,kBAAkB,OAAO,YAAYA,OAAM;AACtD;AACA,SAAS,aAAa,OAAO;AACzB,SAAO,QAAQ,MAAM,cAAc;AACvC;AACA,SAAS,SAAS,MAAM,QAAQ;AAC5B,MAAI,cAAc,OAAO,CAAC,IAAI,SAAS,UAAU,SAAS;AACtD,QAAI,SAAS,UAAU,UAAU,MAAM,UAClC;AAAA,EACT;AACA,MAAI,kBAAkB,OAAO,CAAC,IAAI,aAAa,UAAU,SAAS;AAC9D,QAAI,aAAa,UAAU,UAAU,MAAM,UACtC;AAAA,EACT;AACA,MAAI,CAAC,KAAK,UAAU,UAAU;AAC1B,SAAK,UAAU,WAAW,IAAI,SAAS;AACnC,UAAI,OAAO,KAAK,CAAC;AACjB,UAAI,EAAE,KAAK,OAAO;AACd,cAAM,IAAI,UAAU,wBAAwB;AAAA,MAChD;AACA,SAAG;AACC,YAAI,SAAS,MAAM;AACf,iBAAO;AAAA,QACX;AAAA,MACJ,SAAU,OAAO,QAAQ,KAAK;AAC9B,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;AA0CA,SAAS,mBAAmB,GAAGC,SAAQ;AACnC,SAAO,QAAQ,EAAE,aAAa,YAAYA,QAAO,QAAQ,CAAC,CAAC;AAC/D;AACA,SAAS,uBAAuB,GAAGA,SAAQ;AACvC,SAAO,QAAQ,EAAE,aAAa,UAC1B,EAAE,aAAa,EAAE,gBACjB,EAAE,gBACF,EAAE,aAAa,KAAK,MAAM,gBAC1BA,QAAO,QAAQ,CAAC,CAAC;AACzB;AAwBA,SAAS,cAAc,GAAG;AACtB,SAAO,QAAQ,MAAM,QAAQ,MAAM,SAAS,SAAS,EAAE,UAAU;AACrE;AA2BA,IAAM,mBAAN,MAAuB;AAAA,EACnB,cAAc;AACV,SAAK,KAAK;AACV,SAAK,aAAa,oBAAI,QAAQ;AAC9B,SAAK,aAAa,oBAAI,IAAI;AAAA,EAC9B;AAAA,EACA,MAAM,YAAY;AACd,QAAI;AACJ,YAAQ,KAAK,KAAK,WAAW,IAAI,UAAU,OAAO,QAAQ,OAAO,SAAS,KAAK;AAAA,EACnF;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,WAAW,IAAI,UAAU;AAAA,EACzC;AAAA,EACA,IAAI,YAAY,IAAI;AAChB,QAAI,KAAK,IAAI,UAAU;AACnB,aAAO,KAAK,MAAM,UAAU;AAChC,QAAI;AACJ,QAAI,OAAO,QAAW;AAClB,cAAQ,KAAK;AAAA,IACjB;AAEI,cAAQ;AACZ,SAAK,WAAW,IAAI,YAAY,KAAK;AACrC,SAAK,WAAW,IAAI,OAAO,UAAU;AACrC,WAAO;AAAA,EACX;AAAA,EACA,SAAS,IAAI;AACT,WAAO,KAAK,WAAW,IAAI,EAAE,KAAK;AAAA,EACtC;AAAA,EACA,QAAQ;AACJ,SAAK,aAAa,oBAAI,QAAQ;AAC9B,SAAK,aAAa,oBAAI,IAAI;AAC1B,SAAK,KAAK;AAAA,EACd;AAAA,EACA,aAAa;AACT,WAAO,KAAK;AAAA,EAChB;AACJ;;;ACpVA,IAAI,YAA6B,kBAAC,eAAe;AAC/C,aAAW,WAAW,kBAAkB,IAAI,CAAC,IAAI;AACjD,aAAW,WAAW,MAAM,IAAI,CAAC,IAAI;AACrC,aAAW,WAAW,cAAc,IAAI,CAAC,IAAI;AAC7C,aAAW,WAAW,qBAAqB,IAAI,CAAC,IAAI;AACpD,aAAW,WAAW,MAAM,IAAI,CAAC,IAAI;AACrC,aAAW,WAAW,QAAQ,IAAI,CAAC,IAAI;AACvC,aAAW,WAAW,QAAQ,IAAI,CAAC,IAAI;AACvC,SAAO;AACT,GAAG,aAAa,CAAC,CAAC;AAClB,IAAI,oBAAqC,kBAAC,uBAAuB;AAC/D,qBAAmB,mBAAmB,UAAU,IAAI,CAAC,IAAI;AACzD,qBAAmB,mBAAmB,WAAW,IAAI,CAAC,IAAI;AAC1D,qBAAmB,mBAAmB,kBAAkB,IAAI,CAAC,IAAI;AACjE,qBAAmB,mBAAmB,QAAQ,IAAI,CAAC,IAAI;AACvD,qBAAmB,mBAAmB,gBAAgB,IAAI,CAAC,IAAI;AAC/D,qBAAmB,mBAAmB,OAAO,IAAI,CAAC,IAAI;AACtD,qBAAmB,mBAAmB,WAAW,IAAI,CAAC,IAAI;AAC1D,qBAAmB,mBAAmB,kBAAkB,IAAI,CAAC,IAAI;AACjE,qBAAmB,mBAAmB,gBAAgB,IAAI,CAAC,IAAI;AAC/D,qBAAmB,mBAAmB,gBAAgB,IAAI,CAAC,IAAI;AAC/D,qBAAmB,mBAAmB,MAAM,IAAI,EAAE,IAAI;AACtD,qBAAmB,mBAAmB,KAAK,IAAI,EAAE,IAAI;AACrD,qBAAmB,mBAAmB,MAAM,IAAI,EAAE,IAAI;AACtD,qBAAmB,mBAAmB,kBAAkB,IAAI,EAAE,IAAI;AAClE,qBAAmB,mBAAmB,WAAW,IAAI,EAAE,IAAI;AAC3D,qBAAmB,mBAAmB,mBAAmB,IAAI,EAAE,IAAI;AACnE,SAAO;AACT,GAAG,qBAAqB,CAAC,CAAC;AAC1B,IAAI,oBAAqC,kBAAC,uBAAuB;AAC/D,qBAAmB,mBAAmB,SAAS,IAAI,CAAC,IAAI;AACxD,qBAAmB,mBAAmB,WAAW,IAAI,CAAC,IAAI;AAC1D,qBAAmB,mBAAmB,OAAO,IAAI,CAAC,IAAI;AACtD,qBAAmB,mBAAmB,aAAa,IAAI,CAAC,IAAI;AAC5D,qBAAmB,mBAAmB,UAAU,IAAI,CAAC,IAAI;AACzD,qBAAmB,mBAAmB,OAAO,IAAI,CAAC,IAAI;AACtD,qBAAmB,mBAAmB,MAAM,IAAI,CAAC,IAAI;AACrD,qBAAmB,mBAAmB,YAAY,IAAI,CAAC,IAAI;AAC3D,qBAAmB,mBAAmB,oBAAoB,IAAI,CAAC,IAAI;AACnE,qBAAmB,mBAAmB,UAAU,IAAI,CAAC,IAAI;AACzD,qBAAmB,mBAAmB,aAAa,IAAI,EAAE,IAAI;AAC7D,SAAO;AACT,GAAG,qBAAqB,CAAC,CAAC;AAC1B,IAAI,gBAAiC,kBAAC,mBAAmB;AACvD,iBAAe,eAAe,IAAI,IAAI,CAAC,IAAI;AAC3C,iBAAe,eAAe,OAAO,IAAI,CAAC,IAAI;AAC9C,iBAAe,eAAe,QAAQ,IAAI,CAAC,IAAI;AAC/C,SAAO;AACT,GAAG,iBAAiB,CAAC,CAAC;;;AC7CtB,SAAS,mBAAmB,GAAG;AAC3B,SAAO,UAAU;AACrB;AACA,IAAM,mBAAN,MAAuB;AAAA,EACnB,cAAc;AACV,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,UAAU;AACV,QAAI,YAAY,KAAK,QAAQ;AACzB,YAAM,IAAI,MAAM,gCAAgC;AAAA,IACpD;AACA,QAAI,UAAU,KAAK;AACnB,aAAS,QAAQ,GAAG,QAAQ,UAAU,SAAS;AAC3C,iBAAW,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,SAAS;AAAA,IAClF;AACA,WAAO;AAAA,EACX;AAAA,EACA,QAAQ,GAAG;AACP,UAAM,OAAO;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,IACV;AACA,MAAE,OAAO;AACT,QAAI,EAAE,mBAAmB,mBAAmB,EAAE,eAAe,GAAG;AAC5D,YAAM,UAAU,EAAE,gBAAgB,KAAK;AACvC,WAAK,OAAO;AACZ,WAAK,WAAW,EAAE,gBAAgB;AAClC,QAAE,gBAAgB,KAAK,OAAO;AAC9B,UAAI,SAAS;AACT,gBAAQ,WAAW;AAAA,MACvB;AAAA,IACJ,WACS,EAAE,eACP,mBAAmB,EAAE,WAAW,KAChC,EAAE,YAAY,KAAK,UAAU;AAC7B,YAAM,UAAU,EAAE,YAAY,KAAK;AACnC,WAAK,WAAW;AAChB,WAAK,OAAO,EAAE,YAAY;AAC1B,QAAE,YAAY,KAAK,WAAW;AAC9B,UAAI,SAAS;AACT,gBAAQ,OAAO;AAAA,MACnB;AAAA,IACJ,OACK;AACD,UAAI,KAAK,MAAM;AACX,aAAK,KAAK,WAAW;AAAA,MACzB;AACA,WAAK,OAAO,KAAK;AACjB,WAAK,OAAO;AAAA,IAChB;AACA,SAAK;AAAA,EACT;AAAA,EACA,WAAW,GAAG;AACV,UAAM,UAAU,EAAE;AAClB,QAAI,CAAC,KAAK,MAAM;AACZ;AAAA,IACJ;AACA,QAAI,CAAC,QAAQ,UAAU;AACnB,WAAK,OAAO,QAAQ;AACpB,UAAI,KAAK,MAAM;AACX,aAAK,KAAK,WAAW;AAAA,MACzB;AAAA,IACJ,OACK;AACD,cAAQ,SAAS,OAAO,QAAQ;AAChC,UAAI,QAAQ,MAAM;AACd,gBAAQ,KAAK,WAAW,QAAQ;AAAA,MACpC;AAAA,IACJ;AACA,QAAI,EAAE,MAAM;AACR,aAAO,EAAE;AAAA,IACb;AACA,SAAK;AAAA,EACT;AACJ;AACA,IAAM,UAAU,CAAC,IAAI,aAAa,GAAG,EAAE,IAAI,QAAQ;AACnD,IAAM,iBAAN,MAAqB;AAAA,EACjB,cAAc;AACV,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,QAAQ,CAAC;AACd,SAAK,aAAa,CAAC;AACnB,SAAK,UAAU,CAAC;AAChB,SAAK,aAAa,CAAC;AACnB,SAAK,WAAW,CAAC;AACjB,SAAK,WAAW,oBAAI,IAAI;AACxB,SAAK,WAAW,oBAAI,IAAI;AACxB,SAAK,aAAa,oBAAI,IAAI;AAC1B,SAAK,mBAAmB,CAAC,cAAc;AACnC,gBAAU,QAAQ,KAAK,eAAe;AACtC,WAAK,KAAK;AAAA,IACd;AACA,SAAK,OAAO,MAAM;AACd,UAAI,KAAK,UAAU,KAAK,QAAQ;AAC5B;AAAA,MACJ;AACA,YAAM,OAAO,CAAC;AACd,YAAM,UAAU,IAAI,iBAAiB;AACrC,YAAM,YAAY,CAAC,MAAM;AACrB,YAAI,KAAK;AACT,YAAI,SAAS;AACb,eAAO,WAAW,cAAc;AAC5B,eAAK,MAAM,GAAG;AACd,mBAAS,MAAM,KAAK,OAAO,MAAM,EAAE;AAAA,QACvC;AACA,eAAO;AAAA,MACX;AACA,YAAM,UAAU,CAAC,MAAM;AACnB,YAAI,IAAI,IAAI,IAAI;AAChB,YAAI,aAAa;AACjB,cAAM,MAAM,KAAK,EAAE,iBAAiB,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,CAAC,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,cAAc,KAAK,0BACxI,EAAE,YAAY,EAAE;AAChB,uBAAa,EAAE,YAAY,EAAE;AACjC,YAAI,iBAAiB;AACrB,iBAAS,MAAM,KAAK,mBAAmB,QAAQ,mBAAmB,SAAS,SAAS,eAAe,iBAAiB,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,cAAc,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,cAClN,KAAK,0BACL,eAAe,YAAY,EAAE;AAC7B,2BAAiB,eAAe,YAAY,EAAE;AAClD,cAAM,WAAW,CAAC,KAAK,IAAI,SAAS,CAAC,MAChC,CAAC,kBAAkB,CAAC,KAAK,IAAI,SAAS,cAAc;AACzD,YAAI,CAAC,EAAE,cAAc,UAAU;AAC3B;AAAA,QACJ;AACA,cAAM,WAAW,aAAa,EAAE,UAAU,IACpC,KAAK,OAAO,MAAM,UAAU,IAC5B,KAAK,OAAO,MAAM,EAAE,UAAU;AACpC,cAAM,SAAS,UAAU,CAAC;AAC1B,YAAI,aAAa,MAAM,WAAW,IAAI;AAClC,iBAAO,QAAQ,QAAQ,CAAC;AAAA,QAC5B;AACA,cAAM,KAAK,oBAAoB,GAAG;AAAA,UAC9B,KAAK,KAAK;AAAA,UACV,QAAQ,KAAK;AAAA,UACb,YAAY,KAAK;AAAA,UACjB,eAAe,KAAK;AAAA,UACpB,eAAe,KAAK;AAAA,UACpB,kBAAkB,KAAK;AAAA,UACvB,WAAW;AAAA,UACX,mBAAmB;AAAA,UACnB,kBAAkB,KAAK;AAAA,UACvB,kBAAkB,KAAK;AAAA,UACvB,YAAY,KAAK;AAAA,UACjB,aAAa,KAAK;AAAA,UAClB,gBAAgB,KAAK;AAAA,UACrB,gBAAgB,KAAK;AAAA,UACrB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,aAAa,CAAC,aAAa;AACvB,gBAAI,mBAAmB,UAAU,KAAK,MAAM,GAAG;AAC3C,mBAAK,cAAc,UAAU,QAAQ;AAAA,YACzC;AACA,gBAAI,uBAAuB,UAAU,KAAK,MAAM,GAAG;AAC/C,mBAAK,kBAAkB,iBAAiB,QAAQ;AAAA,YACpD;AACA,gBAAI,cAAc,CAAC,GAAG;AAClB,mBAAK,iBAAiB,cAAc,EAAE,YAAY,KAAK,GAAG;AAAA,YAC9D;AAAA,UACJ;AAAA,UACA,cAAc,CAAC,QAAQ,YAAY;AAC/B,iBAAK,cAAc,aAAa,QAAQ,OAAO;AAC/C,iBAAK,iBAAiB,oBAAoB,MAAM;AAAA,UACpD;AAAA,UACA,kBAAkB,CAAC,MAAM,YAAY;AACjC,iBAAK,kBAAkB,kBAAkB,MAAM,OAAO;AAAA,UAC1D;AAAA,QACJ,CAAC;AACD,YAAI,IAAI;AACJ,eAAK,KAAK;AAAA,YACN;AAAA,YACA;AAAA,YACA,MAAM;AAAA,UACV,CAAC;AAAA,QACL;AAAA,MACJ;AACA,aAAO,KAAK,WAAW,QAAQ;AAC3B,aAAK,OAAO,kBAAkB,KAAK,WAAW,MAAM,CAAC;AAAA,MACzD;AACA,iBAAW,KAAK,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC,GAAG;AAChD,YAAI,gBAAgB,KAAK,SAAS,GAAG,KAAK,MAAM,KAC5C,CAAC,KAAK,SAAS,IAAI,EAAE,UAAU,GAAG;AAClC;AAAA,QACJ;AACA,gBAAQ,CAAC;AAAA,MACb;AACA,iBAAW,KAAK,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC,GAAG;AAChD,YAAI,CAAC,gBAAgB,KAAK,YAAY,CAAC,KACnC,CAAC,gBAAgB,KAAK,SAAS,GAAG,KAAK,MAAM,GAAG;AAChD,kBAAQ,CAAC;AAAA,QACb,WACS,gBAAgB,KAAK,UAAU,CAAC,GAAG;AACxC,kBAAQ,CAAC;AAAA,QACb,OACK;AACD,eAAK,WAAW,IAAI,CAAC;AAAA,QACzB;AAAA,MACJ;AACA,UAAI,YAAY;AAChB,aAAO,QAAQ,QAAQ;AACnB,YAAI,OAAO;AACX,YAAI,WAAW;AACX,gBAAM,WAAW,KAAK,OAAO,MAAM,UAAU,MAAM,UAAU;AAC7D,gBAAM,SAAS,UAAU,UAAU,KAAK;AACxC,cAAI,aAAa,MAAM,WAAW,IAAI;AAClC,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,YAAI,CAAC,MAAM;AACP,mBAAS,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS;AACtD,kBAAM,QAAQ,QAAQ,IAAI,KAAK;AAC/B,gBAAI,OAAO;AACP,oBAAM,WAAW,KAAK,OAAO,MAAM,MAAM,MAAM,UAAU;AACzD,oBAAM,SAAS,UAAU,MAAM,KAAK;AACpC,kBAAI,WAAW;AACX;AAAA,uBACK,aAAa,IAAI;AACtB,uBAAO;AACP;AAAA,cACJ,OACK;AACD,sBAAM,gBAAgB,MAAM;AAC5B,oBAAI,cAAc,cACd,cAAc,WAAW,aACrB,KAAK,wBAAwB;AACjC,wBAAM,aAAa,cAAc,WAC5B;AACL,wBAAMC,YAAW,KAAK,OAAO,MAAM,UAAU;AAC7C,sBAAIA,cAAa,IAAI;AACjB,2BAAO;AACP;AAAA,kBACJ;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,CAAC,MAAM;AACP,iBAAO,QAAQ,MAAM;AACjB,oBAAQ,WAAW,QAAQ,KAAK,KAAK;AAAA,UACzC;AACA;AAAA,QACJ;AACA,oBAAY,KAAK;AACjB,gBAAQ,WAAW,KAAK,KAAK;AAC7B,gBAAQ,KAAK,KAAK;AAAA,MACtB;AACA,YAAM,UAAU;AAAA,QACZ,OAAO,KAAK,MACP,IAAI,CAAC,UAAU;AAAA,UAChB,IAAI,KAAK,OAAO,MAAM,KAAK,IAAI;AAAA,UAC/B,OAAO,KAAK;AAAA,QAChB,EAAE,EACG,OAAO,CAAC,SAAS,KAAK,OAAO,IAAI,KAAK,EAAE,CAAC;AAAA,QAC9C,YAAY,KAAK,WACZ,IAAI,CAAC,eAAe;AAAA,UACrB,IAAI,KAAK,OAAO,MAAM,UAAU,IAAI;AAAA,UACpC,YAAY,UAAU;AAAA,QAC1B,EAAE,EACG,OAAO,CAAC,cAAc,KAAK,OAAO,IAAI,UAAU,EAAE,CAAC;AAAA,QACxD,SAAS,KAAK;AAAA,QACd;AAAA,MACJ;AACA,UAAI,CAAC,QAAQ,MAAM,UACf,CAAC,QAAQ,WAAW,UACpB,CAAC,QAAQ,QAAQ,UACjB,CAAC,QAAQ,KAAK,QAAQ;AACtB;AAAA,MACJ;AACA,WAAK,QAAQ,CAAC;AACd,WAAK,aAAa,CAAC;AACnB,WAAK,UAAU,CAAC;AAChB,WAAK,WAAW,oBAAI,IAAI;AACxB,WAAK,WAAW,oBAAI,IAAI;AACxB,WAAK,aAAa,oBAAI,IAAI;AAC1B,WAAK,WAAW,CAAC;AACjB,WAAK,WAAW,OAAO;AAAA,IAC3B;AACA,SAAK,kBAAkB,CAAC,MAAM;AAC1B,UAAI,UAAU,EAAE,QAAQ,KAAK,MAAM,GAAG;AAClC;AAAA,MACJ;AACA,cAAQ,EAAE,MAAM;AAAA,QACZ,KAAK,iBAAiB;AAClB,gBAAM,QAAQ,EAAE,OAAO;AACvB,cAAI,CAAC,UAAU,EAAE,QAAQ,KAAK,YAAY,KAAK,eAAe,KAAK,KAC/D,UAAU,EAAE,UAAU;AACtB,iBAAK,MAAM,KAAK;AAAA,cACZ,OAAO,gBAAgB,EAAE,QAAQ,KAAK,eAAe,KAAK,gBAAgB,KAAK,QACzE,KAAK,aACD,KAAK,WAAW,KAAK,IACrB,MAAM,QAAQ,SAAS,GAAG,IAC9B;AAAA,cACN,MAAM,EAAE;AAAA,YACZ,CAAC;AAAA,UACL;AACA;AAAA,QACJ;AAAA,QACA,KAAK,cAAc;AACf,gBAAM,SAAS,EAAE;AACjB,cAAI,QAAQ,EAAE,OAAO,aAAa,EAAE,aAAa;AACjD,cAAI,EAAE,kBAAkB,SAAS;AAC7B,oBAAQ,eAAe;AAAA,cACnB,kBAAkB,KAAK;AAAA,cACvB,SAAS,EAAE,OAAO;AAAA,cAClB,MAAM,EAAE,OAAO,aAAa,MAAM;AAAA,cAClC;AAAA,cACA,aAAa,KAAK;AAAA,YACtB,CAAC;AAAA,UACL;AACA,cAAI,UAAU,EAAE,QAAQ,KAAK,YAAY,KAAK,eAAe,KAAK,KAC9D,UAAU,EAAE,UAAU;AACtB;AAAA,UACJ;AACA,cAAI,OAAO,KAAK,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM;AAC1D,cAAI,OAAO,YAAY,YACnB,EAAE,kBAAkB,SACpB,CAAC,KAAK,gBAAgB,KAAK,GAAG;AAC9B,gBAAI,CAAC,OAAO,iBAAiB;AACzB,gBAAE,gBAAgB;AAAA,YACtB,OACK;AACD;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,CAAC,MAAM;AACP,mBAAO;AAAA,cACH,MAAM,EAAE;AAAA,cACR,YAAY,CAAC;AAAA,YACjB;AACA,iBAAK,WAAW,KAAK,IAAI;AAAA,UAC7B;AACA,cAAI,EAAE,kBAAkB,SAAS;AAC7B,kBAAM,MAAM,KAAK,IAAI,cAAc,MAAM;AACzC,gBAAI,EAAE,UAAU;AACZ,kBAAI,aAAa,SAAS,EAAE,QAAQ;AAAA,YACxC;AACA,gBAAI,KAAK,WAAW,UAAU,UAC1B,KAAK,WAAW,UAAU,MAAM;AAChC,mBAAK,WAAW,QAAQ,CAAC;AAAA,YAC7B;AACA,kBAAM,WAAW,KAAK,WAAW;AACjC,uBAAW,SAAS,MAAM,KAAK,OAAO,KAAK,GAAG;AAC1C,oBAAM,WAAW,OAAO,MAAM,iBAAiB,KAAK;AACpD,oBAAM,cAAc,OAAO,MAAM,oBAAoB,KAAK;AAC1D,kBAAI,aAAa,IAAI,MAAM,iBAAiB,KAAK,KAC7C,gBAAgB,IAAI,MAAM,oBAAoB,KAAK,GAAG;AACtD,oBAAI,gBAAgB,IAAI;AACpB,2BAAS,KAAK,IAAI;AAAA,gBACtB,OACK;AACD,2BAAS,KAAK,IAAI,CAAC,UAAU,WAAW;AAAA,gBAC5C;AAAA,cACJ;AAAA,YACJ;AACA,uBAAW,SAAS,MAAM,KAAK,IAAI,KAAK,GAAG;AACvC,kBAAI,OAAO,MAAM,iBAAiB,KAAK,MAAM,IAAI;AAC7C,yBAAS,KAAK,IAAI;AAAA,cACtB;AAAA,YACJ;AAAA,UACJ,OACK;AACD,iBAAK,WAAW,EAAE,aAAa,IAAI,mBAAmB,KAAK,KAAK,OAAO,SAAS,EAAE,eAAe,KAAK;AAAA,UAC1G;AACA;AAAA,QACJ;AAAA,QACA,KAAK,aAAa;AACd,cAAI,UAAU,EAAE,QAAQ,KAAK,YAAY,KAAK,eAAe,IAAI;AAC7D;AACJ,YAAE,WAAW,QAAQ,CAAC,MAAM,KAAK,QAAQ,GAAG,EAAE,MAAM,CAAC;AACrD,YAAE,aAAa,QAAQ,CAAC,MAAM;AAC1B,kBAAM,SAAS,KAAK,OAAO,MAAM,CAAC;AAClC,kBAAM,WAAW,aAAa,EAAE,MAAM,IAChC,KAAK,OAAO,MAAM,EAAE,OAAO,IAAI,IAC/B,KAAK,OAAO,MAAM,EAAE,MAAM;AAChC,gBAAI,UAAU,EAAE,QAAQ,KAAK,YAAY,KAAK,eAAe,KAAK,KAC9D,UAAU,GAAG,KAAK,MAAM,KACxB,CAAC,aAAa,GAAG,KAAK,MAAM,GAAG;AAC/B;AAAA,YACJ;AACA,gBAAI,KAAK,SAAS,IAAI,CAAC,GAAG;AACtB,yBAAW,KAAK,UAAU,CAAC;AAC3B,mBAAK,WAAW,IAAI,CAAC;AAAA,YACzB,WACS,KAAK,SAAS,IAAI,EAAE,MAAM,KAAK,WAAW,GAAI;AAAA,qBAC9C,kBAAkB,EAAE,QAAQ,KAAK,MAAM,EAAG;AAAA,qBAC1C,KAAK,SAAS,IAAI,CAAC,KACxB,KAAK,SAAS,QAAQ,QAAQ,QAAQ,CAAC,GAAG;AAC1C,yBAAW,KAAK,UAAU,CAAC;AAAA,YAC/B,OACK;AACD,mBAAK,QAAQ,KAAK;AAAA,gBACd;AAAA,gBACA,IAAI;AAAA,gBACJ,UAAU,aAAa,EAAE,MAAM,KAAK,kBAAkB,EAAE,MAAM,IACxD,OACA;AAAA,cACV,CAAC;AAAA,YACL;AACA,iBAAK,WAAW,KAAK,CAAC;AAAA,UAC1B,CAAC;AACD;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,SAAK,UAAU,CAAC,GAAG,WAAW;AAC1B,UAAI,KAAK,OAAO,QAAQ,CAAC,GAAG;AACxB,YAAI,UAAU,GAAG,KAAK,MAAM,GAAG;AAC3B;AAAA,QACJ;AACA,aAAK,SAAS,IAAI,CAAC;AACnB,YAAI,WAAW;AACf,YAAI,UAAU,KAAK,OAAO,QAAQ,MAAM,GAAG;AACvC,qBAAW,KAAK,OAAO,MAAM,MAAM;AAAA,QACvC;AACA,YAAI,YAAY,aAAa,IAAI;AAC7B,eAAK,SAAS,QAAQ,KAAK,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI;AAAA,QAC7D;AAAA,MACJ,OACK;AACD,aAAK,SAAS,IAAI,CAAC;AACnB,aAAK,WAAW,OAAO,CAAC;AAAA,MAC5B;AACA,UAAI,CAAC,UAAU,GAAG,KAAK,YAAY,KAAK,eAAe,KAAK;AACxD,UAAE,WAAW,QAAQ,CAAC,WAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,IAC7D;AAAA,EACJ;AAAA,EACA,KAAK,SAAS;AACV;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,EAAE,QAAQ,CAAC,QAAQ;AACf,WAAK,GAAG,IAAI,QAAQ,GAAG;AAAA,IAC3B,CAAC;AAAA,EACL;AAAA,EACA,SAAS;AACL,SAAK,SAAS;AACd,SAAK,cAAc,OAAO;AAAA,EAC9B;AAAA,EACA,WAAW;AACP,SAAK,SAAS;AACd,SAAK,cAAc,SAAS;AAC5B,SAAK,KAAK;AAAA,EACd;AAAA,EACA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,OAAO;AACH,SAAK,SAAS;AACd,SAAK,cAAc,KAAK;AAAA,EAC5B;AAAA,EACA,SAAS;AACL,SAAK,SAAS;AACd,SAAK,cAAc,OAAO;AAC1B,SAAK,KAAK;AAAA,EACd;AAAA,EACA,QAAQ;AACJ,SAAK,iBAAiB,MAAM;AAC5B,SAAK,cAAc,MAAM;AAAA,EAC7B;AACJ;AACA,SAAS,WAAW,SAAS,GAAG;AAC5B,UAAQ,OAAO,CAAC;AAChB,IAAE,WAAW,QAAQ,CAAC,WAAW,WAAW,SAAS,MAAM,CAAC;AAChE;AACA,SAAS,gBAAgB,SAAS,GAAGC,SAAQ;AACzC,MAAI,QAAQ,WAAW;AACnB,WAAO;AACX,SAAO,iBAAiB,SAAS,GAAGA,OAAM;AAC9C;AACA,SAAS,iBAAiB,SAAS,GAAGA,SAAQ;AAC1C,QAAM,EAAE,WAAW,IAAI;AACvB,MAAI,CAAC,YAAY;AACb,WAAO;AAAA,EACX;AACA,QAAM,WAAWA,QAAO,MAAM,UAAU;AACxC,MAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ,GAAG;AACxC,WAAO;AAAA,EACX;AACA,SAAO,iBAAiB,SAAS,YAAYA,OAAM;AACvD;AACA,SAAS,gBAAgB,KAAK,GAAG;AAC7B,MAAI,IAAI,SAAS;AACb,WAAO;AACX,SAAO,iBAAiB,KAAK,CAAC;AAClC;AACA,SAAS,iBAAiB,KAAK,GAAG;AAC9B,QAAM,EAAE,WAAW,IAAI;AACvB,MAAI,CAAC,YAAY;AACb,WAAO;AAAA,EACX;AACA,MAAI,IAAI,IAAI,UAAU,GAAG;AACrB,WAAO;AAAA,EACX;AACA,SAAO,iBAAiB,KAAK,UAAU;AAC3C;;;AC/fA,IAAM,kBAAkB,CAAC;AACzB,IAAM,6BAA6B,OAAO,oBAAoB;AAC9D,IAAM,0BAA0B,OAAO,iBAAiB;AACxD,IAAM,6BAA6B,OAAO,oBAAoB;AAC9D,IAAM,8BAA8B,OAAO,qBAAqB;AAChE,SAAS,eAAe,OAAO;AAC3B,MAAI;AACA,QAAI,kBAAkB,OAAO;AACzB,YAAM,OAAO,MAAM,aAAa;AAChC,UAAI,KAAK,QAAQ;AACb,eAAO,KAAK,CAAC;AAAA,MACjB;AAAA,IACJ,WACS,UAAU,SAAS,MAAM,KAAK,QAAQ;AAC3C,aAAO,MAAM,KAAK,CAAC;AAAA,IACvB;AACA,WAAO,MAAM;AAAA,EACjB,SACO,IAAI;AACP,WAAO,MAAM;AAAA,EACjB;AACJ;AACA,SAAS,qBAAqB,SAAS,QAAQ;AAC3C,MAAI,IAAI;AACR,QAAM,iBAAiB,IAAI,eAAe;AAC1C,kBAAgB,KAAK,cAAc;AACnC,iBAAe,KAAK,OAAO;AAC3B,MAAI,uBAAuB,OAAO,oBAC9B,OAAO;AACX,QAAM,qBAAqB,MAAM,KAAK,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,UAAU,QAAQ,OAAO,SAAS,SAAS,GAAG,gBAAgB,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,IAAI,kBAAkB;AAC1N,MAAI,qBACA,OAAO,iBAAiB,GAAG;AAC3B,2BAAuB,OAAO,iBAAiB;AAAA,EACnD;AACA,QAAM,WAAW,IAAI,qBAAqB,eAAe,iBAAiB,KAAK,cAAc,CAAC;AAC9F,WAAS,QAAQ,QAAQ;AAAA,IACrB,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,WAAW;AAAA,IACX,SAAS;AAAA,EACb,CAAC;AACD,SAAO;AACX;AACA,SAAS,iBAAiB,EAAE,aAAa,UAAU,KAAK,QAAAC,QAAQ,GAAG;AAC/D,MAAI,SAAS,cAAc,OAAO;AAC9B,WAAO,MAAM;AAAA,IACb;AAAA,EACJ;AACA,QAAM,YAAY,OAAO,SAAS,cAAc,WAAW,SAAS,YAAY;AAChF,QAAM,oBAAoB,OAAO,SAAS,sBAAsB,WAC1D,SAAS,oBACT;AACN,MAAI,YAAY,CAAC;AACjB,MAAI;AACJ,QAAM,YAAY,SAAS,CAAC,WAAW;AACnC,UAAM,cAAc,KAAK,IAAI,IAAI;AACjC,gBAAY,UAAU,IAAI,CAAC,MAAM;AAC7B,QAAE,cAAc;AAChB,aAAO;AAAA,IACX,CAAC,GAAG,MAAM;AACV,gBAAY,CAAC;AACb,mBAAe;AAAA,EACnB,GAAG,iBAAiB;AACpB,QAAM,iBAAiB,SAAS,CAAC,QAAQ;AACrC,UAAM,SAAS,eAAe,GAAG;AACjC,UAAM,EAAE,SAAS,QAAQ,IAAI,aAAa,GAAG,IACvC,IAAI,eAAe,CAAC,IACpB;AACN,QAAI,CAAC,cAAc;AACf,qBAAe,KAAK,IAAI;AAAA,IAC5B;AACA,cAAU,KAAK;AAAA,MACX,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAIA,QAAO,MAAM,MAAM;AAAA,MACvB,YAAY,KAAK,IAAI,IAAI;AAAA,IAC7B,CAAC;AACD,cAAU,OAAO,cAAc,eAAe,eAAe,YACvD,kBAAkB,OAClB,eAAe,aACX,kBAAkB,YAClB,kBAAkB,SAAS;AAAA,EACzC,GAAG,WAAW;AAAA,IACV,UAAU;AAAA,EACd,CAAC;AACD,QAAM,WAAW;AAAA,IACb,GAAG,aAAa,gBAAgB,GAAG;AAAA,IACnC,GAAG,aAAa,gBAAgB,GAAG;AAAA,IACnC,GAAG,QAAQ,gBAAgB,GAAG;AAAA,EAClC;AACA,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;AACA,SAAS,6BAA6B,EAAE,oBAAoB,KAAK,QAAAA,SAAQ,YAAY,eAAe,SAAU,GAAG;AAC7G,MAAI,SAAS,qBAAqB,OAAO;AACrC,WAAO,MAAM;AAAA,IACb;AAAA,EACJ;AACA,QAAM,aAAa,SAAS,qBAAqB,QAC7C,SAAS,qBAAqB,SAC5B,CAAC,IACD,SAAS;AACf,QAAM,WAAW,CAAC;AAClB,QAAM,aAAa,CAAC,aAAa;AAC7B,WAAO,CAAC,UAAU;AACd,YAAM,SAAS,eAAe,KAAK;AACnC,UAAI,UAAU,QAAQ,YAAY,eAAe,IAAI,GAAG;AACpD;AAAA,MACJ;AACA,YAAM,IAAI,aAAa,KAAK,IAAI,MAAM,eAAe,CAAC,IAAI;AAC1D,UAAI,CAAC,GAAG;AACJ;AAAA,MACJ;AACA,YAAM,KAAKA,QAAO,MAAM,MAAM;AAC9B,YAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,yBAAmB;AAAA,QACf,MAAM,kBAAkB,QAAQ;AAAA,QAChC;AAAA,QACA,GAAG;AAAA,QACH,GAAG;AAAA,MACP,CAAC;AAAA,IACL;AAAA,EACJ;AACA,SAAO,KAAK,iBAAiB,EACxB,OAAO,CAAC,QAAQ,OAAO,MAAM,OAAO,GAAG,CAAC,KACzC,CAAC,IAAI,SAAS,WAAW,KACzB,WAAW,GAAG,MAAM,KAAK,EACxB,QAAQ,CAAC,aAAa;AACvB,UAAM,YAAY,SAAS,YAAY;AACvC,UAAM,UAAU,WAAW,QAAQ;AACnC,aAAS,KAAK,GAAG,WAAW,SAAS,GAAG,CAAC;AAAA,EAC7C,CAAC;AACD,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;AACA,SAAS,mBAAmB,EAAE,UAAU,KAAK,QAAAA,SAAQ,YAAY,eAAe,SAAU,GAAG;AACzF,QAAM,iBAAiB,SAAS,CAAC,QAAQ;AACrC,UAAM,SAAS,eAAe,GAAG;AACjC,QAAI,CAAC,UAAU,UAAU,QAAQ,YAAY,eAAe,IAAI,GAAG;AAC/D;AAAA,IACJ;AACA,UAAM,KAAKA,QAAO,MAAM,MAAM;AAC9B,QAAI,WAAW,KAAK;AAChB,YAAM,WAAY,IAAI,oBAAoB,IAAI;AAC9C,eAAS;AAAA,QACL;AAAA,QACA,GAAG,SAAS;AAAA,QACZ,GAAG,SAAS;AAAA,MAChB,CAAC;AAAA,IACL,OACK;AACD,eAAS;AAAA,QACL;AAAA,QACA,GAAG,OAAO;AAAA,QACV,GAAG,OAAO;AAAA,MACd,CAAC;AAAA,IACL;AAAA,EACJ,GAAG,SAAS,UAAU,GAAG;AACzB,SAAO,GAAG,UAAU,gBAAgB,GAAG;AAC3C;AACA,SAAS,2BAA2B,EAAE,iBAAkB,GAAG;AACvD,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,QAAM,kBAAkB,SAAS,MAAM;AACnC,UAAM,SAAS,gBAAgB;AAC/B,UAAM,QAAQ,eAAe;AAC7B,QAAI,UAAU,UAAU,UAAU,OAAO;AACrC,uBAAiB;AAAA,QACb,OAAO,OAAO,KAAK;AAAA,QACnB,QAAQ,OAAO,MAAM;AAAA,MACzB,CAAC;AACD,cAAQ;AACR,cAAQ;AAAA,IACZ;AAAA,EACJ,GAAG,GAAG;AACN,SAAO,GAAG,UAAU,iBAAiB,MAAM;AAC/C;AACA,SAAS,+BAA+B,GAAG,QAAQ;AAC/C,QAAM,QAAQ,OAAO,OAAO,CAAC,GAAG,CAAC;AACjC,MAAI,CAAC;AACD,WAAO,MAAM;AACjB,SAAO;AACX;AACA,IAAM,aAAa,CAAC,SAAS,YAAY,QAAQ;AACjD,IAAM,oBAAoB,oBAAI,QAAQ;AACtC,SAAS,kBAAkB,EAAE,SAAS,KAAK,QAAAA,SAAQ,YAAY,eAAe,aAAa,kBAAkB,aAAa,UAAU,qBAAsB,GAAG;AACzJ,WAAS,aAAa,OAAO;AACzB,QAAI,SAAS,eAAe,KAAK;AACjC,UAAM,gBAAgB,MAAM;AAC5B,QAAI,UAAU,OAAO,YAAY;AAC7B,eAAS,OAAO;AACpB,QAAI,CAAC,UACD,CAAC,OAAO,WACR,WAAW,QAAQ,OAAO,OAAO,IAAI,KACrC,UAAU,QAAQ,YAAY,eAAe,IAAI,GAAG;AACpD;AAAA,IACJ;AACA,UAAM,OAAO,OAAO;AACpB,QAAI,OAAO,UAAU,SAAS,WAAW,GAAG;AACxC;AAAA,IACJ;AACA,QAAI,OAAO,OAAO;AAClB,QAAI,YAAY;AAChB,QAAI,SAAS,WAAW,SAAS,YAAY;AACzC,kBAAY,OAAO;AAAA,IACvB,WACS,iBAAiB,OAAO,QAAQ,YAAY,CAAC,KAClD,iBAAiB,IAAI,GAAG;AACxB,aAAO,eAAe;AAAA,QAClB;AAAA,QACA,SAAS,OAAO;AAAA,QAChB;AAAA,QACA,OAAO;AAAA,QACP;AAAA,MACJ,CAAC;AAAA,IACL;AACA,gBAAY,QAAQ,+BAA+B,EAAE,MAAM,WAAW,cAAc,GAAG,oBAAoB,CAAC;AAC5G,UAAM,OAAO,OAAO;AACpB,QAAI,SAAS,WAAW,QAAQ,WAAW;AACvC,UACK,iBAAiB,6BAA6B,IAAI,IAAI,EACtD,QAAQ,CAAC,OAAO;AACjB,YAAI,OAAO,QAAQ;AACf,sBAAY,IAAI,+BAA+B;AAAA,YAC3C,MAAM,GAAG;AAAA,YACT,WAAW,CAAC;AAAA,YACZ,eAAe;AAAA,UACnB,GAAG,oBAAoB,CAAC;AAAA,QAC5B;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACA,WAAS,YAAY,QAAQ,GAAG;AAC5B,UAAM,iBAAiB,kBAAkB,IAAI,MAAM;AACnD,QAAI,CAAC,kBACD,eAAe,SAAS,EAAE,QAC1B,eAAe,cAAc,EAAE,WAAW;AAC1C,wBAAkB,IAAI,QAAQ,CAAC;AAC/B,YAAM,KAAKA,QAAO,MAAM,MAAM;AAC9B,cAAQ,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAAA,IACvD;AAAA,EACJ;AACA,QAAM,SAAS,SAAS,UAAU,SAAS,CAAC,QAAQ,IAAI,CAAC,SAAS,QAAQ;AAC1E,QAAM,WAAW,OAAO,IAAI,CAAC,cAAc,GAAG,WAAW,cAAc,GAAG,CAAC;AAC3E,QAAM,gBAAgB,IAAI;AAC1B,MAAI,CAAC,eAAe;AAChB,WAAO,MAAM;AACT,eAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,IAC/B;AAAA,EACJ;AACA,QAAM,qBAAqB,cAAc,OAAO,yBAAyB,cAAc,iBAAiB,WAAW,OAAO;AAC1H,QAAM,iBAAiB;AAAA,IACnB,CAAC,cAAc,iBAAiB,WAAW,OAAO;AAAA,IAClD,CAAC,cAAc,iBAAiB,WAAW,SAAS;AAAA,IACpD,CAAC,cAAc,kBAAkB,WAAW,OAAO;AAAA,IACnD,CAAC,cAAc,oBAAoB,WAAW,OAAO;AAAA,IACrD,CAAC,cAAc,kBAAkB,WAAW,eAAe;AAAA,IAC3D,CAAC,cAAc,kBAAkB,WAAW,UAAU;AAAA,EAC1D;AACA,MAAI,sBAAsB,mBAAmB,KAAK;AAC9C,aAAS,KAAK,GAAG,eAAe,IAAI,CAAC,MAAM,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG;AAAA,MAC9D,MAAM;AACF,qBAAa,EAAE,QAAQ,KAAK,CAAC;AAAA,MACjC;AAAA,IACJ,GAAG,OAAO,aAAa,CAAC,CAAC;AAAA,EAC7B;AACA,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;AACA,SAAS,0BAA0B,MAAM;AACrC,QAAM,YAAY,CAAC;AACnB,WAAS,QAAQ,WAAW,KAAK;AAC7B,QAAK,8BACD,UAAU,sBAAsB,mBAC/B,2BACG,UAAU,sBAAsB,gBACnC,8BACG,UAAU,sBAAsB,mBACnC,+BACG,UAAU,sBAAsB,kBAAmB;AACvD,YAAM,QAAQ,MAAM,KAAK,UAAU,WAAW,QAAQ;AACtD,YAAM,QAAQ,MAAM,QAAQ,SAAS;AACrC,UAAI,QAAQ,KAAK;AAAA,IACrB,WACS,UAAU,kBAAkB;AACjC,YAAM,QAAQ,MAAM,KAAK,UAAU,iBAAiB,QAAQ;AAC5D,YAAM,QAAQ,MAAM,QAAQ,SAAS;AACrC,UAAI,QAAQ,KAAK;AAAA,IACrB;AACA,WAAO;AAAA,EACX;AACA,SAAO,QAAQ,MAAM,SAAS;AAClC;AACA,SAAS,gBAAgB,OAAOA,SAAQ,aAAa;AACjD,MAAI,IAAI;AACR,MAAI,CAAC;AACD,WAAO,CAAC;AACZ,MAAI,MAAM;AACN,SAAKA,QAAO,MAAM,MAAM,SAAS;AAAA;AAEjC,cAAU,YAAY,MAAM,KAAK;AACrC,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;AACA,SAAS,uBAAuB,EAAE,kBAAkB,QAAAA,SAAQ,kBAAkB,GAAG,EAAE,IAAI,GAAG;AACtF,QAAM,aAAa,IAAI,cAAc,UAAU;AAC/C,MAAI,cAAc,UAAU,aAAa,SAAU,MAAM,OAAO;AAC5D,UAAM,EAAE,IAAI,QAAQ,IAAI,gBAAgB,MAAMA,SAAQ,kBAAkB,WAAW;AACnF,QAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,uBAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;AAAA,MAC1B,CAAC;AAAA,IACL;AACA,WAAO,WAAW,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC;AAAA,EAC/C;AACA,QAAM,aAAa,IAAI,cAAc,UAAU;AAC/C,MAAI,cAAc,UAAU,aAAa,SAAU,OAAO;AACtD,UAAM,EAAE,IAAI,QAAQ,IAAI,gBAAgB,MAAMA,SAAQ,kBAAkB,WAAW;AACnF,QAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,uBAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA,SAAS,CAAC,EAAE,MAAM,CAAC;AAAA,MACvB,CAAC;AAAA,IACL;AACA,WAAO,WAAW,MAAM,MAAM,CAAC,KAAK,CAAC;AAAA,EACzC;AACA,MAAI;AACJ,MAAI,IAAI,cAAc,UAAU,SAAS;AACrC,cAAU,IAAI,cAAc,UAAU;AACtC,QAAI,cAAc,UAAU,UAAU,SAAU,MAAM;AAClD,YAAM,EAAE,IAAI,QAAQ,IAAI,gBAAgB,MAAMA,SAAQ,kBAAkB,WAAW;AACnF,UAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,yBAAiB;AAAA,UACb;AAAA,UACA;AAAA,UACA,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AACA,aAAO,QAAQ,MAAM,MAAM,CAAC,IAAI,CAAC;AAAA,IACrC;AAAA,EACJ;AACA,MAAI;AACJ,MAAI,IAAI,cAAc,UAAU,aAAa;AACzC,kBAAc,IAAI,cAAc,UAAU;AAC1C,QAAI,cAAc,UAAU,cAAc,SAAU,MAAM;AACtD,YAAM,EAAE,IAAI,QAAQ,IAAI,gBAAgB,MAAMA,SAAQ,kBAAkB,WAAW;AACnF,UAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,yBAAiB;AAAA,UACb;AAAA,UACA;AAAA,UACA,aAAa;AAAA,QACjB,CAAC;AAAA,MACL;AACA,aAAO,YAAY,MAAM,MAAM,CAAC,IAAI,CAAC;AAAA,IACzC;AAAA,EACJ;AACA,QAAM,8BAA8B,CAAC;AACrC,MAAI,4BAA4B;AAC5B,gCAA4B,kBAAkB,IAAI;AAAA,EACtD,OACK;AACD,QAAI,yBAAyB;AACzB,kCAA4B,eAAe,IAAI;AAAA,IACnD;AACA,QAAI,6BAA6B;AAC7B,kCAA4B,mBAAmB,IAAI;AAAA,IACvD;AACA,QAAI,4BAA4B;AAC5B,kCAA4B,kBAAkB,IAAI;AAAA,IACtD;AAAA,EACJ;AACA,QAAM,sBAAsB,CAAC;AAC7B,SAAO,QAAQ,2BAA2B,EAAE,QAAQ,CAAC,CAAC,SAAS,IAAI,MAAM;AACrE,wBAAoB,OAAO,IAAI;AAAA,MAC3B,YAAY,KAAK,UAAU;AAAA,MAC3B,YAAY,KAAK,UAAU;AAAA,IAC/B;AACA,SAAK,UAAU,aAAa,SAAU,MAAM,OAAO;AAC/C,YAAM,EAAE,IAAI,QAAQ,IAAI,gBAAgB,KAAK,kBAAkBA,SAAQ,kBAAkB,WAAW;AACpG,UAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,yBAAiB;AAAA,UACb;AAAA,UACA;AAAA,UACA,MAAM;AAAA,YACF;AAAA,cACI;AAAA,cACA,OAAO;AAAA,gBACH,GAAG,0BAA0B,IAAI;AAAA,gBACjC,SAAS;AAAA,cACb;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL;AACA,aAAO,oBAAoB,OAAO,EAAE,WAAW,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC;AAAA,IAC5E;AACA,SAAK,UAAU,aAAa,SAAU,OAAO;AACzC,YAAM,EAAE,IAAI,QAAQ,IAAI,gBAAgB,KAAK,kBAAkBA,SAAQ,kBAAkB,WAAW;AACpG,UAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,yBAAiB;AAAA,UACb;AAAA,UACA;AAAA,UACA,SAAS;AAAA,YACL,EAAE,OAAO,CAAC,GAAG,0BAA0B,IAAI,GAAG,KAAK,EAAE;AAAA,UACzD;AAAA,QACJ,CAAC;AAAA,MACL;AACA,aAAO,oBAAoB,OAAO,EAAE,WAAW,MAAM,MAAM,CAAC,KAAK,CAAC;AAAA,IACtE;AAAA,EACJ,CAAC;AACD,SAAO,MAAM;AACT,QAAI,cAAc,UAAU,aAAa;AACzC,QAAI,cAAc,UAAU,aAAa;AACzC,gBAAY,IAAI,cAAc,UAAU,UAAU;AAClD,oBAAgB,IAAI,cAAc,UAAU,cAAc;AAC1D,WAAO,QAAQ,2BAA2B,EAAE,QAAQ,CAAC,CAAC,SAAS,IAAI,MAAM;AACrE,WAAK,UAAU,aAAa,oBAAoB,OAAO,EAAE;AACzD,WAAK,UAAU,aAAa,oBAAoB,OAAO,EAAE;AAAA,IAC7D,CAAC;AAAA,EACL;AACJ;AACA,SAAS,8BAA8B,EAAE,QAAAA,SAAQ,kBAAmB,GAAG,MAAM;AACzE,MAAI,IAAI,IAAI;AACZ,MAAI,SAAS;AACb,MAAI,KAAK,aAAa;AAClB,aAASA,QAAO,MAAM,IAAI;AAAA;AAE1B,aAASA,QAAO,MAAM,KAAK,IAAI;AACnC,QAAM,cAAc,KAAK,aAAa,eAC/B,KAAK,KAAK,iBAAiB,QAAQ,OAAO,SAAS,SAAS,GAAG,YAC/D,MAAM,KAAK,KAAK,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,iBAAiB,QAAQ,OAAO,SAAS,SAAS,GAAG;AACnI,QAAM,6BAA6B,OAAO,yBAAyB,gBAAgB,QAAQ,gBAAgB,SAAS,SAAS,YAAY,WAAW,oBAAoB;AACxK,MAAI,WAAW,QACX,WAAW,MACX,CAAC,eACD,CAAC;AACD,WAAO,MAAM;AAAA,IACb;AACJ,SAAO,eAAe,MAAM,sBAAsB;AAAA,IAC9C,cAAc,2BAA2B;AAAA,IACzC,YAAY,2BAA2B;AAAA,IACvC,MAAM;AACF,UAAIC;AACJ,cAAQA,MAAK,2BAA2B,SAAS,QAAQA,QAAO,SAAS,SAASA,IAAG,KAAK,IAAI;AAAA,IAClG;AAAA,IACA,IAAI,QAAQ;AACR,UAAIA;AACJ,YAAM,UAAUA,MAAK,2BAA2B,SAAS,QAAQA,QAAO,SAAS,SAASA,IAAG,KAAK,MAAM,MAAM;AAC9G,UAAI,WAAW,QAAQ,WAAW,IAAI;AAClC,YAAI;AACA,4BAAkB,iBAAiB,QAAQ,MAAM;AAAA,QACrD,SACO,GAAG;AAAA,QACV;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,EACJ,CAAC;AACD,SAAO,MAAM;AACT,WAAO,eAAe,MAAM,sBAAsB;AAAA,MAC9C,cAAc,2BAA2B;AAAA,MACzC,YAAY,2BAA2B;AAAA,MACvC,KAAK,2BAA2B;AAAA,MAChC,KAAK,2BAA2B;AAAA,IACpC,CAAC;AAAA,EACL;AACJ;AACA,SAAS,6BAA6B,EAAE,oBAAoB,QAAAD,SAAQ,qBAAqB,kBAAmB,GAAG,EAAE,IAAI,GAAG;AACpH,QAAM,cAAc,IAAI,oBAAoB,UAAU;AACtD,MAAI,oBAAoB,UAAU,cAAc,SAAU,UAAU,OAAO,UAAU;AACjF,QAAI;AACJ,QAAI,oBAAoB,IAAI,QAAQ,GAAG;AACnC,aAAO,YAAY,MAAM,MAAM,CAAC,UAAU,OAAO,QAAQ,CAAC;AAAA,IAC9D;AACA,UAAM,EAAE,IAAI,QAAQ,IAAI,iBAAiB,KAAK,KAAK,gBAAgB,QAAQ,OAAO,SAAS,SAAS,GAAG,kBAAkBA,SAAQ,kBAAkB,WAAW;AAC9J,QAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,yBAAmB;AAAA,QACf;AAAA,QACA;AAAA,QACA,KAAK;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,QACA,OAAO,0BAA0B,KAAK,UAAU;AAAA,MACpD,CAAC;AAAA,IACL;AACA,WAAO,YAAY,MAAM,MAAM,CAAC,UAAU,OAAO,QAAQ,CAAC;AAAA,EAC9D;AACA,QAAM,iBAAiB,IAAI,oBAAoB,UAAU;AACzD,MAAI,oBAAoB,UAAU,iBAAiB,SAAU,UAAU;AACnE,QAAI;AACJ,QAAI,oBAAoB,IAAI,QAAQ,GAAG;AACnC,aAAO,eAAe,MAAM,MAAM,CAAC,QAAQ,CAAC;AAAA,IAChD;AACA,UAAM,EAAE,IAAI,QAAQ,IAAI,iBAAiB,KAAK,KAAK,gBAAgB,QAAQ,OAAO,SAAS,SAAS,GAAG,kBAAkBA,SAAQ,kBAAkB,WAAW;AAC9J,QAAK,MAAM,OAAO,MAAQ,WAAW,YAAY,IAAK;AAClD,yBAAmB;AAAA,QACf;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,OAAO,0BAA0B,KAAK,UAAU;AAAA,MACpD,CAAC;AAAA,IACL;AACA,WAAO,eAAe,MAAM,MAAM,CAAC,QAAQ,CAAC;AAAA,EAChD;AACA,SAAO,MAAM;AACT,QAAI,oBAAoB,UAAU,cAAc;AAChD,QAAI,oBAAoB,UAAU,iBAAiB;AAAA,EACvD;AACJ;AACA,SAAS,6BAA6B,EAAE,oBAAoB,YAAY,eAAe,QAAAA,SAAQ,SAAU,GAAG;AACxG,QAAM,UAAU,CAAC,SAAS,SAAS,CAAC,UAAU;AAC1C,UAAM,SAAS,eAAe,KAAK;AACnC,QAAI,CAAC,UACD,UAAU,QAAQ,YAAY,eAAe,IAAI,GAAG;AACpD;AAAA,IACJ;AACA,UAAM,EAAE,aAAa,QAAQ,OAAO,aAAc,IAAI;AACtD,uBAAmB;AAAA,MACf;AAAA,MACA,IAAIA,QAAO,MAAM,MAAM;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL,GAAG,SAAS,SAAS,GAAG;AACxB,QAAM,WAAW;AAAA,IACb,GAAG,QAAQ,QAAQ,CAAC,CAAC;AAAA,IACrB,GAAG,SAAS,QAAQ,CAAC,CAAC;AAAA,IACtB,GAAG,UAAU,QAAQ,CAAC,CAAC;AAAA,IACvB,GAAG,gBAAgB,QAAQ,CAAC,CAAC;AAAA,IAC7B,GAAG,cAAc,QAAQ,CAAC,CAAC;AAAA,EAC/B;AACA,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;AACA,SAAS,iBAAiB,EAAE,QAAQ,IAAI,GAAG;AACvC,QAAM,MAAM,IAAI;AAChB,MAAI,CAAC,KAAK;AACN,WAAO,MAAM;AAAA,IACb;AAAA,EACJ;AACA,QAAM,WAAW,CAAC;AAClB,QAAM,UAAU,oBAAI,QAAQ;AAC5B,QAAM,mBAAmB,IAAI;AAC7B,MAAI,WAAW,SAAS,SAAS,QAAQ,QAAQ,aAAa;AAC1D,UAAM,WAAW,IAAI,iBAAiB,QAAQ,QAAQ,WAAW;AACjE,YAAQ,IAAI,UAAU;AAAA,MAClB;AAAA,MACA,QAAQ,OAAO,WAAW;AAAA,MAC1B;AAAA,MACA,YAAY,OAAO,WAAW,WACxB,SACA,KAAK,UAAU,MAAM,KAAK,IAAI,WAAW,MAAM,CAAC,CAAC;AAAA,IAC3D,CAAC;AACD,WAAO;AAAA,EACX;AACA,QAAM,iBAAiB,MAAM,IAAI,OAAO,OAAO,SAAU,UAAU;AAC/D,WAAO,SAAU,UAAU;AACvB,iBAAW,MAAM;AACb,cAAM,IAAI,QAAQ,IAAI,QAAQ;AAC9B,YAAI,GAAG;AACH,iBAAO,CAAC;AACR,kBAAQ,OAAO,QAAQ;AAAA,QAC3B;AAAA,MACJ,GAAG,CAAC;AACJ,aAAO,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC;AAAA,IAC1C;AAAA,EACJ,CAAC;AACD,WAAS,KAAK,MAAM;AAChB,QAAI,WAAW;AAAA,EACnB,CAAC;AACD,WAAS,KAAK,cAAc;AAC5B,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;AACA,SAAS,sBAAsB,OAAO;AAClC,QAAM,EAAE,KAAK,QAAAA,SAAQ,YAAY,eAAe,YAAY,IAAI;AAChE,MAAI,YAAY;AAChB,QAAM,kBAAkB,MAAM;AAC1B,UAAM,YAAY,IAAI,aAAa;AACnC,QAAI,CAAC,aAAc,cAAc,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU;AAC7F;AACJ,gBAAY,UAAU,eAAe;AACrC,UAAM,SAAS,CAAC;AAChB,UAAM,QAAQ,UAAU,cAAc;AACtC,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,YAAM,QAAQ,UAAU,WAAW,CAAC;AACpC,YAAM,EAAE,gBAAgB,aAAa,cAAc,UAAU,IAAI;AACjE,YAAM,UAAU,UAAU,gBAAgB,YAAY,eAAe,IAAI,KACrE,UAAU,cAAc,YAAY,eAAe,IAAI;AAC3D,UAAI;AACA;AACJ,aAAO,KAAK;AAAA,QACR,OAAOA,QAAO,MAAM,cAAc;AAAA,QAClC;AAAA,QACA,KAAKA,QAAO,MAAM,YAAY;AAAA,QAC9B;AAAA,MACJ,CAAC;AAAA,IACL;AACA,gBAAY,EAAE,OAAO,CAAC;AAAA,EAC1B;AACA,kBAAgB;AAChB,SAAO,GAAG,mBAAmB,eAAe;AAChD;AACA,SAAS,WAAW,GAAG,OAAO;AAC1B,QAAM,EAAE,YAAY,aAAa,oBAAoB,UAAU,kBAAkB,SAAS,oBAAoB,kBAAkB,oBAAoB,kBAAkB,QAAQ,YAAa,IAAI;AAC/L,IAAE,aAAa,IAAI,MAAM;AACrB,QAAI,MAAM,UAAU;AAChB,YAAM,SAAS,GAAG,CAAC;AAAA,IACvB;AACA,eAAW,GAAG,CAAC;AAAA,EACnB;AACA,IAAE,cAAc,IAAI,MAAM;AACtB,QAAI,MAAM,WAAW;AACjB,YAAM,UAAU,GAAG,CAAC;AAAA,IACxB;AACA,gBAAY,GAAG,CAAC;AAAA,EACpB;AACA,IAAE,qBAAqB,IAAI,MAAM;AAC7B,QAAI,MAAM,kBAAkB;AACxB,YAAM,iBAAiB,GAAG,CAAC;AAAA,IAC/B;AACA,uBAAmB,GAAG,CAAC;AAAA,EAC3B;AACA,IAAE,WAAW,IAAI,MAAM;AACnB,QAAI,MAAM,QAAQ;AACd,YAAM,OAAO,GAAG,CAAC;AAAA,IACrB;AACA,aAAS,GAAG,CAAC;AAAA,EACjB;AACA,IAAE,mBAAmB,IAAI,MAAM;AAC3B,QAAI,MAAM,gBAAgB;AACtB,YAAM,eAAe,GAAG,CAAC;AAAA,IAC7B;AACA,qBAAiB,GAAG,CAAC;AAAA,EACzB;AACA,IAAE,UAAU,IAAI,MAAM;AAClB,QAAI,MAAM,OAAO;AACb,YAAM,MAAM,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,GAAG,CAAC;AAAA,EAChB;AACA,IAAE,qBAAqB,IAAI,MAAM;AAC7B,QAAI,MAAM,iBAAiB;AACvB,YAAM,gBAAgB,GAAG,CAAC;AAAA,IAC9B;AACA,uBAAmB,GAAG,CAAC;AAAA,EAC3B;AACA,IAAE,mBAAmB,IAAI,MAAM;AAC3B,QAAI,MAAM,gBAAgB;AACtB,YAAM,eAAe,GAAG,CAAC;AAAA,IAC7B;AACA,qBAAiB,GAAG,CAAC;AAAA,EACzB;AACA,IAAE,qBAAqB,IAAI,MAAM;AAC7B,QAAI,MAAM,kBAAkB;AACxB,YAAM,iBAAiB,GAAG,CAAC;AAAA,IAC/B;AACA,uBAAmB,GAAG,CAAC;AAAA,EAC3B;AACA,IAAE,mBAAmB,IAAI,MAAM;AAC3B,QAAI,MAAM,gBAAgB;AACtB,YAAM,eAAe,GAAG,CAAC;AAAA,IAC7B;AACA,qBAAiB,GAAG,CAAC;AAAA,EACzB;AACA,IAAE,SAAS,IAAI,MAAM;AACjB,QAAI,MAAM,MAAM;AACZ,YAAM,KAAK,GAAG,CAAC;AAAA,IACnB;AACA,WAAO,GAAG,CAAC;AAAA,EACf;AACA,IAAE,cAAc,IAAI,MAAM;AACtB,QAAI,MAAM,WAAW;AACjB,YAAM,UAAU,GAAG,CAAC;AAAA,IACxB;AACA,gBAAY,GAAG,CAAC;AAAA,EACpB;AACJ;AACA,SAAS,cAAc,GAAG,QAAQ,CAAC,GAAG;AAClC,QAAM,gBAAgB,EAAE,IAAI;AAC5B,MAAI,CAAC,eAAe;AAChB,WAAO,MAAM;AAAA,IACb;AAAA,EACJ;AACA,aAAW,GAAG,KAAK;AACnB,QAAM,mBAAmB,qBAAqB,GAAG,EAAE,GAAG;AACtD,QAAM,mBAAmB,iBAAiB,CAAC;AAC3C,QAAM,0BAA0B,6BAA6B,CAAC;AAC9D,QAAM,gBAAgB,mBAAmB,CAAC;AAC1C,QAAM,wBAAwB,2BAA2B,CAAC;AAC1D,QAAM,eAAe,kBAAkB,CAAC;AACxC,QAAM,0BAA0B,6BAA6B,CAAC;AAC9D,QAAM,qBAAqB,uBAAuB,GAAG,EAAE,KAAK,cAAc,CAAC;AAC3E,QAAM,4BAA4B,8BAA8B,GAAG,EAAE,GAAG;AACxE,QAAM,2BAA2B,6BAA6B,GAAG;AAAA,IAC7D,KAAK;AAAA,EACT,CAAC;AACD,QAAM,eAAe,EAAE,eACjB,iBAAiB,CAAC,IAClB,MAAM;AAAA,EACR;AACJ,QAAM,oBAAoB,sBAAsB,CAAC;AACjD,QAAM,iBAAiB,CAAC;AACxB,aAAW,UAAU,EAAE,SAAS;AAC5B,mBAAe,KAAK,OAAO,SAAS,OAAO,UAAU,eAAe,OAAO,OAAO,CAAC;AAAA,EACvF;AACA,SAAO,MAAM;AACT,oBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;AACxC,qBAAiB,WAAW;AAC5B,qBAAiB;AACjB,4BAAwB;AACxB,kBAAc;AACd,0BAAsB;AACtB,iBAAa;AACb,4BAAwB;AACxB,uBAAmB;AACnB,8BAA0B;AAC1B,6BAAyB;AACzB,iBAAa;AACb,sBAAkB;AAClB,mBAAe,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EACrC;AACJ;;;ACzuBA,IAAM,0BAAN,MAA8B;AAAA,EAC1B,YAAY,cAAc;AACtB,SAAK,eAAe;AACpB,SAAK,wBAAwB,oBAAI,QAAQ;AACzC,SAAK,wBAAwB,oBAAI,QAAQ;AAAA,EAC7C;AAAA,EACA,MAAM,QAAQ,UAAU,eAAe,eAAe;AAClD,UAAM,kBAAkB,iBAAiB,KAAK,mBAAmB,MAAM;AACvE,UAAM,kBAAkB,iBAAiB,KAAK,mBAAmB,MAAM;AACvE,QAAI,KAAK,gBAAgB,IAAI,QAAQ;AACrC,QAAI,CAAC,IAAI;AACL,WAAK,KAAK,aAAa;AACvB,sBAAgB,IAAI,UAAU,EAAE;AAChC,sBAAgB,IAAI,IAAI,QAAQ;AAAA,IACpC;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,QAAQ,UAAU;AACrB,UAAM,kBAAkB,KAAK,mBAAmB,MAAM;AACtD,UAAM,kBAAkB,KAAK,mBAAmB,MAAM;AACtD,WAAO,SAAS,IAAI,CAAC,OAAO,KAAK,MAAM,QAAQ,IAAI,iBAAiB,eAAe,CAAC;AAAA,EACxF;AAAA,EACA,YAAY,QAAQ,IAAI,KAAK;AACzB,UAAM,kBAAkB,OAAO,KAAK,mBAAmB,MAAM;AAC7D,QAAI,OAAO,OAAO;AACd,aAAO;AACX,UAAM,WAAW,gBAAgB,IAAI,EAAE;AACvC,QAAI,CAAC;AACD,aAAO;AACX,WAAO;AAAA,EACX;AAAA,EACA,aAAa,QAAQ,KAAK;AACtB,UAAM,kBAAkB,KAAK,mBAAmB,MAAM;AACtD,WAAO,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,QAAQ,IAAI,eAAe,CAAC;AAAA,EACxE;AAAA,EACA,MAAM,QAAQ;AACV,QAAI,CAAC,QAAQ;AACT,WAAK,wBAAwB,oBAAI,QAAQ;AACzC,WAAK,wBAAwB,oBAAI,QAAQ;AACzC;AAAA,IACJ;AACA,SAAK,sBAAsB,OAAO,MAAM;AACxC,SAAK,sBAAsB,OAAO,MAAM;AAAA,EAC5C;AAAA,EACA,mBAAmB,QAAQ;AACvB,QAAI,kBAAkB,KAAK,sBAAsB,IAAI,MAAM;AAC3D,QAAI,CAAC,iBAAiB;AAClB,wBAAkB,oBAAI,IAAI;AAC1B,WAAK,sBAAsB,IAAI,QAAQ,eAAe;AAAA,IAC1D;AACA,WAAO;AAAA,EACX;AAAA,EACA,mBAAmB,QAAQ;AACvB,QAAI,kBAAkB,KAAK,sBAAsB,IAAI,MAAM;AAC3D,QAAI,CAAC,iBAAiB;AAClB,wBAAkB,oBAAI,IAAI;AAC1B,WAAK,sBAAsB,IAAI,QAAQ,eAAe;AAAA,IAC1D;AACA,WAAO;AAAA,EACX;AACJ;;;ACxDA,IAAM,gBAAN,MAAoB;AAAA,EAChB,YAAY,SAAS;AACjB,SAAK,UAAU,oBAAI,QAAQ;AAC3B,SAAK,uBAAuB,oBAAI,QAAQ;AACxC,SAAK,0BAA0B,IAAI,wBAAwB,KAAK;AAChE,SAAK,aAAa,QAAQ;AAC1B,SAAK,cAAc,QAAQ;AAC3B,SAAK,oBAAoB,QAAQ;AACjC,SAAK,2BAA2B,QAAQ;AACxC,SAAK,+BAA+B,IAAI,wBAAwB,KAAK,kBAAkB,YAAY,WAAW,KAAK,KAAK,kBAAkB,WAAW,CAAC;AACtJ,SAAK,SAAS,QAAQ;AACtB,QAAI,KAAK,0BAA0B;AAC/B,aAAO,iBAAiB,WAAW,KAAK,cAAc,KAAK,IAAI,CAAC;AAAA,IACpE;AAAA,EACJ;AAAA,EACA,UAAU,UAAU;AAChB,SAAK,QAAQ,IAAI,UAAU,IAAI;AAC/B,QAAI,SAAS;AACT,WAAK,qBAAqB,IAAI,SAAS,eAAe,QAAQ;AAAA,EACtE;AAAA,EACA,gBAAgB,IAAI;AAChB,SAAK,eAAe;AAAA,EACxB;AAAA,EACA,aAAa,UAAU,SAAS;AAC5B,QAAI;AACJ,SAAK,WAAW;AAAA,MACZ,MAAM;AAAA,QACF;AAAA,UACI,UAAU,KAAK,OAAO,MAAM,QAAQ;AAAA,UACpC,QAAQ;AAAA,UACR,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,MACA,SAAS,CAAC;AAAA,MACV,OAAO,CAAC;AAAA,MACR,YAAY,CAAC;AAAA,MACb,gBAAgB;AAAA,IACpB,CAAC;AACD,KAAC,KAAK,KAAK,kBAAkB,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,MAAM,QAAQ;AACpF,QAAI,SAAS,mBACT,SAAS,gBAAgB,sBACzB,SAAS,gBAAgB,mBAAmB,SAAS;AACrD,WAAK,kBAAkB,iBAAiB,SAAS,gBAAgB,oBAAoB,KAAK,OAAO,MAAM,SAAS,eAAe,CAAC;AAAA,EACxI;AAAA,EACA,cAAc,SAAS;AACnB,QAAI,QAAQ,KAAK,SAAS,SAAS;AAC/B,YAAM,qBAAqB,QAAQ;AACnC,UAAI,CAAC;AACD;AACJ,YAAM,WAAW,KAAK,qBAAqB,IAAI,QAAQ,MAAM;AAC7D,UAAI,CAAC;AACD;AACJ,YAAM,mBAAmB,KAAK,0BAA0B,UAAU,QAAQ,KAAK,KAAK;AACpF,UAAI;AACA,aAAK,YAAY,kBAAkB,QAAQ,KAAK,UAAU;AAAA,IAClE;AAAA,EACJ;AAAA,EACA,0BAA0B,UAAU,GAAG;AACnC,QAAI;AACJ,YAAQ,EAAE,MAAM;AAAA,MACZ,KAAK,UAAU,cAAc;AACzB,aAAK,wBAAwB,MAAM,QAAQ;AAC3C,aAAK,6BAA6B,MAAM,QAAQ;AAChD,aAAK,gBAAgB,EAAE,KAAK,MAAM,QAAQ;AAC1C,eAAO;AAAA,UACH,WAAW,EAAE;AAAA,UACb,MAAM,UAAU;AAAA,UAChB,MAAM;AAAA,YACF,QAAQ,kBAAkB;AAAA,YAC1B,MAAM;AAAA,cACF;AAAA,gBACI,UAAU,KAAK,OAAO,MAAM,QAAQ;AAAA,gBACpC,QAAQ;AAAA,gBACR,MAAM,EAAE,KAAK;AAAA,cACjB;AAAA,YACJ;AAAA,YACA,SAAS,CAAC;AAAA,YACV,OAAO,CAAC;AAAA,YACR,YAAY,CAAC;AAAA,YACb,gBAAgB;AAAA,UACpB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU,kBAAkB;AAC7B,eAAO;AAAA,MACX;AAAA,MACA,KAAK,UAAU,QAAQ;AACnB,eAAO;AAAA,MACX;AAAA,MACA,KAAK,UAAU,QAAQ;AACnB,aAAK,WAAW,EAAE,KAAK,SAAS,UAAU,CAAC,MAAM,YAAY,cAAc,QAAQ,CAAC;AACpF,eAAO;AAAA,MACX;AAAA,MACA,KAAK,UAAU,qBAAqB;AAChC,gBAAQ,EAAE,KAAK,QAAQ;AAAA,UACnB,KAAK,kBAAkB,UAAU;AAC7B,cAAE,KAAK,KAAK,QAAQ,CAAC,MAAM;AACvB,mBAAK,WAAW,GAAG,UAAU;AAAA,gBACzB;AAAA,gBACA;AAAA,gBACA;AAAA,cACJ,CAAC;AACD,mBAAK,gBAAgB,EAAE,MAAM,QAAQ;AAAA,YACzC,CAAC;AACD,cAAE,KAAK,QAAQ,QAAQ,CAAC,MAAM;AAC1B,mBAAK,WAAW,GAAG,UAAU,CAAC,YAAY,IAAI,CAAC;AAAA,YACnD,CAAC;AACD,cAAE,KAAK,WAAW,QAAQ,CAAC,MAAM;AAC7B,mBAAK,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;AAAA,YACvC,CAAC;AACD,cAAE,KAAK,MAAM,QAAQ,CAAC,MAAM;AACxB,mBAAK,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;AAAA,YACvC,CAAC;AACD,mBAAO;AAAA,UACX;AAAA,UACA,KAAK,kBAAkB;AAAA,UACvB,KAAK,kBAAkB;AAAA,UACvB,KAAK,kBAAkB,WAAW;AAC9B,cAAE,KAAK,UAAU,QAAQ,CAAC,MAAM;AAC5B,mBAAK,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;AAAA,YACvC,CAAC;AACD,mBAAO;AAAA,UACX;AAAA,UACA,KAAK,kBAAkB,gBAAgB;AACnC,mBAAO;AAAA,UACX;AAAA,UACA,KAAK,kBAAkB;AAAA,UACvB,KAAK,kBAAkB;AAAA,UACvB,KAAK,kBAAkB;AAAA,UACvB,KAAK,kBAAkB;AAAA,UACvB,KAAK,kBAAkB,OAAO;AAC1B,iBAAK,WAAW,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC;AACxC,mBAAO;AAAA,UACX;AAAA,UACA,KAAK,kBAAkB;AAAA,UACvB,KAAK,kBAAkB,kBAAkB;AACrC,iBAAK,WAAW,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC;AACxC,iBAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC,SAAS,CAAC;AAClD,mBAAO;AAAA,UACX;AAAA,UACA,KAAK,kBAAkB,MAAM;AACzB,mBAAO;AAAA,UACX;AAAA,UACA,KAAK,kBAAkB,WAAW;AAC9B,cAAE,KAAK,OAAO,QAAQ,CAAC,UAAU;AAC7B,mBAAK,WAAW,OAAO,UAAU,CAAC,SAAS,KAAK,CAAC;AAAA,YACrD,CAAC;AACD,mBAAO;AAAA,UACX;AAAA,UACA,KAAK,kBAAkB,mBAAmB;AACtC,iBAAK,WAAW,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC;AACxC,iBAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC,UAAU,CAAC;AACnD,aAAC,KAAK,EAAE,KAAK,YAAY,QAAQ,OAAO,SAAS,SAAS,GAAG,QAAQ,CAAC,UAAU;AAC5E,mBAAK,gBAAgB,OAAO,UAAU,CAAC,SAAS,CAAC;AAAA,YACrD,CAAC;AACD,mBAAO;AAAA,UACX;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,QAAQ,cAAc,KAAK,UAAU,MAAM;AACvC,eAAW,OAAO,MAAM;AACpB,UAAI,CAAC,MAAM,QAAQ,IAAI,GAAG,CAAC,KAAK,OAAO,IAAI,GAAG,MAAM;AAChD;AACJ,UAAI,MAAM,QAAQ,IAAI,GAAG,CAAC,GAAG;AACzB,YAAI,GAAG,IAAI,aAAa,OAAO,UAAU,IAAI,GAAG,CAAC;AAAA,MACrD,OACK;AACD,YAAI,GAAG,IAAI,aAAa,MAAM,UAAU,IAAI,GAAG,CAAC;AAAA,MACpD;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,KAAK,UAAU,MAAM;AAC5B,WAAO,KAAK,QAAQ,KAAK,yBAAyB,KAAK,UAAU,IAAI;AAAA,EACzE;AAAA,EACA,gBAAgB,KAAK,UAAU,MAAM;AACjC,WAAO,KAAK,QAAQ,KAAK,8BAA8B,KAAK,UAAU,IAAI;AAAA,EAC9E;AAAA,EACA,gBAAgB,MAAM,UAAU;AAC5B,SAAK,WAAW,MAAM,UAAU,CAAC,IAAI,CAAC;AACtC,QAAI,gBAAgB,MAAM;AACtB,WAAK,WAAW,QAAQ,CAAC,UAAU;AAC/B,aAAK,gBAAgB,OAAO,QAAQ;AAAA,MACxC,CAAC;AAAA,IACL;AAAA,EACJ;AACJ;;;AC9LA,IAAM,mBAAN,MAAuB;AAAA,EACnB,YAAY,SAAS;AACjB,SAAK,aAAa,oBAAI,QAAQ;AAC9B,SAAK,iBAAiB,CAAC;AACvB,SAAK,aAAa,QAAQ;AAC1B,SAAK,WAAW,QAAQ;AACxB,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,SAAS,QAAQ;AACtB,UAAM,UAAU;AAChB,SAAK,eAAe,KAAK,MAAM,QAAQ,WAAW,gBAAgB,SAAU,UAAU;AAClF,aAAO,SAAU,QAAQ;AACrB,cAAM,aAAa,SAAS,KAAK,MAAM,MAAM;AAC7C,YAAI,KAAK;AACL,kBAAQ,cAAc,KAAK,YAAY,KAAK,aAAa;AAC7D,eAAO;AAAA,MACX;AAAA,IACJ,CAAC,CAAC;AAAA,EACN;AAAA,EACA,cAAc,YAAY,KAAK;AAC3B,QAAI,CAAC,kBAAkB,UAAU;AAC7B;AACJ,QAAI,KAAK,WAAW,IAAI,UAAU;AAC9B;AACJ,SAAK,WAAW,IAAI,UAAU;AAC9B,yBAAqB,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,aAAa,GAAG,EAAE,KAAK,YAAY,KAAK,YAAY,QAAQ,KAAK,QAAQ,kBAAkB,KAAK,CAAC,GAAG,UAAU;AACxK,uBAAmB,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,aAAa,GAAG,EAAE,UAAU,KAAK,UAAU,KAAK,YAAY,QAAQ,KAAK,OAAO,CAAC,CAAC;AAC1I,eAAW,MAAM;AACb,UAAI,WAAW,sBACX,WAAW,mBAAmB,SAAS;AACvC,aAAK,cAAc,kBAAkB,iBAAiB,WAAW,oBAAoB,KAAK,OAAO,MAAM,WAAW,IAAI,CAAC;AAC3H,oCAA8B;AAAA,QAC1B,QAAQ,KAAK;AAAA,QACb,mBAAmB,KAAK,cAAc;AAAA,MAC1C,GAAG,UAAU;AAAA,IACjB,GAAG,CAAC;AAAA,EACR;AAAA,EACA,oBAAoB,eAAe;AAC/B,QAAI,cAAc,eAAe;AAC7B,YAAM,UAAU;AAChB,WAAK,eAAe,KAAK,MAAM,cAAc,cAAc,YAAY,WAAW,gBAAgB,SAAU,UAAU;AAClH,eAAO,SAAU,QAAQ;AACrB,gBAAM,aAAa,SAAS,KAAK,MAAM,MAAM;AAC7C,cAAI,KAAK;AACL,oBAAQ,cAAc,KAAK,YAAY,cAAc,eAAe;AACxE,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC,CAAC;AAAA,IACN;AAAA,EACJ;AAAA,EACA,QAAQ;AACJ,SAAK,eAAe,QAAQ,CAAC,iBAAiB,aAAa,CAAC;AAC5D,SAAK,aAAa,oBAAI,QAAQ;AAAA,EAClC;AACJ;;;AC1CA,SAAS,OAAO,GAAG,GAAG;AAClB,MAAI,IAAI,CAAC;AACT,WAAS,KAAK,EAAG,KAAI,OAAO,UAAU,eAAe,KAAK,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI;AAC9E,MAAE,CAAC,IAAI,EAAE,CAAC;AACd,MAAI,KAAK,QAAQ,OAAO,OAAO,0BAA0B;AACrD,aAAS,IAAI,GAAG,IAAI,OAAO,sBAAsB,CAAC,GAAG,IAAI,EAAE,QAAQ,KAAK;AACpE,UAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,UAAU,qBAAqB,KAAK,GAAG,EAAE,CAAC,CAAC;AACzE,UAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,IACxB;AACJ,SAAO;AACX;AAEA,SAAS,UAAU,SAAS,YAAY,GAAG,WAAW;AAClD,WAAS,MAAM,OAAO;AAAE,WAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,cAAQ,KAAK;AAAA,IAAG,CAAC;AAAA,EAAG;AAC3G,SAAO,KAAK,MAAM,IAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,aAAS,UAAU,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,KAAK,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,eAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC1F,aAAS,SAAS,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,OAAO,EAAE,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,eAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC7F,aAAS,KAAK,QAAQ;AAAE,aAAO,OAAO,QAAQ,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,WAAW,QAAQ;AAAA,IAAG;AAC7G,UAAM,YAAY,UAAU,MAAM,SAAS,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,EACxE,CAAC;AACL;;;AC9BA,IAAI,QAAQ;AAEZ,IAAI,SAAS,OAAO,eAAe,cAAc,CAAC,IAAI,IAAI,WAAW,GAAG;AACxE,KAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,SAAO,MAAM,WAAW,CAAC,CAAC,IAAI;AAClC;AAFS;AAGT,IAAI,SAAS,SAAU,aAAa;AAChC,MAAI,QAAQ,IAAI,WAAW,WAAW,GAAG,GAAG,MAAM,MAAM,QAAQ,SAAS;AACzE,OAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AACzB,cAAU,MAAM,MAAM,CAAC,KAAK,CAAC;AAC7B,cAAU,OAAQ,MAAM,CAAC,IAAI,MAAM,IAAM,MAAM,IAAI,CAAC,KAAK,CAAE;AAC3D,cAAU,OAAQ,MAAM,IAAI,CAAC,IAAI,OAAO,IAAM,MAAM,IAAI,CAAC,KAAK,CAAE;AAChE,cAAU,MAAM,MAAM,IAAI,CAAC,IAAI,EAAE;AAAA,EACrC;AACA,MAAI,MAAM,MAAM,GAAG;AACf,aAAS,OAAO,UAAU,GAAG,OAAO,SAAS,CAAC,IAAI;AAAA,EACtD,WACS,MAAM,MAAM,GAAG;AACpB,aAAS,OAAO,UAAU,GAAG,OAAO,SAAS,CAAC,IAAI;AAAA,EACtD;AACA,SAAO;AACX;;;ACxBA,IAAM,eAAe,oBAAI,IAAI;AAC7B,SAAS,gBAAgB,KAAK,MAAM;AAChC,MAAI,aAAa,aAAa,IAAI,GAAG;AACrC,MAAI,CAAC,YAAY;AACb,iBAAa,oBAAI,IAAI;AACrB,iBAAa,IAAI,KAAK,UAAU;AAAA,EACpC;AACA,MAAI,CAAC,WAAW,IAAI,IAAI,GAAG;AACvB,eAAW,IAAI,MAAM,CAAC,CAAC;AAAA,EAC3B;AACA,SAAO,WAAW,IAAI,IAAI;AAC9B;AACA,IAAM,eAAe,CAAC,OAAO,KAAK,QAAQ;AACtC,MAAI,CAAC,SACD,EAAE,wBAAwB,OAAO,GAAG,KAAK,OAAO,UAAU;AAC1D;AACJ,QAAM,OAAO,MAAM,YAAY;AAC/B,QAAM,OAAO,gBAAgB,KAAK,IAAI;AACtC,MAAI,QAAQ,KAAK,QAAQ,KAAK;AAC9B,MAAI,UAAU,IAAI;AACd,YAAQ,KAAK;AACb,SAAK,KAAK,KAAK;AAAA,EACnB;AACA,SAAO;AACX;AACA,SAAS,aAAa,OAAO,KAAK,KAAK;AACnC,MAAI,iBAAiB,OAAO;AACxB,WAAO,MAAM,IAAI,CAAC,QAAQ,aAAa,KAAK,KAAK,GAAG,CAAC;AAAA,EACzD,WACS,UAAU,MAAM;AACrB,WAAO;AAAA,EACX,WACS,iBAAiB,gBACtB,iBAAiB,gBACjB,iBAAiB,cACjB,iBAAiB,eACjB,iBAAiB,cACjB,iBAAiB,eACjB,iBAAiB,cACjB,iBAAiB,aACjB,iBAAiB,mBAAmB;AACpC,UAAM,OAAO,MAAM,YAAY;AAC/B,WAAO;AAAA,MACH,SAAS;AAAA,MACT,MAAM,CAAC,OAAO,OAAO,KAAK,CAAC;AAAA,IAC/B;AAAA,EACJ,WACS,iBAAiB,aAAa;AACnC,UAAM,OAAO,MAAM,YAAY;AAC/B,UAAM,SAAS,OAAO,KAAK;AAC3B,WAAO;AAAA,MACH,SAAS;AAAA,MACT;AAAA,IACJ;AAAA,EACJ,WACS,iBAAiB,UAAU;AAChC,UAAM,OAAO,MAAM,YAAY;AAC/B,WAAO;AAAA,MACH,SAAS;AAAA,MACT,MAAM;AAAA,QACF,aAAa,MAAM,QAAQ,KAAK,GAAG;AAAA,QACnC,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ,WACS,iBAAiB,kBAAkB;AACxC,UAAM,OAAO,MAAM,YAAY;AAC/B,UAAM,EAAE,IAAI,IAAI;AAChB,WAAO;AAAA,MACH,SAAS;AAAA,MACT;AAAA,IACJ;AAAA,EACJ,WACS,iBAAiB,mBAAmB;AACzC,UAAM,OAAO;AACb,UAAM,MAAM,MAAM,UAAU;AAC5B,WAAO;AAAA,MACH,SAAS;AAAA,MACT;AAAA,IACJ;AAAA,EACJ,WACS,iBAAiB,WAAW;AACjC,UAAM,OAAO,MAAM,YAAY;AAC/B,WAAO;AAAA,MACH,SAAS;AAAA,MACT,MAAM,CAAC,aAAa,MAAM,MAAM,KAAK,GAAG,GAAG,MAAM,OAAO,MAAM,MAAM;AAAA,IACxE;AAAA,EACJ,WACS,wBAAwB,OAAO,GAAG,KAAK,OAAO,UAAU,UAAU;AACvE,UAAM,OAAO,MAAM,YAAY;AAC/B,UAAM,QAAQ,aAAa,OAAO,KAAK,GAAG;AAC1C,WAAO;AAAA,MACH,SAAS;AAAA,MACT;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AACA,IAAM,gBAAgB,CAAC,MAAM,KAAK,QAAQ;AACtC,SAAO,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,aAAa,KAAK,KAAK,GAAG,CAAC;AAC7D;AACA,IAAM,0BAA0B,CAAC,OAAO,QAAQ;AAC5C,QAAM,wBAAwB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA,QAAM,iCAAiC,sBAAsB,OAAO,CAAC,SAAS,OAAO,IAAI,IAAI,MAAM,UAAU;AAC7G,SAAO,QAAQ,+BAA+B,KAAK,CAAC,SAAS,iBAAiB,IAAI,IAAI,CAAC,CAAC;AAC5F;;;ACpHA,SAAS,6BAA6B,IAAI,KAAK,YAAY,eAAe;AACtE,QAAM,WAAW,CAAC;AAClB,QAAM,UAAU,OAAO,oBAAoB,IAAI,yBAAyB,SAAS;AACjF,aAAW,QAAQ,SAAS;AACxB,QAAI;AACA,UAAI,OAAO,IAAI,yBAAyB,UAAU,IAAI,MAAM,YAAY;AACpE;AAAA,MACJ;AACA,YAAM,iBAAiB,MAAM,IAAI,yBAAyB,WAAW,MAAM,SAAU,UAAU;AAC3F,eAAO,YAAa,MAAM;AACtB,cAAI,CAAC,UAAU,KAAK,QAAQ,YAAY,eAAe,IAAI,GAAG;AAC1D,uBAAW,MAAM;AACb,oBAAM,aAAa,cAAc,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI;AACrD,iBAAG,KAAK,QAAQ;AAAA,gBACZ,MAAM,cAAc,IAAI;AAAA,gBACxB,UAAU;AAAA,gBACV,MAAM;AAAA,cACV,CAAC;AAAA,YACL,GAAG,CAAC;AAAA,UACR;AACA,iBAAO,SAAS,MAAM,MAAM,IAAI;AAAA,QACpC;AAAA,MACJ,CAAC;AACD,eAAS,KAAK,cAAc;AAAA,IAChC,SACO,IAAI;AACP,YAAM,cAAc,WAAW,IAAI,yBAAyB,WAAW,MAAM;AAAA,QACzE,IAAI,GAAG;AACH,aAAG,KAAK,QAAQ;AAAA,YACZ,MAAM,cAAc,IAAI;AAAA,YACxB,UAAU;AAAA,YACV,MAAM,CAAC,CAAC;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AAAA,MACJ,CAAC;AACD,eAAS,KAAK,WAAW;AAAA,IAC7B;AAAA,EACJ;AACA,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;;;AC5CA,SAAS,0BAA0B,KAAK,YAAY,eAAe;AAC/D,QAAM,WAAW,CAAC;AAClB,MAAI;AACA,UAAM,iBAAiB,MAAM,IAAI,kBAAkB,WAAW,cAAc,SAAU,UAAU;AAC5F,aAAO,SAAU,gBAAgB,MAAM;AACnC,YAAI,CAAC,UAAU,MAAM,YAAY,eAAe,IAAI,GAAG;AACnD,cAAI,EAAE,eAAe;AACjB,iBAAK,YAAY;AAAA,QACzB;AACA,eAAO,SAAS,MAAM,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;AAAA,MACtD;AAAA,IACJ,CAAC;AACD,aAAS,KAAK,cAAc;AAAA,EAChC,SACO,IAAI;AACP,YAAQ,MAAM,wDAAwD;AAAA,EAC1E;AACA,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;;;AClBA,SAAS,iBAAiB,WAAW,MAAM,IAAI,YAAY,eAAeE,SAAQ,KAAK;AACnF,QAAM,WAAW,CAAC;AAClB,QAAM,QAAQ,OAAO,oBAAoB,SAAS;AAClD,aAAW,QAAQ,OAAO;AACtB,QAAI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,EAAE,SAAS,IAAI,GAAG;AACd;AAAA,IACJ;AACA,QAAI;AACA,UAAI,OAAO,UAAU,IAAI,MAAM,YAAY;AACvC;AAAA,MACJ;AACA,YAAM,iBAAiB,MAAM,WAAW,MAAM,SAAU,UAAU;AAC9D,eAAO,YAAa,MAAM;AACtB,gBAAM,SAAS,SAAS,MAAM,MAAM,IAAI;AACxC,uBAAa,QAAQ,KAAK,IAAI;AAC9B,cAAI,CAAC,UAAU,KAAK,QAAQ,YAAY,eAAe,IAAI,GAAG;AAC1D,kBAAM,aAAa,cAAc,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI;AACrD,kBAAM,WAAW;AAAA,cACb;AAAA,cACA,UAAU;AAAA,cACV,MAAM;AAAA,YACV;AACA,eAAG,KAAK,QAAQ,QAAQ;AAAA,UAC5B;AACA,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AACD,eAAS,KAAK,cAAc;AAAA,IAChC,SACO,IAAI;AACP,YAAM,cAAc,WAAW,WAAW,MAAM;AAAA,QAC5C,IAAI,GAAG;AACH,aAAG,KAAK,QAAQ;AAAA,YACZ;AAAA,YACA,UAAU;AAAA,YACV,MAAM,CAAC,CAAC;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AAAA,MACJ,CAAC;AACD,eAAS,KAAK,WAAW;AAAA,IAC7B;AAAA,EACJ;AACA,SAAO;AACX;AACA,SAAS,gCAAgC,IAAI,KAAK,YAAY,eAAeA,SAAQ;AACjF,QAAM,WAAW,CAAC;AAClB,WAAS,KAAK,GAAG,iBAAiB,IAAI,sBAAsB,WAAW,cAAc,OAAO,IAAI,YAAY,eAAeA,SAAQ,GAAG,CAAC;AACvI,MAAI,OAAO,IAAI,2BAA2B,aAAa;AACnD,aAAS,KAAK,GAAG,iBAAiB,IAAI,uBAAuB,WAAW,cAAc,QAAQ,IAAI,YAAY,eAAeA,SAAQ,GAAG,CAAC;AAAA,EAC7I;AACA,SAAO,MAAM;AACT,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,EAC/B;AACJ;;;AC/DA,IAAI,cAAc;AAElB,IAAI;AACI,kBACA,OAAO,WAAW,eAAe,OAAO,OAAO,YAAY,cAAc,OAAO,QAAQ,gBAAgB,KACxG,OAAO,4BAA4B,cAAc,wBAAwB,gBAAgB,KACzF,OAAO,YAAY,cAAc,QAAQ,gBAAgB;AAC7D,gBAAc,cAAc;AAChC,SAAQ,GAAG;AAAC;AALJ;;;ACDR,SAAS,aAAa,QAAQ,eAAe;AACzC,SAAO,OAAO,KAAK,QAAQ,QAAQ,EAAE,SAAS,gBAAgB,UAAU,MAAM;AAClF;AAEA,SAAS,0BAA0B,QAAQ,cAAc,kBAAkB;AACvE,MAAI,YAAY,iBAAiB,SAAY,OAAO;AACpD,MAAI,gBAAgB,qBAAqB,SAAY,QAAQ;AAC7D,MAAI,SAAS,aAAa,QAAQ,aAAa;AAC/C,MAAI,QAAQ,OAAO,QAAQ,MAAM,EAAE,IAAI;AACvC,MAAI,OAAO,OAAO,UAAU,KAAK,KAAK,YAAY,0BAA4B,YAAY;AAC1F,SAAO,SAASC,eAAc,SAAS;AACnC,WAAO,IAAI,YAAY,MAAM,OAAO,OAAO,CAAC,GAAG,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC;AAAA,EAC3E;AACJ;;;ACfA,SAASC,cAAa,QAAQ,eAAe;AACzC,MAAI,eAAe,KAAK,MAAM;AAC9B,MAAI,eAAe;AACf,QAAI,aAAa,IAAI,WAAW,aAAa,MAAM;AACnD,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,IAAI,GAAG,EAAE,GAAG;AACjD,iBAAW,CAAC,IAAI,aAAa,WAAW,CAAC;AAAA,IAC7C;AACA,WAAO,OAAO,aAAa,MAAM,MAAM,IAAI,YAAY,WAAW,MAAM,CAAC;AAAA,EAC7E;AACA,SAAO;AACX;AAEA,SAAS,UAAU,QAAQ,cAAc,kBAAkB;AACvD,MAAI,YAAY,iBAAiB,SAAY,OAAO;AACpD,MAAI,gBAAgB,qBAAqB,SAAY,QAAQ;AAC7D,MAAI,SAASA,cAAa,QAAQ,aAAa;AAC/C,MAAI,QAAQ,OAAO,QAAQ,MAAM,EAAE,IAAI;AACvC,MAAI,OAAO,OAAO,UAAU,KAAK,KAAK,YAAY,0BAA4B,YAAY;AAC1F,MAAI,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9D,SAAO,IAAI,gBAAgB,IAAI;AACnC;AAEA,SAASC,2BAA0B,QAAQ,cAAc,kBAAkB;AACvE,MAAI;AACJ,SAAO,SAASC,eAAc,SAAS;AACnC,UAAM,OAAO,UAAU,QAAQ,cAAc,gBAAgB;AAC7D,WAAO,IAAI,OAAO,KAAK,OAAO;AAAA,EAClC;AACJ;;;AC5BA,IAAI,YAAY,OAAO,UAAU,SAAS,KAAK,OAAO,YAAY,cAAc,UAAU,CAAC,MAAM;AAEjG,SAAS,WAAW;AAChB,SAAO;AACX;;;ACAA,SAASC,2BAA0B,QAAQ,cAAc,kBAAkB;AACvE,MAAI,SAAS,GAAG;AACZ,WAAO,0BAA4B,QAAQ,cAAc,gBAAgB;AAAA,EAC7E;AACA,SAAOA,2BAA4B,QAAQ,cAAc,gBAAgB;AAC7E;;;ACPA,IAAI,gBAAgBC,2BAA0B,oyNAAoyN,MAAM,KAAK;;;ACM71N,IAAM,gBAAN,MAAoB;AAAA,EAChB,YAAY,SAAS;AACjB,SAAK,yBAAyB,oBAAI,IAAI;AACtC,SAAK,YAAY,EAAE,UAAU,GAAG,UAAU,KAAK;AAC/C,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB,CAAC,QAAQ,aAAa;AACzC,YAAM,WAAW,KAAK,UAAU,YAC5B,KAAK,UAAU,aAAa,KAAK,UAAU;AAC/C,UAAI,YAAY,CAAC,KAAK,UAAU;AAC5B,aAAK,UAAU,WAAW,KAAK,UAAU;AAC7C,UAAI,CAAC,KAAK,uBAAuB,IAAI,MAAM,GAAG;AAC1C,aAAK,uBAAuB,IAAI,QAAQ,CAAC,CAAC;AAAA,MAC9C;AACA,WAAK,uBAAuB,IAAI,MAAM,EAAE,KAAK,QAAQ;AAAA,IACzD;AACA,UAAM,EAAE,WAAW,OAAO,KAAK,YAAY,eAAe,cAAc,eAAgB,IAAI;AAC5F,SAAK,aAAa,QAAQ;AAC1B,SAAK,SAAS,QAAQ;AACtB,QAAI,gBAAgB,aAAa;AAC7B,WAAK,2BAA2B,KAAK,YAAY,aAAa;AAClE,QAAI,gBAAgB,OAAO,aAAa;AACpC,WAAK,sBAAsB,UAAU,KAAK,YAAY,eAAe;AAAA,QACjE;AAAA,MACJ,CAAC;AAAA,EACT;AAAA,EACA,QAAQ;AACJ,SAAK,uBAAuB,MAAM;AAClC,SAAK,kBAAkB,KAAK,eAAe;AAAA,EAC/C;AAAA,EACA,SAAS;AACL,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,WAAW;AACP,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,OAAO;AACH,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,SAAS;AACL,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,sBAAsB,KAAK,KAAK,YAAY,eAAe,SAAS;AAChE,UAAM,qBAAqB,0BAA0B,KAAK,YAAY,aAAa;AACnF,UAAM,wBAAwB,oBAAI,IAAI;AACtC,UAAM,SAAS,IAAI,cAAc;AACjC,WAAO,YAAY,CAAC,MAAM;AACtB,YAAM,EAAE,GAAG,IAAI,EAAE;AACjB,4BAAsB,IAAI,IAAI,KAAK;AACnC,UAAI,EAAE,YAAY,EAAE;AAChB;AACJ,YAAM,EAAE,QAAQ,MAAM,OAAO,OAAO,IAAI,EAAE;AAC1C,WAAK,WAAW;AAAA,QACZ;AAAA,QACA,MAAM,cAAc,IAAI;AAAA,QACxB,UAAU;AAAA,UACN;AAAA,YACI,UAAU;AAAA,YACV,MAAM,CAAC,GAAG,GAAG,OAAO,MAAM;AAAA,UAC9B;AAAA,UACA;AAAA,YACI,UAAU;AAAA,YACV,MAAM;AAAA,cACF;AAAA,gBACI,SAAS;AAAA,gBACT,MAAM;AAAA,kBACF;AAAA,oBACI,SAAS;AAAA,oBACT,MAAM,CAAC,EAAE,SAAS,eAAe,OAAO,CAAC;AAAA,oBACzC;AAAA,kBACJ;AAAA,gBACJ;AAAA,cACJ;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AACA,UAAM,uBAAuB,MAAO;AACpC,QAAI,mBAAmB;AACvB,QAAI;AACJ,UAAM,YAAY,MAAM;AACpB,YAAM,gBAAgB,CAAC;AACvB,UAAI,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,CAAC,WAAW;AACxD,YAAI,CAAC,UAAU,QAAQ,YAAY,eAAe,IAAI,GAAG;AACrD,wBAAc,KAAK,MAAM;AAAA,QAC7B;AAAA,MACJ,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,sBAAsB,CAAC,cAAc;AACvC,UAAI,oBACA,YAAY,mBAAmB,sBAAsB;AACrD,gBAAQ,sBAAsB,mBAAmB;AACjD;AAAA,MACJ;AACA,yBAAmB;AACnB,gBAAU,EACL,QAAQ,CAAC,WAAW,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAClE,YAAI;AACJ,cAAM,KAAK,KAAK,OAAO,MAAM,MAAM;AACnC,YAAI,sBAAsB,IAAI,EAAE;AAC5B;AACJ,8BAAsB,IAAI,IAAI,IAAI;AAClC,YAAI,CAAC,SAAS,QAAQ,EAAE,SAAS,OAAO,SAAS,GAAG;AAChD,gBAAM,UAAU,OAAO,WAAW,OAAO,SAAS;AAClD,gBAAM,KAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,qBAAqB,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,2BAA2B,OAAO;AACnK,wBAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,UAC5F;AAAA,QACJ;AACA,cAAM,SAAS,MAAM,kBAAkB,MAAM;AAC7C,eAAO,YAAY;AAAA,UACf;AAAA,UACA;AAAA,UACA,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,UACf,gBAAgB,QAAQ;AAAA,QAC5B,GAAG,CAAC,MAAM,CAAC;AAAA,MACf,CAAC,CAAC;AACF,cAAQ,sBAAsB,mBAAmB;AAAA,IACrD;AACA,YAAQ,sBAAsB,mBAAmB;AACjD,SAAK,iBAAiB,MAAM;AACxB,yBAAmB;AACnB,2BAAqB,KAAK;AAAA,IAC9B;AAAA,EACJ;AAAA,EACA,2BAA2B,KAAK,YAAY,eAAe;AACvD,SAAK,qBAAqB;AAC1B,SAAK,kCAAkC;AACvC,UAAM,qBAAqB,0BAA0B,KAAK,YAAY,aAAa;AACnF,UAAM,gBAAgB,6BAA6B,KAAK,gBAAgB,KAAK,IAAI,GAAG,KAAK,YAAY,aAAa;AAClH,UAAM,wBAAwB,gCAAgC,KAAK,gBAAgB,KAAK,IAAI,GAAG,KAAK,YAAY,eAAe,KAAK,MAAM;AAC1I,SAAK,iBAAiB,MAAM;AACxB,yBAAmB;AACnB,oBAAc;AACd,4BAAsB;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,oCAAoC;AAChC,0BAAsB,MAAM,KAAK,4BAA4B,CAAC;AAAA,EAClE;AAAA,EACA,uBAAuB;AACnB,UAAM,wBAAwB,CAAC,cAAc;AACzC,WAAK,UAAU,WAAW;AAC1B,4BAAsB,qBAAqB;AAAA,IAC/C;AACA,0BAAsB,qBAAqB;AAAA,EAC/C;AAAA,EACA,8BAA8B;AAC1B,SAAK,uBAAuB,QAAQ,CAAC,QAAQ,WAAW;AACpD,YAAM,KAAK,KAAK,OAAO,MAAM,MAAM;AACnC,WAAK,8BAA8B,QAAQ,EAAE;AAAA,IACjD,CAAC;AACD,0BAAsB,MAAM,KAAK,4BAA4B,CAAC;AAAA,EAClE;AAAA,EACA,8BAA8B,QAAQ,IAAI;AACtC,QAAI,KAAK,UAAU,KAAK,QAAQ;AAC5B;AAAA,IACJ;AACA,UAAM,iBAAiB,KAAK,uBAAuB,IAAI,MAAM;AAC7D,QAAI,CAAC,kBAAkB,OAAO;AAC1B;AACJ,UAAM,SAAS,eAAe,IAAI,CAAC,UAAU;AACzC,YAAM,OAAO,OAAO,OAAO,CAAC,MAAM,CAAC;AACnC,aAAO;AAAA,IACX,CAAC;AACD,UAAM,EAAE,KAAK,IAAI,eAAe,CAAC;AACjC,SAAK,WAAW,EAAE,IAAI,MAAM,UAAU,OAAO,CAAC;AAC9C,SAAK,uBAAuB,OAAO,MAAM;AAAA,EAC7C;AACJ;;;AClLA,IAAM,oBAAN,MAAwB;AAAA,EACpB,YAAY,SAAS;AACjB,SAAK,sBAAsB,oBAAI,QAAQ;AACvC,SAAK,cAAc,IAAI,iBAAiB;AACxC,SAAK,aAAa,QAAQ;AAC1B,SAAK,sBAAsB,QAAQ;AAAA,EACvC;AAAA,EACA,kBAAkB,QAAQ,SAAS;AAC/B,QAAI,cAAc,QAAQ;AACtB,WAAK,WAAW;AAAA,QACZ,MAAM,CAAC;AAAA,QACP,SAAS,CAAC;AAAA,QACV,OAAO,CAAC;AAAA,QACR,YAAY;AAAA,UACR;AAAA,YACI,IAAI,QAAQ;AAAA,YACZ,YAAY,QACP;AAAA,UACT;AAAA,QACJ;AAAA,MACJ,CAAC;AACL,SAAK,iBAAiB,MAAM;AAAA,EAChC;AAAA,EACA,iBAAiB,QAAQ;AACrB,QAAI,KAAK,oBAAoB,IAAI,MAAM;AACnC;AACJ,SAAK,oBAAoB,IAAI,MAAM;AACnC,SAAK,6BAA6B,MAAM;AAAA,EAC5C;AAAA,EACA,iBAAiB,QAAQ,QAAQ;AAC7B,QAAI,OAAO,WAAW;AAClB;AACJ,UAAM,wBAAwB;AAAA,MAC1B,IAAI;AAAA,MACJ,UAAU,CAAC;AAAA,IACf;AACA,UAAM,SAAS,CAAC;AAChB,eAAW,SAAS,QAAQ;AACxB,UAAI;AACJ,UAAI,CAAC,KAAK,YAAY,IAAI,KAAK,GAAG;AAC9B,kBAAU,KAAK,YAAY,IAAI,KAAK;AACpC,cAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,OAAO;AAC/C,eAAO,KAAK;AAAA,UACR;AAAA,UACA,OAAO,MAAM,IAAI,CAAC,GAAG,UAAU;AAC3B,mBAAO;AAAA,cACH,MAAM,iBAAiB,CAAC;AAAA,cACxB;AAAA,YACJ;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AAEI,kBAAU,KAAK,YAAY,MAAM,KAAK;AAC1C,4BAAsB,SAAS,KAAK,OAAO;AAAA,IAC/C;AACA,QAAI,OAAO,SAAS;AAChB,4BAAsB,SAAS;AACnC,SAAK,oBAAoB,qBAAqB;AAAA,EAClD;AAAA,EACA,QAAQ;AACJ,SAAK,YAAY,MAAM;AACvB,SAAK,sBAAsB,oBAAI,QAAQ;AAAA,EAC3C;AAAA,EACA,6BAA6B,QAAQ;AAAA,EACrC;AACJ;;;AC5DA,SAAS,UAAU,GAAG;AAClB,SAAO,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;AACxE;AACA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI,YAAY;AAChB,IAAM,SAAS,aAAa;AAC5B,SAAS,OAAO,UAAU,CAAC,GAAG;AAC1B,QAAM,EAAE,MAAM,kBAAkB,kBAAkB,aAAa,YAAY,gBAAgB,MAAM,cAAc,aAAa,gBAAgB,WAAW,mBAAmB,MAAM,mBAAmB,MAAM,eAAe,kBAAkB,mBAAmB,gBAAgB,iBAAiB,aAAa,YAAY,OAAO,QAAQ,WAAW,CAAC,GAAG,iBAAiB,CAAC,GAAG,eAAe,eAAe,OAAO,2BAA2B,OAAO,uBAAuB,OAAO,eAAe,OAAO,eAAe,OAAO,SAAS,kBAAkB,MAAM,OAAO,sBAAsB,oBAAI,IAAI,CAAC,CAAC,EAAG,IAAI;AAC1kB,QAAM,kBAAkB,2BAClB,OAAO,WAAW,SAClB;AACN,MAAI,oBAAoB;AACxB,MAAI,CAAC,iBAAiB;AAClB,QAAI;AACA,aAAO,OAAO;AACd,0BAAoB;AAAA,IACxB,SACO,GAAG;AACN,0BAAoB;AAAA,IACxB;AAAA,EACJ;AACA,MAAI,mBAAmB,CAAC,MAAM;AAC1B,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC/C;AACA,MAAI,kBAAkB,UAAa,SAAS,cAAc,QAAW;AACjE,aAAS,YAAY;AAAA,EACzB;AACA,SAAO,MAAM;AACb,QAAM,mBAAmB,kBAAkB,OACrC;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,EACd,IACE,sBAAsB,SAClB,oBACA,EAAE,UAAU,KAAK;AAC3B,QAAM,iBAAiB,oBAAoB,QAAQ,oBAAoB,QACjE;AAAA,IACE,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,oBAAoB,oBAAoB;AAAA,IACxC,sBAAsB,oBAAoB;AAAA,EAC9C,IACE,kBACI,kBACA,CAAC;AACX,WAAS;AACT,MAAI;AACJ,MAAI,2BAA2B;AAC/B,QAAM,iBAAiB,CAAC,MAAM;AAC1B,eAAW,UAAU,WAAW,CAAC,GAAG;AAChC,UAAI,OAAO,gBAAgB;AACvB,YAAI,OAAO,eAAe,CAAC;AAAA,MAC/B;AAAA,IACJ;AACA,QAAI,QAAQ;AACR,UAAI,OAAO,CAAC;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AACA,gBAAc,CAAC,GAAG,eAAe;AAC7B,QAAI;AACJ,UAAM,KAAK,gBAAgB,CAAC,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,SAAS,MAC5E,EAAE,SAAS,UAAU,gBACrB,EAAE,EAAE,SAAS,UAAU,uBACnB,EAAE,KAAK,WAAW,kBAAkB,WAAW;AACnD,sBAAgB,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC;AAAA,IACnD;AACA,QAAI,iBAAiB;AACjB,eAAS,QAAQ,SAAS,SAAS,SAAS,KAAK,eAAe,CAAC,GAAG,UAAU;AAAA,IAClF,WACS,mBAAmB;AACxB,YAAM,UAAU;AAAA,QACZ,MAAM;AAAA,QACN,OAAO,eAAe,CAAC;AAAA,QACvB;AAAA,MACJ;AACA,aAAO,OAAO,YAAY,SAAS,GAAG;AAAA,IAC1C;AACA,QAAI,EAAE,SAAS,UAAU,cAAc;AACnC,8BAAwB;AACxB,iCAA2B;AAAA,IAC/B,WACS,EAAE,SAAS,UAAU,qBAAqB;AAC/C,UAAI,EAAE,KAAK,WAAW,kBAAkB,YACpC,EAAE,KAAK,gBAAgB;AACvB;AAAA,MACJ;AACA;AACA,YAAM,cAAc,oBAAoB,4BAA4B;AACpE,YAAM,aAAa,oBACf,EAAE,YAAY,sBAAsB,YAAY;AACpD,UAAI,eAAe,YAAY;AAC3B,yBAAiB,IAAI;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;AACA,QAAM,sBAAsB,CAAC,MAAM;AAC/B,gBAAY,UAAU;AAAA,MAClB,MAAM,UAAU;AAAA,MAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,SAAS,GAAG,CAAC;AAAA,IACjE,CAAC,CAAC;AAAA,EACN;AACA,QAAM,oBAAoB,CAAC,MAAM,YAAY,UAAU;AAAA,IACnD,MAAM,UAAU;AAAA,IAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,OAAO,GAAG,CAAC;AAAA,EAC/D,CAAC,CAAC;AACF,QAAM,4BAA4B,CAAC,MAAM,YAAY,UAAU;AAAA,IAC3D,MAAM,UAAU;AAAA,IAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,eAAe,GAAG,CAAC;AAAA,EACvE,CAAC,CAAC;AACF,QAAM,+BAA+B,CAAC,MAAM,YAAY,UAAU;AAAA,IAC9D,MAAM,UAAU;AAAA,IAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,kBAAkB,GAAG,CAAC;AAAA,EAC1E,CAAC,CAAC;AACF,QAAM,oBAAoB,IAAI,kBAAkB;AAAA,IAC5C,YAAY;AAAA,IACZ,qBAAqB;AAAA,EACzB,CAAC;AACD,QAAM,gBAAgB,IAAI,cAAc;AAAA,IACpC;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACD,aAAW,UAAU,WAAW,CAAC,GAAG;AAChC,QAAI,OAAO;AACP,aAAO,UAAU;AAAA,QACb,YAAY;AAAA,QACZ,yBAAyB,cAAc;AAAA,QACvC,8BAA8B,cAAc;AAAA,MAChD,CAAC;AAAA,EACT;AACA,kBAAgB,IAAI,cAAc;AAAA,IAC9B;AAAA,IACA,YAAY;AAAA,IACZ,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,SAAS;AAAA,IACnB;AAAA,EACJ,CAAC;AACD,QAAM,mBAAmB,IAAI,iBAAiB;AAAA,IAC1C,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,eAAe;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,IACA;AAAA,EACJ,CAAC;AACD,qBAAmB,CAAC,aAAa,UAAU;AACvC,QAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AACxB,gBAAY,UAAU;AAAA,MAClB,MAAM,UAAU;AAAA,MAChB,MAAM;AAAA,QACF,MAAM,OAAO,SAAS;AAAA,QACtB,OAAO,eAAe;AAAA,QACtB,QAAQ,gBAAgB;AAAA,MAC5B;AAAA,IACJ,CAAC,GAAG,UAAU;AACd,sBAAkB,MAAM;AACxB,oBAAgB,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC;AAC3C,UAAM,OAAO,SAAS,UAAU;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,CAAC,MAAM;AAChB,YAAI,mBAAmB,GAAG,MAAM,GAAG;AAC/B,wBAAc,UAAU,CAAC;AAAA,QAC7B;AACA,YAAI,uBAAuB,GAAG,MAAM,GAAG;AACnC,4BAAkB,iBAAiB,CAAC;AAAA,QACxC;AACA,YAAI,cAAc,CAAC,GAAG;AAClB,2BAAiB,cAAc,EAAE,YAAY,QAAQ;AAAA,QACzD;AAAA,MACJ;AAAA,MACA,cAAc,CAAC,QAAQ,YAAY;AAC/B,sBAAc,aAAa,QAAQ,OAAO;AAC1C,yBAAiB,oBAAoB,MAAM;AAAA,MAC/C;AAAA,MACA,kBAAkB,CAAC,QAAQ,YAAY;AACnC,0BAAkB,kBAAkB,QAAQ,OAAO;AAAA,MACvD;AAAA,MACA;AAAA,IACJ,CAAC;AACD,QAAI,CAAC,MAAM;AACP,aAAO,QAAQ,KAAK,iCAAiC;AAAA,IACzD;AACA,gBAAY,UAAU;AAAA,MAClB,MAAM,UAAU;AAAA,MAChB,MAAM;AAAA,QACF;AAAA,QACA,eAAe;AAAA,UACX,MAAM,OAAO,gBAAgB,SACvB,OAAO,eACN,aAAa,QAAQ,aAAa,SAAS,SAAS,SAAS,gBAAgB,iBAC1E,MAAM,KAAK,aAAa,QAAQ,aAAa,SAAS,SAAS,SAAS,UAAU,QAAQ,OAAO,SAAS,SAAS,GAAG,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,iBAC7K,KAAK,aAAa,QAAQ,aAAa,SAAS,SAAS,SAAS,UAAU,QAAQ,OAAO,SAAS,SAAS,GAAG,eAClH;AAAA,UACR,KAAK,OAAO,gBAAgB,SACtB,OAAO,eACN,aAAa,QAAQ,aAAa,SAAS,SAAS,SAAS,gBAAgB,gBAC1E,MAAM,KAAK,aAAa,QAAQ,aAAa,SAAS,SAAS,SAAS,UAAU,QAAQ,OAAO,SAAS,SAAS,GAAG,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,gBAC7K,KAAK,aAAa,QAAQ,aAAa,SAAS,SAAS,SAAS,UAAU,QAAQ,OAAO,SAAS,SAAS,GAAG,cAClH;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ,CAAC,CAAC;AACF,oBAAgB,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC;AAC7C,QAAI,SAAS,sBAAsB,SAAS,mBAAmB,SAAS;AACpE,wBAAkB,iBAAiB,SAAS,oBAAoB,OAAO,MAAM,QAAQ,CAAC;AAAA,EAC9F;AACA,MAAI;AACA,UAAM,WAAW,CAAC;AAClB,aAAS,KAAK,GAAG,oBAAoB,MAAM;AACvC,kBAAY,UAAU;AAAA,QAClB,MAAM,UAAU;AAAA,QAChB,MAAM,CAAC;AAAA,MACX,CAAC,CAAC;AAAA,IACN,CAAC,CAAC;AACF,UAAM,UAAU,CAAC,QAAQ;AACrB,UAAI;AACJ,aAAO,cAAc;AAAA,QACjB,YAAY;AAAA,QACZ,aAAa,CAAC,WAAW,WAAW,YAAY,UAAU;AAAA,UACtD,MAAM,UAAU;AAAA,UAChB,MAAM;AAAA,YACF;AAAA,YACA;AAAA,UACJ;AAAA,QACJ,CAAC,CAAC;AAAA,QACF,oBAAoB,CAAC,MAAM,YAAY,UAAU;AAAA,UAC7C,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,iBAAiB,GAAG,CAAC;AAAA,QACzE,CAAC,CAAC;AAAA,QACF,UAAU;AAAA,QACV,kBAAkB,CAAC,MAAM,YAAY,UAAU;AAAA,UAC3C,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,eAAe,GAAG,CAAC;AAAA,QACvE,CAAC,CAAC;AAAA,QACF,SAAS,CAAC,MAAM,YAAY,UAAU;AAAA,UAClC,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,MAAM,GAAG,CAAC;AAAA,QAC9D,CAAC,CAAC;AAAA,QACF,oBAAoB,CAAC,MAAM,YAAY,UAAU;AAAA,UAC7C,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,iBAAiB,GAAG,CAAC;AAAA,QACzE,CAAC,CAAC;AAAA,QACF,kBAAkB,CAAC,MAAM,YAAY,UAAU;AAAA,UAC3C,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,eAAe,GAAG,CAAC;AAAA,QACvE,CAAC,CAAC;AAAA,QACF,oBAAoB,CAAC,MAAM,YAAY,UAAU;AAAA,UAC7C,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,iBAAiB,GAAG,CAAC;AAAA,QACzE,CAAC,CAAC;AAAA,QACF,kBAAkB;AAAA,QAClB,QAAQ,CAAC,MAAM,YAAY,UAAU;AAAA,UACjC,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,KAAK,GAAG,CAAC;AAAA,QAC7D,CAAC,CAAC;AAAA,QACF,aAAa,CAAC,MAAM;AAChB,sBAAY,UAAU;AAAA,YAClB,MAAM,UAAU;AAAA,YAChB,MAAM,OAAO,OAAO,EAAE,QAAQ,kBAAkB,UAAU,GAAG,CAAC;AAAA,UAClE,CAAC,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,KAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,OAAO,CAAC,MAAM,EAAE,QAAQ,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,IAAI,CAAC,OAAO;AAAA,UACrJ,UAAU,EAAE;AAAA,UACZ,SAAS,EAAE;AAAA,UACX,UAAU,CAAC,YAAY,YAAY,UAAU;AAAA,YACzC,MAAM,UAAU;AAAA,YAChB,MAAM;AAAA,cACF,QAAQ,EAAE;AAAA,cACV;AAAA,YACJ;AAAA,UACJ,CAAC,CAAC;AAAA,QACN,EAAE,MAAM,CAAC;AAAA,MACb,GAAG,KAAK;AAAA,IACZ;AACA,kBAAc,gBAAgB,CAAC,aAAa;AACxC,eAAS,KAAK,QAAQ,SAAS,eAAe,CAAC;AAAA,IACnD,CAAC;AACD,UAAM,OAAO,MAAM;AACf,uBAAiB;AACjB,eAAS,KAAK,QAAQ,QAAQ,CAAC;AAC/B,kBAAY;AAAA,IAChB;AACA,QAAI,SAAS,eAAe,iBACxB,SAAS,eAAe,YAAY;AACpC,WAAK;AAAA,IACT,OACK;AACD,eAAS,KAAK,GAAG,QAAQ,MAAM;AAC3B,oBAAY,UAAU;AAAA,UAClB,MAAM,UAAU;AAAA,UAChB,MAAM,CAAC;AAAA,QACX,CAAC,CAAC;AACF,aAAK;AAAA,MACT,GAAG,MAAM,CAAC;AAAA,IACd;AACA,WAAO,MAAM;AACT,eAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,kBAAY;AAAA,IAChB;AAAA,EACJ,SACO,OAAO;AACV,YAAQ,KAAK,KAAK;AAAA,EACtB;AACJ;AACA,OAAO,iBAAiB,CAAC,KAAK,YAAY;AACtC,MAAI,CAAC,WAAW;AACZ,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACnE;AACA,cAAY,UAAU;AAAA,IAClB,MAAM,UAAU;AAAA,IAChB,MAAM;AAAA,MACF;AAAA,MACA;AAAA,IACJ;AAAA,EACJ,CAAC,CAAC;AACN;AACA,OAAO,aAAa,MAAM;AACtB,kBAAgB,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC;AACjD;AACA,OAAO,mBAAmB,CAAC,eAAe;AACtC,MAAI,CAAC,WAAW;AACZ,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACrE;AACA,mBAAiB,UAAU;AAC/B;AACA,OAAO,SAAS;;;ACxXT,IAAM,WAAgD;AAAA,EAC3D,WAAW;AAAA,EACX,YAAY;AAAA;AAAA;AAAA;AAAA,EAIZ,eAAe;AAAA,EACf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,wBAAwB;AAAA,EACxB,OAAO;AACT;AAEO,IAAM,cAAN,cAA0B,MAAM;AAAC;AAExC,IAAM,cAAc;AAEpB,IAAM,kBAAkB;AAEjB,SAAS,eAAe,OAA0C;AA5DzE;AA6DE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,OAAM,IAAI,YAAY,oCAAoC;AACnG,MAAI,CAAC,YAAY,MAAK,WAAM,eAAN,YAAoB,EAAE,GAAG;AAC7C,UAAM,IAAI,YAAY,qEAAgE;AAAA,EACxF;AAEA,QAAM,cAAa,WAAM,eAAN,YAAoB,SAAS;AAChD,MAAI,EAAE,cAAc,KAAK,cAAc,IAAI;AACzC,UAAM,IAAI,YAAY,+CAA+C;AAAA,EACvE;AAEA,QAAM,MAAM,MAAM;AAClB,MAAI,QAAQ,UAAa,EAAE,OAAO,UAAU,GAAG,KAAK,OAAO,KAAK,OAAO,kBAAkB;AACvF,UAAM,IAAI,YAAY,uEAAuE,eAAe,EAAE;AAAA,EAChH;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,YAAY,MAAM;AAAA,IAClB;AAAA,IACA,aAAY,WAAM,cAAN,YAAmB,SAAS,WAAW,QAAQ,QAAQ,EAAE;AAAA;AAAA;AAAA,IAGrE,eAAe,MAAM,kBAAkB,QAAQ,QAAQ;AAAA,EACzD;AACF;;;AC9EO,IAAM,YAAY;AAClB,IAAM,eAAe;AAGrB,IAAM,qBAAqB;AAE3B,IAAM,uBAAuB,IAAI;AAYjC,SAAS,cAAc,MAAe,YAA4C;AACvF,MAAI,OAAO,SAAS,YAAY,CAAC,mBAAmB,KAAK,IAAI,GAAG;AAC9D,WAAO,8DAA8D,KAAK,UAAU,IAAI,CAAC;AAAA,EAC3F;AACA,MAAI,eAAe,UAAa,eAAe,KAAM,QAAO,EAAE,MAAM,YAAY,CAAC,EAAE;AACnF,MAAI,OAAO,eAAe,YAAY,MAAM,QAAQ,UAAU,GAAG;AAC/D,WAAO,mBAAmB,IAAI;AAAA,EAChC;AACA,MAAI;AACJ,MAAI;AACF,iBAAa,KAAK,UAAU,UAAU;AAAA,EACxC,SAAQ;AACN,WAAO,mBAAmB,IAAI;AAAA,EAChC;AACA,MAAI,eAAe,UAAa,WAAW,UAAU,IAAI,sBAAsB;AAC7E,WAAO,mBAAmB,IAAI,YAAY,oBAAoB;AAAA,EAChE;AAIA,SAAO,EAAE,MAAM,YAAY,KAAK,MAAM,UAAU,EAA6B;AAC/E;AAEA,SAAS,WAAW,MAAsB;AACxC,SAAO,OAAO,gBAAgB,aAAa,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE,SAAS,KAAK,SAAS;AACnG;;;AC/CO,SAAS,mBAAmB,OAAuB;AACxD,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,YAAQ,MAAM,WAAW,CAAC;AAC1B,WAAO,KAAK,KAAK,MAAM,QAAU,MAAM;AAAA,EACzC;AACA,SAAO,OAAO;AAChB;AASO,SAAS,YAAY,WAAmB,YAA6B;AAC1E,MAAI,cAAc,EAAG,QAAO;AAC5B,MAAI,cAAc,EAAG,QAAO;AAC5B,SAAO,mBAAmB,SAAS,IAAI;AACzC;;;ACWA,IAAM,uBAAuB;AAW7B,eAAe,aAAa,UAAoB,MAA2C;AACzF,MAAI;AACF,QAAI,OAAO,SAAS,SAAS,WAAY,QAAO;AAChD,UAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,QAAI,MAAM,cAAc,KAAM,QAAO;AACrC,UAAM,OAAO,MAAM;AACnB,WAAO,OAAO,SAAS,YAAY,OAAO,UAAU,IAAI,KAAK,OAAO,OAAO,OAAO;AAAA,EACpF,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAYA,IAAM,6BAA6B,KAAK;AAajC,SAAS,qBAAqB,SAA0B;AAC7D,QAAM,QAAQ,OAAO,gBAAgB,aACjC,IAAI,YAAY,EAAE,OAAO,OAAO,EAAE,SAElC,QAAQ,SAAS;AACrB,SAAO,SAAS;AAClB;AAoBO,IAAM,YAAN,MAAgB;AAAA,EAarB,YACmB,SACA,SACA,QAAwB,CAAC,GAC1C;AAHiB;AACA;AACA;AAfnB,wBAAQ,UAA0B,CAAC;AACnC,wBAAQ,OAAM;AACd,wBAAQ,uBAAsB;AAC9B,wBAAQ,SAAwB;AAChC,wBAAQ;AACR,wBAAQ;AACR,wBAAQ,SAAoB,CAAC;AAC7B,wBAAQ,YAAW;AAEnB;AAAA,wBAAQ,oBAAmB;AAC3B,wBAAQ,mBAAkB;AAtH5B;AA6HI,SAAK,OAAM,aAAQ,eAAR,YAAsB;AAAA,EACnC;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAI,gBAAwB;AAC1B,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,QAAQ,MAAyB;AAC/B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,WAAW,OAAyB;AAClC,SAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,MAAM;AAAA,EACzC;AAAA,EAEA,QAAc;AArJhB;AAsJI,QAAI,KAAK,MAAO;AAChB,SAAK,QAAQ,YAAY,MAAM,KAAK,KAAK,MAAM,GAAG,KAAK,QAAQ,eAAe;AAE9E,KAAC,gBAAK,OAA4C,UAAjD;AAAA,EACH;AAAA,EAEA,KAAK,QAAsB;AA5J7B;AA6JI,SAAK,QAAQ;AACb,QAAI,KAAK,MAAO,eAAc,KAAK,KAAK;AACxC,SAAK,QAAQ;AACb,SAAK,SAAS,CAAC;AACf,qBAAK,OAAM,cAAX,4BAAuB;AAAA,EACzB;AAAA,EAEA,KAAK,OAA4B;AAC/B,QAAI,KAAK,UAAU,UAAW;AAC9B,SAAK,OAAO,KAAK,KAAK;AACtB,QAAI,KAAK,OAAO,UAAU,KAAK,QAAQ,kBAAmB,MAAK,KAAK,MAAM;AAAA,EAC5E;AAAA,EAEQ,KAAK,QAAiC;AAC5C,WAAO,KAAK,UAAU;AAAA,MACpB,YAAY,KAAK,QAAQ;AAAA,MACzB,WAAW,KAAK,QAAQ;AAAA,MACxB,WAAW,KAAK,QAAQ;AAAA,MACxB,KAAK,KAAK;AAAA,MACV;AAAA,MACA,GAAI,KAAK,cAAc,EAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AAAA,MACrD,GAAI,OAAO,KAAK,KAAK,KAAK,EAAE,SAAS,IAAI,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,IACpE,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAuB;AAvL/B;AAwLI,QAAI,KAAK,UAAU,aAAa,KAAK,YAAY,KAAK,OAAO,WAAW,EAAG;AAE3E,SAAK,WAAW;AAChB,UAAM,SAAS,KAAK;AACpB,SAAK,SAAS,CAAC;AACf,QAAI,SAAS;AAEb,QAAI;AACF,YAAM,QAAQ,KAAK,qBAAqB,KAAK;AAC7C,WAAK,mBAAmB,KAAK;AAG7B,uBAAK,OAAM,kBAAX,4BAA2B,KAAK,MAAM;AACtC,YAAM,UAAU,KAAK,KAAK,MAAM;AAChC,YAAM,WAAW,MAAM,MAAM,GAAG,KAAK,QAAQ,SAAS,qBAAqB;AAAA,QACzE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM;AAAA;AAAA;AAAA,QAGN,aAAa;AAAA,QACb,WAAW,qBAAqB,OAAO;AAAA,MACzC,CAAC;AAED,UAAI,SAAS,IAAI;AACf,cAAM,UAAU,QAAQ,SAAY,MAAM,aAAa,UAAU,KAAK,GAAG;AACzE,YAAI,YAAY,UAAa,KAAK,kBAAkB,sBAAsB;AAGxE,eAAK,mBAAmB;AACxB,eAAK,MAAM;AACX,eAAK,QAAQ,MAAM;AACnB,mBAAS;AACT;AAAA,QACF;AACA,aAAK,kBAAkB;AACvB,aAAK,OAAO;AACZ,aAAK,cAAc;AACnB,aAAK,sBAAsB;AAC3B,yBAAK,OAAM,WAAX,4BAAoB,KAAK,MAAM,GAAG,OAAO;AACzC;AAAA,MACF;AAKA,UAAI,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO,SAAS,WAAW,KAAK;AAC9E,aAAK,KAAK,YAAY,SAAS,MAAM,EAAE;AACvC;AAAA,MACF;AAEA,WAAK,QAAQ,MAAM;AACnB,WAAK,gBAAgB;AAAA,IACvB,SAAQ;AAEN,WAAK,QAAQ,MAAM;AACnB,WAAK,gBAAgB;AAAA,IACvB,UAAE;AACA,WAAK,WAAW;AAChB,UAAI,OAAQ,MAAK,KAAK,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,QAAQ,QAA+B;AAC7C,UAAM,QAAQ,KAAK,QAAQ,oBAAoB;AAC/C,SAAK,SAAS,CAAC,GAAG,QAAQ,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,KAAK;AAAA,EACxD;AAAA,EAEQ,kBAAwB;AAC9B,SAAK,uBAAuB;AAC5B,QAAI,KAAK,uBAAuB,KAAK,QAAQ,wBAAwB;AACnE,WAAK,KAAK,mBAAmB;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAA2B;AAjR7B;AAkRI,QAAI,KAAK,UAAU,aAAa,KAAK,OAAO,WAAW,EAAG,QAAO;AAEjE,UAAM,SAAS,KAAK;AACpB,UAAM,UAAU,KAAK,KAAK,MAAM;AAChC,SAAK,SAAS,CAAC;AAEf,QAAI;AACF,UAAI,OAAO,cAAc,eAAe,OAAO,UAAU,eAAe,YAAY;AAElF,yBAAK,OAAM,kBAAX,4BAA2B,KAAK,MAAM;AACtC,cAAM,OAAO,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACrE,cAAM,SAAS,UAAU,WAAW,GAAG,KAAK,QAAQ,SAAS,qBAAqB,IAAI;AACtF,YAAI,QAAQ;AACV,eAAK,OAAO;AACZ,eAAK,cAAc;AACnB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,SAAQ;AAAA,IAER;AAEA,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AACF;;;AC3SA,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AAEvB,IAAM,UAAU;AAEhB,IAAM,WAAW;AAEjB,IAAM,eAAe;AAUrB,IAAM,oBAAoB,IAAI,KAAK;AAGnC,IAAM,kBAAkB,KAAK,KAAK;AAElC,SAAS,SAAS,QAAQ,IAAY;AACpC,QAAM,QAAQ,IAAI,WAAW,KAAK;AAClC,MAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAC3D,WAAO,gBAAgB,KAAK;AAAA,EAC9B,OAAO;AACL,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK,EAAG,OAAM,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,EAC9E;AACA,SAAO,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC1E;AAGO,SAAS,SAAiB;AAC/B,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,OAAO,WAAW;AAAA,EAC3B;AACA,QAAM,MAAM,SAAS,EAAE,EAAE,MAAM,EAAE;AACjC,MAAI,EAAE,IAAI;AACV,MAAI,EAAE,KAAM,SAAS,IAAI,EAAE,GAAI,EAAE,IAAI,IAAO,GAAK,SAAS,EAAE;AAC5D,QAAM,IAAI,IAAI,KAAK,EAAE;AACrB,SAAO,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAChG;AAcO,SAAS,YAAY,QAAuD;AACjF,QAAM,OAAO,MAAsC;AACjD,QAAI;AAAE,aAAO,OAAO;AAAA,IAAG,SAAQ;AAAE,aAAO;AAAA,IAAW;AAAA,EACrD;AACA,SAAO;AAAA,IACL,KAAK,CAAC,QAAQ;AA9DlB;AA8DoB,UAAI;AAAE,gBAAO,gBAAK,MAAL,mBAAQ,QAAQ,SAAhB,YAAwB;AAAA,MAAM,SAAQ;AAAE,eAAO;AAAA,MAAM;AAAA,IAAE;AAAA,IACpF,KAAK,CAAC,KAAK,UAAU;AA/DzB;AA+D2B,UAAI;AAAE,mBAAK,MAAL,mBAAQ,QAAQ,KAAK;AAAA,MAAQ,SAAQ;AAAA,MAAe;AAAA,IAAE;AAAA,IACnF,QAAQ,CAAC,QAAQ;AAhErB;AAgEuB,UAAI;AAAE,mBAAK,MAAL,mBAAQ,WAAW;AAAA,MAAM,SAAQ;AAAA,MAAe;AAAA,IAAE;AAAA,EAC7E;AACF;AAmBO,SAAS,gBACd,OACA,SACA,MAAc,KAAK,IAAI,GACb;AAzFZ;AA0FE,MAAI,YAAY,MAAM,IAAI,WAAW;AACrC,MAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,SAAS,GAAG;AAC1D,gBAAY,IAAI,SAAS,EAAE,CAAC;AAC5B,UAAM,IAAI,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,aAAa,QAAQ,IAAI,WAAW;AAC1C,QAAM,aAAa,QAAO,aAAQ,IAAI,cAAc,MAA1B,YAA+B,CAAC;AAC1D,QAAM,UAAU,CAAC,cAAc,CAAC,cAAc,MAAM,aAAa;AAEjE,QAAM,YAAY,UAAU,OAAO,IAAI;AACvC,UAAQ,IAAI,aAAa,SAAS;AAClC,UAAQ,IAAI,gBAAgB,OAAO,GAAG,CAAC;AAMvC,QAAM,YAAY,OAAO,QAAQ,IAAI,OAAO,CAAC;AAC7C,QAAM,UAAU,CAAC,WAAW,OAAO,UAAU,SAAS,KAAK,YAAY,IAAI,YAAY;AACvF,UAAQ,IAAI,SAAS,OAAO,OAAO,CAAC;AAIpC,QAAM,cAAc,OAAO,QAAQ,IAAI,QAAQ,CAAC;AAChD,QAAM,YAAY,CAAC,WAAW,OAAO,UAAU,WAAW,KAAK,cAAc,IAAI,cAAc,IAAI;AACnG,UAAQ,IAAI,UAAU,OAAO,SAAS,CAAC;AAEvC,SAAO,EAAE,WAAW,WAAW,cAAc,SAAS,SAAS,UAAU;AAC3E;AAGO,SAAS,cAAc,SAAoD,OAAqB;AACrG,UAAQ,IAAI,UAAU,OAAO,KAAK,CAAC;AACrC;AAGO,SAAS,WAAW,SAAkB,MAAc,KAAK,IAAI,GAAY;AAC9E,QAAM,QAAQ,OAAO,QAAQ,IAAI,YAAY,CAAC;AAC9C,SAAO,OAAO,SAAS,KAAK,KAAK,QAAQ;AAC3C;AAEO,SAAS,cAAc,SAAkB,MAAc,KAAK,IAAI,GAAS;AAC9E,UAAQ,IAAI,cAAc,OAAO,MAAM,iBAAiB,CAAC;AAC3D;AAGO,SAAS,WAAW,SAAoD,MAAoB;AACjG,UAAQ,IAAI,SAAS,OAAO,IAAI,CAAC;AACnC;AAEO,SAAS,aAAa,SAAkB,MAAc,KAAK,IAAI,GAAS;AAC7E,UAAQ,IAAI,gBAAgB,OAAO,GAAG,CAAC;AACzC;;;AChHA,IAAM,mBAAmB;AACzB,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAQ7B,IAAM,qBAAqB;AAEpB,SAAS,eAAe,YAA8C;AAC3E,QAAM,UAA2B,eAAe,UAAU;AAE1D,QAAM,QAAQ,YAAY,MAAM,WAAW,YAAY;AACvD,QAAM,UAAU,YAAY,MAAM,WAAW,cAAc;AAC3D,QAAM,WAAW,gBAAgB,OAAO,OAAO;AAE/C,MAAI,SAAyB;AAC7B,MAAI;AACJ,MAAI,YAAY,SAAS;AAEzB,MAAI,CAAC,YAAY,SAAS,WAAW,QAAQ,UAAU,GAAG;AAExD,WAAO,YAAY,eAAe,SAAS,SAAS;AAAA,EACtD;AAEA,MAAI,WAAW,OAAO,GAAG;AAGvB,QAAI,QAAQ,MAAO,SAAQ,KAAK,kEAAkE;AAClG,WAAO,YAAY,WAAW,SAAS,SAAS;AAAA,EAClD;AAEA,QAAM,YAAY,IAAI;AAAA,IACpB;AAAA,IACA;AAAA,MACE,YAAY,QAAQ;AAAA,MACpB,WAAW,SAAS;AAAA,MACpB,WAAW,SAAS;AAAA,MACpB,YAAY,SAAS;AAAA,IACvB;AAAA,IACA;AAAA,MACE,eAAe,CAAC,SAAS,WAAW,SAAS,IAAI;AAAA,MACjD,WAAW,CAAC,WAAW;AACrB,iBAAS;AACT;AACA,wBAAgB;AAIhB,YAAI,WAAW,eAAgB,eAAc,OAAO;AACpD,YAAI,QAAQ,MAAO,SAAQ,KAAK,kCAAkC,MAAM,EAAE;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,OAAoB;AAAA,IACtC,WAAW,KAAK,IAAI;AAAA,IACpB,KAAK,aAAa;AAAA,IAClB,MAAM,OAAO,cAAc,cAAc,UAAU,WAAW;AAAA,IAC9D,WAAW,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,IACpE,aAAa,OAAO,WAAW,cAAc,OAAO,aAAa;AAAA,IACjE,cAAc,OAAO,WAAW,cAAc,OAAO,cAAc;AAAA,IACnE,UAAU,OAAO,aAAa,cAAc,SAAS,YAAY,SAAY;AAAA;AAAA;AAAA,IAG7E,GAAI,QAAQ,wBAAwB,UAAa,SAAS,YAAY,IAClE,EAAE,YAAY,QAAQ,oBAAoB,IAC1C,CAAC;AAAA,EACP;AAEA,QAAM,eAAsD,CAAC;AAE7D,QAAM,kBAAkB,CAAC,UAA+B;AA1G1D;AA4GI,UAAM,OAAO,MAAM;AACnB,QAAI,MAAM,SAAS,MAAK,6BAAM,YAAW,KAAK,OAAO,KAAK,MAAM,SAAU;AAE1E,UAAM,MAAM,MAAM;AAClB,iBAAa,KAAK,EAAE,GAAG,KAAK,GAAG,IAAG,UAAK,MAAL,YAAU,GAAG,GAAG,IAAI,CAAC;AACvD,WAAO,aAAa,SAAS,KAAK,MAAM,aAAa,CAAC,EAAG,IAAI,qBAAsB,cAAa,MAAM;AAEtG,QAAI,aAAa,UAAU,kBAAkB;AAC3C,YAAM,QAAQ,aAAa,CAAC;AAC5B,YAAM,YAAY,aAAa;AAAA,QAC7B,CAAC,MAAM,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,wBAAwB,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI;AAAA,MACrF;AACA,UAAI,UAAW,WAAU,WAAW,EAAE,cAAc,KAAK,CAAC;AAAA,IAC5D;AAAA,EACF;AAIA,QAAM,UAA+C,CAAC;AACtD,MAAI,WAAW;AACf,MAAI,iBAAiB;AAcrB,QAAM,eAAe,MAAY;AAC/B,QAAI,YAAY,QAAQ,WAAW,EAAG;AACtC,eAAW;AACX,QAAI;AACF,aAAO,QAAQ,SAAS,GAAG;AACzB,cAAM,OAAO,QAAQ,CAAC;AACtB,eAAO,eAAe,KAAK,KAAK,KAAK,OAAO;AAC5C,gBAAQ,MAAM;AAAA,MAChB;AAAA,IACF,SAAQ;AACN,UAAI,CAAC,kBAAkB,WAAW,aAAa;AAC7C,yBAAiB;AACjB,mBAAW,MAAM;AAAE,2BAAiB;AAAO,uBAAa;AAAA,QAAG,GAAG,EAAE;AAAA,MAClE;AAAA,IACF,UAAE;AACA,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,KAAa,YAA2B;AAC1D,QAAI,WAAW,UAAW;AAC1B,QAAI,WAAW,aAAa;AAC1B,UAAI;AACF,eAAO,eAAe,KAAK,OAAO;AAClC;AAAA,MACF,SAAQ;AAAA,MAER;AAAA,IACF;AACA,QAAI,QAAQ,UAAU,oBAAoB;AACxC,UAAI,QAAQ,MAAO,SAAQ,KAAK,uBAAuB,GAAG,4CAA4C;AACtG;AAAA,IACF;AACA,YAAQ,KAAK,EAAE,KAAK,QAAQ,CAAC;AAAA,EAC/B;AAIA,MAAI,UAAU,aAAa;AAW3B,QAAM,iBAAiB,MAAY;AACjC,UAAM,MAAM,aAAa;AACzB,QAAI,CAAC,OAAO,QAAQ,QAAS;AAC7B,cAAU;AACV,iBAAa;AACb,kBAAc,SAAS,SAAS;AAChC,cAAU,WAAW,EAAE,UAAU,CAAC;AAClC,eAAW,cAAc,EAAE,KAAK,OAAO,OAAO,aAAa,cAAc,SAAS,QAAQ,GAAG,CAAC;AAAA,EAChG;AAEA,QAAM,QAAQ,MAAY;AACxB,QAAI,WAAW,eAAe,WAAW,UAAW;AACpD,aAAS;AACT,cAAU,QAAQ,YAAY,CAAC;AAK/B,cAAU,WAAW,EAAE,UAAU,CAAC;AAClC,cAAU,MAAM;AAEhB,oBAAgB,OAAO;AAAA,MACrB,MAAM,CAAC,UAAU;AACf,cAAM,QAAQ;AACd,wBAAgB,KAAK;AACrB,qBAAa,SAAS,MAAM,SAAS;AACrC,kBAAU,KAAK,KAAK;AACpB,qBAAa;AAAA,MACf;AAAA,MACA,eAAe,QAAQ;AAAA,MACvB,eAAe,QAAQ;AAAA,MACvB,YAAY,QAAQ;AAAA;AAAA,MAEpB,kBAAkB,EAAE,UAAU,MAAM,OAAO,MAAM,KAAK,KAAK;AAAA;AAAA,MAE3D,cAAc;AAAA,MACd,cAAc;AAAA,IAChB,CAAC;AAGD,iBAAa;AAEb,yBAAqB;AAAA,EACvB;AAEA,QAAM,uBAAuB,MAAY;AACvC,QAAI,OAAO,WAAW,YAAa;AAInC,WAAO,iBAAiB,YAAY,MAAM;AAAE,gBAAU,gBAAgB;AAAA,IAAG,GAAG,EAAE,SAAS,KAAK,CAAC;AAC7F,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAI,SAAS,oBAAoB,SAAU,WAAU,gBAAgB;AAAA,IACvE,CAAC;AACD,WAAO,iBAAiB,SAAS,MAAM,UAAU,WAAW,EAAE,UAAU,KAAK,CAAC,CAAC;AAC/E,WAAO,iBAAiB,sBAAsB,MAAM,UAAU,WAAW,EAAE,UAAU,KAAK,CAAC,CAAC;AAG5F,UAAMC,SAAQ,CAAC,WAA+C;AAC5D,YAAM,WAAW,QAAQ,MAAM,EAAE,KAAK,OAAO;AAC7C,cAAQ,MAAM,IAAI,SAAS,WAAW,MAAwC;AAC5E,cAAM,SAAS,SAAS,GAAG,IAAI;AAC/B,uBAAe;AACf,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAAA,OAAM,WAAW;AACjB,IAAAA,OAAM,cAAc;AACpB,WAAO,iBAAiB,YAAY,cAAc;AAAA,EACpD;AAEA,MAAI,QAAQ,gBAAgB;AAC1B,aAAS;AAAA,EACX,OAAO;AACL,UAAM;AAAA,EACR;AAEA,SAAO;AAAA,IACL,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM,SAAS;AAAA,IAC1B,SAAS,CAAC,YAAY;AACpB,UAAI,QAAS,OAAM;AAAA,UACd,WAAU,KAAK,mBAAmB;AAAA,IACzC;AAAA,IACA,UAAU,CAAC,WAAW;AACpB,UAAI,CAAC,OAAO,UAAU,CAAC,OAAO,MAAO;AACrC,WAAK,MAAM,GAAG,QAAQ,SAAS,uBAAuB;AAAA,QACpD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,aAAa;AAAA,QACb,MAAM,KAAK,UAAU;AAAA,UACnB,YAAY,QAAQ;AAAA,UACpB,WAAW,SAAS;AAAA,UACpB,GAAG;AAAA,QACL,CAAC;AAAA,MACH,CAAC,EAAE,MAAM,MAAM;AAAA,MAA2D,CAAC;AAAA,IAC7E;AAAA,IACA,OAAO,CAAC,MAAM,eAAe;AAC3B,YAAM,UAAU,cAAc,MAAM,UAAU;AAC9C,UAAI,OAAO,YAAY,UAAU;AAC/B,YAAI,QAAQ,MAAO,SAAQ,KAAK,gCAAgC,OAAO,EAAE;AACzE;AAAA,MACF;AACA,iBAAW,WAAW,OAAO;AAAA,IAC/B;AAAA,IACA,MAAM,MAAM,UAAU,KAAK,iBAAiB;AAAA,IAC5C,OAAO,MAAM,UAAU,MAAM;AAAA,EAC/B;AACF;AAEA,SAAS,eAAmC;AAC1C,MAAI;AACF,WAAO,OAAO,aAAa,cAAc,SAAS,OAAO;AAAA,EAC3D,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,YAAY,QAAwB,WAA0C;AACrF,SAAO;AAAA,IACL,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IAAC;AAAA,IAChB,UAAU,MAAM;AAAA,IAAC;AAAA,IACjB,OAAO,MAAM;AAAA,IAAC;AAAA,IACd,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,OAAO,YAAY;AAAA,IAAC;AAAA,EACtB;AACF;","names":["NodeType","Mirror","chars","mirror","mirror","mirror","parentId","mirror","mirror","_a","mirror","WorkerFactory","decodeBase64","createBase64WorkerFactory","WorkerFactory","createBase64WorkerFactory","createBase64WorkerFactory","patch"]}
|