@syntropysoft/syntropyfront 0.4.5 → 0.4.6
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/NOTICE +1 -1
- package/README.md +3 -3
- package/dist/index.cjs +11 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +11 -7
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/core/breadcrumbs/BreadcrumbStore.js","../src/core/agent/ConfigurationManager.js","../src/core/agent/QueueManager.js","../src/core/retry/RetryManager.js","../src/utils/RobustSerializer.js","../src/core/agent/HttpTransport.js","../src/core/database/DatabaseConfigManager.js","../src/core/database/DatabaseConnectionManager.js","../src/core/database/DatabaseTransactionManager.js","../src/core/database/DatabaseManager.js","../src/core/database/StorageManager.js","../src/core/retry/RetryLogicManager.js","../src/utils/DataMaskingManager.js","../src/core/database/SerializationManager.js","../src/core/persistent/PersistentBufferManager.js","../src/core/agent/Agent.js","../src/utils/Environment.js","../src/interceptors/ClickInterceptor.js","../src/utils/FunctionWrapper.js","../src/interceptors/FetchInterceptor.js","../src/core/context/ContextCollector.js","../src/interceptors/ErrorInterceptor.js","../src/interceptors/Interceptors.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbStore - User action timeline storage\n * Maintains a history of the last user actions.\n * Does not know about Agent or sending; the orchestrator wires onBreadcrumbAdded to decide what to do.\n */\nexport class BreadcrumbStore {\n constructor(maxBreadcrumbs = 25) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n this.breadcrumbs = [];\n /** @type {((crumb: object) => void)|null} Optional callback when a breadcrumb is added (set by orchestrator). */\n this.onBreadcrumbAdded = null;\n }\n\n /**\n * Configures the maximum breadcrumb size\n * @param {number} maxBreadcrumbs - New maximum size\n */\n setMaxBreadcrumbs(maxBreadcrumbs) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n\n // If new size is smaller, remove excess breadcrumbs\n if (this.breadcrumbs.length > this.maxBreadcrumbs) {\n this.breadcrumbs = this.breadcrumbs.slice(-this.maxBreadcrumbs);\n }\n }\n\n /**\n * Gets current maximum size\n * @returns {number} Maximum breadcrumb size\n */\n getMaxBreadcrumbs() {\n return this.maxBreadcrumbs;\n }\n\n /**\n * Adds a breadcrumb to the list\n * @param {Object} crumb - The breadcrumb to add\n * @param {string} crumb.category - Event category (ui, network, error, etc.)\n * @param {string} crumb.message - Descriptive message\n * @param {Object} [crumb.data] - Optional additional data\n */\n add(crumb) {\n const breadcrumb = {\n ...crumb,\n timestamp: new Date().toISOString(),\n };\n\n // Functional limit management\n this.breadcrumbs = [...this.breadcrumbs, breadcrumb].slice(-this.maxBreadcrumbs);\n\n if (this.onBreadcrumbAdded) {\n try {\n this.onBreadcrumbAdded(breadcrumb);\n } catch (error) {\n console.warn('SyntropyFront: Error in onBreadcrumbAdded:', error);\n }\n }\n }\n\n /**\n * Returns all breadcrumbs\n * @returns {Array} List of all breadcrumbs\n */\n getAll() {\n return [...this.breadcrumbs];\n }\n\n /**\n * Clears all breadcrumbs\n */\n clear() {\n this.breadcrumbs = [];\n }\n\n /**\n * Gets current breadcrumb count\n * @returns {number} Breadcrumb count\n */\n count() {\n return this.breadcrumbs.length;\n }\n\n /**\n * Gets breadcrumbs by category\n * @param {string} category - Category to filter\n * @returns {Array} Breadcrumbs of the specified category\n */\n getByCategory(category) {\n return this.breadcrumbs.filter(b => b.category === category);\n }\n}\n\n// Singleton instance\nexport const breadcrumbStore = new BreadcrumbStore();","/**\n * ConfigurationManager - Handles Agent configuration\n * Single Responsibility: Manage configuration and validation\n */\nexport class ConfigurationManager {\n constructor() {\n this.endpoint = null;\n this.headers = {\n 'Content-Type': 'application/json'\n };\n this.batchSize = 10;\n this.batchTimeout = null;\n this.isEnabled = false;\n this.sendBreadcrumbs = false;\n this.encrypt = null;\n this.usePersistentBuffer = false;\n this.maxRetries = 5;\n this.baseDelay = 1000;\n this.maxDelay = 30000;\n this.samplingRate = 1.0; // 100% by default\n }\n\n /**\n * Configures the manager\n * @param {Object} config - Configuration\n */\n configure(config) {\n this.endpoint = config.endpoint;\n this.headers = { ...this.headers, ...config.headers };\n this.batchSize = config.batchSize || this.batchSize;\n this.batchTimeout = config.batchTimeout;\n this.isEnabled = !!config.endpoint;\n this.encrypt = config.encrypt || null;\n this.usePersistentBuffer = config.usePersistentBuffer === true;\n this.maxRetries = config.maxRetries || this.maxRetries;\n this.samplingRate = typeof config.samplingRate === 'number' ? config.samplingRate : this.samplingRate;\n\n // Simple logic: if batchTimeout exists = send breadcrumbs, else = errors only\n this.sendBreadcrumbs = !!config.batchTimeout;\n }\n\n /**\n * Checks if the agent is enabled\n */\n isAgentEnabled() {\n return this.isEnabled;\n }\n\n /**\n * Checks if it should send breadcrumbs\n */\n shouldSendBreadcrumbs() {\n return this.sendBreadcrumbs;\n }\n\n /**\n * Gets the current configuration\n */\n getConfig() {\n return {\n endpoint: this.endpoint,\n headers: this.headers,\n batchSize: this.batchSize,\n batchTimeout: this.batchTimeout,\n isEnabled: this.isEnabled,\n sendBreadcrumbs: this.sendBreadcrumbs,\n encrypt: this.encrypt,\n usePersistentBuffer: this.usePersistentBuffer,\n maxRetries: this.maxRetries,\n baseDelay: this.baseDelay,\n maxDelay: this.maxDelay,\n samplingRate: this.samplingRate\n };\n }\n}\n","/**\n * QueueManager - Send queue and batching.\n * Contract: add(item) enqueues or triggers flush; flush(cb) passes items to cb and clears queue; getSize/isEmpty/getAll are read-only.\n */\nexport class QueueManager {\n /** @param {{ batchSize: number, batchTimeout: number|null }} configManager */\n constructor(configManager) {\n this.config = configManager;\n this.queue = [];\n this.batchTimer = null;\n this.flushCallback = null;\n }\n\n /**\n * Adds an item; may trigger immediate or scheduled flush.\n * @param {Object} item - Item to enqueue (non-null)\n */\n add(item) {\n // Guard: Avoid null items\n if (!item) return;\n\n this.queue.push(item);\n\n // Guard: Immediate flush if batchSize is reached\n if (this.queue.length >= this.config.batchSize) {\n return this.flush(this.flushCallback);\n }\n\n // Guard: Only set Timer if one doesn't exist and we have a timeout configured\n if (!this.config.batchTimeout || this.batchTimer) return;\n\n this.batchTimer = setTimeout(() => {\n this.flush(this.flushCallback);\n }, this.config.batchTimeout);\n }\n\n /** @returns {Array<Object>} Copy of the queue */\n getAll() {\n return [...this.queue];\n }\n\n /** Clears the queue and cancels the timer. */\n clear() {\n this.queue = [];\n this.clearTimer();\n }\n\n /** Cancels the scheduled flush timer. */\n clearTimer() {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = null;\n }\n }\n\n /** @returns {number} Queue length */\n getSize() {\n return this.queue.length;\n }\n\n /** @returns {boolean} */\n isEmpty() {\n return this.queue.length === 0;\n }\n\n /**\n * Sends current items to the callback and clears the queue.\n * @param {(items: Array<Object>) => Promise<void>|void} flushCallback\n * @returns {Promise<void>}\n */\n async flush(flushCallback) {\n if (this.queue.length === 0) return;\n\n const itemsToSend = [...this.queue];\n this.queue = [];\n this.clearTimer();\n\n if (flushCallback) {\n await flushCallback(itemsToSend);\n }\n }\n}\n","/**\n * RetryManager - Retries with exponential backoff.\n * Contract: addToRetryQueue enqueues and schedules; processRetryQueue(sendCb, removeCb) processes ready items.\n */\nexport class RetryManager {\n /** @param {{ baseDelay: number, maxDelay: number, maxRetries: number }} configManager */\n constructor(configManager) {\n this.config = configManager;\n this.retryQueue = [];\n this.retryTimer = null;\n }\n\n /**\n * Enqueues items for retry (delay = min(baseDelay*2^(retryCount-1), maxDelay)).\n * @param {Array<Object>} items\n * @param {number} [retryCount=1]\n * @param {number|null} [persistentId=null]\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n // Guard: Avoid empty items\n if (!items || items.length === 0) return;\n\n const delay = Math.min(this.config.baseDelay * Math.pow(2, retryCount - 1), this.config.maxDelay);\n\n this.retryQueue.push({\n items,\n retryCount,\n persistentId,\n nextRetry: Date.now() + delay\n });\n\n this.scheduleRetry();\n }\n\n /**\n * Processes items with nextRetry <= now; calls sendCallback and removePersistentCallback on success.\n * @param {(items: Array<Object>) => Promise<void>} sendCallback\n * @param {(id: number) => Promise<void>} removePersistentCallback\n * @returns {Promise<void>}\n */\n async processRetryQueue(sendCallback, removePersistentCallback) {\n this.retryTimer = null;\n if (this.retryQueue.length === 0) return;\n\n const now = Date.now();\n const itemsToRetry = this.retryQueue.filter(item => item.nextRetry <= now);\n\n for (const item of itemsToRetry) {\n await this.handleRetryItem(item, sendCallback, removePersistentCallback);\n }\n\n // Schedule next retry if items remain (Functional)\n if (this.retryQueue.length > 0) {\n this.scheduleRetry();\n }\n }\n\n /**\n * Schedules the next retry (Guard Clause style)\n */\n scheduleRetry() {\n // Guard: Avoid multiple simultaneous timers\n if (this.retryTimer) return;\n\n // Functional: Find the first item that needs a retry\n const nextItem = this.retryQueue.find(item => item.nextRetry <= Date.now());\n if (!nextItem) return;\n\n // Guard: Calculate delay and schedule\n const delay = Math.max(0, nextItem.nextRetry - Date.now());\n this.retryTimer = setTimeout(() => {\n this.processRetryQueue(this.sendCallback, this.removePersistentCallback);\n }, delay);\n }\n\n /**\n * Handles an individual retry item (SOLID: Single Responsibility)\n * @private\n */\n async handleRetryItem(item, sendCallback, removePersistentCallback) {\n try {\n if (sendCallback) await sendCallback(item.items);\n\n // Success: Clear state\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n if (item.persistentId && removePersistentCallback) {\n await removePersistentCallback(item.persistentId);\n }\n console.log(`SyntropyFront: Successful retry (${item.retryCount})`);\n } catch (error) {\n this.handleRetryFailure(item, error);\n }\n }\n\n /**\n * Manages a retry failure\n * @private\n */\n handleRetryFailure(item, error) {\n console.warn(`SyntropyFront: Retry ${item.retryCount} failed:`, error);\n\n // Guard: Maximum retries reached\n if (item.retryCount >= this.config.maxRetries) {\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n console.error('SyntropyFront: Item exceeded maximum retries, data lost');\n return;\n }\n\n // Increment and reschedule\n item.retryCount++;\n item.nextRetry = Date.now() + Math.min(\n this.config.baseDelay * Math.pow(2, item.retryCount - 1),\n this.config.maxDelay\n );\n }\n\n /**\n * Clears the retry queue\n */\n clear() {\n this.retryQueue = [];\n this.clearTimer();\n }\n\n /**\n * Clears the timer\n */\n clearTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n\n /**\n * Gets the retry queue size\n */\n getSize() {\n return this.retryQueue.length;\n }\n\n /**\n * Checks if the retry queue is empty\n */\n isEmpty() {\n return this.retryQueue.length === 0;\n }\n}\n","/**\n * Pure type-specific fragments: serialization/deserialization without state.\n * Testable in isolation; state (circularRefs) is handled by RobustSerializer.\n */\n\nconst MAX_STRING_SNIPPET_LENGTH = 200;\n\nexport const serializedShapeOfDate = (date) => ({\n __type: 'Date',\n value: date.toISOString()\n});\n\nexport const serializedShapeOfError = (err, recurse) => ({\n __type: 'Error',\n name: err.name,\n message: err.message,\n stack: err.stack,\n cause: err.cause ? recurse(err.cause) : undefined\n});\n\nexport const serializedShapeOfRegExp = (re) => ({\n __type: 'RegExp',\n source: re.source,\n flags: re.flags\n});\n\nexport const serializedShapeOfFunction = (fn) => ({\n __type: 'Function',\n name: fn.name || 'anonymous',\n length: fn.length,\n toString: `${fn.toString().substring(0, MAX_STRING_SNIPPET_LENGTH)}...`\n});\n\nexport const serializedShapeOfUnknown = (obj) => ({\n __type: 'Unknown',\n constructor: obj.constructor ? obj.constructor.name : 'Unknown',\n toString: `${String(obj).substring(0, MAX_STRING_SNIPPET_LENGTH)}...`\n});\n\nexport const restoreDate = (obj) => new Date(obj.value);\nexport const restoreError = (obj, recurse) => {\n const err = new Error(obj.message);\n err.name = obj.name;\n err.stack = obj.stack;\n if (obj.cause) err.cause = recurse(obj.cause);\n return err;\n};\nexport const restoreRegExp = (obj) => new RegExp(obj.source, obj.flags);\nexport const restoreFunction = (obj) => `[Function: ${obj.name}]`;\n\n/**\n * RobustSerializer - Robust serialization with circular references.\n * Composes pure type-specific fragments; state (seen, circularRefs) only in arrays/objects.\n */\nexport class RobustSerializer {\n constructor() {\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n }\n\n serialize(obj) {\n try {\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n return JSON.stringify(this.makeSerializable(obj));\n } catch (error) {\n console.error('SyntropyFront: Error in robust serialization:', error);\n return JSON.stringify({\n __serializationError: true,\n error: error.message,\n originalType: typeof obj,\n isObject: obj !== null && typeof obj === 'object',\n timestamp: new Date().toISOString()\n });\n }\n }\n\n _serializeKnownType(obj, path) {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') return obj;\n if (obj instanceof Date) return serializedShapeOfDate(obj);\n if (obj instanceof Error) {\n return serializedShapeOfError(obj, (x) => this.makeSerializable(x, `${path}.cause`));\n }\n if (obj instanceof RegExp) return serializedShapeOfRegExp(obj);\n if (typeof obj === 'function') return serializedShapeOfFunction(obj);\n return undefined;\n }\n\n makeSerializable(obj, path = '') {\n if (obj === null || obj === undefined) return obj;\n const known = this._serializeKnownType(obj, path);\n if (known !== undefined) return known;\n if (Array.isArray(obj)) return this._serializeArray(obj, path);\n if (typeof obj === 'object') return this._serializeObject(obj, path);\n return serializedShapeOfUnknown(obj);\n }\n\n _serializeArray(obj, path) {\n if (this.seen.has(obj)) return { __circular: true, refId: this.circularRefs.get(obj) };\n this.seen.add(obj);\n this.circularRefs.set(obj, `ref_${++this.refCounter}`);\n return obj.map((item, i) => this.makeSerializable(item, `${path}[${i}]`));\n }\n\n _serializeObjectKey(result, obj, key, path) {\n try {\n result[key] = this.makeSerializable(obj[key], `${path}.${key}`);\n } catch (error) {\n result[key] = {\n __serializationError: true,\n error: error.message,\n propertyName: key\n };\n }\n }\n\n _serializeObjectSymbols(obj, path, result) {\n if (!Object.getOwnPropertySymbols) return;\n const symbols = Object.getOwnPropertySymbols(obj);\n for (const symbol of symbols) {\n const symKey = `__symbol_${symbol.description || 'anonymous'}`;\n try {\n result[symKey] = this.makeSerializable(obj[symbol], `${path}[Symbol]`);\n } catch (error) {\n result[symKey] = {\n __serializationError: true,\n error: error.message,\n symbolName: symbol.description || 'anonymous'\n };\n }\n }\n }\n\n _serializeObject(obj, path) {\n if (this.seen.has(obj)) return { __circular: true, refId: this.circularRefs.get(obj) };\n this.seen.add(obj);\n this.circularRefs.set(obj, `ref_${++this.refCounter}`);\n const result = {};\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n this._serializeObjectKey(result, obj, key, path);\n }\n this._serializeObjectSymbols(obj, path, result);\n return result;\n }\n\n /**\n * Deserializes a serialized object with circular references\n * @param {string} jsonString - JSON string to deserialize\n * @returns {any} Deserialized object\n */\n deserialize(jsonString) {\n try {\n const parsed = JSON.parse(jsonString);\n return this.restoreCircularRefs(parsed);\n } catch (error) {\n console.error('SyntropyFront: Error in deserialization:', error);\n return null;\n }\n }\n\n _restoreKnownType(obj, refs) {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') return obj;\n if (obj.__type === 'Date') return restoreDate(obj);\n if (obj.__type === 'Error') return restoreError(obj, (x) => this.restoreCircularRefs(x, refs));\n if (obj.__type === 'RegExp') return restoreRegExp(obj);\n if (obj.__type === 'Function') return restoreFunction(obj);\n return undefined;\n }\n\n restoreCircularRefs(obj, refs = new Map()) {\n const known = this._restoreKnownType(obj, refs);\n if (known !== undefined) return known;\n if (Array.isArray(obj)) return this._restoreArray(obj, refs);\n if (typeof obj === 'object') return this._restoreObject(obj, refs);\n return obj;\n }\n\n _restoreArray(obj, refs) {\n const result = [];\n refs.set(obj, result);\n for (let i = 0; i < obj.length; i++) {\n if (obj[i]?.__circular) {\n result[i] = refs.has(obj[i].refId) ? refs.get(obj[i].refId) : null;\n } else {\n result[i] = this.restoreCircularRefs(obj[i], refs);\n }\n }\n return result;\n }\n\n _restoreObject(obj, refs) {\n const result = {};\n refs.set(obj, result);\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key) || key.startsWith('__')) continue;\n const value = obj[key];\n if (value?.__circular) {\n result[key] = refs.has(value.refId) ? refs.get(value.refId) : null;\n } else {\n result[key] = this.restoreCircularRefs(value, refs);\n }\n }\n return result;\n }\n\n /**\n * Safely serializes for logging (simplified version)\n * @param {any} obj - Object to serialize\n * @returns {string} Safe JSON string for logs\n */\n serializeForLogging(obj) {\n try {\n return this.serialize(obj);\n } catch (error) {\n return JSON.stringify({\n __logError: true,\n message: 'Error serializing for logging',\n originalError: error.message,\n timestamp: new Date().toISOString()\n });\n }\n }\n}\n\n// Singleton instance\nexport const robustSerializer = new RobustSerializer();\n","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * HttpTransport - HTTP send to the backend.\n * Contract: send(items) serializes and POSTs; applyEncryption(data) applies config.encrypt if present; isConfigured() by endpoint.\n */\nexport class HttpTransport {\n /** @param {{ endpoint: string|null, headers: Object, encrypt?: function }} configManager */\n constructor(configManager) {\n this.config = configManager;\n }\n\n /**\n * Serializes items, applies encrypt if configured, POSTs to endpoint.\n * @param {Array<Object>} items - Items to send\n * @returns {Promise<Object>} response.json()\n * @throws {Error} If HTTP !ok or network failure\n */\n async send(items) {\n const payload = {\n timestamp: new Date().toISOString(),\n items\n };\n\n // ✅ ROBUST SERIALIZATION: Use serializer that handles circular references\n let serializedPayload;\n try {\n serializedPayload = robustSerializer.serialize(payload);\n } catch (error) {\n console.error('SyntropyFront: Error in payload serialization:', error);\n\n // Fallback: attempt basic serialization with error info\n serializedPayload = JSON.stringify({\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n itemsCount: items.length,\n fallbackData: 'Serialization failed, data not sent'\n });\n }\n\n const response = await fetch(this.config.endpoint, {\n method: 'POST',\n headers: this.config.headers,\n body: serializedPayload\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Applies encryption if configured.\n * @param {*} data - Data to encrypt\n * @returns {*} Encrypted data or unchanged\n */\n applyEncryption(data) {\n if (this.config.encrypt) {\n return this.config.encrypt(data);\n }\n return data;\n }\n\n /** @returns {boolean} */\n isConfigured() {\n return !!this.config.endpoint;\n }\n}\n","/**\n * DatabaseConfigManager - Handles IndexedDB configuration\n * Single responsibility: Validate and manage database configuration\n */\nexport class DatabaseConfigManager {\n constructor(dbName, dbVersion, storeName) {\n this.dbName = dbName;\n this.dbVersion = dbVersion;\n this.storeName = storeName;\n }\n\n /**\n * Validates that the configuration is correct\n * @returns {Object} Validation result\n */\n validateConfig() {\n const validationResult = {\n isValid: true,\n errors: [],\n timestamp: new Date().toISOString()\n };\n\n if (!this.dbName || typeof this.dbName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('dbName must be a non-empty string');\n }\n\n if (!this.dbVersion || typeof this.dbVersion !== 'number' || this.dbVersion < 1) {\n validationResult.isValid = false;\n validationResult.errors.push('dbVersion must be a number greater than 0');\n }\n\n if (!this.storeName || typeof this.storeName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('storeName must be a non-empty string');\n }\n\n return validationResult;\n }\n\n /**\n * Checks if IndexedDB is available in the environment\n * @returns {Object} Availability result\n */\n checkIndexedDBAvailability() {\n const availabilityResult = {\n isAvailable: false,\n reason: null,\n timestamp: new Date().toISOString()\n };\n\n if (typeof window === 'undefined') {\n availabilityResult.reason = 'Not in a browser environment';\n return availabilityResult;\n }\n\n if (!window.indexedDB) {\n availabilityResult.reason = 'IndexedDB is not available in this browser';\n return availabilityResult;\n }\n\n availabilityResult.isAvailable = true;\n return availabilityResult;\n }\n\n /**\n * Returns the current configuration\n * @returns {Object} Configuration\n */\n getConfig() {\n return {\n dbName: this.dbName,\n dbVersion: this.dbVersion,\n storeName: this.storeName\n };\n }\n\n /**\n * Returns the object store configuration\n * @returns {Object} Store configuration\n */\n getStoreConfig() {\n return {\n keyPath: 'id',\n autoIncrement: true\n };\n }\n} ","/**\n * DatabaseConnectionManager - Handles IndexedDB connection.\n * Single responsibility: Manage opening and closing of connections. Uses guard clauses (return early).\n */\nexport class DatabaseConnectionManager {\n constructor(configManager) {\n this.configManager = configManager;\n this.db = null;\n this.isAvailable = false;\n }\n\n /**\n * Initializes the connection to IndexedDB\n * @returns {Promise<Object>} Init result\n */\n async init() {\n // Guard: validate configuration\n const configValidation = this.configManager.validateConfig();\n if (!configValidation.isValid) {\n return {\n success: false,\n error: `Invalid configuration: ${configValidation.errors.join(', ')}`,\n timestamp: new Date().toISOString()\n };\n }\n\n const availabilityCheck = this.configManager.checkIndexedDBAvailability();\n if (!availabilityCheck.isAvailable) {\n return {\n success: false,\n error: availabilityCheck.reason,\n timestamp: new Date().toISOString()\n };\n }\n\n try {\n const connectionResult = await this.openConnection();\n if (!connectionResult.success) {\n return {\n success: false,\n error: connectionResult.error,\n timestamp: new Date().toISOString()\n };\n }\n\n this.db = connectionResult.db;\n this.isAvailable = true;\n\n return { success: true, error: null, timestamp: new Date().toISOString() };\n } catch (error) {\n return {\n success: false,\n error: `Unexpected error: ${error.message}`,\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Opens the connection to IndexedDB\n */\n openConnection() {\n return new Promise((resolve) => {\n const config = this.configManager.getConfig();\n const request = indexedDB.open(config.dbName, config.dbVersion);\n\n request.onerror = () => {\n resolve({\n success: false,\n error: 'Error opening IndexedDB',\n db: null\n });\n };\n\n request.onupgradeneeded = (event) => {\n const db = event.target.result;\n const storeConfig = this.configManager.getStoreConfig();\n\n if (!db.objectStoreNames.contains(config.storeName)) {\n db.createObjectStore(config.storeName, storeConfig);\n }\n };\n\n request.onsuccess = () => {\n resolve({\n success: true,\n error: null,\n db: request.result\n });\n };\n });\n }\n\n /**\n * Closes the database connection\n */\n close() {\n // Guard: no active connection\n if (!this.db) {\n return { success: false, error: 'No active connection to close', timestamp: new Date().toISOString() };\n }\n\n try {\n this.db.close();\n this.db = null;\n this.isAvailable = false;\n return { success: true, error: null, timestamp: new Date().toISOString() };\n } catch (error) {\n return { success: false, error: `Error closing connection: ${error.message}`, timestamp: new Date().toISOString() };\n }\n }\n\n /**\n * Returns whether the database is available\n */\n isDatabaseAvailable() {\n return this.isAvailable && this.db !== null;\n }\n\n /**\n * Returns the database instance\n */\n getDatabase() {\n return this.isDatabaseAvailable() ? this.db : null;\n }\n}","/**\n * DatabaseTransactionManager - Handles IndexedDB transactions\n * Single responsibility: Manage read and write transactions\n */\nexport class DatabaseTransactionManager {\n constructor(connectionManager, configManager) {\n this.connectionManager = connectionManager;\n this.configManager = configManager;\n }\n\n /**\n * Returns a read transaction\n * @returns {IDBTransaction} Read transaction\n * @throws {Error} If the database is not available\n */\n getReadTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readonly');\n }\n\n /**\n * Returns a write transaction\n * @returns {IDBTransaction} Write transaction\n * @throws {Error} If the database is not available\n */\n getWriteTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readwrite');\n }\n\n /**\n * Returns the object store for a transaction\n * @param {IDBTransaction} transaction - Active transaction\n * @returns {IDBObjectStore} Object store\n */\n getObjectStore(transaction) {\n const config = this.configManager.getConfig();\n return transaction.objectStore(config.storeName);\n }\n\n /**\n * Executes a read operation safely\n * @param {Function} operation - Operation to execute\n * @returns {Promise<Object>} Operation result\n */\n async executeReadOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getReadTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error in read operation: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Executes a write operation safely\n * @param {Function} operation - Operation to execute\n * @returns {Promise<Object>} Operation result\n */\n async executeWriteOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getWriteTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error in write operation: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Ensures the database is available\n * @throws {Error} If the database is not available\n */\n ensureDatabaseAvailable() {\n if (!this.connectionManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Returns transaction status information\n * @returns {Object} Transaction status\n */\n getTransactionStatus() {\n return {\n isDatabaseAvailable: this.connectionManager.isDatabaseAvailable(),\n storeName: this.configManager.getConfig().storeName,\n timestamp: new Date().toISOString()\n };\n }\n} ","import { DatabaseConfigManager } from './DatabaseConfigManager.js';\nimport { DatabaseConnectionManager } from './DatabaseConnectionManager.js';\nimport { DatabaseTransactionManager } from './DatabaseTransactionManager.js';\n\n/**\n * DatabaseManager - Coordinates IndexedDB access.\n * Single responsibility: Coordinate specialized managers. Uses guard clauses.\n */\nexport class DatabaseManager {\n constructor(dbName, dbVersion, storeName) {\n this.configManager = new DatabaseConfigManager(dbName, dbVersion, storeName);\n this.connectionManager = new DatabaseConnectionManager(this.configManager);\n this.transactionManager = new DatabaseTransactionManager(this.connectionManager, this.configManager);\n }\n\n /**\n * Initializes the connection to IndexedDB\n */\n async init() {\n const initResult = await this.connectionManager.init();\n\n if (!initResult.success) {\n console.warn('SyntropyFront: Error initializing database:', initResult.error);\n return false;\n }\n\n console.log('SyntropyFront: Database initialized');\n return true;\n }\n\n /**\n * Returns a read transaction\n */\n getReadTransaction() {\n return this.transactionManager.getReadTransaction();\n }\n\n /**\n * Returns a write transaction\n */\n getWriteTransaction() {\n return this.transactionManager.getWriteTransaction();\n }\n\n /**\n * Closes the database connection\n */\n close() {\n const closeResult = this.connectionManager.close();\n\n if (!closeResult.success) {\n console.warn('SyntropyFront: Error closing database:', closeResult.error);\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns whether the database is available\n */\n isDatabaseAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n\n // ===== Compatibility properties =====\n\n /**\n * @deprecated Usar configManager.getConfig().dbName\n */\n get dbName() {\n return this.configManager.dbName;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().dbVersion\n */\n get dbVersion() {\n return this.configManager.dbVersion;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().storeName\n */\n get storeName() {\n return this.configManager.storeName;\n }\n\n /**\n * @deprecated Usar connectionManager.getDatabase()\n */\n get db() {\n return this.connectionManager.getDatabase();\n }\n\n /**\n * @deprecated Usar connectionManager.isDatabaseAvailable()\n */\n get isAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n}\n","/**\n * StorageManager - Handles IndexedDB CRUD operations\n * Single responsibility: Manage storage and retrieval operations\n */\nexport class StorageManager {\n constructor(databaseManager, serializationManager) {\n this.databaseManager = databaseManager;\n this.serializationManager = serializationManager;\n }\n\n /**\n * Saves items to storage\n * @param {Array} items - Items to save\n * @returns {Promise<number>} Saved item ID\n */\n async save(items) {\n this.ensureDatabaseAvailable();\n\n const serializationResult = this.serializationManager.serialize(items);\n const serializedData = this.serializationManager.getData(serializationResult, '[]');\n\n const item = {\n items: serializedData,\n timestamp: new Date().toISOString(),\n retryCount: 0,\n serializationError: serializationResult.error\n };\n\n return this.executeWriteOperation(store => store.add(item));\n }\n\n /**\n * Retrieves all items from storage\n * @returns {Promise<Array>} Deserialized items\n */\n async retrieve() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return [];\n }\n\n const rawItems = await this.executeReadOperation(store => store.getAll());\n return this.deserializeItems(rawItems);\n }\n\n /**\n * Retrieves a single item by ID\n * @param {number} id - Item ID\n * @returns {Promise<Object|null>} Deserialized item or null\n */\n async retrieveById(id) {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return null;\n }\n\n const rawItem = await this.executeReadOperation(store => store.get(id));\n return rawItem ? this.deserializeItem(rawItem) : null;\n }\n\n /**\n * Removes an item from storage\n * @param {number} id - ID of the item to remove\n * @returns {Promise<void>}\n */\n async remove(id) {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.delete(id));\n }\n\n /**\n * Updates an item in storage\n * @param {number} id - Item ID\n * @param {Object} updates - Fields to update\n * @returns {Promise<number>} Updated item ID\n */\n async update(id, updates) {\n this.ensureDatabaseAvailable();\n\n const currentItem = await this.retrieveById(id);\n if (!currentItem) {\n throw new Error('Item not found');\n }\n\n const updatedItem = { ...currentItem, ...updates };\n return this.executeWriteOperation(store => store.put(updatedItem));\n }\n\n /**\n * Clears all storage\n * @returns {Promise<void>}\n */\n async clear() {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.clear());\n }\n\n // ===== Private declarative methods =====\n\n /**\n * Ensures the database is available\n * @throws {Error} If the database is not available\n */\n ensureDatabaseAvailable() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Executes a read operation in a declarative way\n * @param {Function} operation - Operation to run on the store\n * @returns {Promise<*>} Operation result\n */\n executeReadOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getReadTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Executes a write operation in a declarative way\n * @param {Function} operation - Operation to run on the store\n * @returns {Promise<*>} Operation result\n */\n executeWriteOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getWriteTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Deserializes an array of items\n * @param {Array} rawItems - Raw items from the database\n * @returns {Array} Deserialized items\n */\n deserializeItems(rawItems) {\n return rawItems.map(item => this.deserializeItem(item));\n }\n\n /**\n * Deserializes a single item\n * @param {Object} rawItem - Raw item from the database\n * @returns {Object} Deserialized item\n */\n deserializeItem(rawItem) {\n const deserializationResult = this.serializationManager.deserialize(rawItem.items);\n const deserializedItems = this.serializationManager.getData(deserializationResult, []);\n\n return {\n ...rawItem,\n items: deserializedItems,\n deserializationError: deserializationResult.error\n };\n }\n} ","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * RetryLogicManager - Handles retry logic and cleanup\n * Single responsibility: Manage retries and cleanup of failed items\n */\nexport class RetryLogicManager {\n constructor(storageManager, configManager) {\n this.storageManager = storageManager;\n this.config = configManager;\n }\n\n /**\n * Attempts to send failed items from the persistent buffer\n * @param {Function} sendCallback - Callback to send items\n * @param {Function} removeCallback - Callback to remove successful items\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.storageManager) {\n console.warn('SyntropyFront: Storage manager not available');\n return;\n }\n\n try {\n const failedItems = await this.storageManager.retrieve();\n \n for (const item of failedItems) {\n if (item.retryCount < this.config.maxRetries) {\n // Deserialize items from buffer\n let deserializedItems;\n try {\n if (typeof item.items === 'string') {\n deserializedItems = robustSerializer.deserialize(item.items);\n } else {\n deserializedItems = item.items;\n }\n } catch (error) {\n console.error('SyntropyFront: Error deserializing buffer items:', error);\n await this.removeFailedItem(item.id);\n continue;\n }\n \n if (sendCallback) {\n try {\n await sendCallback(deserializedItems, item.retryCount + 1, item.id);\n \n // On successful send, remove from buffer\n if (removeCallback) {\n await removeCallback(item.id);\n } else {\n await this.removeFailedItem(item.id);\n }\n \n console.log(`SyntropyFront: Retry successful for item ${item.id}`);\n } catch (error) {\n console.warn(`SyntropyFront: Retry failed for item ${item.id}:`, error);\n \n // Increment retry count\n await this.incrementRetryCount(item.id);\n }\n }\n } else {\n console.warn(`SyntropyFront: Item ${item.id} exceeded maximum retries, removing from buffer`);\n await this.removeFailedItem(item.id);\n }\n }\n } catch (error) {\n console.error('SyntropyFront: Error processing retries:', error);\n }\n }\n\n /**\n * Increments the retry count for an item\n * @param {number} id - Item ID\n */\n async incrementRetryCount(id) {\n try {\n const currentItem = await this.storageManager.retrieveById(id);\n if (currentItem) {\n await this.storageManager.update(id, {\n retryCount: currentItem.retryCount + 1\n });\n }\n } catch (error) {\n console.error('SyntropyFront: Error incrementing retry count:', error);\n }\n }\n\n /**\n * Removes a failed item from the buffer\n * @param {number} id - Item ID\n */\n async removeFailedItem(id) {\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removing failed item:', error);\n }\n }\n\n /**\n * Cleans items that have exceeded the maximum retry count\n */\n async cleanupExpiredItems() {\n try {\n const allItems = await this.storageManager.retrieve();\n const expiredItems = allItems.filter(item => item.retryCount >= this.config.maxRetries);\n \n for (const item of expiredItems) {\n await this.removeFailedItem(item.id);\n console.warn(`SyntropyFront: Item ${item.id} removed for exceeding maximum retries`);\n }\n \n if (expiredItems.length > 0) {\n console.log(`SyntropyFront: Cleanup completed, ${expiredItems.length} items removed`);\n }\n } catch (error) {\n console.error('SyntropyFront: Error cleaning up expired items:', error);\n }\n }\n\n /**\n * Returns retry statistics\n */\n async getRetryStats() {\n try {\n const allItems = await this.storageManager.retrieve();\n \n const stats = {\n totalItems: allItems.length,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n\n if (allItems.length > 0) {\n const totalRetries = allItems.reduce((sum, item) => sum + item.retryCount, 0);\n stats.averageRetryCount = totalRetries / allItems.length;\n \n allItems.forEach(item => {\n const retryCount = item.retryCount;\n stats.itemsByRetryCount[retryCount] = (stats.itemsByRetryCount[retryCount] || 0) + 1;\n });\n }\n\n return stats;\n } catch (error) {\n console.error('SyntropyFront: Error getting retry statistics:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n }\n }\n} ","/**\n * Functional Fragments: Pure masking strategies.\n */\nexport const MASKING_STRATEGIES = {\n credit_card: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `${rule.maskChar.repeat(4)}-${rule.maskChar.repeat(4)}-${rule.maskChar.repeat(4)}-${clean.slice(-4)}`;\n },\n\n ssn: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `***-**-${clean.slice(-4)}`;\n },\n\n email: (value, rule) => {\n const atIndex = value.indexOf('@');\n if (atIndex <= 0) return MASKING_STRATEGIES.default(value, rule);\n\n const username = value.substring(0, atIndex);\n const domain = value.substring(atIndex);\n\n if (rule.preserveLength) {\n const maskedUsername = username.length > 1\n ? username.charAt(0) + rule.maskChar.repeat(username.length - 1)\n : rule.maskChar.repeat(username.length);\n return maskedUsername + domain;\n }\n return `${username.charAt(0)}***${domain}`;\n },\n\n phone: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `${rule.maskChar.repeat(3)}-${rule.maskChar.repeat(3)}-${clean.slice(-4)}`;\n },\n\n secret: (value, rule) => {\n if (rule.preserveLength) return rule.maskChar.repeat(value.length);\n return rule.maskChar.repeat(8);\n },\n\n custom: (value, rule) => {\n return typeof rule.customMask === 'function' ? rule.customMask(value) : value;\n },\n\n default: (value, rule) => {\n if (rule.preserveLength) return rule.maskChar.repeat(value.length);\n return rule.maskChar.repeat(Math.min(value.length, 8));\n }\n};\n\n// Compatibility Aliases\nMASKING_STRATEGIES.password = MASKING_STRATEGIES.secret;\nMASKING_STRATEGIES.token = MASKING_STRATEGIES.secret;\n\nexport const MaskingStrategy = {\n CREDIT_CARD: 'credit_card',\n SSN: 'ssn',\n EMAIL: 'email',\n PHONE: 'phone',\n PASSWORD: 'password',\n TOKEN: 'token',\n CUSTOM: 'custom'\n};\n\n/**\n * DataMaskingManager - PII Obfuscation Engine.\n * Implements Strategy Pattern (SOLID: OCP).\n */\nexport class DataMaskingManager {\n constructor(options = {}) {\n this.maskChar = options.maskChar || '*';\n this.preserveLength = options.preserveLength !== false;\n this.rules = [];\n this.strategies = new Map(Object.entries(MASKING_STRATEGIES));\n\n // ANSI escape code regex (intentional control chars for stripping terminal codes)\n // eslint-disable-next-line no-control-regex\n this.ansiRegex = /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;\n\n if (options.enableDefaultRules !== false) {\n this.addDefaultRules();\n }\n\n if (options.rules) {\n options.rules.forEach(rule => this.addRule(rule));\n }\n }\n\n addDefaultRules() {\n const defaultRules = [\n { pattern: /credit_card|card_number|payment_number/i, strategy: MaskingStrategy.CREDIT_CARD },\n { pattern: /ssn|social_security|security_number/i, strategy: MaskingStrategy.SSN },\n { pattern: /email/i, strategy: MaskingStrategy.EMAIL },\n { pattern: /phone|phone_number|mobile_number/i, strategy: MaskingStrategy.PHONE },\n { pattern: /password|pass|pwd|secret|api_key|token|auth_token|jwt|bearer/i, strategy: MaskingStrategy.PASSWORD }\n ];\n\n defaultRules.forEach(rule => this.addRule(rule));\n }\n\n addRule(rule) {\n this.rules.push({\n ...rule,\n _compiledPattern: typeof rule.pattern === 'string' ? new RegExp(rule.pattern, 'i') : rule.pattern,\n preserveLength: rule.preserveLength ?? this.preserveLength,\n maskChar: rule.maskChar ?? this.maskChar\n });\n }\n\n registerStrategy(name, strategyFn) {\n if (typeof strategyFn === 'function') {\n this.strategies.set(name, strategyFn);\n }\n }\n\n process(data) {\n if (data === null || data === undefined) return data;\n\n const processors = {\n string: (val) => val.replace(this.ansiRegex, ''),\n object: (val) => {\n if (Array.isArray(val)) return val.map(item => this.process(item));\n if (val && val.constructor === Object) return this.maskObject(val);\n return val;\n }\n };\n\n return (processors[typeof data] || ((v) => v))(data);\n }\n\n maskObject(data) {\n return Object.entries(data).reduce((acc, [key, value]) => {\n acc[key] = this.maskValue(key, value);\n return acc;\n }, {});\n }\n\n maskValue(key, value) {\n if (typeof value !== 'string') return this.process(value);\n\n const rule = this.rules.find(r => r._compiledPattern?.test(key));\n return rule ? this.applyStrategy(value, rule) : value.replace(this.ansiRegex, '');\n }\n\n applyStrategy(value, rule) {\n const strategy = this.strategies.get(rule.strategy) || this.strategies.get('default');\n return strategy(value, rule);\n }\n}\n\nexport const dataMaskingManager = new DataMaskingManager();\n","import { robustSerializer } from '../../utils/RobustSerializer.js';\nimport { dataMaskingManager } from '../../utils/DataMaskingManager.js';\n\n/**\n * SerializationManager - Handles serialization and deserialization of data.\n * Single responsibility: Manage data transformation for storage.\n * DIP: Accepts serializer and masking via constructor for testability and substitution.\n * @param {Object} [deps] - Injected dependencies\n * @param {{ serialize: function(*): string, deserialize: function(string): * }} [deps.serializer] - Serializer (circular ref handling)\n * @param {{ process: function(*): * }} [deps.masking] - Object with process(data) for PII obfuscation\n */\nexport class SerializationManager {\n constructor(deps = {}) {\n this.serializer = deps.serializer ?? robustSerializer;\n this.masking = deps.masking ?? dataMaskingManager;\n }\n\n /**\n * Serializes items with declarative error handling\n * @param {Array} items - Items to serialize\n * @returns {Object} Serialization result\n */\n serialize(items) {\n try {\n // Guard: Validate basic input\n if (items === null || items === undefined) {\n return { success: true, data: this.serializer.serialize([]), error: null, timestamp: new Date().toISOString() };\n }\n\n // Apply masking before store/send\n const maskedItems = this.masking.process(items);\n const serializedData = this.serializer.serialize(maskedItems);\n\n return {\n success: true,\n data: serializedData,\n error: null,\n timestamp: new Date().toISOString()\n };\n } catch (error) {\n return {\n success: false,\n data: this.createFallbackData(error),\n error: this.createSerializationError(error),\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Deserializes data with declarative error handling\n * @param {string} serializedData - Datos serializados\n * @returns {Object} Deserialization result\n */\n deserialize(serializedData) {\n try {\n // Guard: Empty or null data\n if (!serializedData) {\n return { success: true, data: [], error: null, timestamp: new Date().toISOString() };\n }\n\n const deserializedData = this.serializer.deserialize(serializedData);\n\n return {\n success: true,\n data: deserializedData,\n error: null,\n timestamp: new Date().toISOString()\n };\n } catch (error) {\n return {\n success: false,\n data: [],\n error: this.createDeserializationError(error),\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Creates a structured serialization error\n * @param {Error} error - Original error\n * @returns {Object} Structured error\n */\n createSerializationError(error) {\n return {\n type: 'serialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Creates a structured deserialization error\n * @param {Error} error - Original error\n * @returns {Object} Structured error\n */\n createDeserializationError(error) {\n return {\n type: 'deserialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Creates fallback data when serialization fails\n * @param {Error} error - Error that caused the fallback\n * @returns {string} Serialized fallback data\n */\n createFallbackData(error) {\n const fallbackPayload = {\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n fallbackData: 'Items not serializable - using fallback'\n };\n\n return JSON.stringify(fallbackPayload);\n }\n\n /**\n * Checks if a serialization result was successful\n * @param {Object} result - Serialization/deserialization result\n * @returns {boolean} True if successful\n */\n isSuccessful(result) {\n return Boolean(result && result.success === true);\n }\n\n /**\n * Gets data from a result, with fallback\n * @param {Object} result - Serialization/deserialization result\n * @param {*} fallback - Default value if failed\n * @returns {*} Data or fallback\n */\n getData(result, fallback = null) {\n return this.isSuccessful(result) ? result.data : fallback;\n }\n} ","import { DatabaseManager } from '../database/DatabaseManager.js';\nimport { StorageManager } from '../database/StorageManager.js';\nimport { RetryLogicManager } from '../retry/RetryLogicManager.js';\nimport { SerializationManager } from '../database/SerializationManager.js';\n\nconst DEFAULT_DB_NAME = 'SyntropyFrontBuffer';\nconst DEFAULT_DB_VERSION = 1;\nconst DEFAULT_STORE_NAME = 'failedItems';\n\n/**\n * PersistentBufferManager - Persistent buffer coordinator\n * Single Responsibility: Coordinate persistent storage components\n * DIP: Accepts injected components (databaseManager, serializationManager, storageManager, retryLogicManager) for tests and substitution.\n * @param {Object} configManager - Config (usePersistentBuffer, maxRetries, etc.)\n * @param {Object} [deps] - Injected components; defaults created if not provided\n */\nexport class PersistentBufferManager {\n constructor(configManager, deps = {}) {\n this.config = configManager;\n this.usePersistentBuffer = false;\n\n this.databaseManager = deps.databaseManager ?? new DatabaseManager(\n DEFAULT_DB_NAME,\n DEFAULT_DB_VERSION,\n DEFAULT_STORE_NAME\n );\n this.serializationManager = deps.serializationManager ?? new SerializationManager();\n this.storageManager = deps.storageManager ?? new StorageManager(this.databaseManager, this.serializationManager);\n this.retryLogicManager = deps.retryLogicManager ?? new RetryLogicManager(this.storageManager, this.config);\n\n this.initPersistentBuffer();\n }\n\n /**\n * Initializes the persistent buffer\n */\n async initPersistentBuffer() {\n try {\n const success = await this.databaseManager.init();\n if (success) {\n this.usePersistentBuffer = this.config.usePersistentBuffer;\n console.log('SyntropyFront: Persistent buffer initialized');\n }\n } catch (error) {\n console.warn('SyntropyFront: Error initializing persistent buffer:', error);\n }\n }\n\n /**\n * Saves failed items to the persistent buffer\n * @param {Array} items - Items to save\n */\n async save(items) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.save(items);\n console.log('SyntropyFront: Items saved to persistent buffer');\n } catch (error) {\n console.error('SyntropyFront: Error saving to persistent buffer:', error);\n }\n }\n\n /**\n * Retrieves failed items from the persistent buffer\n */\n async retrieve() {\n if (!this.usePersistentBuffer) {\n return [];\n }\n\n try {\n return await this.storageManager.retrieve();\n } catch (error) {\n console.error('SyntropyFront: Error retrieving from persistent buffer:', error);\n return [];\n }\n }\n\n /**\n * Removes items from the persistent buffer\n * @param {number} id - ID of the item to remove\n */\n async remove(id) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removing from persistent buffer:', error);\n }\n }\n\n /**\n * Attempts to send failed items from the persistent buffer\n * @param {Function} sendCallback - Callback to send items\n * @param {Function} removeCallback - Callback to remove successful items\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.retryFailedItems(sendCallback, removeCallback);\n }\n\n /**\n * Cleans up items that have exceeded the maximum retry count\n */\n async cleanupExpiredItems() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.cleanupExpiredItems();\n }\n\n /**\n * Gets persistent buffer statistics\n */\n async getStats() {\n if (!this.usePersistentBuffer) {\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: false\n };\n }\n\n try {\n const retryStats = await this.retryLogicManager.getRetryStats();\n return {\n ...retryStats,\n isAvailable: this.isAvailable()\n };\n } catch (error) {\n console.error('SyntropyFront: Error getting statistics:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: this.isAvailable()\n };\n }\n }\n\n /**\n * Checks if the persistent buffer is available\n */\n isAvailable() {\n return this.usePersistentBuffer && this.databaseManager.isDatabaseAvailable();\n }\n\n /**\n * Clears the entire persistent buffer\n */\n async clear() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.clear();\n console.log('SyntropyFront: Persistent buffer cleared');\n } catch (error) {\n console.error('SyntropyFront: Error clearing persistent buffer:', error);\n }\n }\n\n /**\n * Closes the database connection\n */\n close() {\n this.databaseManager.close();\n this.usePersistentBuffer = false;\n }\n}\n","import { ConfigurationManager } from './ConfigurationManager.js';\nimport { QueueManager } from './QueueManager.js';\nimport { RetryManager } from '../retry/RetryManager.js';\nimport { HttpTransport } from './HttpTransport.js';\nimport { PersistentBufferManager } from '../persistent/PersistentBufferManager.js';\nimport { dataMaskingManager } from '../../utils/DataMaskingManager.js';\n\n/**\n * Agent - Coordinates sending traceability data to the backend.\n * DIP: All dependencies (config, queue, retry, transport, buffer, masking) are injectable.\n *\n * @contract\n * - configure(config): updates agent configuration.\n * - sendError(payload, context?): if enabled and not dropped by sampling, enqueues an item of type 'error'.\n * - sendBreadcrumbs(breadcrumbs): if enabled, batchTimeout set and non-empty, enqueues type 'breadcrumbs'.\n * - flush(): drains queue via flushCallback. forceFlush(): flush + processes pending retries.\n * - getStats(): returns { queueLength, retryQueueLength, isEnabled, usePersistentBuffer, maxRetries }.\n */\nexport class Agent {\n /**\n * @param {Object} [deps] - Injected dependencies (config, queue, retry, transport, buffer, masking). Defaults created if not provided.\n */\n constructor(deps = {}) {\n // Components (Injected or Defaults)\n this.config = deps.config || new ConfigurationManager();\n this.masking = deps.masking || dataMaskingManager;\n\n // Managers that depend on config\n this.queue = deps.queue || new QueueManager(this.config);\n this.retry = deps.retry || new RetryManager(this.config);\n this.transport = deps.transport || new HttpTransport(this.config);\n this.buffer = deps.buffer || new PersistentBufferManager(this.config);\n\n // Setup coordination callbacks\n this.setupCallbacks();\n }\n\n /**\n * Configures callbacks for coordination between components\n */\n setupCallbacks() {\n // QueueManager flush callback\n this.queue.flushCallback = async (items) => {\n try {\n await this.transport.send(items);\n console.log('SyntropyFront: Data sent successfully');\n } catch (error) {\n console.error('SyntropyFront Agent: Error sending data:', error);\n\n // Add to retry queue\n this.retry.addToRetryQueue(items);\n\n // Save to persistent buffer\n await this.buffer.save(items);\n }\n };\n\n // RetryManager send callback\n this.retry.sendCallback = async (items) => {\n return await this.transport.send(items);\n };\n\n this.retry.removePersistentCallback = async (id) => {\n await this.buffer.remove(id);\n };\n\n // PersistentBufferManager retry callback\n this.buffer.sendCallback = (items, retryCount, persistentId) => {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n };\n }\n\n /**\n * Updates configuration (endpoint, headers, batchSize, batchTimeout, samplingRate, etc.).\n * @param {Object} config - Ver ConfigurationManager.configure\n * @returns {void}\n */\n configure(config) {\n this.config.configure(config);\n }\n\n /**\n * Enqueues an error for send. Does not send if agent is disabled or sampling discards it.\n * @param {Object} errorPayload - Payload with type, error, breadcrumbs, timestamp\n * @param {Object|null} [context=null] - Additional context (merged into payload)\n * @returns {void}\n */\n sendError(errorPayload, context = null) {\n // 🛡️ Guard: Agent enabled\n if (!this.config.isAgentEnabled()) {\n console.warn('SyntropyFront Agent: Not configured, error not sent');\n return;\n }\n\n // 🎲 Guard: Sampling\n if (Math.random() > this.config.samplingRate) return;\n\n // Functional Pipeline: Generate payload with context\n const payloadWithContext = context\n ? { ...errorPayload, context }\n : errorPayload;\n\n // Apply transformations (Encryption and Obfuscation)\n const dataToSend = this.transport.applyEncryption(payloadWithContext);\n const maskedData = this.masking.process(dataToSend);\n\n this.queue.add({\n type: 'error',\n data: maskedData,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Enqueues breadcrumbs for send. Does not send if disabled, no batchTimeout, or empty array.\n * @param {Array<Object>} breadcrumbs - List of traces (category, message, data, timestamp)\n * @returns {void}\n */\n sendBreadcrumbs(breadcrumbs) {\n // 🛡️ Guard: Enabled and with data\n if (!this.config.isAgentEnabled() || !this.config.shouldSendBreadcrumbs() || !breadcrumbs.length) {\n return;\n }\n\n // 🎲 Guard: Sampling\n if (Math.random() > this.config.samplingRate) return;\n\n // Apply transformations\n const dataToSend = this.transport.applyEncryption(breadcrumbs);\n const maskedData = this.masking.process(dataToSend);\n\n this.queue.add({\n type: 'breadcrumbs',\n data: maskedData,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Adds an item to the queue (compatibility)\n */\n addToQueue(item) {\n this.queue.add(item);\n }\n\n /**\n * Adds to retry queue (compatibility)\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n }\n\n /**\n * Processes retry queue (compatibility)\n */\n async processRetryQueue() {\n await this.retry.processRetryQueue(\n this.retry.sendCallback,\n this.retry.removePersistentCallback\n );\n }\n\n /**\n * Forces flush of current queue\n */\n async flush() {\n await this.queue.flush(this.queue.flushCallback);\n }\n\n /**\n * Forces immediate flush of everything\n */\n async forceFlush() {\n await this.flush();\n\n // Also attempt pending retries\n if (!this.retry.isEmpty()) {\n console.log('SyntropyFront: Attempting to send pending retries...');\n await this.processRetryQueue();\n }\n }\n\n /**\n * Gets agent stats\n */\n getStats() {\n const config = this.config.getConfig();\n return {\n queueLength: this.queue.getSize(),\n retryQueueLength: this.retry.getSize(),\n isEnabled: this.config.isAgentEnabled(),\n usePersistentBuffer: config.usePersistentBuffer,\n maxRetries: config.maxRetries\n };\n }\n\n /**\n * Attempts to send failed items from persistent buffer\n */\n async retryFailedItems() {\n await this.buffer.retryFailedItems(this.buffer.sendCallback);\n }\n\n /**\n * Returns whether the agent is enabled (for consumers that need to check without depending on config shape).\n */\n isEnabled() {\n return this.config.isAgentEnabled();\n }\n\n /**\n * Returns whether breadcrumbs should be sent (e.g. batch mode with timeout).\n */\n shouldSendBreadcrumbs() {\n return this.config.shouldSendBreadcrumbs();\n }\n\n /**\n * Disables the agent\n */\n disable() {\n this.config.configure({ endpoint: null });\n this.queue.clear();\n this.retry.clear();\n }\n}\n\n// Singleton Instance\nexport const agent = new Agent();\n","/**\n * Environment - Centralized detection of browser environment and capabilities.\n * Browser-only: targets modern browsers per browserslist config.\n */\nexport const Environment = {\n /**\n * Returns true if running in a browser context.\n */\n isBrowser: () => typeof window !== 'undefined' && typeof document !== 'undefined',\n\n /**\n * Returns the global browser object, or empty object as safe fallback.\n */\n getGlobal: () => (typeof window !== 'undefined' ? window : {}),\n\n /**\n * Checks availability of a nested global API via dot-notation path.\n * @param {string} apiPath - e.g. 'navigator.connection' or 'crypto.randomUUID'\n * @returns {boolean}\n */\n hasApi: (apiPath) => {\n return apiPath.split('.').reduce((current, part) => {\n if (current === null || current === undefined) return null;\n return current[part] !== undefined ? current[part] : null;\n }, Environment.getGlobal()) !== null;\n },\n\n /**\n * Executes a task only if a condition is met; returns fallback otherwise.\n * @param {string|Function} condition - API path string or boolean-returning function.\n * @param {Function} task - Operation to execute when condition is met.\n * @param {any} fallback - Default value when condition is not met.\n * @returns {any}\n */\n runIf: (condition, task, fallback = null) => {\n const isMet = typeof condition === 'function' ? condition() : Environment.hasApi(condition);\n return isMet ? task() : fallback;\n }\n};\n","import { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { Environment } from '../utils/Environment.js';\n\n/**\n * Functional fragments: DOM detection and labeling utilities.\n */\nexport const DOM_UTILS = {\n /**\n * Selector exhaustivo de elementos interactivos.\n */\n INTERACTIVE_SELECTOR: [\n 'a', 'button', 'input', 'select', 'textarea', 'label', 'summary',\n '[role=\"button\"]', '[role=\"link\"]', '[role=\"checkbox\"]', '[role=\"radio\"]',\n '[role=\"menuitem\"]', '[role=\"option\"]', '[role=\"switch\"]', '[role=\"tab\"]',\n '.interactive', '.btn', '.clickable', // Convention selectors\n '[onclick]', '[ng-click]', '[v-on:click]', '[@click]' // Selectores de framework\n ].join(', '),\n\n /**\n * Checks if an element has cursor:pointer (pure CSS fallback).\n */\n hasPointerCursor: (el) => {\n try {\n return window.getComputedStyle(el).cursor === 'pointer';\n } catch (e) {\n return false;\n }\n },\n\n /**\n * Walks up the DOM tree looking for cursor:pointer (declarative, no while).\n */\n findTargetByStyle: (el) => {\n // Guard: element nodes only\n if (!el || el.nodeType !== 1) return null;\n if (DOM_UTILS.hasPointerCursor(el)) return el;\n if (!el.parentElement || el.parentElement === document.body) return null;\n return DOM_UTILS.findTargetByStyle(el.parentElement);\n },\n\n /**\n * Finds the interactive target using closest() with CSS fallback (declarative).\n */\n findInteractiveTarget: (el) => {\n // Guard: valid element\n if (!el || el === document.body || el.nodeType !== 1) return null;\n\n // Declarative search via closest()\n return el.closest(DOM_UTILS.INTERACTIVE_SELECTOR) || DOM_UTILS.findTargetByStyle(el);\n },\n\n /**\n * Generates a readable selector for the element.\n */\n generateSelector: (el) => {\n // Guard: no element\n if (!el) return 'unknown';\n\n const tag = el.tagName.toLowerCase();\n const id = el.id ? `#${el.id}` : '';\n const classes = (typeof el.className === 'string' && el.className)\n ? `.${el.className.split(' ').filter(Boolean).join('.')}`\n : '';\n\n return `${tag}${id}${classes}`;\n }\n};\n\n/**\n * ClickInterceptor - Interceptor coordinated by functional fragments.\n * Refactored for maximum purity and removal of imperative logic.\n */\nexport class ClickInterceptor {\n constructor() {\n this.handler = null;\n this.lastClickTime = 0;\n this.THROTTLE_MS = 500;\n }\n\n init() {\n // Guard: browser environment\n if (!Environment.isBrowser()) return;\n\n this.handler = (event) => this.processClick(event);\n document.addEventListener('click', this.handler, true);\n }\n\n /**\n * Pipeline de procesamiento de clic (Pureza funcional).\n */\n processClick(event) {\n const el = event?.target;\n\n // Guard: throttling and element existence\n if (!el || this.isThrottled()) return;\n\n const target = DOM_UTILS.findInteractiveTarget(el);\n if (!target) return;\n\n this.recordBreadcrumb(target);\n }\n\n /**\n * Flow control to avoid duplicates.\n */\n isThrottled() {\n const now = Date.now();\n const throttled = now - this.lastClickTime < this.THROTTLE_MS;\n if (!throttled) this.lastClickTime = now;\n return throttled;\n }\n\n /**\n * Records trace in the store.\n */\n recordBreadcrumb(target) {\n const selector = DOM_UTILS.generateSelector(target);\n\n breadcrumbStore.add({\n category: 'ui',\n message: `User clicked on '${selector}'`,\n data: {\n selector,\n tagName: target.tagName,\n id: target.id || null,\n className: target.className || null,\n text: (target.innerText || target.value || '').substring(0, 30).trim()\n }\n });\n }\n\n /**\n * Limpieza de recursos.\n */\n destroy() {\n // Guard: browser and handler\n if (!Environment.isBrowser() || !this.handler) return;\n\n document.removeEventListener('click', this.handler, true);\n this.handler = null;\n }\n}\n","/**\n * Copyright 2024 Syntropysoft\n */\n\n/**\n * FunctionWrapper - Utility for standardizing global handler interception.\n * Provides functional abstractions for safe execution and wrapping.\n */\n\n/**\n * Safely executes a function with a given context and arguments.\n * @param {Function} fn - Function to execute.\n * @param {Object} context - Execution context (this).\n * @param {Array} args - Arguments to pass.\n * @param {string} [label='original handler'] - Diagnostic label for errors.\n * @returns {any} Result of the function execution or undefined if failed.\n */\nexport const safeApply = (fn, context, args, label = 'original handler') => {\n if (typeof fn !== 'function') return;\n try {\n return fn.apply(context, args);\n } catch (error) {\n // Log for instrumentation but don't crash the host application\n console.error(`SyntropyFront: Error in ${label}:`, error);\n return;\n }\n};\n\n/**\n * Wraps a property on a target object using a factory.\n * @param {Object} target - Target object (e.g., window).\n * @param {string} property - Property name (e.g., 'fetch').\n * @param {Function} wrapperFactory - Factory receiving (original) and returning (wrapped).\n * @returns {Object|null} Disposable object with destroy() method.\n */\nexport const wrap = (target, property, wrapperFactory) => {\n // `in` operator accepts null values (e.g. window.onerror === null by default)\n if (!target || !(property in target)) return null;\n\n const original = target[property]; // null is a valid initial value\n const wrapped = wrapperFactory(original);\n\n // Apply the wrap\n target[property] = wrapped;\n\n return {\n target,\n property,\n original,\n wrapped,\n destroy: () => {\n // Only restore if it hasn't been re-wrapped by someone else (best effort)\n if (target[property] === wrapped) {\n target[property] = original;\n }\n }\n };\n};\n\n// Legacy class export for backwards compatibility during transition\nexport const FunctionWrapper = {\n wrap,\n safeApply\n};\n","/**\n * Copyright 2024 Syntropysoft\n */\n\nimport { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { wrap } from '../utils/FunctionWrapper.js';\n\n/**\n * FetchInterceptor - Intercepts network calls using the wrapper (chaining) pattern.\n * Captures URL and method details to feed into the breadcrumb flow.\n */\nexport class FetchInterceptor {\n constructor() {\n this.wrapper = null;\n }\n\n /**\n * Initializes interception of the global fetch API.\n */\n init() {\n // Guard: browser and fetch available\n if (typeof window === 'undefined' || !window.fetch) return;\n\n this.wrapper = wrap(window, 'fetch', (original) => {\n return (...args) => {\n // Functional extraction of URL and method\n const url = (args[0] instanceof Request) ? args[0].url : (args[0] || 'unknown');\n const method = (args[0] instanceof Request) ? args[0].method : (args[1]?.method || 'GET');\n\n breadcrumbStore.add({\n category: 'network',\n message: `Request: ${method} ${url}`,\n data: {\n url,\n method,\n timestamp: Date.now()\n }\n });\n\n // Continue with original execution\n return original.apply(window, args);\n };\n });\n }\n\n /**\n * Restores original fetch behaviour.\n */\n destroy() {\n // Guard: no wrapper\n if (!this.wrapper) return;\n\n this.wrapper.destroy();\n this.wrapper = null;\n }\n}\n","import { Environment } from '../../utils/Environment.js';\n\n/**\n * Pure function: Generates a secure ID using an injected crypto provider.\n * Accepts a cryptoApi object so all fallback branches are independently testable.\n * @param {Object|null} cryptoApi - Crypto implementation (e.g. window.crypto or null)\n * @returns {string} Secure random ID\n */\nexport const createSecureId = (cryptoApi = (typeof crypto !== 'undefined' ? crypto : null)) => {\n if (typeof cryptoApi?.randomUUID === 'function') {\n return cryptoApi.randomUUID();\n }\n if (typeof cryptoApi?.getRandomValues === 'function') {\n const array = new Uint8Array(16);\n cryptoApi.getRandomValues(array);\n return Array.from(array, b => b.toString(16).padStart(2, '0')).join('');\n }\n return `${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n};\n\n/**\n * Functional fragments: pure context providers.\n * Uses Environment.runIf for safe access.\n */\nexport const CONTEXT_PROVIDERS = {\n device: {\n userAgent: () => Environment.runIf('navigator.userAgent', () => navigator.userAgent),\n language: () => Environment.runIf('navigator.language', () => navigator.language),\n languages: () => Environment.runIf('navigator.languages', () => navigator.languages),\n screen: () => Environment.runIf('window.screen', () => ({\n width: window.screen.width,\n height: window.screen.height,\n availWidth: window.screen.availWidth,\n availHeight: window.screen.availHeight,\n colorDepth: window.screen.colorDepth,\n pixelDepth: window.screen.pixelDepth\n })),\n timezone: () => Environment.runIf('Intl.DateTimeFormat', () => {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) { return null; }\n }),\n cookieEnabled: () => Environment.runIf('navigator.cookieEnabled', () => navigator.cookieEnabled),\n doNotTrack: () => Environment.runIf('navigator.doNotTrack', () => navigator.doNotTrack)\n },\n window: {\n url: () => Environment.runIf('window.location.href', () => window.location.href),\n pathname: () => Environment.runIf('window.location.pathname', () => window.location.pathname),\n search: () => Environment.runIf('window.location.search', () => window.location.search),\n hash: () => Environment.runIf('window.location.hash', () => window.location.hash),\n referrer: () => Environment.runIf('document.referrer', () => document.referrer),\n title: () => Environment.runIf('document.title', () => document.title),\n viewport: () => Environment.runIf('window.innerWidth', () => ({\n width: window.innerWidth,\n height: window.innerHeight\n }))\n },\n storage: {\n localStorage: () => Environment.runIf('localStorage', () => {\n try {\n const storage = window.localStorage;\n return {\n keys: Object.keys(storage).length,\n size: JSON.stringify(storage).length,\n keyNames: Object.keys(storage)\n };\n } catch (e) { return null; }\n }),\n sessionStorage: () => Environment.runIf('sessionStorage', () => {\n try {\n const storage = window.sessionStorage;\n return {\n keys: Object.keys(storage).length,\n size: JSON.stringify(storage).length,\n keyNames: Object.keys(storage)\n };\n } catch (e) { return null; }\n })\n },\n network: {\n online: () => Environment.runIf('navigator.onLine', () => navigator.onLine),\n connection: () => Environment.runIf(() => !!(typeof navigator !== 'undefined' && (navigator.connection || navigator.mozConnection || navigator.webkitConnection)), () => {\n const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n return {\n effectiveType: conn.effectiveType,\n downlink: conn.downlink,\n rtt: conn.rtt\n };\n })\n },\n ui: {\n focused: () => Environment.runIf('document.hasFocus', () => document.hasFocus()),\n visibility: () => Environment.runIf('document.visibilityState', () => document.visibilityState),\n activeElement: () => Environment.runIf('document.activeElement', () => ({\n tagName: document.activeElement.tagName,\n id: document.activeElement.id,\n className: document.activeElement.className\n }))\n },\n performance: {\n memory: () => Environment.runIf('performance.memory', () => ({\n used: Math.round(performance.memory.usedJSHeapSize / 1048576),\n total: Math.round(performance.memory.totalJSHeapSize / 1048576),\n limit: Math.round(performance.memory.jsHeapSizeLimit / 1048576)\n })),\n timing: () => Environment.runIf('performance.timing', () => ({\n navigationStart: performance.timing.navigationStart,\n loadEventEnd: performance.timing.loadEventEnd\n }))\n },\n session: {\n sessionId: (collector) => collector.generateSessionId(),\n startTime: () => new Date().toISOString(),\n pageLoadTime: () => Environment.runIf('performance.now', () => performance.now())\n }\n};\n\n/**\n * Default fields for context collection.\n */\nconst DEFAULT_CONTEXT_FIELDS = {\n device: ['userAgent', 'language', 'screen', 'timezone'],\n window: ['url', 'viewport', 'title'],\n session: ['sessionId', 'pageLoadTime'],\n ui: ['visibility', 'activeElement'],\n network: ['online', 'connection']\n};\n\n/**\n * ContextCollector - Minimal coordinator with no imperative state.\n */\nexport class ContextCollector {\n constructor() {\n this.sessionId = null;\n this.providers = new Map(Object.entries(CONTEXT_PROVIDERS));\n }\n\n /**\n * Collects context based on a declarative configuration.\n */\n collect(contextConfig = {}) {\n const config = this.normalizeConfig(contextConfig);\n\n return Object.entries(config).reduce((ctx, [type, options]) => {\n try {\n const provider = this.providers.get(type);\n if (options !== false && !provider) throw new Error(`Provider for '${type}' not found`);\n\n const fields = this.resolveFields(type, provider, options);\n if (fields) {\n ctx[type] = this.extractFields(provider, fields);\n }\n } catch (error) {\n console.warn(`SyntropyFront: Error collecting context for ${type}:`, error);\n ctx[type] = { error: 'Collection failed' };\n }\n return ctx;\n }, {});\n }\n\n /**\n * Field resolution — declarative strategy map by type.\n * Contracts:\n * boolean true → default fields for type, or all provider keys\n * boolean false → null (skip)\n * array → explicit field list\n * plain object → all provider keys (treated as unstructured custom config)\n * other → null (skip)\n */\n resolveFields(type, provider, options) {\n const allProviderKeys = () => Object.keys(provider || {});\n const strategies = {\n boolean: (val) => val ? (DEFAULT_CONTEXT_FIELDS[type] || allProviderKeys()) : null,\n object: (val) => Array.isArray(val) ? val : allProviderKeys(),\n };\n\n const strategy = strategies[typeof options];\n return strategy ? strategy(options) : null;\n }\n\n /**\n * Functional normalization of configuration.\n */\n normalizeConfig(config) {\n if (Array.isArray(config)) {\n return config.reduce((acc, type) => ({ ...acc, [type]: true }), {});\n }\n return config || {};\n }\n\n /**\n * Pure field extraction.\n */\n extractFields(provider, fieldNames) {\n return fieldNames.reduce((result, fieldName) => {\n const getter = provider[fieldName];\n if (typeof getter !== 'function') return result;\n\n try {\n result[fieldName] = getter(this);\n } catch (e) {\n console.warn(`SyntropyFront: Error collecting field ${fieldName}:`, e);\n result[fieldName] = null;\n }\n return result;\n }, {});\n }\n\n registerProvider(name, fields) {\n this.providers.set(name, fields);\n }\n\n generateSessionId() {\n this.sessionId = this.sessionId || `session_${this.generateSecureId()}`;\n return this.sessionId;\n }\n\n // Delegates to the pure top-level createSecureId (injectable for testing)\n generateSecureId(cryptoApi = (typeof crypto !== 'undefined' ? crypto : null)) {\n return createSecureId(cryptoApi);\n }\n\n getAvailableTypes() {\n return Array.from(this.providers.keys());\n }\n\n get allFields() {\n return Array.from(this.providers.entries()).reduce((res, [name, fields]) => {\n res[name] = fields;\n return res;\n }, {});\n }\n\n get defaultContexts() {\n return this.allFields;\n }\n}\n\nexport const contextCollector = new ContextCollector();\n","import { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from '../core/agent/Agent.js';\nimport { contextCollector } from '../core/context/ContextCollector.js';\nimport { wrap, safeApply } from '../utils/FunctionWrapper.js';\nimport { Environment } from '../utils/Environment.js';\n\n/**\n * Functional fragments: pure error payload generators.\n */\nexport const ERROR_UTILS = {\n createExceptionPayload: (message, source, lineno, colno, error) => ({\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n }),\n\n createRejectionPayload: (event) => ({\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n })\n};\n\n/**\n * ErrorInterceptor - Error capture coordinated by functional fragments.\n * Refactored to remove heavy imperative logic and use FunctionWrapper consistently.\n */\nexport class ErrorInterceptor {\n constructor() {\n this.errorWrapper = null;\n this.rejectionWrapper = null;\n this.config = { captureErrors: true, captureUnhandledRejections: true };\n this.contextTypes = [];\n this.onErrorCallback = null;\n }\n\n /**\n * Dynamic configuration of the interceptor.\n */\n configure(config, contextTypes, onErrorCallback) {\n this.config = { ...this.config, ...config };\n this.contextTypes = contextTypes || [];\n this.onErrorCallback = onErrorCallback;\n }\n\n /**\n * Selective initialization.\n */\n init() {\n // Guard: browser environment\n if (!Environment.isBrowser()) return;\n\n this.setupExceptionCapture();\n this.setupRejectionCapture();\n }\n\n /**\n * Sets up the wrapper for window.onerror (exceptions).\n */\n setupExceptionCapture() {\n // Guard: capture disabled\n if (!this.config.captureErrors) return;\n\n this.errorWrapper = wrap(window, 'onerror', (original) => {\n return (message, source, lineno, colno, error) => {\n const payload = ERROR_UTILS.createExceptionPayload(message, source, lineno, colno, error);\n this.handleError(payload);\n return safeApply(original, window, [message, source, lineno, colno, error], 'original window.onerror');\n };\n });\n }\n\n /**\n * Sets up the wrapper for promise rejections.\n */\n setupRejectionCapture() {\n // Guard: capture disabled\n if (!this.config.captureUnhandledRejections) return;\n\n this.rejectionWrapper = wrap(window, 'onunhandledrejection', (original) => {\n return (event) => {\n const payload = ERROR_UTILS.createRejectionPayload(event);\n this.handleError(payload);\n safeApply(original, window, [event], 'original window.onunhandledrejection');\n };\n });\n }\n\n /**\n * Functional delegation for error handling and send.\n */\n handleError(payload) {\n const context = this.contextTypes.length > 0 ? contextCollector.collect(this.contextTypes) : null;\n agent.sendError(payload, context);\n if (this.onErrorCallback) this.onErrorCallback(payload);\n }\n\n /**\n * Cleans up wrappers to avoid memory leaks.\n */\n destroy() {\n this.errorWrapper?.destroy();\n this.rejectionWrapper?.destroy();\n this.errorWrapper = null;\n this.rejectionWrapper = null;\n }\n}\n","/**\n * Copyright 2024 Syntropysoft\n */\n\nimport { ClickInterceptor } from './ClickInterceptor.js';\nimport { FetchInterceptor } from './FetchInterceptor.js';\nimport { ErrorInterceptor } from './ErrorInterceptor.js';\n\n/**\n * Interceptors - Coordinator for modular interceptors.\n * Follows SOLID principles by treating interceptors as an extensible collection.\n * Registry pattern architecture.\n */\nexport class Interceptors {\n constructor() {\n this.isInitialized = false;\n this.config = {\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true\n };\n\n this.registry = new Map();\n this.initializeRegistry();\n }\n\n /**\n * Declarative registration of standard interceptors.\n */\n initializeRegistry() {\n this.registry.set('clicks', new ClickInterceptor());\n this.registry.set('fetch', new FetchInterceptor());\n this.registry.set('errors', new ErrorInterceptor());\n }\n\n /**\n * Decoupled configuration.\n */\n configure(config = {}) {\n this.config = { ...this.config, ...config };\n // Inject config and optional callbacks into interceptors that need them\n this.registry.get('errors')?.configure?.(this.config, config.context || [], config.onError);\n }\n\n /**\n * Initialization via functional pipeline.\n */\n init() {\n // Guard: already initialized\n if (this.isInitialized) return;\n\n this.runLifecycle('init');\n\n this.isInitialized = true;\n console.log('SyntropyFront: Interceptors initialized (Refactored architecture)');\n }\n\n /**\n * Teardown via functional pipeline.\n */\n destroy() {\n // Guard: not initialized\n if (!this.isInitialized) return;\n\n this.runLifecycle('destroy');\n\n this.isInitialized = false;\n console.log('SyntropyFront: Interceptors destroyed');\n }\n\n /**\n * Runs a lifecycle method across the registry based on config.\n * Functional pipeline: filter -> map -> filter -> forEach.\n */\n runLifecycle(method) {\n const lifecycleMap = [\n { key: 'clicks', enabled: this.config.captureClicks },\n { key: 'fetch', enabled: this.config.captureFetch },\n { key: 'errors', enabled: this.config.captureErrors || this.config.captureUnhandledRejections }\n ];\n\n lifecycleMap\n .filter(item => item.enabled)\n .map(item => this.registry.get(item.key))\n .filter(interceptor => interceptor && typeof interceptor[method] === 'function')\n .forEach(interceptor => interceptor[method]());\n }\n\n // Compatibility accessors for tests or controlled direct access\n get clickInterceptor() { return this.registry.get('clicks'); }\n get fetchInterceptor() { return this.registry.get('fetch'); }\n get errorInterceptor() { return this.registry.get('errors'); }\n}\n\nexport const interceptors = new Interceptors();","/**\n * Copyright 2024 Syntropysoft\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * SyntropyFront - Observability library with automatic capture\n * Acts as a Facade connecting the Agent and modular Interceptors\n */\nimport { breadcrumbStore } from './core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from './core/agent/Agent.js';\nimport { interceptors } from './interceptors/Interceptors.js';\n\nclass SyntropyFront {\n constructor() {\n this.isActive = false;\n this.config = {\n maxEvents: 50,\n endpoint: null,\n headers: {},\n usePersistentBuffer: true,\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true,\n samplingRate: 1.0,\n onError: null\n };\n\n // Auto-initialize\n this.init();\n }\n\n /**\n * Initializes the library and activates interceptors\n */\n init() {\n if (this.isActive) return;\n\n this._applyConfig();\n interceptors.init();\n\n // Retry failed items from previous sessions\n agent.retryFailedItems().catch(err => {\n console.warn('SyntropyFront: Error attempting to recover persistent items:', err);\n });\n\n this.isActive = true;\n console.log('🚀 SyntropyFront: Initialized with modular resilient architecture');\n }\n\n /**\n * Private: applies current config to agent and interceptors.\n */\n _applyConfig() {\n agent.configure({\n endpoint: this.config.endpoint,\n headers: this.config.headers,\n usePersistentBuffer: this.config.usePersistentBuffer,\n samplingRate: this.config.samplingRate,\n batchTimeout: this.config.batchTimeout ?? (this.config.captureClicks || this.config.captureFetch ? 5000 : null)\n });\n\n breadcrumbStore.onBreadcrumbAdded = (crumb) => {\n if (agent.isEnabled() && agent.shouldSendBreadcrumbs()) {\n agent.sendBreadcrumbs([crumb]);\n }\n };\n\n interceptors.configure({\n captureClicks: this.config.captureClicks,\n captureFetch: this.config.captureFetch,\n captureErrors: this.config.captureErrors,\n captureUnhandledRejections: this.config.captureUnhandledRejections,\n onError: this.config.onError\n });\n }\n\n /**\n * Configures SyntropyFront\n * @param {Object} config - Configuration\n */\n configure(config = {}) {\n this.config = { ...this.config, ...config };\n\n // If 'fetch' is passed, extract endpoint and headers for compatibility\n if (config.fetch) {\n this.config.endpoint = config.fetch.url;\n this.config.headers = config.fetch.options?.headers || {};\n }\n\n this._applyConfig();\n\n const mode = this.config.endpoint ? `endpoint: ${this.config.endpoint}` : 'console only';\n console.log(`✅ SyntropyFront: Configured - ${mode}`);\n }\n\n /**\n * Adds a breadcrumb manually\n */\n addBreadcrumb(category, message, data = {}) {\n return breadcrumbStore.add({ category, message, data });\n }\n\n /**\n * Gets all breadcrumbs\n */\n getBreadcrumbs() {\n return breadcrumbStore.getAll();\n }\n\n /**\n * Clears breadcrumbs\n */\n clearBreadcrumbs() {\n breadcrumbStore.clear();\n }\n\n /**\n * Sends an error manually with context\n */\n sendError(error, context = {}) {\n const errorPayload = {\n type: 'manual_error',\n error: {\n message: error.message || String(error),\n name: error.name || 'Error',\n stack: error.stack\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n agent.sendError(errorPayload, context);\n return errorPayload;\n }\n\n /**\n * Forces sending pending data\n */\n async flush() {\n await agent.forceFlush();\n }\n\n /**\n * Gets usage statistics\n */\n getStats() {\n return {\n isActive: this.isActive,\n breadcrumbs: breadcrumbStore.count(),\n agent: agent.getStats(),\n config: { ...this.config }\n };\n }\n\n /**\n * Deactivates the library and restores original hooks\n */\n destroy() {\n interceptors.destroy();\n agent.disable();\n this.isActive = false;\n console.log('SyntropyFront: Deactivated');\n }\n}\n\n// Singleton instance\nconst syntropyFront = new SyntropyFront();\n\n// Export the default instance\nexport default syntropyFront;"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,EAAE,WAAW,CAAC,cAAc,GAAG,EAAE,EAAE;AACnC,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc;AACxC,IAAI,IAAI,CAAC,WAAW,GAAG,EAAE;AACzB;AACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI;AACjC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,cAAc,EAAE;AACpC,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc;;AAExC;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;AACvD,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACrE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,OAAO,IAAI,CAAC,cAAc;AAC9B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,KAAK,EAAE;AACb,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,GAAG,KAAK;AACd,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACzC,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;;AAEpF,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAChC,MAAM,IAAI;AACV,QAAQ,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AAC1C,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC;AACzE,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG;AACX,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AAChC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,WAAW,GAAG,EAAE;AACzB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM;AAClC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,QAAQ,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAChE,EAAE;AACF;;AAEA;AACO,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;;AC7FpD;AACA;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI;AACxB,IAAI,IAAI,CAAC,OAAO,GAAG;AACnB,MAAM,cAAc,EAAE;AACtB,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE;AACvB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI;AAC5B,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,IAAI,IAAI,CAAC,eAAe,GAAG,KAAK;AAChC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,IAAI,IAAI,CAAC,mBAAmB,GAAG,KAAK;AACpC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;AACvB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI;AACzB,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;AAC5B,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AACnC,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;AACzD,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;AACvD,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;AAC3C,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ;AACtC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI;AACzC,IAAI,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,KAAK,IAAI;AAClE,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;AAC1D,IAAI,IAAI,CAAC,YAAY,GAAG,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,GAAG,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;;AAEzG;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY;AAChD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,SAAS;AACzB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,OAAO,IAAI,CAAC,eAAe;AAC/B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC7B,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,YAAY,EAAE,IAAI,CAAC,YAAY;AACrC,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,eAAe,EAAE,IAAI,CAAC,eAAe;AAC3C,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;AACnD,MAAM,UAAU,EAAE,IAAI,CAAC,UAAU;AACjC,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC7B,MAAM,YAAY,EAAE,IAAI,CAAC;AACzB,KAAK;AACL,EAAE;AACF;;AC1EA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B;AACA,EAAE,WAAW,CAAC,aAAa,EAAE;AAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI;AAC7B,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE;AACZ;AACA,IAAI,IAAI,CAAC,IAAI,EAAE;;AAEf,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEzB;AACA,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACpD,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;;AAEtD,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM;AACvC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AACpC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AAChC,EAAE;;AAEF;AACA,EAAE,MAAM,GAAG;AACX,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,EAAE;;AAEF;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,EAAE;;AAEF;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI;AAC5B,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;AAC5B,EAAE;;AAEF;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AAClC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,aAAa,EAAE;AAC7B,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEjC,IAAI,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACvC,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,IAAI,IAAI,CAAC,UAAU,EAAE;;AAErB,IAAI,IAAI,aAAa,EAAE;AACvB,MAAM,MAAM,aAAa,CAAC,WAAW,CAAC;AACtC,IAAI;AACJ,EAAE;AACF;;ACjFA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B;AACA,EAAE,WAAW,CAAC,aAAa,EAAE;AAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa;AAC/B,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE;AACxB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE;AAC9D;AACA,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEtC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAErG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACzB,MAAM,KAAK;AACX,MAAM,UAAU;AAChB,MAAM,YAAY;AAClB,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG;AAC9B,KAAK,CAAC;;AAEN,IAAI,IAAI,CAAC,aAAa,EAAE;AACxB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,YAAY,EAAE,wBAAwB,EAAE;AAClE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEtC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;;AAE9E,IAAI,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;AACrC,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,wBAAwB,CAAC;AAC9E,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;;AAEzB;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/E,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEnB;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9D,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM;AACvC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,wBAAwB,CAAC;AAC9E,IAAI,CAAC,EAAE,KAAK,CAAC;AACb,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,wBAAwB,EAAE;AACtE,IAAI,IAAI;AACR,MAAM,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEtD;AACA,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAC/D,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,wBAAwB,EAAE;AACzD,QAAQ,MAAM,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC;AACzD,MAAM;AACN,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,iCAAiC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1C,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE;AAClC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;;AAE1E;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACnD,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAC/D,MAAM,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC;AAC9E,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG;AAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAC9D,MAAM,IAAI,CAAC,MAAM,CAAC;AAClB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE;AACxB,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI;AAC5B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM;AACjC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;AACvC,EAAE;AACF;;ACnJA;AACA;AACA;AACA;;AAEA,MAAM,yBAAyB,GAAG,GAAG;;AAE9B,MAAM,qBAAqB,GAAG,CAAC,IAAI,MAAM;AAChD,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW;AACzB,CAAC,CAAC;;AAEK,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,OAAO,MAAM;AACzD,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI;AAChB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO;AACtB,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK;AAClB,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG;AAC1C,CAAC,CAAC;;AAEK,MAAM,uBAAuB,GAAG,CAAC,EAAE,MAAM;AAChD,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM;AACnB,EAAE,KAAK,EAAE,EAAE,CAAC;AACZ,CAAC,CAAC;;AAEK,MAAM,yBAAyB,GAAG,CAAC,EAAE,MAAM;AAClD,EAAE,MAAM,EAAE,UAAU;AACpB,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,WAAW;AAC9B,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM;AACnB,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC,GAAG;AACxE,CAAC,CAAC;;AAEK,MAAM,wBAAwB,GAAG,CAAC,GAAG,MAAM;AAClD,EAAE,MAAM,EAAE,SAAS;AACnB,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,SAAS;AACjE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC,GAAG;AACtE,CAAC,CAAC;;AAEK,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAChD,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK;AAC9C,EAAE,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AACpC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;AACrB,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACvB,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/C,EAAE,OAAO,GAAG;AACZ,CAAC;AACM,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC;AAChE,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEjE;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,EAAE;AAC7B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE;AACjC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;AACvB,EAAE;;AAEF,EAAE,SAAS,CAAC,GAAG,EAAE;AACjB,IAAI,IAAI;AACR,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,EAAE;AAC/B,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE;AACnC,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC;AACzB,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACvD,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC;AAC3E,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAQ,oBAAoB,EAAE,IAAI;AAClC,QAAQ,KAAK,EAAE,KAAK,CAAC,OAAO;AAC5B,QAAQ,YAAY,EAAE,OAAO,GAAG;AAChC,QAAQ,QAAQ,EAAE,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AACzD,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO,CAAC;AACR,IAAI;AACJ,EAAE;;AAEF,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE;AACjC,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,OAAO,GAAG;AACrD,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,OAAO,GAAG;AAClG,IAAI,IAAI,GAAG,YAAY,IAAI,EAAE,OAAO,qBAAqB,CAAC,GAAG,CAAC;AAC9D,IAAI,IAAI,GAAG,YAAY,KAAK,EAAE;AAC9B,MAAM,OAAO,sBAAsB,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1F,IAAI;AACJ,IAAI,IAAI,GAAG,YAAY,MAAM,EAAE,OAAO,uBAAuB,CAAC,GAAG,CAAC;AAClE,IAAI,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,OAAO,yBAAyB,CAAC,GAAG,CAAC;AACxE,IAAI,OAAO,SAAS;AACpB,EAAE;;AAEF,EAAE,gBAAgB,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE;AACnC,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,OAAO,GAAG;AACrD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC;AACrD,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,OAAO,KAAK;AACzC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC;AAClE,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;AACxE,IAAI,OAAO,wBAAwB,CAAC,GAAG,CAAC;AACxC,EAAE;;AAEF,EAAE,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE;AAC7B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1D,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,EAAE;;AAEF,EAAE,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAC9C,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG;AACpB,QAAQ,oBAAoB,EAAE,IAAI;AAClC,QAAQ,KAAK,EAAE,KAAK,CAAC,OAAO;AAC5B,QAAQ,YAAY,EAAE;AACtB,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF,EAAE,uBAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;AAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;AACvC,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC;AACrD,IAAI,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAClC,MAAM,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC;AACpE,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9E,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG;AACzB,UAAU,oBAAoB,EAAE,IAAI;AACpC,UAAU,KAAK,EAAE,KAAK,CAAC,OAAO;AAC9B,UAAU,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI;AAC5C,SAAS;AACT,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF,EAAE,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE;AAC9B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1D,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAC3D,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;AACtD,IAAI;AACJ,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;AACnD,IAAI,OAAO,MAAM;AACjB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAC3C,MAAM,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAC7C,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AACtE,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,EAAE;;AAEF,EAAE,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE;AAC/B,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,OAAO,GAAG;AACrD,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,OAAO,GAAG;AAClG,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,WAAW,CAAC,GAAG,CAAC;AACtD,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAClG,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,OAAO,aAAa,CAAC,GAAG,CAAC;AAC1D,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,GAAG,CAAC;AAC9D,IAAI,OAAO,SAAS;AACpB,EAAE;;AAEF,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE;AAC7C,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC;AACnD,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,OAAO,KAAK;AACzC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;AAChE,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;AACtE,IAAI,OAAO,GAAG;AACd,EAAE;;AAEF,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE;AAC3B,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACzB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE;AAC9B,QAAQ,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;AAC1E,MAAM,CAAC,MAAM;AACb,QAAQ,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAC1D,MAAM;AACN,IAAI;AACJ,IAAI,OAAO,MAAM;AACjB,EAAE;;AAEF,EAAE,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE;AAC5B,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACzB,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACnF,MAAM,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AAC5B,MAAM,IAAI,KAAK,EAAE,UAAU,EAAE;AAC7B,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;AAC1E,MAAM,CAAC,MAAM;AACb,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC;AAC3D,MAAM;AACN,IAAI;AACJ,IAAI,OAAO,MAAM;AACjB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,GAAG,EAAE;AAC3B,IAAI,IAAI;AACR,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAChC,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAQ,UAAU,EAAE,IAAI;AACxB,QAAQ,OAAO,EAAE,+BAA+B;AAChD,QAAQ,aAAa,EAAE,KAAK,CAAC,OAAO;AACpC,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO,CAAC;AACR,IAAI;AACJ,EAAE;AACF;;AAEA;AACO,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE;;ACpOtD;AACA;AACA;AACA;AACO,MAAM,aAAa,CAAC;AAC3B;AACA,EAAE,WAAW,CAAC,aAAa,EAAE;AAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa;AAC/B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;AACpB,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACzC,MAAM;AACN,KAAK;;AAEL;AACA,IAAI,IAAI,iBAAiB;AACzB,IAAI,IAAI;AACR,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC;;AAE5E;AACA,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;AACzC,QAAQ,oBAAoB,EAAE,IAAI;AAClC,QAAQ,KAAK,EAAE,KAAK,CAAC,OAAO;AAC5B,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3C,QAAQ,UAAU,EAAE,KAAK,CAAC,MAAM;AAChC,QAAQ,YAAY,EAAE;AACtB,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACvD,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAClC,MAAM,IAAI,EAAE;AACZ,KAAK,CAAC;;AAEN,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACtB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACxE,IAAI;;AAEJ,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE;AAC1B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,IAAI,EAAE;AACxB,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAC7B,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AACtC,IAAI;AACJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;AACjC,EAAE;AACF;;ACtEA;AACA;AACA;AACA;AACO,MAAM,qBAAqB,CAAC;AACnC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;AAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;AACxB,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS;AAC9B,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS;AAC9B,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,MAAM,gBAAgB,GAAG;AAC7B,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,MAAM,EAAE,EAAE;AAChB,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;;AAEL,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AACzD,MAAM,gBAAgB,CAAC,OAAO,GAAG,KAAK;AACtC,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACvE,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;AACrF,MAAM,gBAAgB,CAAC,OAAO,GAAG,KAAK;AACtC,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC;AAC/E,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC/D,MAAM,gBAAgB,CAAC,OAAO,GAAG,KAAK;AACtC,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC;AAC1E,IAAI;;AAEJ,IAAI,OAAO,gBAAgB;AAC3B,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,0BAA0B,GAAG;AAC/B,IAAI,MAAM,kBAAkB,GAAG;AAC/B,MAAM,WAAW,EAAE,KAAK;AACxB,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;;AAEL,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACvC,MAAM,kBAAkB,CAAC,MAAM,GAAG,8BAA8B;AAChE,MAAM,OAAO,kBAAkB;AAC/B,IAAI;;AAEJ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC3B,MAAM,kBAAkB,CAAC,MAAM,GAAG,4CAA4C;AAC9E,MAAM,OAAO,kBAAkB;AAC/B,IAAI;;AAEJ,IAAI,kBAAkB,CAAC,WAAW,GAAG,IAAI;AACzC,IAAI,OAAO,kBAAkB;AAC7B,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,OAAO;AACX,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,SAAS,EAAE,IAAI,CAAC;AACtB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,aAAa,EAAE;AACrB,KAAK;AACL,EAAE;AACF;;ACvFA;AACA;AACA;AACA;AACO,MAAM,yBAAyB,CAAC;AACvC,EAAE,WAAW,CAAC,aAAa,EAAE;AAC7B,IAAI,IAAI,CAAC,aAAa,GAAG,aAAa;AACtC,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI;AAClB,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK;AAC5B,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf;AACA,IAAI,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;AAChE,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACnC,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,KAAK,EAAE,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO;AACP,IAAI;;AAEJ,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,EAAE;AAC7E,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACxC,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,KAAK,EAAE,iBAAiB,CAAC,MAAM;AACvC,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO;AACP,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;AAC1D,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACrC,QAAQ,OAAO;AACf,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,KAAK,EAAE,gBAAgB,CAAC,KAAK;AACvC,UAAU,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AAC3C,SAAS;AACT,MAAM;;AAEN,MAAM,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE;AACnC,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI;;AAE7B,MAAM,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;AAChF,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,KAAK,EAAE,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACnD,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACpC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AACnD,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;;AAErE,MAAM,OAAO,CAAC,OAAO,GAAG,MAAM;AAC9B,QAAQ,OAAO,CAAC;AAChB,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,KAAK,EAAE,yBAAyB;AAC1C,UAAU,EAAE,EAAE;AACd,SAAS,CAAC;AACV,MAAM,CAAC;;AAEP,MAAM,OAAO,CAAC,eAAe,GAAG,CAAC,KAAK,KAAK;AAC3C,QAAQ,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;AACtC,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;;AAE/D,QAAQ,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AAC7D,UAAU,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;AAC7D,QAAQ;AACR,MAAM,CAAC;;AAEP,MAAM,OAAO,CAAC,SAAS,GAAG,MAAM;AAChC,QAAQ,OAAO,CAAC;AAChB,UAAU,OAAO,EAAE,IAAI;AACvB,UAAU,KAAK,EAAE,IAAI;AACrB,UAAU,EAAE,EAAE,OAAO,CAAC;AACtB,SAAS,CAAC;AACV,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AAClB,MAAM,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;AAC5G,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;AACrB,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI;AACpB,MAAM,IAAI,CAAC,WAAW,GAAG,KAAK;AAC9B,MAAM,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;AAChF,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,0BAA0B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;AACzH,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI;AAC/C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI;AACtD,EAAE;AACF;;AC7HA;AACA;AACA;AACA;AACO,MAAM,0BAA0B,CAAC;AACxC,EAAE,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE;AAChD,IAAI,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC9C,IAAI,IAAI,CAAC,aAAa,GAAG,aAAa;AACtC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAClC;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AACjD,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACnD;AACA,IAAI,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;AACzD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAClC;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AACjD,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACnD;AACA,IAAI,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;AAC1D,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,WAAW,EAAE;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AACjD,IAAI,OAAO,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;AACpD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,oBAAoB,CAAC,SAAS,EAAE;AACxC,IAAI,MAAM,eAAe,GAAG;AAC5B,MAAM,OAAO,EAAE,KAAK;AACpB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;;AAEL,IAAI,IAAI;AACR,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACnD,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AACpD;AACA,MAAM,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;AAC3C;AACA,MAAM,eAAe,CAAC,OAAO,GAAG,IAAI;AACpC,MAAM,eAAe,CAAC,IAAI,GAAG,MAAM;AACnC;AACA,MAAM,OAAO,eAAe;AAC5B,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,eAAe,CAAC,KAAK,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACzE,MAAM,OAAO,eAAe;AAC5B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,qBAAqB,CAAC,SAAS,EAAE;AACzC,IAAI,MAAM,eAAe,GAAG;AAC5B,MAAM,OAAO,EAAE,KAAK;AACpB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;;AAEL,IAAI,IAAI;AACR,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACpD,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AACpD;AACA,MAAM,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;AAC3C;AACA,MAAM,eAAe,CAAC,OAAO,GAAG,IAAI;AACpC,MAAM,eAAe,CAAC,IAAI,GAAG,MAAM;AACnC;AACA,MAAM,OAAO,eAAe;AAC5B,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,eAAe,CAAC,KAAK,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC1E,MAAM,OAAO,eAAe;AAC5B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,uBAAuB,GAAG;AAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,EAAE;AACvD,MAAM,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AAC/C,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,OAAO;AACX,MAAM,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE;AACvE,MAAM,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,SAAS;AACzD,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;AACL,EAAE;AACF;;AC3HA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;AAC5C,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;AAChF,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC;AAC9E,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC;AACxG,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;;AAE1D,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC7B,MAAM,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,UAAU,CAAC,KAAK,CAAC;AACnF,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ,IAAI,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;AACtD,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;AACvD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE;AACxD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;;AAEtD,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC9B,MAAM,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,WAAW,CAAC,KAAK,CAAC;AAC/E,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE;AACvD,EAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM;AACpC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS;AACvC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS;AACvC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AAC/C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE;AACvD,EAAE;AACF;;ACrGA;AACA;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B,EAAE,WAAW,CAAC,eAAe,EAAE,oBAAoB,EAAE;AACrD,IAAI,IAAI,CAAC,eAAe,GAAG,eAAe;AAC1C,IAAI,IAAI,CAAC,oBAAoB,GAAG,oBAAoB;AACpD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;AACpB,IAAI,IAAI,CAAC,uBAAuB,EAAE;;AAElC,IAAI,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC;AAC1E,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;;AAEvF,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,KAAK,EAAE,cAAc;AAC3B,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACzC,MAAM,UAAU,EAAE,CAAC;AACnB,MAAM,kBAAkB,EAAE,mBAAmB,CAAC;AAC9C,KAAK;;AAEL,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/D,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAAE;AACrD,MAAM,OAAO,EAAE;AACf,IAAI;;AAEJ,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AAC7E,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC1C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAAE;AACrD,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ,IAAI,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3E,IAAI,OAAO,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI;AACzD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,EAAE,EAAE;AACnB,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAClC,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChE,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE;AAC5B,IAAI,IAAI,CAAC,uBAAuB,EAAE;;AAElC,IAAI,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACnD,IAAI,IAAI,CAAC,WAAW,EAAE;AACtB,MAAM,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AACvC,IAAI;;AAEJ,IAAI,MAAM,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE;AACtD,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACtE,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,GAAG;AAChB,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAClC,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AAC7D,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,GAAG;AAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAAE;AACrD,MAAM,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AAC/C,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,SAAS,EAAE;AAClC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,MAAM,IAAI;AACV,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;AACrE,QAAQ,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AAC7E,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;AACxC;AACA,QAAQ,OAAO,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;AACzD,QAAQ,OAAO,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACrD,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,MAAM;AACN,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,SAAS,EAAE;AACnC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,MAAM,IAAI;AACV,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;AACtE,QAAQ,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AAC7E,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;AACxC;AACA,QAAQ,OAAO,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;AACzD,QAAQ,OAAO,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACrD,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,MAAM;AACN,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,QAAQ,EAAE;AAC7B,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3D,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,OAAO,EAAE;AAC3B,IAAI,MAAM,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;AACtF,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;;AAE1F,IAAI,OAAO;AACX,MAAM,GAAG,OAAO;AAChB,MAAM,KAAK,EAAE,iBAAiB;AAC9B,MAAM,oBAAoB,EAAE,qBAAqB,CAAC;AAClD,KAAK;AACL,EAAE;AACF;;ACzKA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,EAAE,WAAW,CAAC,cAAc,EAAE,aAAa,EAAE;AAC7C,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc;AACxC,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa;AAC/B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE;AACvD,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,MAAM,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC;AAClE,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9D;AACA,MAAM,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AACtC,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACtD;AACA,UAAU,IAAI,iBAAiB;AAC/B,UAAU,IAAI;AACd,YAAY,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AAChD,cAAc,iBAAiB,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1E,YAAY,CAAC,MAAM;AACnB,cAAc,iBAAiB,GAAG,IAAI,CAAC,KAAK;AAC5C,YAAY;AACZ,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC;AACpF,YAAY,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAChD,YAAY;AACZ,UAAU;AACV;AACA,UAAU,IAAI,YAAY,EAAE;AAC5B,YAAY,IAAI;AAChB,cAAc,MAAM,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;AACjF;AACA;AACA,cAAc,IAAI,cAAc,EAAE;AAClC,gBAAgB,MAAM,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7C,cAAc,CAAC,MAAM;AACrB,gBAAgB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AACpD,cAAc;AACd;AACA,cAAc,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,YAAY,CAAC,CAAC,OAAO,KAAK,EAAE;AAC5B,cAAc,OAAO,CAAC,IAAI,CAAC,CAAC,qCAAqC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACrF;AACA;AACA,cAAc,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;AACrD,YAAY;AACZ,UAAU;AACV,QAAQ,CAAC,MAAM;AACf,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC,+CAA+C,CAAC,CAAC;AACvG,UAAU,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,QAAQ;AACR,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AACtE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,mBAAmB,CAAC,EAAE,EAAE;AAChC,IAAI,IAAI;AACR,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;AACpE,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE;AAC7C,UAAU,UAAU,EAAE,WAAW,CAAC,UAAU,GAAG;AAC/C,SAAS,CAAC;AACV,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC;AAC5E,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,EAAE,EAAE;AAC7B,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1C,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;AACxE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,mBAAmB,GAAG;AAC9B,IAAI,IAAI;AACR,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC3D,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7F;AACA,MAAM,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;AACvC,QAAQ,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAAC;AAC5F,MAAM;AACN;AACA,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,kCAAkC,EAAE,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAC7F,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC;AAC7E,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,aAAa,GAAG;AACxB,IAAI,IAAI;AACR,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC3D;AACA,MAAM,MAAM,KAAK,GAAG;AACpB,QAAQ,UAAU,EAAE,QAAQ,CAAC,MAAM;AACnC,QAAQ,iBAAiB,EAAE,EAAE;AAC7B,QAAQ,iBAAiB,EAAE;AAC3B,OAAO;;AAEP,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,QAAQ,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACrF,QAAQ,KAAK,CAAC,iBAAiB,GAAG,YAAY,GAAG,QAAQ,CAAC,MAAM;AAChE;AACA,QAAQ,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;AACjC,UAAU,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAC5C,UAAU,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9F,QAAQ,CAAC,CAAC;AACV,MAAM;;AAEN,MAAM,OAAO,KAAK;AAClB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC;AAC5E,MAAM,OAAO;AACb,QAAQ,UAAU,EAAE,CAAC;AACrB,QAAQ,iBAAiB,EAAE,EAAE;AAC7B,QAAQ,iBAAiB,EAAE;AAC3B,OAAO;AACP,IAAI;AACJ,EAAE;AACF;;AC1JA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG;AAClC,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAChC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;AACrD,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM;AAC/E,QAAQ,OAAO,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;AACpE,MAAM,CAAC,CAAC;AACR,IAAI;AACJ,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAChH,EAAE,CAAC;;AAEH,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AACxB,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;AACrD,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM;AAC/E,QAAQ,OAAO,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;AACpE,MAAM,CAAC,CAAC;AACR,IAAI;AACJ,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,EAAE,CAAC;;AAEH,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAC1B,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACtC,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;;AAEpE,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;AAChD,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;;AAE3C,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG;AAC/C,UAAU,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AACvE,UAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/C,MAAM,OAAO,cAAc,GAAG,MAAM;AACpC,IAAI;AACJ,IAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC9C,EAAE,CAAC;;AAEH,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAC1B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;AACrD,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM;AAC/E,QAAQ,OAAO,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;AACpE,MAAM,CAAC,CAAC;AACR,IAAI;AACJ,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,EAAE,CAAC;;AAEH,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAC3B,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AACtE,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,EAAE,CAAC;;AAEH,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAC3B,IAAI,OAAO,OAAO,IAAI,CAAC,UAAU,KAAK,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;AACjF,EAAE,CAAC;;AAEH,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAC5B,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AACtE,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1D,EAAE;AACF,CAAC;;AAED;AACA,kBAAkB,CAAC,QAAQ,GAAG,kBAAkB,CAAC,MAAM;AACvD,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,MAAM;;AAE7C,MAAM,eAAe,GAAG;AAC/B,EAAE,WAAW,EAAE,aAAa;AAC5B,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,QAAQ,EAAE,UAGZ,CAAC;;AAED;AACA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG;AAC3C,IAAI,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,KAAK;AAC1D,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;;AAEjE;AACA;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,6EAA6E;;AAElG,IAAI,IAAI,OAAO,CAAC,kBAAkB,KAAK,KAAK,EAAE;AAC9C,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B,IAAI;;AAEJ,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AACvB,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,IAAI;AACJ,EAAE;;AAEF,EAAE,eAAe,GAAG;AACpB,IAAI,MAAM,YAAY,GAAG;AACzB,MAAM,EAAE,OAAO,EAAE,yCAAyC,EAAE,QAAQ,EAAE,eAAe,CAAC,WAAW,EAAE;AACnG,MAAM,EAAE,OAAO,EAAE,sCAAsC,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE;AACxF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE;AAC5D,MAAM,EAAE,OAAO,EAAE,mCAAmC,EAAE,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE;AACvF,MAAM,EAAE,OAAO,EAAE,+DAA+D,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ;AACpH,KAAK;;AAEL,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpD,EAAE;;AAEF,EAAE,OAAO,CAAC,IAAI,EAAE;AAChB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACpB,MAAM,GAAG,IAAI;AACb,MAAM,gBAAgB,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO;AACvG,MAAM,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;AAChE,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;AACtC,KAAK,CAAC;AACN,EAAE;;AAEF,EAAE,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE;AACrC,IAAI,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AAC1C,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;AAC3C,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,CAAC,IAAI,EAAE;AAChB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,OAAO,IAAI;;AAExD,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;AACtD,MAAM,MAAM,EAAE,CAAC,GAAG,KAAK;AACvB,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1E,QAAQ,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC1E,QAAQ,OAAO,GAAG;AAClB,MAAM;AACN,KAAK;;AAEL,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;AACxD,EAAE;;AAEF,EAAE,UAAU,CAAC,IAAI,EAAE;AACnB,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAC9D,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;AAC3C,MAAM,OAAO,GAAG;AAChB,IAAI,CAAC,EAAE,EAAE,CAAC;AACV,EAAE;;AAEF,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE;AACxB,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;;AAE7D,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,IAAI,OAAO,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;AACrF,EAAE;;AAEF,EAAE,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;AAC7B,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AACzF,IAAI,OAAO,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;AAChC,EAAE;AACF;;AAEO,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;;ACrK1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,gBAAgB;AACzD,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,kBAAkB;AACrD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,KAAK,EAAE;AACnB,IAAI,IAAI;AACR;AACA,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACjD,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;AACvH,MAAM;;AAEN;AACA,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC;;AAEnE,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,IAAI,EAAE,cAAc;AAC5B,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO;AACP,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC5C,QAAQ,KAAK,EAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACnD,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,cAAc,EAAE;AAC9B,IAAI,IAAI;AACR;AACA,MAAM,IAAI,CAAC,cAAc,EAAE;AAC3B,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;AAC5F,MAAM;;AAEN,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC;;AAE1E,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,IAAI,EAAE,gBAAgB;AAC9B,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO;AACP,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,IAAI,EAAE,EAAE;AAChB,QAAQ,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;AACrD,QAAQ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACzC,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,KAAK,EAAE;AAClC,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,qBAAqB;AACjC,MAAM,OAAO,EAAE,KAAK,CAAC,OAAO;AAC5B,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,0BAA0B,CAAC,KAAK,EAAE;AACpC,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,uBAAuB;AACnC,MAAM,OAAO,EAAE,KAAK,CAAC,OAAO;AAC5B,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,MAAM,eAAe,GAAG;AAC5B,MAAM,oBAAoB,EAAE,IAAI;AAChC,MAAM,KAAK,EAAE,KAAK,CAAC,OAAO;AAC1B,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACzC,MAAM,YAAY,EAAE;AACpB,KAAK;;AAEL,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;AAC1C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,MAAM,EAAE;AACvB,IAAI,OAAO,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;AACrD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ;AAC7D,EAAE;AACF;;ACxIA,MAAM,eAAe,GAAG,qBAAqB;AAC7C,MAAM,kBAAkB,GAAG,CAAC;AAC5B,MAAM,kBAAkB,GAAG,aAAa;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,uBAAuB,CAAC;AACrC,EAAE,WAAW,CAAC,aAAa,EAAE,IAAI,GAAG,EAAE,EAAE;AACxC,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa;AAC/B,IAAI,IAAI,CAAC,mBAAmB,GAAG,KAAK;;AAEpC,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,eAAe;AACtE,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM;AACN,KAAK;AACL,IAAI,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,IAAI,oBAAoB,EAAE;AACvF,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACpH,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;;AAE9G,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC/B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,oBAAoB,GAAG;AAC/B,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AACvD,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB;AAClE,QAAQ,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC;AACnE,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,KAAK,CAAC;AACjF,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3C,MAAM,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC;AACpE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC;AAC/E,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM,OAAO,EAAE;AACf,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AACjD,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,KAAK,CAAC;AACrF,MAAM,OAAO,EAAE;AACf,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,EAAE,EAAE;AACnB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1C,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC;AACnF,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE;AACvD,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,EAAE,cAAc,CAAC;AAC/E,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,mBAAmB,GAAG;AAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE;AACtD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM,OAAO;AACb,QAAQ,UAAU,EAAE,CAAC;AACrB,QAAQ,iBAAiB,EAAE,EAAE;AAC7B,QAAQ,iBAAiB,EAAE,CAAC;AAC5B,QAAQ,WAAW,EAAE;AACrB,OAAO;AACP,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACrE,MAAM,OAAO;AACb,QAAQ,GAAG,UAAU;AACrB,QAAQ,WAAW,EAAE,IAAI,CAAC,WAAW;AACrC,OAAO;AACP,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AACtE,MAAM,OAAO;AACb,QAAQ,UAAU,EAAE,CAAC;AACrB,QAAQ,iBAAiB,EAAE,EAAE;AAC7B,QAAQ,iBAAiB,EAAE,CAAC;AAC5B,QAAQ,WAAW,EAAE,IAAI,CAAC,WAAW;AACrC,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;AACjF,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,KAAK,GAAG;AAChB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACvC,MAAM,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC;AAC7D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC;AAC9E,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAChC,IAAI,IAAI,CAAC,mBAAmB,GAAG,KAAK;AACpC,EAAE;AACF;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,KAAK,CAAC;AACnB;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,EAAE;AACzB;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,oBAAoB,EAAE;AAC3D,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,kBAAkB;;AAErD;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5D,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5D,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACrE,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEzE;AACA,IAAI,IAAI,CAAC,cAAc,EAAE;AACzB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,KAAK,KAAK;AAChD,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,QAAQ,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;AAC5D,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;;AAExE;AACA,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC;;AAEzC;AACA,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,MAAM;AACN,IAAI,CAAC;;AAEL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,KAAK,KAAK;AAC/C,MAAM,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,IAAI,CAAC;;AAEL,IAAI,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,OAAO,EAAE,KAAK;AACxD,MAAM,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAClC,IAAI,CAAC;;AAEL;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,KAAK;AACpE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC;AACjE,IAAI,CAAC;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AACjC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,EAAE;AAC1C;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE;AACvC,MAAM,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC;AACzE,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;;AAElD;AACA,IAAI,MAAM,kBAAkB,GAAG;AAC/B,QAAQ,EAAE,GAAG,YAAY,EAAE,OAAO;AAClC,QAAQ,YAAY;;AAEpB;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,kBAAkB,CAAC;AACzE,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;;AAEvD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,IAAI,EAAE,UAAU;AACtB,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,WAAW,EAAE;AAC/B;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACtG,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;;AAElD;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC;AAClE,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;;AAEvD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,IAAI,EAAE,UAAU;AACtB,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,UAAU,CAAC,IAAI,EAAE;AACnB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE;AAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC;AAC/D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,GAAG;AAC5B,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB;AACtC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AAC7B,MAAM,IAAI,CAAC,KAAK,CAAC;AACjB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,KAAK,GAAG;AAChB,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACpD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,UAAU,GAAG;AACrB,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE;;AAEtB;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AAC/B,MAAM,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC;AACzE,MAAM,MAAM,IAAI,CAAC,iBAAiB,EAAE;AACpC,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC1C,IAAI,OAAO;AACX,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvC,MAAM,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAC5C,MAAM,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC7C,MAAM,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;AACrD,MAAM,UAAU,EAAE,MAAM,CAAC;AACzB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,GAAG;AAC3B,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AAChE,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AACvC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;AAC9C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACtB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACtB,EAAE;AACF;;AAEA;AACO,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;;ACpOhC;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG;AAC3B;AACA;AACA;AACA,EAAE,SAAS,EAAE,MAAM,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW;;AAEnF;AACA;AACA;AACA,EAAE,SAAS,EAAE,OAAO,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,EAAE,CAAC;;AAEhE;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,CAAC,OAAO,KAAK;AACvB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK;AACxD,MAAM,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,OAAO,IAAI;AAChE,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;AAC/D,IAAI,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI;AACxC,EAAE,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK;AAC/C,IAAI,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,UAAU,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;AAC/F,IAAI,OAAO,KAAK,GAAG,IAAI,EAAE,GAAG,QAAQ;AACpC,EAAE;AACF,CAAC;;ACnCD;AACA;AACA;AACO,MAAM,SAAS,GAAG;AACzB;AACA;AACA;AACA,EAAE,oBAAoB,EAAE;AACxB,IAAI,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;AACpE,IAAI,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB;AAC7E,IAAI,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc;AAC7E,IAAI,cAAc,EAAE,MAAM,EAAE,YAAY;AACxC,IAAI,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU;AACzD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEd;AACA;AACA;AACA,EAAE,gBAAgB,EAAE,CAAC,EAAE,KAAK;AAC5B,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,SAAS;AAC7D,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AAChB,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,EAAE,CAAC;;AAEH;AACA;AACA;AACA,EAAE,iBAAiB,EAAE,CAAC,EAAE,KAAK;AAC7B;AACA,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,KAAK,CAAC,EAAE,OAAO,IAAI;AAC7C,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;AACjD,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI;AAC5E,IAAI,OAAO,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC;AACxD,EAAE,CAAC;;AAEH;AACA;AACA;AACA,EAAE,qBAAqB,EAAE,CAAC,EAAE,KAAK;AACjC;AACA,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,KAAK,CAAC,EAAE,OAAO,IAAI;;AAErE;AACA,IAAI,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC;AACxF,EAAE,CAAC;;AAEH;AACA;AACA;AACA,EAAE,gBAAgB,EAAE,CAAC,EAAE,KAAK;AAC5B;AACA,IAAI,IAAI,CAAC,EAAE,EAAE,OAAO,SAAS;;AAE7B,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;AACxC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;AACvC,IAAI,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,IAAI,EAAE,CAAC,SAAS;AACrE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9D,QAAQ,EAAE;;AAEV,IAAI,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAClC,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG;AAC1B,EAAE;;AAEF,EAAE,IAAI,GAAG;AACT;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE;;AAElC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtD,IAAI,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE;AACtB,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM;;AAE5B;AACA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;;AAEnC,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;AACtD,IAAI,IAAI,CAAC,MAAM,EAAE;;AAEjB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AACjC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,IAAI,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW;AACjE,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,GAAG,GAAG;AAC5C,IAAI,OAAO,SAAS;AACpB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,MAAM,EAAE;AAC3B,IAAI,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC;;AAEvD,IAAI,eAAe,CAAC,GAAG,CAAC;AACxB,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,OAAO,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC9C,MAAM,IAAI,EAAE;AACZ,QAAQ,QAAQ;AAChB,QAAQ,OAAO,EAAE,MAAM,CAAC,OAAO;AAC/B,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI;AAC7B,QAAQ,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;AAC3C,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI;AAC5E;AACA,KAAK,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;AAEnD,IAAI,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAC7D,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,EAAE;AACF;;AC7IA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,kBAAkB,KAAK;AAC5E,EAAE,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;AAChC,EAAE,IAAI;AACN,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;AAClC,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE;AAClB;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC7D,IAAI;AACJ,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK;AAC1D;AACA,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,EAAE,OAAO,IAAI;;AAEnD,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpC,EAAE,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC;;AAE1C;AACA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO;;AAE5B,EAAE,OAAO;AACT,IAAI,MAAM;AACV,IAAI,QAAQ;AACZ,IAAI,QAAQ;AACZ,IAAI,OAAO;AACX,IAAI,OAAO,EAAE,MAAM;AACnB;AACA,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE;AACxC,QAAQ,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ;AACnC,MAAM;AACN,IAAI;AACJ,GAAG;AACH,CAAC;;ACzDD;AACA;AACA;;;AAKA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;;AAExD,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,KAAK;AACvD,MAAM,OAAO,CAAC,GAAG,IAAI,KAAK;AAC1B;AACA,QAAQ,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AACvF,QAAQ,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC;;AAEjG,QAAQ,eAAe,CAAC,GAAG,CAAC;AAC5B,UAAU,QAAQ,EAAE,SAAS;AAC7B,UAAU,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9C,UAAU,IAAI,EAAE;AAChB,YAAY,GAAG;AACf,YAAY,MAAM;AAClB,YAAY,SAAS,EAAE,IAAI,CAAC,GAAG;AAC/B;AACA,SAAS,CAAC;;AAEV;AACA,QAAQ,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3C,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;AAEvB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC1B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,EAAE;AACF;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,CAAC,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK;AAC/F,EAAE,IAAI,OAAO,SAAS,EAAE,UAAU,KAAK,UAAU,EAAE;AACnD,IAAI,OAAO,SAAS,CAAC,UAAU,EAAE;AACjC,EAAE;AACF,EAAE,IAAI,OAAO,SAAS,EAAE,eAAe,KAAK,UAAU,EAAE;AACxD,IAAI,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;AACpC,IAAI,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC;AACpC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3E,EAAE;AACF,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;;AAED;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG;AACjC,EAAE,MAAM,EAAE;AACV,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,qBAAqB,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC;AACxF,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,MAAM,SAAS,CAAC,QAAQ,CAAC;AACrF,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,qBAAqB,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC;AACxF,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO;AAC5D,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;AAChC,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;AAClC,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;AAC1C,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;AAC5C,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;AAC1C,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;AAChC,KAAK,CAAC,CAAC;AACP,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,qBAAqB,EAAE,MAAM;AACnE,MAAM,IAAI;AACV,QAAQ,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;AAC/D,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC;AACjC,IAAI,CAAC,CAAC;AACN,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,yBAAyB,EAAE,MAAM,SAAS,CAAC,aAAa,CAAC;AACpG,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,SAAS,CAAC,UAAU;AAC1F,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACpF,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,0BAA0B,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACjG,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3F,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrF,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC;AACnF,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC;AAC1E,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO;AAClE,MAAM,KAAK,EAAE,MAAM,CAAC,UAAU;AAC9B,MAAM,MAAM,EAAE,MAAM,CAAC;AACrB,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM;AAChE,MAAM,IAAI;AACV,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;AAC3C,QAAQ,OAAO;AACf,UAAU,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;AAC3C,UAAU,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM;AAC9C,UAAU,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;AACvC,SAAS;AACT,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC;AACjC,IAAI,CAAC,CAAC;AACN,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM;AACpE,MAAM,IAAI;AACV,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc;AAC7C,QAAQ,OAAO;AACf,UAAU,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;AAC3C,UAAU,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM;AAC9C,UAAU,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;AACvC,SAAS;AACT,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC;AACjC,IAAI,CAAC;AACL,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC;AAC/E,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,SAAS,KAAK,WAAW,KAAK,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM;AAC7K,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,gBAAgB;AAChG,MAAM,OAAO;AACb,QAAQ,aAAa,EAAE,IAAI,CAAC,aAAa;AACzC,QAAQ,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC/B,QAAQ,GAAG,EAAE,IAAI,CAAC;AAClB,OAAO;AACP,IAAI,CAAC;AACL,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACpF,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,0BAA0B,EAAE,MAAM,QAAQ,CAAC,eAAe,CAAC;AACnG,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO;AAC5E,MAAM,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO;AAC7C,MAAM,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE;AACnC,MAAM,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC;AACN,GAAG;AACH,EAAE,WAAW,EAAE;AACf,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO;AACjE,MAAM,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC;AACnE,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC;AACrE,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,GAAG,OAAO;AACpE,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO;AACjE,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,eAAe;AACzD,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC;AACvC,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,SAAS,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,iBAAiB,EAAE;AAC3D,IAAI,SAAS,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC7C,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE;AACpF;AACA,CAAC;;AAED;AACA;AACA;AACA,MAAM,sBAAsB,GAAG;AAC/B,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;AACzD,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;AACtC,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;AACxC,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;AACrC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY;AAClC,CAAC;;AAED;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI;AACzB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,CAAC,aAAa,GAAG,EAAE,EAAE;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;;AAEtD,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK;AACnE,MAAM,IAAI;AACV,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACjD,QAAQ,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;;AAE/F,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAClE,QAAQ,IAAI,MAAM,EAAE;AACpB,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC1D,QAAQ;AACR,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,4CAA4C,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACnF,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE;AAClD,MAAM;AACN,MAAM,OAAO,GAAG;AAChB,IAAI,CAAC,EAAE,EAAE,CAAC;AACV,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AACzC,IAAI,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC7D,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,OAAO,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,IAAI,IAAI;AACxF,MAAM,MAAM,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAe,EAAE;AACnE,KAAK;;AAEL,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC;AAC/C,IAAI,OAAO,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;AAC9C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,eAAe,CAAC,MAAM,EAAE;AAC1B,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/B,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AACzE,IAAI;AACJ,IAAI,OAAO,MAAM,IAAI,EAAE;AACvB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE;AACtC,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,KAAK;AACpD,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;AACxC,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,OAAO,MAAM;;AAErD,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;AACxC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE;AAClB,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,sCAAsC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9E,QAAQ,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI;AAChC,MAAM;AACN,MAAM,OAAO,MAAM;AACnB,IAAI,CAAC,EAAE,EAAE,CAAC;AACV,EAAE;;AAEF,EAAE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE;AACjC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;AACpC,EAAE;;AAEF,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAC3E,IAAI,OAAO,IAAI,CAAC,SAAS;AACzB,EAAE;;AAEF;AACA,EAAE,gBAAgB,CAAC,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE;AAChF,IAAI,OAAO,cAAc,CAAC,SAAS,CAAC;AACpC,EAAE;;AAEF,EAAE,iBAAiB,GAAG;AACtB,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAC5C,EAAE;;AAEF,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK;AAChF,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM;AACxB,MAAM,OAAO,GAAG;AAChB,IAAI,CAAC,EAAE,EAAE,CAAC;AACV,EAAE;;AAEF,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,SAAS;AACzB,EAAE;AACF;;AAEO,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE;;ACxOtD;AACA;AACA;AACO,MAAM,WAAW,GAAG;AAC3B,EAAE,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,MAAM;AACtE,IAAI,IAAI,EAAE,oBAAoB;AAC9B,IAAI,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAClE,IAAI,WAAW,EAAE,eAAe,CAAC,MAAM,EAAE;AACzC,IAAI,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACrC,GAAG,CAAC;;AAEJ,EAAE,sBAAsB,EAAE,CAAC,KAAK,MAAM;AACtC,IAAI,IAAI,EAAE,qBAAqB;AAC/B,IAAI,KAAK,EAAE;AACX,MAAM,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,mCAAmC;AAC3E,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK;AAChC,KAAK;AACL,IAAI,WAAW,EAAE,eAAe,CAAC,MAAM,EAAE;AACzC,IAAI,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACrC,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI;AAC5B,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAChC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE;AAC3E,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI;AAC/B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE;AACnD,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE;AAC/C,IAAI,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE;AAC1C,IAAI,IAAI,CAAC,eAAe,GAAG,eAAe;AAC1C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE;;AAElC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAChC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAChC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;;AAEpC,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,QAAQ,KAAK;AAC9D,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK;AACxD,QAAQ,MAAM,OAAO,GAAG,WAAW,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;AACjG,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACjC,QAAQ,OAAO,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,yBAAyB,CAAC;AAC9G,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;;AAEjD,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,QAAQ,KAAK;AAC/E,MAAM,OAAO,CAAC,KAAK,KAAK;AACxB,QAAQ,MAAM,OAAO,GAAG,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACjE,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACjC,QAAQ,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,sCAAsC,CAAC;AACpF,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE;AACvB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI;AACrG,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;AAC3D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAChC,IAAI,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE;AACpC,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI;AAC5B,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAChC,EAAE;AACF;;AC/GA;AACA;AACA;;;AAMA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,aAAa,GAAG,KAAK;AAC9B,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,0BAA0B,EAAE;AAClC,KAAK;;AAEL,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE;AAC7B,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,gBAAgB,EAAE,CAAC;AACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAC;AACtD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,gBAAgB,EAAE,CAAC;AACvD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE;AAC/C;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;AAC/F,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT;AACA,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;;AAE5B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;AAE7B,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI;AAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC;AACpF,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;;AAE7B,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;;AAEhC,IAAI,IAAI,CAAC,aAAa,GAAG,KAAK;AAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;AACxD,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,MAAM,EAAE;AACvB,IAAI,MAAM,YAAY,GAAG;AACzB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC3D,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACzD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B;AACnG,KAAK;;AAEL,IAAI;AACJ,OAAO,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;AAClC,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9C,OAAO,MAAM,CAAC,WAAW,IAAI,WAAW,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,UAAU;AACrF,OAAO,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACpD,EAAE;;AAEF;AACA,EAAE,IAAI,gBAAgB,GAAG,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/D,EAAE,IAAI,gBAAgB,GAAG,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9D,EAAE,IAAI,gBAAgB,GAAG,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/D;;AAEO,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE;;AC/F9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAUA,MAAM,aAAa,CAAC;AACpB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;AACzB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,SAAS,EAAE,EAAE;AACnB,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,mBAAmB,EAAE,IAAI;AAC/B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,0BAA0B,EAAE,IAAI;AACtC,MAAM,YAAY,EAAE,GAAG;AACvB,MAAM,OAAO,EAAE;AACf,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEvB,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,IAAI,YAAY,CAAC,IAAI,EAAE;;AAEvB;AACA,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI;AAC1C,MAAM,OAAO,CAAC,IAAI,CAAC,8DAA8D,EAAE,GAAG,CAAC;AACvF,IAAI,CAAC,CAAC;;AAEN,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI;AACxB,IAAI,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC;AACpF,EAAE;;AAEF;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,KAAK,CAAC,SAAS,CAAC;AACpB,MAAM,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AACpC,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAClC,MAAM,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB;AAC1D,MAAM,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;AAC5C,MAAM,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI;AACpH,KAAK,CAAC;;AAEN,IAAI,eAAe,CAAC,iBAAiB,GAAG,CAAC,KAAK,KAAK;AACnD,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,KAAK,CAAC,qBAAqB,EAAE,EAAE;AAC9D,QAAQ,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC;AACtC,MAAM;AACN,IAAI,CAAC;;AAEL,IAAI,YAAY,CAAC,SAAS,CAAC;AAC3B,MAAM,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;AAC9C,MAAM,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;AAC5C,MAAM,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;AAC9C,MAAM,0BAA0B,EAAE,IAAI,CAAC,MAAM,CAAC,0BAA0B;AACxE,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAC3B,KAAK,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE;;AAE/C;AACA,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;AACtB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG;AAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;AAC/D,IAAI;;AAEJ,IAAI,IAAI,CAAC,YAAY,EAAE;;AAEvB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,cAAc;AAC5F,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AAC9C,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,OAAO,eAAe,CAAC,MAAM,EAAE;AACnC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,gBAAgB,GAAG;AACrB,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACjC,IAAI,MAAM,YAAY,GAAG;AACzB,MAAM,IAAI,EAAE,cAAc;AAC1B,MAAM,KAAK,EAAE;AACb,QAAQ,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;AAC/C,QAAQ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO;AACnC,QAAQ,KAAK,EAAE,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AACxC,MAAM,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AACvC,KAAK;;AAEL,IAAI,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;AAC1C,IAAI,OAAO,YAAY;AACvB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,KAAK,GAAG;AAChB,IAAI,MAAM,KAAK,CAAC,UAAU,EAAE;AAC5B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC7B,MAAM,WAAW,EAAE,eAAe,CAAC,KAAK,EAAE;AAC1C,MAAM,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;AAC7B,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM;AAC9B,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,IAAI,KAAK,CAAC,OAAO,EAAE;AACnB,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;AACzB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC7C,EAAE;AACF;;AAEA;AACK,MAAC,aAAa,GAAG,IAAI,aAAa;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/core/breadcrumbs/BreadcrumbStore.js","../src/core/agent/ConfigurationManager.js","../src/core/agent/QueueManager.js","../src/core/retry/RetryManager.js","../src/utils/RobustSerializer.js","../src/core/agent/HttpTransport.js","../src/core/database/DatabaseConfigManager.js","../src/core/database/DatabaseConnectionManager.js","../src/core/database/DatabaseTransactionManager.js","../src/core/database/DatabaseManager.js","../src/core/database/StorageManager.js","../src/core/retry/RetryLogicManager.js","../src/utils/DataMaskingManager.js","../src/core/database/SerializationManager.js","../src/core/persistent/PersistentBufferManager.js","../src/core/agent/Agent.js","../src/utils/Environment.js","../src/interceptors/ClickInterceptor.js","../src/utils/FunctionWrapper.js","../src/interceptors/FetchInterceptor.js","../src/core/context/ContextCollector.js","../src/interceptors/ErrorInterceptor.js","../src/interceptors/Interceptors.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbStore - User action timeline storage\n * Maintains a history of the last user actions.\n * Does not know about Agent or sending; the orchestrator wires onBreadcrumbAdded to decide what to do.\n */\nexport class BreadcrumbStore {\n constructor(maxBreadcrumbs = 25) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n this.breadcrumbs = [];\n /** @type {((crumb: object) => void)|null} Optional callback when a breadcrumb is added (set by orchestrator). */\n this.onBreadcrumbAdded = null;\n }\n\n /**\n * Configures the maximum breadcrumb size\n * @param {number} maxBreadcrumbs - New maximum size\n */\n setMaxBreadcrumbs(maxBreadcrumbs) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n\n // If new size is smaller, remove excess breadcrumbs\n if (this.breadcrumbs.length > this.maxBreadcrumbs) {\n this.breadcrumbs = this.breadcrumbs.slice(-this.maxBreadcrumbs);\n }\n }\n\n /**\n * Gets current maximum size\n * @returns {number} Maximum breadcrumb size\n */\n getMaxBreadcrumbs() {\n return this.maxBreadcrumbs;\n }\n\n /**\n * Adds a breadcrumb to the list\n * @param {Object} crumb - The breadcrumb to add\n * @param {string} crumb.category - Event category (ui, network, error, etc.)\n * @param {string} crumb.message - Descriptive message\n * @param {Object} [crumb.data] - Optional additional data\n */\n add(crumb) {\n const breadcrumb = {\n ...crumb,\n timestamp: new Date().toISOString(),\n };\n\n // Functional limit management\n this.breadcrumbs = [...this.breadcrumbs, breadcrumb].slice(-this.maxBreadcrumbs);\n\n if (this.onBreadcrumbAdded) {\n try {\n this.onBreadcrumbAdded(breadcrumb);\n } catch (error) {\n console.warn('SyntropyFront: Error in onBreadcrumbAdded:', error);\n }\n }\n }\n\n /**\n * Returns all breadcrumbs\n * @returns {Array} List of all breadcrumbs\n */\n getAll() {\n return [...this.breadcrumbs];\n }\n\n /**\n * Clears all breadcrumbs\n */\n clear() {\n this.breadcrumbs = [];\n }\n\n /**\n * Gets current breadcrumb count\n * @returns {number} Breadcrumb count\n */\n count() {\n return this.breadcrumbs.length;\n }\n\n /**\n * Gets breadcrumbs by category\n * @param {string} category - Category to filter\n * @returns {Array} Breadcrumbs of the specified category\n */\n getByCategory(category) {\n return this.breadcrumbs.filter(b => b.category === category);\n }\n}\n\n// Singleton instance\nexport const breadcrumbStore = new BreadcrumbStore();","/**\n * ConfigurationManager - Handles Agent configuration\n * Single Responsibility: Manage configuration and validation\n */\nexport class ConfigurationManager {\n constructor() {\n this.endpoint = null;\n this.headers = {\n 'Content-Type': 'application/json'\n };\n this.batchSize = 10;\n this.batchTimeout = null;\n this.isEnabled = false;\n this.sendBreadcrumbs = false;\n this.encrypt = null;\n this.usePersistentBuffer = false;\n this.maxRetries = 5;\n this.baseDelay = 1000;\n this.maxDelay = 30000;\n this.samplingRate = 1.0; // 100% by default\n }\n\n /**\n * Configures the manager\n * @param {Object} config - Configuration\n */\n configure(config) {\n this.endpoint = config.endpoint;\n this.headers = { ...this.headers, ...config.headers };\n this.batchSize = config.batchSize || this.batchSize;\n this.batchTimeout = config.batchTimeout;\n this.isEnabled = !!config.endpoint;\n this.encrypt = config.encrypt || null;\n this.usePersistentBuffer = config.usePersistentBuffer === true;\n this.maxRetries = config.maxRetries || this.maxRetries;\n this.samplingRate = typeof config.samplingRate === 'number' ? config.samplingRate : this.samplingRate;\n\n // Simple logic: if batchTimeout exists = send breadcrumbs, else = errors only\n this.sendBreadcrumbs = !!config.batchTimeout;\n }\n\n /**\n * Checks if the agent is enabled\n */\n isAgentEnabled() {\n return this.isEnabled;\n }\n\n /**\n * Checks if it should send breadcrumbs\n */\n shouldSendBreadcrumbs() {\n return this.sendBreadcrumbs;\n }\n\n /**\n * Gets the current configuration\n */\n getConfig() {\n return {\n endpoint: this.endpoint,\n headers: this.headers,\n batchSize: this.batchSize,\n batchTimeout: this.batchTimeout,\n isEnabled: this.isEnabled,\n sendBreadcrumbs: this.sendBreadcrumbs,\n encrypt: this.encrypt,\n usePersistentBuffer: this.usePersistentBuffer,\n maxRetries: this.maxRetries,\n baseDelay: this.baseDelay,\n maxDelay: this.maxDelay,\n samplingRate: this.samplingRate\n };\n }\n}\n","/**\n * QueueManager - Send queue and batching.\n * Contract: add(item) enqueues or triggers flush; flush(cb) passes items to cb and clears queue; getSize/isEmpty/getAll are read-only.\n */\nexport class QueueManager {\n /** @param {{ batchSize: number, batchTimeout: number|null }} configManager */\n constructor(configManager) {\n this.config = configManager;\n this.queue = [];\n this.batchTimer = null;\n this.flushCallback = null;\n }\n\n /**\n * Adds an item; may trigger immediate or scheduled flush.\n * @param {Object} item - Item to enqueue (non-null)\n */\n add(item) {\n // Guard: Avoid null items\n if (!item) return;\n\n this.queue.push(item);\n\n // Guard: Immediate flush if batchSize is reached\n if (this.queue.length >= this.config.batchSize) {\n return this.flush(this.flushCallback);\n }\n\n // Guard: Only set Timer if one doesn't exist and we have a timeout configured\n if (!this.config.batchTimeout || this.batchTimer) return;\n\n this.batchTimer = setTimeout(() => {\n this.flush(this.flushCallback);\n }, this.config.batchTimeout);\n }\n\n /** @returns {Array<Object>} Copy of the queue */\n getAll() {\n return [...this.queue];\n }\n\n /** Clears the queue and cancels the timer. */\n clear() {\n this.queue = [];\n this.clearTimer();\n }\n\n /** Cancels the scheduled flush timer. */\n clearTimer() {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = null;\n }\n }\n\n /** @returns {number} Queue length */\n getSize() {\n return this.queue.length;\n }\n\n /** @returns {boolean} */\n isEmpty() {\n return this.queue.length === 0;\n }\n\n /**\n * Sends current items to the callback and clears the queue.\n * @param {(items: Array<Object>) => Promise<void>|void} flushCallback\n * @returns {Promise<void>}\n */\n async flush(flushCallback) {\n if (this.queue.length === 0) return;\n\n const itemsToSend = [...this.queue];\n this.queue = [];\n this.clearTimer();\n\n if (flushCallback) {\n await flushCallback(itemsToSend);\n }\n }\n}\n","/**\n * RetryManager - Retries with exponential backoff.\n * Contract: addToRetryQueue enqueues and schedules; processRetryQueue(sendCb, removeCb) processes ready items.\n */\nexport class RetryManager {\n /** @param {{ baseDelay: number, maxDelay: number, maxRetries: number }} configManager */\n constructor(configManager) {\n this.config = configManager;\n this.retryQueue = [];\n this.retryTimer = null;\n }\n\n /**\n * Enqueues items for retry (delay = min(baseDelay*2^(retryCount-1), maxDelay)).\n * @param {Array<Object>} items\n * @param {number} [retryCount=1]\n * @param {number|null} [persistentId=null]\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n // Guard: Avoid empty items\n if (!items || items.length === 0) return;\n\n const delay = Math.min(this.config.baseDelay * Math.pow(2, retryCount - 1), this.config.maxDelay);\n\n this.retryQueue.push({\n items,\n retryCount,\n persistentId,\n nextRetry: Date.now() + delay\n });\n\n this.scheduleRetry();\n }\n\n /**\n * Processes items with nextRetry <= now; calls sendCallback and removePersistentCallback on success.\n * @param {(items: Array<Object>) => Promise<void>} sendCallback\n * @param {(id: number) => Promise<void>} removePersistentCallback\n * @returns {Promise<void>}\n */\n async processRetryQueue(sendCallback, removePersistentCallback) {\n this.retryTimer = null;\n if (this.retryQueue.length === 0) return;\n\n const now = Date.now();\n const itemsToRetry = this.retryQueue.filter(item => item.nextRetry <= now);\n\n for (const item of itemsToRetry) {\n await this.handleRetryItem(item, sendCallback, removePersistentCallback);\n }\n\n // Schedule next retry if items remain (Functional)\n if (this.retryQueue.length > 0) {\n this.scheduleRetry();\n }\n }\n\n /**\n * Schedules the next retry (Guard Clause style)\n */\n scheduleRetry() {\n // Guard: Avoid multiple simultaneous timers\n if (this.retryTimer) return;\n\n // Functional: Find the first item that needs a retry\n const nextItem = this.retryQueue.find(item => item.nextRetry <= Date.now());\n if (!nextItem) return;\n\n // Guard: Calculate delay and schedule\n const delay = Math.max(0, nextItem.nextRetry - Date.now());\n this.retryTimer = setTimeout(() => {\n this.processRetryQueue(this.sendCallback, this.removePersistentCallback);\n }, delay);\n }\n\n /**\n * Handles an individual retry item (SOLID: Single Responsibility)\n * @private\n */\n async handleRetryItem(item, sendCallback, removePersistentCallback) {\n try {\n if (sendCallback) await sendCallback(item.items);\n\n // Success: Clear state\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n if (item.persistentId && removePersistentCallback) {\n await removePersistentCallback(item.persistentId);\n }\n console.log(`SyntropyFront: Successful retry (${item.retryCount})`);\n } catch (error) {\n this.handleRetryFailure(item, error);\n }\n }\n\n /**\n * Manages a retry failure\n * @private\n */\n handleRetryFailure(item, error) {\n console.warn(`SyntropyFront: Retry ${item.retryCount} failed:`, error);\n\n // Guard: Maximum retries reached\n if (item.retryCount >= this.config.maxRetries) {\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n console.error('SyntropyFront: Item exceeded maximum retries, data lost');\n return;\n }\n\n // Increment and reschedule\n item.retryCount++;\n item.nextRetry = Date.now() + Math.min(\n this.config.baseDelay * Math.pow(2, item.retryCount - 1),\n this.config.maxDelay\n );\n }\n\n /**\n * Clears the retry queue\n */\n clear() {\n this.retryQueue = [];\n this.clearTimer();\n }\n\n /**\n * Clears the timer\n */\n clearTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n\n /**\n * Gets the retry queue size\n */\n getSize() {\n return this.retryQueue.length;\n }\n\n /**\n * Checks if the retry queue is empty\n */\n isEmpty() {\n return this.retryQueue.length === 0;\n }\n}\n","/**\n * Pure type-specific fragments: serialization/deserialization without state.\n * Testable in isolation; state (circularRefs) is handled by RobustSerializer.\n */\n\nconst MAX_STRING_SNIPPET_LENGTH = 200;\n\nexport const serializedShapeOfDate = (date) => ({\n __type: 'Date',\n value: date.toISOString()\n});\n\nexport const serializedShapeOfError = (err, recurse) => ({\n __type: 'Error',\n name: err.name,\n message: err.message,\n stack: err.stack,\n cause: err.cause ? recurse(err.cause) : undefined\n});\n\nexport const serializedShapeOfRegExp = (re) => ({\n __type: 'RegExp',\n source: re.source,\n flags: re.flags\n});\n\nexport const serializedShapeOfFunction = (fn) => ({\n __type: 'Function',\n name: fn.name || 'anonymous',\n length: fn.length,\n toString: `${fn.toString().substring(0, MAX_STRING_SNIPPET_LENGTH)}...`\n});\n\nexport const serializedShapeOfUnknown = (obj) => ({\n __type: 'Unknown',\n constructor: obj.constructor ? obj.constructor.name : 'Unknown',\n toString: `${String(obj).substring(0, MAX_STRING_SNIPPET_LENGTH)}...`\n});\n\nexport const restoreDate = (obj) => new Date(obj.value);\nexport const restoreError = (obj, recurse) => {\n const err = new Error(obj.message);\n err.name = obj.name;\n err.stack = obj.stack;\n if (obj.cause) err.cause = recurse(obj.cause);\n return err;\n};\nexport const restoreRegExp = (obj) => new RegExp(obj.source, obj.flags);\nexport const restoreFunction = (obj) => `[Function: ${obj.name}]`;\n\n/**\n * RobustSerializer - Robust serialization with circular references.\n * Composes pure type-specific fragments; state (seen, circularRefs) only in arrays/objects.\n */\nexport class RobustSerializer {\n constructor() {\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n }\n\n serialize(obj) {\n try {\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n return JSON.stringify(this.makeSerializable(obj));\n } catch (error) {\n console.error('SyntropyFront: Error in robust serialization:', error);\n return JSON.stringify({\n __serializationError: true,\n error: error.message,\n originalType: typeof obj,\n isObject: obj !== null && typeof obj === 'object',\n timestamp: new Date().toISOString()\n });\n }\n }\n\n _serializeKnownType(obj, path) {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') return obj;\n if (obj instanceof Date) return serializedShapeOfDate(obj);\n if (obj instanceof Error) {\n return serializedShapeOfError(obj, (x) => this.makeSerializable(x, `${path}.cause`));\n }\n if (obj instanceof RegExp) return serializedShapeOfRegExp(obj);\n if (typeof obj === 'function') return serializedShapeOfFunction(obj);\n return undefined;\n }\n\n makeSerializable(obj, path = '') {\n if (obj === null || obj === undefined) return obj;\n const known = this._serializeKnownType(obj, path);\n if (known !== undefined) return known;\n if (Array.isArray(obj)) return this._serializeArray(obj, path);\n if (typeof obj === 'object') return this._serializeObject(obj, path);\n return serializedShapeOfUnknown(obj);\n }\n\n _serializeArray(obj, path) {\n if (this.seen.has(obj)) return { __circular: true, refId: this.circularRefs.get(obj) };\n this.seen.add(obj);\n this.circularRefs.set(obj, `ref_${++this.refCounter}`);\n return obj.map((item, i) => this.makeSerializable(item, `${path}[${i}]`));\n }\n\n _serializeObjectKey(result, obj, key, path) {\n try {\n result[key] = this.makeSerializable(obj[key], `${path}.${key}`);\n } catch (error) {\n result[key] = {\n __serializationError: true,\n error: error.message,\n propertyName: key\n };\n }\n }\n\n _serializeObjectSymbols(obj, path, result) {\n if (!Object.getOwnPropertySymbols) return;\n const symbols = Object.getOwnPropertySymbols(obj);\n for (const symbol of symbols) {\n const symKey = `__symbol_${symbol.description || 'anonymous'}`;\n try {\n result[symKey] = this.makeSerializable(obj[symbol], `${path}[Symbol]`);\n } catch (error) {\n result[symKey] = {\n __serializationError: true,\n error: error.message,\n symbolName: symbol.description || 'anonymous'\n };\n }\n }\n }\n\n _serializeObject(obj, path) {\n if (this.seen.has(obj)) return { __circular: true, refId: this.circularRefs.get(obj) };\n this.seen.add(obj);\n this.circularRefs.set(obj, `ref_${++this.refCounter}`);\n const result = {};\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n this._serializeObjectKey(result, obj, key, path);\n }\n this._serializeObjectSymbols(obj, path, result);\n return result;\n }\n\n /**\n * Deserializes a serialized object with circular references\n * @param {string} jsonString - JSON string to deserialize\n * @returns {any} Deserialized object\n */\n deserialize(jsonString) {\n try {\n const parsed = JSON.parse(jsonString);\n return this.restoreCircularRefs(parsed);\n } catch (error) {\n console.error('SyntropyFront: Error in deserialization:', error);\n return null;\n }\n }\n\n _restoreKnownType(obj, refs) {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') return obj;\n if (obj.__type === 'Date') return restoreDate(obj);\n if (obj.__type === 'Error') return restoreError(obj, (x) => this.restoreCircularRefs(x, refs));\n if (obj.__type === 'RegExp') return restoreRegExp(obj);\n if (obj.__type === 'Function') return restoreFunction(obj);\n return undefined;\n }\n\n restoreCircularRefs(obj, refs = new Map()) {\n const known = this._restoreKnownType(obj, refs);\n if (known !== undefined) return known;\n if (Array.isArray(obj)) return this._restoreArray(obj, refs);\n if (typeof obj === 'object') return this._restoreObject(obj, refs);\n return obj;\n }\n\n _restoreArray(obj, refs) {\n const result = [];\n refs.set(obj, result);\n for (let i = 0; i < obj.length; i++) {\n if (obj[i]?.__circular) {\n result[i] = refs.has(obj[i].refId) ? refs.get(obj[i].refId) : null;\n } else {\n result[i] = this.restoreCircularRefs(obj[i], refs);\n }\n }\n return result;\n }\n\n _restoreObject(obj, refs) {\n const result = {};\n refs.set(obj, result);\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key) || key.startsWith('__')) continue;\n const value = obj[key];\n if (value?.__circular) {\n result[key] = refs.has(value.refId) ? refs.get(value.refId) : null;\n } else {\n result[key] = this.restoreCircularRefs(value, refs);\n }\n }\n return result;\n }\n\n /**\n * Safely serializes for logging (simplified version)\n * @param {any} obj - Object to serialize\n * @returns {string} Safe JSON string for logs\n */\n serializeForLogging(obj) {\n try {\n return this.serialize(obj);\n } catch (error) {\n return JSON.stringify({\n __logError: true,\n message: 'Error serializing for logging',\n originalError: error.message,\n timestamp: new Date().toISOString()\n });\n }\n }\n}\n\n// Singleton instance\nexport const robustSerializer = new RobustSerializer();\n","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * HttpTransport - HTTP send to the backend.\n * Contract: send(items) serializes and POSTs; applyEncryption(data) applies config.encrypt if present; isConfigured() by endpoint.\n */\nexport class HttpTransport {\n /** @param {{ endpoint: string|null, headers: Object, encrypt?: function }} configManager */\n constructor(configManager) {\n this.config = configManager;\n }\n\n /**\n * Serializes items, applies encrypt if configured, POSTs to endpoint.\n * @param {Array<Object>} items - Items to send\n * @returns {Promise<Object>} response.json()\n * @throws {Error} If HTTP !ok or network failure\n */\n async send(items) {\n const payload = {\n timestamp: new Date().toISOString(),\n items\n };\n\n // ✅ ROBUST SERIALIZATION: Use serializer that handles circular references\n let serializedPayload;\n try {\n serializedPayload = robustSerializer.serialize(payload);\n } catch (error) {\n console.error('SyntropyFront: Error in payload serialization:', error);\n\n // Fallback: attempt basic serialization with error info\n serializedPayload = JSON.stringify({\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n itemsCount: items.length,\n fallbackData: 'Serialization failed, data not sent'\n });\n }\n\n const response = await fetch(this.config.endpoint, {\n method: 'POST',\n headers: this.config.headers,\n body: serializedPayload\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Applies encryption if configured.\n * @param {*} data - Data to encrypt\n * @returns {*} Encrypted data or unchanged\n */\n applyEncryption(data) {\n if (this.config.encrypt) {\n return this.config.encrypt(data);\n }\n return data;\n }\n\n /** @returns {boolean} */\n isConfigured() {\n return !!this.config.endpoint;\n }\n}\n","/**\n * DatabaseConfigManager - Handles IndexedDB configuration\n * Single responsibility: Validate and manage database configuration\n */\nexport class DatabaseConfigManager {\n constructor(dbName, dbVersion, storeName) {\n this.dbName = dbName;\n this.dbVersion = dbVersion;\n this.storeName = storeName;\n }\n\n /**\n * Validates that the configuration is correct\n * @returns {Object} Validation result\n */\n validateConfig() {\n const validationResult = {\n isValid: true,\n errors: [],\n timestamp: new Date().toISOString()\n };\n\n if (!this.dbName || typeof this.dbName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('dbName must be a non-empty string');\n }\n\n if (!this.dbVersion || typeof this.dbVersion !== 'number' || this.dbVersion < 1) {\n validationResult.isValid = false;\n validationResult.errors.push('dbVersion must be a number greater than 0');\n }\n\n if (!this.storeName || typeof this.storeName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('storeName must be a non-empty string');\n }\n\n return validationResult;\n }\n\n /**\n * Checks if IndexedDB is available in the environment\n * @returns {Object} Availability result\n */\n checkIndexedDBAvailability() {\n const availabilityResult = {\n isAvailable: false,\n reason: null,\n timestamp: new Date().toISOString()\n };\n\n if (typeof window === 'undefined') {\n availabilityResult.reason = 'Not in a browser environment';\n return availabilityResult;\n }\n\n if (!window.indexedDB) {\n availabilityResult.reason = 'IndexedDB is not available in this browser';\n return availabilityResult;\n }\n\n availabilityResult.isAvailable = true;\n return availabilityResult;\n }\n\n /**\n * Returns the current configuration\n * @returns {Object} Configuration\n */\n getConfig() {\n return {\n dbName: this.dbName,\n dbVersion: this.dbVersion,\n storeName: this.storeName\n };\n }\n\n /**\n * Returns the object store configuration\n * @returns {Object} Store configuration\n */\n getStoreConfig() {\n return {\n keyPath: 'id',\n autoIncrement: true\n };\n }\n} ","/**\n * DatabaseConnectionManager - Handles IndexedDB connection.\n * Single responsibility: Manage opening and closing of connections. Uses guard clauses (return early).\n */\nexport class DatabaseConnectionManager {\n constructor(configManager) {\n this.configManager = configManager;\n this.db = null;\n this.isAvailable = false;\n }\n\n /**\n * Initializes the connection to IndexedDB\n * @returns {Promise<Object>} Init result\n */\n async init() {\n // Guard: validate configuration\n const configValidation = this.configManager.validateConfig();\n if (!configValidation.isValid) {\n return {\n success: false,\n error: `Invalid configuration: ${configValidation.errors.join(', ')}`,\n timestamp: new Date().toISOString()\n };\n }\n\n const availabilityCheck = this.configManager.checkIndexedDBAvailability();\n if (!availabilityCheck.isAvailable) {\n return {\n success: false,\n error: availabilityCheck.reason,\n timestamp: new Date().toISOString()\n };\n }\n\n try {\n const connectionResult = await this.openConnection();\n if (!connectionResult.success) {\n return {\n success: false,\n error: connectionResult.error,\n timestamp: new Date().toISOString()\n };\n }\n\n this.db = connectionResult.db;\n this.isAvailable = true;\n\n return { success: true, error: null, timestamp: new Date().toISOString() };\n } catch (error) {\n return {\n success: false,\n error: `Unexpected error: ${error.message}`,\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Opens the connection to IndexedDB\n */\n openConnection() {\n return new Promise((resolve) => {\n const config = this.configManager.getConfig();\n const request = indexedDB.open(config.dbName, config.dbVersion);\n\n request.onerror = () => {\n resolve({\n success: false,\n error: 'Error opening IndexedDB',\n db: null\n });\n };\n\n request.onupgradeneeded = (event) => {\n const db = event.target.result;\n const storeConfig = this.configManager.getStoreConfig();\n\n if (!db.objectStoreNames.contains(config.storeName)) {\n db.createObjectStore(config.storeName, storeConfig);\n }\n };\n\n request.onsuccess = () => {\n resolve({\n success: true,\n error: null,\n db: request.result\n });\n };\n });\n }\n\n /**\n * Closes the database connection\n */\n close() {\n // Guard: no active connection\n if (!this.db) {\n return { success: false, error: 'No active connection to close', timestamp: new Date().toISOString() };\n }\n\n try {\n this.db.close();\n this.db = null;\n this.isAvailable = false;\n return { success: true, error: null, timestamp: new Date().toISOString() };\n } catch (error) {\n return { success: false, error: `Error closing connection: ${error.message}`, timestamp: new Date().toISOString() };\n }\n }\n\n /**\n * Returns whether the database is available\n */\n isDatabaseAvailable() {\n return this.isAvailable && this.db !== null;\n }\n\n /**\n * Returns the database instance\n */\n getDatabase() {\n return this.isDatabaseAvailable() ? this.db : null;\n }\n}","/**\n * DatabaseTransactionManager - Handles IndexedDB transactions\n * Single responsibility: Manage read and write transactions\n */\nexport class DatabaseTransactionManager {\n constructor(connectionManager, configManager) {\n this.connectionManager = connectionManager;\n this.configManager = configManager;\n }\n\n /**\n * Returns a read transaction\n * @returns {IDBTransaction} Read transaction\n * @throws {Error} If the database is not available\n */\n getReadTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readonly');\n }\n\n /**\n * Returns a write transaction\n * @returns {IDBTransaction} Write transaction\n * @throws {Error} If the database is not available\n */\n getWriteTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readwrite');\n }\n\n /**\n * Returns the object store for a transaction\n * @param {IDBTransaction} transaction - Active transaction\n * @returns {IDBObjectStore} Object store\n */\n getObjectStore(transaction) {\n const config = this.configManager.getConfig();\n return transaction.objectStore(config.storeName);\n }\n\n /**\n * Executes a read operation safely\n * @param {Function} operation - Operation to execute\n * @returns {Promise<Object>} Operation result\n */\n async executeReadOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getReadTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error in read operation: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Executes a write operation safely\n * @param {Function} operation - Operation to execute\n * @returns {Promise<Object>} Operation result\n */\n async executeWriteOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getWriteTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error in write operation: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Ensures the database is available\n * @throws {Error} If the database is not available\n */\n ensureDatabaseAvailable() {\n if (!this.connectionManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Returns transaction status information\n * @returns {Object} Transaction status\n */\n getTransactionStatus() {\n return {\n isDatabaseAvailable: this.connectionManager.isDatabaseAvailable(),\n storeName: this.configManager.getConfig().storeName,\n timestamp: new Date().toISOString()\n };\n }\n} ","import { DatabaseConfigManager } from './DatabaseConfigManager.js';\nimport { DatabaseConnectionManager } from './DatabaseConnectionManager.js';\nimport { DatabaseTransactionManager } from './DatabaseTransactionManager.js';\n\n/**\n * DatabaseManager - Coordinates IndexedDB access.\n * Single responsibility: Coordinate specialized managers. Uses guard clauses.\n */\nexport class DatabaseManager {\n constructor(dbName, dbVersion, storeName) {\n this.configManager = new DatabaseConfigManager(dbName, dbVersion, storeName);\n this.connectionManager = new DatabaseConnectionManager(this.configManager);\n this.transactionManager = new DatabaseTransactionManager(this.connectionManager, this.configManager);\n }\n\n /**\n * Initializes the connection to IndexedDB\n */\n async init() {\n const initResult = await this.connectionManager.init();\n\n if (!initResult.success) {\n console.warn('SyntropyFront: Error initializing database:', initResult.error);\n return false;\n }\n\n console.log('SyntropyFront: Database initialized');\n return true;\n }\n\n /**\n * Returns a read transaction\n */\n getReadTransaction() {\n return this.transactionManager.getReadTransaction();\n }\n\n /**\n * Returns a write transaction\n */\n getWriteTransaction() {\n return this.transactionManager.getWriteTransaction();\n }\n\n /**\n * Closes the database connection\n */\n close() {\n const closeResult = this.connectionManager.close();\n\n if (!closeResult.success) {\n console.warn('SyntropyFront: Error closing database:', closeResult.error);\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns whether the database is available\n */\n isDatabaseAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n\n // ===== Compatibility properties =====\n\n /**\n * @deprecated Usar configManager.getConfig().dbName\n */\n get dbName() {\n return this.configManager.dbName;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().dbVersion\n */\n get dbVersion() {\n return this.configManager.dbVersion;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().storeName\n */\n get storeName() {\n return this.configManager.storeName;\n }\n\n /**\n * @deprecated Usar connectionManager.getDatabase()\n */\n get db() {\n return this.connectionManager.getDatabase();\n }\n\n /**\n * @deprecated Usar connectionManager.isDatabaseAvailable()\n */\n get isAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n}\n","/**\n * StorageManager - Handles IndexedDB CRUD operations\n * Single responsibility: Manage storage and retrieval operations\n */\nexport class StorageManager {\n constructor(databaseManager, serializationManager) {\n this.databaseManager = databaseManager;\n this.serializationManager = serializationManager;\n }\n\n /**\n * Saves items to storage\n * @param {Array} items - Items to save\n * @returns {Promise<number>} Saved item ID\n */\n async save(items) {\n this.ensureDatabaseAvailable();\n\n const serializationResult = this.serializationManager.serialize(items);\n const serializedData = this.serializationManager.getData(serializationResult, '[]');\n\n const item = {\n items: serializedData,\n timestamp: new Date().toISOString(),\n retryCount: 0,\n serializationError: serializationResult.error\n };\n\n return this.executeWriteOperation(store => store.add(item));\n }\n\n /**\n * Retrieves all items from storage\n * @returns {Promise<Array>} Deserialized items\n */\n async retrieve() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return [];\n }\n\n const rawItems = await this.executeReadOperation(store => store.getAll());\n return this.deserializeItems(rawItems);\n }\n\n /**\n * Retrieves a single item by ID\n * @param {number} id - Item ID\n * @returns {Promise<Object|null>} Deserialized item or null\n */\n async retrieveById(id) {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return null;\n }\n\n const rawItem = await this.executeReadOperation(store => store.get(id));\n return rawItem ? this.deserializeItem(rawItem) : null;\n }\n\n /**\n * Removes an item from storage\n * @param {number} id - ID of the item to remove\n * @returns {Promise<void>}\n */\n async remove(id) {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.delete(id));\n }\n\n /**\n * Updates an item in storage\n * @param {number} id - Item ID\n * @param {Object} updates - Fields to update\n * @returns {Promise<number>} Updated item ID\n */\n async update(id, updates) {\n this.ensureDatabaseAvailable();\n\n const currentItem = await this.retrieveById(id);\n if (!currentItem) {\n throw new Error('Item not found');\n }\n\n const updatedItem = { ...currentItem, ...updates };\n return this.executeWriteOperation(store => store.put(updatedItem));\n }\n\n /**\n * Clears all storage\n * @returns {Promise<void>}\n */\n async clear() {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.clear());\n }\n\n // ===== Private declarative methods =====\n\n /**\n * Ensures the database is available\n * @throws {Error} If the database is not available\n */\n ensureDatabaseAvailable() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Executes a read operation in a declarative way\n * @param {Function} operation - Operation to run on the store\n * @returns {Promise<*>} Operation result\n */\n executeReadOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getReadTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Executes a write operation in a declarative way\n * @param {Function} operation - Operation to run on the store\n * @returns {Promise<*>} Operation result\n */\n executeWriteOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getWriteTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Deserializes an array of items\n * @param {Array} rawItems - Raw items from the database\n * @returns {Array} Deserialized items\n */\n deserializeItems(rawItems) {\n return rawItems.map(item => this.deserializeItem(item));\n }\n\n /**\n * Deserializes a single item\n * @param {Object} rawItem - Raw item from the database\n * @returns {Object} Deserialized item\n */\n deserializeItem(rawItem) {\n const deserializationResult = this.serializationManager.deserialize(rawItem.items);\n const deserializedItems = this.serializationManager.getData(deserializationResult, []);\n\n return {\n ...rawItem,\n items: deserializedItems,\n deserializationError: deserializationResult.error\n };\n }\n} ","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * RetryLogicManager - Handles retry logic and cleanup\n * Single responsibility: Manage retries and cleanup of failed items\n */\nexport class RetryLogicManager {\n constructor(storageManager, configManager) {\n this.storageManager = storageManager;\n this.config = configManager;\n }\n\n /**\n * Attempts to send failed items from the persistent buffer\n * @param {Function} sendCallback - Callback to send items\n * @param {Function} removeCallback - Callback to remove successful items\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.storageManager) {\n console.warn('SyntropyFront: Storage manager not available');\n return;\n }\n\n try {\n const failedItems = await this.storageManager.retrieve();\n \n for (const item of failedItems) {\n if (item.retryCount < this.config.maxRetries) {\n // Deserialize items from buffer\n let deserializedItems;\n try {\n if (typeof item.items === 'string') {\n deserializedItems = robustSerializer.deserialize(item.items);\n } else {\n deserializedItems = item.items;\n }\n } catch (error) {\n console.error('SyntropyFront: Error deserializing buffer items:', error);\n await this.removeFailedItem(item.id);\n continue;\n }\n \n if (sendCallback) {\n try {\n await sendCallback(deserializedItems, item.retryCount + 1, item.id);\n \n // On successful send, remove from buffer\n if (removeCallback) {\n await removeCallback(item.id);\n } else {\n await this.removeFailedItem(item.id);\n }\n \n console.log(`SyntropyFront: Retry successful for item ${item.id}`);\n } catch (error) {\n console.warn(`SyntropyFront: Retry failed for item ${item.id}:`, error);\n \n // Increment retry count\n await this.incrementRetryCount(item.id);\n }\n }\n } else {\n console.warn(`SyntropyFront: Item ${item.id} exceeded maximum retries, removing from buffer`);\n await this.removeFailedItem(item.id);\n }\n }\n } catch (error) {\n console.error('SyntropyFront: Error processing retries:', error);\n }\n }\n\n /**\n * Increments the retry count for an item\n * @param {number} id - Item ID\n */\n async incrementRetryCount(id) {\n try {\n const currentItem = await this.storageManager.retrieveById(id);\n if (currentItem) {\n await this.storageManager.update(id, {\n retryCount: currentItem.retryCount + 1\n });\n }\n } catch (error) {\n console.error('SyntropyFront: Error incrementing retry count:', error);\n }\n }\n\n /**\n * Removes a failed item from the buffer\n * @param {number} id - Item ID\n */\n async removeFailedItem(id) {\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removing failed item:', error);\n }\n }\n\n /**\n * Cleans items that have exceeded the maximum retry count\n */\n async cleanupExpiredItems() {\n try {\n const allItems = await this.storageManager.retrieve();\n const expiredItems = allItems.filter(item => item.retryCount >= this.config.maxRetries);\n \n for (const item of expiredItems) {\n await this.removeFailedItem(item.id);\n console.warn(`SyntropyFront: Item ${item.id} removed for exceeding maximum retries`);\n }\n \n if (expiredItems.length > 0) {\n console.log(`SyntropyFront: Cleanup completed, ${expiredItems.length} items removed`);\n }\n } catch (error) {\n console.error('SyntropyFront: Error cleaning up expired items:', error);\n }\n }\n\n /**\n * Returns retry statistics\n */\n async getRetryStats() {\n try {\n const allItems = await this.storageManager.retrieve();\n \n const stats = {\n totalItems: allItems.length,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n\n if (allItems.length > 0) {\n const totalRetries = allItems.reduce((sum, item) => sum + item.retryCount, 0);\n stats.averageRetryCount = totalRetries / allItems.length;\n \n allItems.forEach(item => {\n const retryCount = item.retryCount;\n stats.itemsByRetryCount[retryCount] = (stats.itemsByRetryCount[retryCount] || 0) + 1;\n });\n }\n\n return stats;\n } catch (error) {\n console.error('SyntropyFront: Error getting retry statistics:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n }\n }\n} ","/**\n * Functional Fragments: Pure masking strategies.\n */\nexport const MASKING_STRATEGIES = {\n credit_card: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `${rule.maskChar.repeat(4)}-${rule.maskChar.repeat(4)}-${rule.maskChar.repeat(4)}-${clean.slice(-4)}`;\n },\n\n ssn: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `***-**-${clean.slice(-4)}`;\n },\n\n email: (value, rule) => {\n const atIndex = value.indexOf('@');\n if (atIndex <= 0) return MASKING_STRATEGIES.default(value, rule);\n\n const username = value.substring(0, atIndex);\n const domain = value.substring(atIndex);\n\n if (rule.preserveLength) {\n const maskedUsername = username.length > 1\n ? username.charAt(0) + rule.maskChar.repeat(username.length - 1)\n : rule.maskChar.repeat(username.length);\n return maskedUsername + domain;\n }\n return `${username.charAt(0)}***${domain}`;\n },\n\n phone: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `${rule.maskChar.repeat(3)}-${rule.maskChar.repeat(3)}-${clean.slice(-4)}`;\n },\n\n secret: (value, rule) => {\n if (rule.preserveLength) return rule.maskChar.repeat(value.length);\n return rule.maskChar.repeat(8);\n },\n\n custom: (value, rule) => {\n return typeof rule.customMask === 'function' ? rule.customMask(value) : value;\n },\n\n default: (value, rule) => {\n if (rule.preserveLength) return rule.maskChar.repeat(value.length);\n return rule.maskChar.repeat(Math.min(value.length, 8));\n }\n};\n\n// Compatibility Aliases\nMASKING_STRATEGIES.password = MASKING_STRATEGIES.secret;\nMASKING_STRATEGIES.token = MASKING_STRATEGIES.secret;\n\nexport const MaskingStrategy = {\n CREDIT_CARD: 'credit_card',\n SSN: 'ssn',\n EMAIL: 'email',\n PHONE: 'phone',\n PASSWORD: 'password',\n TOKEN: 'token',\n CUSTOM: 'custom'\n};\n\n/**\n * DataMaskingManager - PII Obfuscation Engine.\n * Implements Strategy Pattern (SOLID: OCP).\n */\nexport class DataMaskingManager {\n constructor(options = {}) {\n this.maskChar = options.maskChar || '*';\n this.preserveLength = options.preserveLength !== false;\n this.rules = [];\n this.strategies = new Map(Object.entries(MASKING_STRATEGIES));\n\n // ANSI escape code regex (intentional control chars for stripping terminal codes)\n // eslint-disable-next-line no-control-regex\n this.ansiRegex = /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;\n\n if (options.enableDefaultRules !== false) {\n this.addDefaultRules();\n }\n\n if (options.rules) {\n options.rules.forEach(rule => this.addRule(rule));\n }\n }\n\n addDefaultRules() {\n const defaultRules = [\n { pattern: /credit_card|card_number|payment_number/i, strategy: MaskingStrategy.CREDIT_CARD },\n { pattern: /ssn|social_security|security_number/i, strategy: MaskingStrategy.SSN },\n { pattern: /email/i, strategy: MaskingStrategy.EMAIL },\n { pattern: /phone|phone_number|mobile_number/i, strategy: MaskingStrategy.PHONE },\n { pattern: /password|pass|pwd|secret|api_key|token|auth_token|jwt|bearer/i, strategy: MaskingStrategy.PASSWORD }\n ];\n\n defaultRules.forEach(rule => this.addRule(rule));\n }\n\n addRule(rule) {\n this.rules.push({\n ...rule,\n _compiledPattern: typeof rule.pattern === 'string' ? new RegExp(rule.pattern, 'i') : rule.pattern,\n preserveLength: rule.preserveLength ?? this.preserveLength,\n maskChar: rule.maskChar ?? this.maskChar\n });\n }\n\n registerStrategy(name, strategyFn) {\n if (typeof strategyFn === 'function') {\n this.strategies.set(name, strategyFn);\n }\n }\n\n process(data) {\n if (data === null || data === undefined) return data;\n\n const processors = {\n string: (val) => val.replace(this.ansiRegex, ''),\n object: (val) => {\n if (Array.isArray(val)) return val.map(item => this.process(item));\n if (val && val.constructor === Object) return this.maskObject(val);\n return val;\n }\n };\n\n return (processors[typeof data] || ((v) => v))(data);\n }\n\n maskObject(data) {\n return Object.entries(data).reduce((acc, [key, value]) => {\n acc[key] = this.maskValue(key, value);\n return acc;\n }, {});\n }\n\n maskValue(key, value) {\n if (typeof value !== 'string') return this.process(value);\n\n const rule = this.rules.find(r => r._compiledPattern?.test(key));\n return rule ? this.applyStrategy(value, rule) : value.replace(this.ansiRegex, '');\n }\n\n applyStrategy(value, rule) {\n const strategy = this.strategies.get(rule.strategy) || this.strategies.get('default');\n return strategy(value, rule);\n }\n}\n\nexport const dataMaskingManager = new DataMaskingManager();\n","import { robustSerializer } from '../../utils/RobustSerializer.js';\nimport { dataMaskingManager } from '../../utils/DataMaskingManager.js';\n\n/**\n * SerializationManager - Handles serialization and deserialization of data.\n * Single responsibility: Manage data transformation for storage.\n * DIP: Accepts serializer and masking via constructor for testability and substitution.\n * @param {Object} [deps] - Injected dependencies\n * @param {{ serialize: function(*): string, deserialize: function(string): * }} [deps.serializer] - Serializer (circular ref handling)\n * @param {{ process: function(*): * }} [deps.masking] - Object with process(data) for PII obfuscation\n */\nexport class SerializationManager {\n constructor(deps = {}) {\n this.serializer = deps.serializer ?? robustSerializer;\n this.masking = deps.masking ?? dataMaskingManager;\n }\n\n /**\n * Serializes items with declarative error handling\n * @param {Array} items - Items to serialize\n * @returns {Object} Serialization result\n */\n serialize(items) {\n try {\n // Guard: Validate basic input\n if (items === null || items === undefined) {\n return { success: true, data: this.serializer.serialize([]), error: null, timestamp: new Date().toISOString() };\n }\n\n // Apply masking before store/send\n const maskedItems = this.masking.process(items);\n const serializedData = this.serializer.serialize(maskedItems);\n\n return {\n success: true,\n data: serializedData,\n error: null,\n timestamp: new Date().toISOString()\n };\n } catch (error) {\n return {\n success: false,\n data: this.createFallbackData(error),\n error: this.createSerializationError(error),\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Deserializes data with declarative error handling\n * @param {string} serializedData - Datos serializados\n * @returns {Object} Deserialization result\n */\n deserialize(serializedData) {\n try {\n // Guard: Empty or null data\n if (!serializedData) {\n return { success: true, data: [], error: null, timestamp: new Date().toISOString() };\n }\n\n const deserializedData = this.serializer.deserialize(serializedData);\n\n return {\n success: true,\n data: deserializedData,\n error: null,\n timestamp: new Date().toISOString()\n };\n } catch (error) {\n return {\n success: false,\n data: [],\n error: this.createDeserializationError(error),\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Creates a structured serialization error\n * @param {Error} error - Original error\n * @returns {Object} Structured error\n */\n createSerializationError(error) {\n return {\n type: 'serialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Creates a structured deserialization error\n * @param {Error} error - Original error\n * @returns {Object} Structured error\n */\n createDeserializationError(error) {\n return {\n type: 'deserialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Creates fallback data when serialization fails\n * @param {Error} error - Error that caused the fallback\n * @returns {string} Serialized fallback data\n */\n createFallbackData(error) {\n const fallbackPayload = {\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n fallbackData: 'Items not serializable - using fallback'\n };\n\n return JSON.stringify(fallbackPayload);\n }\n\n /**\n * Checks if a serialization result was successful\n * @param {Object} result - Serialization/deserialization result\n * @returns {boolean} True if successful\n */\n isSuccessful(result) {\n return Boolean(result && result.success === true);\n }\n\n /**\n * Gets data from a result, with fallback\n * @param {Object} result - Serialization/deserialization result\n * @param {*} fallback - Default value if failed\n * @returns {*} Data or fallback\n */\n getData(result, fallback = null) {\n return this.isSuccessful(result) ? result.data : fallback;\n }\n} ","import { DatabaseManager } from '../database/DatabaseManager.js';\nimport { StorageManager } from '../database/StorageManager.js';\nimport { RetryLogicManager } from '../retry/RetryLogicManager.js';\nimport { SerializationManager } from '../database/SerializationManager.js';\n\nconst DEFAULT_DB_NAME = 'SyntropyFrontBuffer';\nconst DEFAULT_DB_VERSION = 1;\nconst DEFAULT_STORE_NAME = 'failedItems';\n\n/**\n * PersistentBufferManager - Persistent buffer coordinator\n * Single Responsibility: Coordinate persistent storage components\n * DIP: Accepts injected components (databaseManager, serializationManager, storageManager, retryLogicManager) for tests and substitution.\n * @param {Object} configManager - Config (usePersistentBuffer, maxRetries, etc.)\n * @param {Object} [deps] - Injected components; defaults created if not provided\n */\nexport class PersistentBufferManager {\n constructor(configManager, deps = {}) {\n this.config = configManager;\n this.usePersistentBuffer = false;\n\n this.databaseManager = deps.databaseManager ?? new DatabaseManager(\n DEFAULT_DB_NAME,\n DEFAULT_DB_VERSION,\n DEFAULT_STORE_NAME\n );\n this.serializationManager = deps.serializationManager ?? new SerializationManager();\n this.storageManager = deps.storageManager ?? new StorageManager(this.databaseManager, this.serializationManager);\n this.retryLogicManager = deps.retryLogicManager ?? new RetryLogicManager(this.storageManager, this.config);\n\n this.initPersistentBuffer();\n }\n\n /**\n * Initializes the persistent buffer\n */\n async initPersistentBuffer() {\n try {\n const success = await this.databaseManager.init();\n if (success) {\n this.usePersistentBuffer = this.config.usePersistentBuffer;\n console.log('SyntropyFront: Persistent buffer initialized');\n }\n } catch (error) {\n console.warn('SyntropyFront: Error initializing persistent buffer:', error);\n }\n }\n\n /**\n * Saves failed items to the persistent buffer\n * @param {Array} items - Items to save\n */\n async save(items) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.save(items);\n console.log('SyntropyFront: Items saved to persistent buffer');\n } catch (error) {\n console.error('SyntropyFront: Error saving to persistent buffer:', error);\n }\n }\n\n /**\n * Retrieves failed items from the persistent buffer\n */\n async retrieve() {\n if (!this.usePersistentBuffer) {\n return [];\n }\n\n try {\n return await this.storageManager.retrieve();\n } catch (error) {\n console.error('SyntropyFront: Error retrieving from persistent buffer:', error);\n return [];\n }\n }\n\n /**\n * Removes items from the persistent buffer\n * @param {number} id - ID of the item to remove\n */\n async remove(id) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removing from persistent buffer:', error);\n }\n }\n\n /**\n * Attempts to send failed items from the persistent buffer\n * @param {Function} sendCallback - Callback to send items\n * @param {Function} removeCallback - Callback to remove successful items\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.retryFailedItems(sendCallback, removeCallback);\n }\n\n /**\n * Cleans up items that have exceeded the maximum retry count\n */\n async cleanupExpiredItems() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.cleanupExpiredItems();\n }\n\n /**\n * Gets persistent buffer statistics\n */\n async getStats() {\n if (!this.usePersistentBuffer) {\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: false\n };\n }\n\n try {\n const retryStats = await this.retryLogicManager.getRetryStats();\n return {\n ...retryStats,\n isAvailable: this.isAvailable()\n };\n } catch (error) {\n console.error('SyntropyFront: Error getting statistics:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: this.isAvailable()\n };\n }\n }\n\n /**\n * Checks if the persistent buffer is available\n */\n isAvailable() {\n return this.usePersistentBuffer && this.databaseManager.isDatabaseAvailable();\n }\n\n /**\n * Clears the entire persistent buffer\n */\n async clear() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.clear();\n console.log('SyntropyFront: Persistent buffer cleared');\n } catch (error) {\n console.error('SyntropyFront: Error clearing persistent buffer:', error);\n }\n }\n\n /**\n * Closes the database connection\n */\n close() {\n this.databaseManager.close();\n this.usePersistentBuffer = false;\n }\n}\n","import { ConfigurationManager } from './ConfigurationManager.js';\nimport { QueueManager } from './QueueManager.js';\nimport { RetryManager } from '../retry/RetryManager.js';\nimport { HttpTransport } from './HttpTransport.js';\nimport { PersistentBufferManager } from '../persistent/PersistentBufferManager.js';\nimport { dataMaskingManager } from '../../utils/DataMaskingManager.js';\n\n/**\n * Agent - Coordinates sending traceability data to the backend.\n * DIP: All dependencies (config, queue, retry, transport, buffer, masking) are injectable.\n *\n * @contract\n * - configure(config): updates agent configuration.\n * - sendError(payload, context?): if enabled and not dropped by sampling, enqueues an item of type 'error'.\n * - sendBreadcrumbs(breadcrumbs): if enabled, batchTimeout set and non-empty, enqueues type 'breadcrumbs'.\n * - flush(): drains queue via flushCallback. forceFlush(): flush + processes pending retries.\n * - getStats(): returns { queueLength, retryQueueLength, isEnabled, usePersistentBuffer, maxRetries }.\n */\nexport class Agent {\n /**\n * @param {Object} [deps] - Injected dependencies (config, queue, retry, transport, buffer, masking). Defaults created if not provided.\n */\n constructor(deps = {}) {\n // Components (Injected or Defaults)\n this.config = deps.config || new ConfigurationManager();\n this.masking = deps.masking || dataMaskingManager;\n\n // Managers that depend on config\n this.queue = deps.queue || new QueueManager(this.config);\n this.retry = deps.retry || new RetryManager(this.config);\n this.transport = deps.transport || new HttpTransport(this.config);\n this.buffer = deps.buffer || new PersistentBufferManager(this.config);\n\n // Setup coordination callbacks\n this.setupCallbacks();\n }\n\n /**\n * Configures callbacks for coordination between components\n */\n setupCallbacks() {\n // QueueManager flush callback\n this.queue.flushCallback = async (items) => {\n try {\n await this.transport.send(items);\n console.log('SyntropyFront: Data sent successfully');\n } catch (error) {\n console.error('SyntropyFront Agent: Error sending data:', error);\n\n // Add to retry queue\n this.retry.addToRetryQueue(items);\n\n // Save to persistent buffer\n await this.buffer.save(items);\n }\n };\n\n // RetryManager send callback\n this.retry.sendCallback = async (items) => {\n return await this.transport.send(items);\n };\n\n this.retry.removePersistentCallback = async (id) => {\n await this.buffer.remove(id);\n };\n\n // PersistentBufferManager retry callback\n this.buffer.sendCallback = (items, retryCount, persistentId) => {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n };\n }\n\n /**\n * Updates configuration (endpoint, headers, batchSize, batchTimeout, samplingRate, etc.).\n * @param {Object} config - Ver ConfigurationManager.configure\n * @returns {void}\n */\n configure(config) {\n this.config.configure(config);\n }\n\n /**\n * Enqueues an error for send. Does not send if agent is disabled or sampling discards it.\n * @param {Object} errorPayload - Payload with type, error, breadcrumbs, timestamp\n * @param {Object|null} [context=null] - Additional context (merged into payload)\n * @returns {void}\n */\n sendError(errorPayload, context = null) {\n // 🛡️ Guard: Agent enabled\n if (!this.config.isAgentEnabled()) {\n console.warn('SyntropyFront Agent: Not configured, error not sent');\n return;\n }\n\n // 🎲 Guard: Sampling\n if (Math.random() > this.config.samplingRate) return;\n\n // Functional Pipeline: Generate payload with context\n const payloadWithContext = context\n ? { ...errorPayload, context }\n : errorPayload;\n\n // Apply transformations (Encryption and Obfuscation)\n const dataToSend = this.transport.applyEncryption(payloadWithContext);\n const maskedData = this.masking.process(dataToSend);\n\n this.queue.add({\n type: 'error',\n data: maskedData,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Enqueues breadcrumbs for send. Does not send if disabled, no batchTimeout, or empty array.\n * @param {Array<Object>} breadcrumbs - List of traces (category, message, data, timestamp)\n * @returns {void}\n */\n sendBreadcrumbs(breadcrumbs) {\n // 🛡️ Guard: Enabled and with data\n if (!this.config.isAgentEnabled() || !this.config.shouldSendBreadcrumbs() || !breadcrumbs.length) {\n return;\n }\n\n // 🎲 Guard: Sampling\n if (Math.random() > this.config.samplingRate) return;\n\n // Apply transformations\n const dataToSend = this.transport.applyEncryption(breadcrumbs);\n const maskedData = this.masking.process(dataToSend);\n\n this.queue.add({\n type: 'breadcrumbs',\n data: maskedData,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Adds an item to the queue (compatibility)\n */\n addToQueue(item) {\n this.queue.add(item);\n }\n\n /**\n * Adds to retry queue (compatibility)\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n }\n\n /**\n * Processes retry queue (compatibility)\n */\n async processRetryQueue() {\n await this.retry.processRetryQueue(\n this.retry.sendCallback,\n this.retry.removePersistentCallback\n );\n }\n\n /**\n * Forces flush of current queue\n */\n async flush() {\n await this.queue.flush(this.queue.flushCallback);\n }\n\n /**\n * Forces immediate flush of everything\n */\n async forceFlush() {\n await this.flush();\n\n // Also attempt pending retries\n if (!this.retry.isEmpty()) {\n console.log('SyntropyFront: Attempting to send pending retries...');\n await this.processRetryQueue();\n }\n }\n\n /**\n * Gets agent stats\n */\n getStats() {\n const config = this.config.getConfig();\n return {\n queueLength: this.queue.getSize(),\n retryQueueLength: this.retry.getSize(),\n isEnabled: this.config.isAgentEnabled(),\n usePersistentBuffer: config.usePersistentBuffer,\n maxRetries: config.maxRetries\n };\n }\n\n /**\n * Attempts to send failed items from persistent buffer\n */\n async retryFailedItems() {\n await this.buffer.retryFailedItems(this.buffer.sendCallback);\n }\n\n /**\n * Returns whether the agent is enabled (for consumers that need to check without depending on config shape).\n */\n isEnabled() {\n return this.config.isAgentEnabled();\n }\n\n /**\n * Returns whether breadcrumbs should be sent (e.g. batch mode with timeout).\n */\n shouldSendBreadcrumbs() {\n return this.config.shouldSendBreadcrumbs();\n }\n\n /**\n * Disables the agent\n */\n disable() {\n this.config.configure({ endpoint: null });\n this.queue.clear();\n this.retry.clear();\n }\n}\n\n// Singleton Instance\nexport const agent = new Agent();\n","/**\n * Environment - Centralized detection of browser environment and capabilities.\n * Browser-only: targets modern browsers per browserslist config.\n */\nexport const Environment = {\n /**\n * Returns true if running in a browser context.\n */\n isBrowser: () => typeof window !== 'undefined' && typeof document !== 'undefined',\n\n /**\n * Returns the global browser object, or empty object as safe fallback.\n */\n getGlobal: () => (typeof window !== 'undefined' ? window : {}),\n\n /**\n * Checks availability of a nested global API via dot-notation path.\n * @param {string} apiPath - e.g. 'navigator.connection' or 'crypto.randomUUID'\n * @returns {boolean}\n */\n hasApi: (apiPath) => {\n return apiPath.split('.').reduce((current, part) => {\n if (current === null || current === undefined) return null;\n return current[part] !== undefined ? current[part] : null;\n }, Environment.getGlobal()) !== null;\n },\n\n /**\n * Executes a task only if a condition is met; returns fallback otherwise.\n * @param {string|Function} condition - API path string or boolean-returning function.\n * @param {Function} task - Operation to execute when condition is met.\n * @param {any} fallback - Default value when condition is not met.\n * @returns {any}\n */\n runIf: (condition, task, fallback = null) => {\n const isMet = typeof condition === 'function' ? condition() : Environment.hasApi(condition);\n return isMet ? task() : fallback;\n }\n};\n","import { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { Environment } from '../utils/Environment.js';\n\n/**\n * Functional fragments: DOM detection and labeling utilities.\n */\nexport const DOM_UTILS = {\n /**\n * Selector exhaustivo de elementos interactivos.\n */\n INTERACTIVE_SELECTOR: [\n 'a', 'button', 'input', 'select', 'textarea', 'label', 'summary',\n '[role=\"button\"]', '[role=\"link\"]', '[role=\"checkbox\"]', '[role=\"radio\"]',\n '[role=\"menuitem\"]', '[role=\"option\"]', '[role=\"switch\"]', '[role=\"tab\"]',\n '.interactive', '.btn', '.clickable', // Convention selectors\n '[onclick]', '[ng-click]', '[v-on:click]' // Framework click attributes (@click is invalid in CSS selectors)\n ].join(', '),\n\n /**\n * Checks if an element has cursor:pointer (pure CSS fallback).\n */\n hasPointerCursor: (el) => {\n try {\n return window.getComputedStyle(el).cursor === 'pointer';\n } catch (e) {\n return false;\n }\n },\n\n /**\n * Walks up the DOM tree looking for cursor:pointer (declarative, no while).\n */\n findTargetByStyle: (el) => {\n // Guard: element nodes only\n if (!el || el.nodeType !== 1) return null;\n if (DOM_UTILS.hasPointerCursor(el)) return el;\n if (!el.parentElement || el.parentElement === document.body) return null;\n return DOM_UTILS.findTargetByStyle(el.parentElement);\n },\n\n /**\n * Finds the interactive target using closest() with CSS fallback (declarative).\n * Uses try/catch so invalid selectors (e.g. from old bundles) don't break the app.\n */\n findInteractiveTarget: (el) => {\n if (!el || el === document.body || el.nodeType !== 1) return null;\n try {\n const found = el.closest(DOM_UTILS.INTERACTIVE_SELECTOR);\n if (found) return found;\n } catch (_) {\n // Invalid selector (e.g. [@click] in old builds) or browser quirk; fallback only\n }\n return DOM_UTILS.findTargetByStyle(el);\n },\n\n /**\n * Generates a readable selector for the element.\n */\n generateSelector: (el) => {\n // Guard: no element\n if (!el) return 'unknown';\n\n const tag = el.tagName.toLowerCase();\n const id = el.id ? `#${el.id}` : '';\n const classes = (typeof el.className === 'string' && el.className)\n ? `.${el.className.split(' ').filter(Boolean).join('.')}`\n : '';\n\n return `${tag}${id}${classes}`;\n }\n};\n\n/**\n * ClickInterceptor - Interceptor coordinated by functional fragments.\n * Refactored for maximum purity and removal of imperative logic.\n */\nexport class ClickInterceptor {\n constructor() {\n this.handler = null;\n this.lastClickTime = 0;\n this.THROTTLE_MS = 500;\n }\n\n init() {\n // Guard: browser environment\n if (!Environment.isBrowser()) return;\n\n this.handler = (event) => this.processClick(event);\n document.addEventListener('click', this.handler, true);\n }\n\n /**\n * Pipeline de procesamiento de clic (Pureza funcional).\n */\n processClick(event) {\n const el = event?.target;\n\n // Guard: throttling and element existence\n if (!el || this.isThrottled()) return;\n\n const target = DOM_UTILS.findInteractiveTarget(el);\n if (!target) return;\n\n this.recordBreadcrumb(target);\n }\n\n /**\n * Flow control to avoid duplicates.\n */\n isThrottled() {\n const now = Date.now();\n const throttled = now - this.lastClickTime < this.THROTTLE_MS;\n if (!throttled) this.lastClickTime = now;\n return throttled;\n }\n\n /**\n * Records trace in the store.\n */\n recordBreadcrumb(target) {\n const selector = DOM_UTILS.generateSelector(target);\n\n breadcrumbStore.add({\n category: 'ui',\n message: `User clicked on '${selector}'`,\n data: {\n selector,\n tagName: target.tagName,\n id: target.id || null,\n className: target.className || null,\n text: (target.innerText || target.value || '').substring(0, 30).trim()\n }\n });\n }\n\n /**\n * Limpieza de recursos.\n */\n destroy() {\n // Guard: browser and handler\n if (!Environment.isBrowser() || !this.handler) return;\n\n document.removeEventListener('click', this.handler, true);\n this.handler = null;\n }\n}\n","/**\n * Copyright 2024 Syntropysoft\n */\n\n/**\n * FunctionWrapper - Utility for standardizing global handler interception.\n * Provides functional abstractions for safe execution and wrapping.\n */\n\n/**\n * Safely executes a function with a given context and arguments.\n * @param {Function} fn - Function to execute.\n * @param {Object} context - Execution context (this).\n * @param {Array} args - Arguments to pass.\n * @param {string} [label='original handler'] - Diagnostic label for errors.\n * @returns {any} Result of the function execution or undefined if failed.\n */\nexport const safeApply = (fn, context, args, label = 'original handler') => {\n if (typeof fn !== 'function') return;\n try {\n return fn.apply(context, args);\n } catch (error) {\n // Log for instrumentation but don't crash the host application\n console.error(`SyntropyFront: Error in ${label}:`, error);\n return;\n }\n};\n\n/**\n * Wraps a property on a target object using a factory.\n * @param {Object} target - Target object (e.g., window).\n * @param {string} property - Property name (e.g., 'fetch').\n * @param {Function} wrapperFactory - Factory receiving (original) and returning (wrapped).\n * @returns {Object|null} Disposable object with destroy() method.\n */\nexport const wrap = (target, property, wrapperFactory) => {\n // `in` operator accepts null values (e.g. window.onerror === null by default)\n if (!target || !(property in target)) return null;\n\n const original = target[property]; // null is a valid initial value\n const wrapped = wrapperFactory(original);\n\n // Apply the wrap\n target[property] = wrapped;\n\n return {\n target,\n property,\n original,\n wrapped,\n destroy: () => {\n // Only restore if it hasn't been re-wrapped by someone else (best effort)\n if (target[property] === wrapped) {\n target[property] = original;\n }\n }\n };\n};\n\n// Legacy class export for backwards compatibility during transition\nexport const FunctionWrapper = {\n wrap,\n safeApply\n};\n","/**\n * Copyright 2024 Syntropysoft\n */\n\nimport { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { wrap } from '../utils/FunctionWrapper.js';\n\n/**\n * FetchInterceptor - Intercepts network calls using the wrapper (chaining) pattern.\n * Captures URL and method details to feed into the breadcrumb flow.\n */\nexport class FetchInterceptor {\n constructor() {\n this.wrapper = null;\n }\n\n /**\n * Initializes interception of the global fetch API.\n */\n init() {\n // Guard: browser and fetch available\n if (typeof window === 'undefined' || !window.fetch) return;\n\n this.wrapper = wrap(window, 'fetch', (original) => {\n return (...args) => {\n // Functional extraction of URL and method\n const url = (args[0] instanceof Request) ? args[0].url : (args[0] || 'unknown');\n const method = (args[0] instanceof Request) ? args[0].method : (args[1]?.method || 'GET');\n\n breadcrumbStore.add({\n category: 'network',\n message: `Request: ${method} ${url}`,\n data: {\n url,\n method,\n timestamp: Date.now()\n }\n });\n\n // Continue with original execution\n return original.apply(window, args);\n };\n });\n }\n\n /**\n * Restores original fetch behaviour.\n */\n destroy() {\n // Guard: no wrapper\n if (!this.wrapper) return;\n\n this.wrapper.destroy();\n this.wrapper = null;\n }\n}\n","import { Environment } from '../../utils/Environment.js';\n\n/**\n * Pure function: Generates a secure ID using an injected crypto provider.\n * Accepts a cryptoApi object so all fallback branches are independently testable.\n * @param {Object|null} cryptoApi - Crypto implementation (e.g. window.crypto or null)\n * @returns {string} Secure random ID\n */\nexport const createSecureId = (cryptoApi = (typeof crypto !== 'undefined' ? crypto : null)) => {\n if (typeof cryptoApi?.randomUUID === 'function') {\n return cryptoApi.randomUUID();\n }\n if (typeof cryptoApi?.getRandomValues === 'function') {\n const array = new Uint8Array(16);\n cryptoApi.getRandomValues(array);\n return Array.from(array, b => b.toString(16).padStart(2, '0')).join('');\n }\n return `${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n};\n\n/**\n * Functional fragments: pure context providers.\n * Uses Environment.runIf for safe access.\n */\nexport const CONTEXT_PROVIDERS = {\n device: {\n userAgent: () => Environment.runIf('navigator.userAgent', () => navigator.userAgent),\n language: () => Environment.runIf('navigator.language', () => navigator.language),\n languages: () => Environment.runIf('navigator.languages', () => navigator.languages),\n screen: () => Environment.runIf('window.screen', () => ({\n width: window.screen.width,\n height: window.screen.height,\n availWidth: window.screen.availWidth,\n availHeight: window.screen.availHeight,\n colorDepth: window.screen.colorDepth,\n pixelDepth: window.screen.pixelDepth\n })),\n timezone: () => Environment.runIf('Intl.DateTimeFormat', () => {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) { return null; }\n }),\n cookieEnabled: () => Environment.runIf('navigator.cookieEnabled', () => navigator.cookieEnabled),\n doNotTrack: () => Environment.runIf('navigator.doNotTrack', () => navigator.doNotTrack)\n },\n window: {\n url: () => Environment.runIf('window.location.href', () => window.location.href),\n pathname: () => Environment.runIf('window.location.pathname', () => window.location.pathname),\n search: () => Environment.runIf('window.location.search', () => window.location.search),\n hash: () => Environment.runIf('window.location.hash', () => window.location.hash),\n referrer: () => Environment.runIf('document.referrer', () => document.referrer),\n title: () => Environment.runIf('document.title', () => document.title),\n viewport: () => Environment.runIf('window.innerWidth', () => ({\n width: window.innerWidth,\n height: window.innerHeight\n }))\n },\n storage: {\n localStorage: () => Environment.runIf('localStorage', () => {\n try {\n const storage = window.localStorage;\n return {\n keys: Object.keys(storage).length,\n size: JSON.stringify(storage).length,\n keyNames: Object.keys(storage)\n };\n } catch (e) { return null; }\n }),\n sessionStorage: () => Environment.runIf('sessionStorage', () => {\n try {\n const storage = window.sessionStorage;\n return {\n keys: Object.keys(storage).length,\n size: JSON.stringify(storage).length,\n keyNames: Object.keys(storage)\n };\n } catch (e) { return null; }\n })\n },\n network: {\n online: () => Environment.runIf('navigator.onLine', () => navigator.onLine),\n connection: () => Environment.runIf(() => !!(typeof navigator !== 'undefined' && (navigator.connection || navigator.mozConnection || navigator.webkitConnection)), () => {\n const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n return {\n effectiveType: conn.effectiveType,\n downlink: conn.downlink,\n rtt: conn.rtt\n };\n })\n },\n ui: {\n focused: () => Environment.runIf('document.hasFocus', () => document.hasFocus()),\n visibility: () => Environment.runIf('document.visibilityState', () => document.visibilityState),\n activeElement: () => Environment.runIf('document.activeElement', () => ({\n tagName: document.activeElement.tagName,\n id: document.activeElement.id,\n className: document.activeElement.className\n }))\n },\n performance: {\n memory: () => Environment.runIf('performance.memory', () => ({\n used: Math.round(performance.memory.usedJSHeapSize / 1048576),\n total: Math.round(performance.memory.totalJSHeapSize / 1048576),\n limit: Math.round(performance.memory.jsHeapSizeLimit / 1048576)\n })),\n timing: () => Environment.runIf('performance.timing', () => ({\n navigationStart: performance.timing.navigationStart,\n loadEventEnd: performance.timing.loadEventEnd\n }))\n },\n session: {\n sessionId: (collector) => collector.generateSessionId(),\n startTime: () => new Date().toISOString(),\n pageLoadTime: () => Environment.runIf('performance.now', () => performance.now())\n }\n};\n\n/**\n * Default fields for context collection.\n */\nconst DEFAULT_CONTEXT_FIELDS = {\n device: ['userAgent', 'language', 'screen', 'timezone'],\n window: ['url', 'viewport', 'title'],\n session: ['sessionId', 'pageLoadTime'],\n ui: ['visibility', 'activeElement'],\n network: ['online', 'connection']\n};\n\n/**\n * ContextCollector - Minimal coordinator with no imperative state.\n */\nexport class ContextCollector {\n constructor() {\n this.sessionId = null;\n this.providers = new Map(Object.entries(CONTEXT_PROVIDERS));\n }\n\n /**\n * Collects context based on a declarative configuration.\n */\n collect(contextConfig = {}) {\n const config = this.normalizeConfig(contextConfig);\n\n return Object.entries(config).reduce((ctx, [type, options]) => {\n try {\n const provider = this.providers.get(type);\n if (options !== false && !provider) throw new Error(`Provider for '${type}' not found`);\n\n const fields = this.resolveFields(type, provider, options);\n if (fields) {\n ctx[type] = this.extractFields(provider, fields);\n }\n } catch (error) {\n console.warn(`SyntropyFront: Error collecting context for ${type}:`, error);\n ctx[type] = { error: 'Collection failed' };\n }\n return ctx;\n }, {});\n }\n\n /**\n * Field resolution — declarative strategy map by type.\n * Contracts:\n * boolean true → default fields for type, or all provider keys\n * boolean false → null (skip)\n * array → explicit field list\n * plain object → all provider keys (treated as unstructured custom config)\n * other → null (skip)\n */\n resolveFields(type, provider, options) {\n const allProviderKeys = () => Object.keys(provider || {});\n const strategies = {\n boolean: (val) => val ? (DEFAULT_CONTEXT_FIELDS[type] || allProviderKeys()) : null,\n object: (val) => Array.isArray(val) ? val : allProviderKeys(),\n };\n\n const strategy = strategies[typeof options];\n return strategy ? strategy(options) : null;\n }\n\n /**\n * Functional normalization of configuration.\n */\n normalizeConfig(config) {\n if (Array.isArray(config)) {\n return config.reduce((acc, type) => ({ ...acc, [type]: true }), {});\n }\n return config || {};\n }\n\n /**\n * Pure field extraction.\n */\n extractFields(provider, fieldNames) {\n return fieldNames.reduce((result, fieldName) => {\n const getter = provider[fieldName];\n if (typeof getter !== 'function') return result;\n\n try {\n result[fieldName] = getter(this);\n } catch (e) {\n console.warn(`SyntropyFront: Error collecting field ${fieldName}:`, e);\n result[fieldName] = null;\n }\n return result;\n }, {});\n }\n\n registerProvider(name, fields) {\n this.providers.set(name, fields);\n }\n\n generateSessionId() {\n this.sessionId = this.sessionId || `session_${this.generateSecureId()}`;\n return this.sessionId;\n }\n\n // Delegates to the pure top-level createSecureId (injectable for testing)\n generateSecureId(cryptoApi = (typeof crypto !== 'undefined' ? crypto : null)) {\n return createSecureId(cryptoApi);\n }\n\n getAvailableTypes() {\n return Array.from(this.providers.keys());\n }\n\n get allFields() {\n return Array.from(this.providers.entries()).reduce((res, [name, fields]) => {\n res[name] = fields;\n return res;\n }, {});\n }\n\n get defaultContexts() {\n return this.allFields;\n }\n}\n\nexport const contextCollector = new ContextCollector();\n","import { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from '../core/agent/Agent.js';\nimport { contextCollector } from '../core/context/ContextCollector.js';\nimport { wrap, safeApply } from '../utils/FunctionWrapper.js';\nimport { Environment } from '../utils/Environment.js';\n\n/**\n * Functional fragments: pure error payload generators.\n */\nexport const ERROR_UTILS = {\n createExceptionPayload: (message, source, lineno, colno, error) => ({\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n }),\n\n createRejectionPayload: (event) => ({\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n })\n};\n\n/**\n * ErrorInterceptor - Error capture coordinated by functional fragments.\n * Refactored to remove heavy imperative logic and use FunctionWrapper consistently.\n */\nexport class ErrorInterceptor {\n constructor() {\n this.errorWrapper = null;\n this.rejectionWrapper = null;\n this.config = { captureErrors: true, captureUnhandledRejections: true };\n this.contextTypes = [];\n this.onErrorCallback = null;\n }\n\n /**\n * Dynamic configuration of the interceptor.\n */\n configure(config, contextTypes, onErrorCallback) {\n this.config = { ...this.config, ...config };\n this.contextTypes = contextTypes || [];\n this.onErrorCallback = onErrorCallback;\n }\n\n /**\n * Selective initialization.\n */\n init() {\n // Guard: browser environment\n if (!Environment.isBrowser()) return;\n\n this.setupExceptionCapture();\n this.setupRejectionCapture();\n }\n\n /**\n * Sets up the wrapper for window.onerror (exceptions).\n */\n setupExceptionCapture() {\n // Guard: capture disabled\n if (!this.config.captureErrors) return;\n\n this.errorWrapper = wrap(window, 'onerror', (original) => {\n return (message, source, lineno, colno, error) => {\n const payload = ERROR_UTILS.createExceptionPayload(message, source, lineno, colno, error);\n this.handleError(payload);\n return safeApply(original, window, [message, source, lineno, colno, error], 'original window.onerror');\n };\n });\n }\n\n /**\n * Sets up the wrapper for promise rejections.\n */\n setupRejectionCapture() {\n // Guard: capture disabled\n if (!this.config.captureUnhandledRejections) return;\n\n this.rejectionWrapper = wrap(window, 'onunhandledrejection', (original) => {\n return (event) => {\n const payload = ERROR_UTILS.createRejectionPayload(event);\n this.handleError(payload);\n safeApply(original, window, [event], 'original window.onunhandledrejection');\n };\n });\n }\n\n /**\n * Functional delegation for error handling and send.\n */\n handleError(payload) {\n const context = this.contextTypes.length > 0 ? contextCollector.collect(this.contextTypes) : null;\n agent.sendError(payload, context);\n if (this.onErrorCallback) this.onErrorCallback(payload);\n }\n\n /**\n * Cleans up wrappers to avoid memory leaks.\n */\n destroy() {\n this.errorWrapper?.destroy();\n this.rejectionWrapper?.destroy();\n this.errorWrapper = null;\n this.rejectionWrapper = null;\n }\n}\n","/**\n * Copyright 2024 Syntropysoft\n */\n\nimport { ClickInterceptor } from './ClickInterceptor.js';\nimport { FetchInterceptor } from './FetchInterceptor.js';\nimport { ErrorInterceptor } from './ErrorInterceptor.js';\n\n/**\n * Interceptors - Coordinator for modular interceptors.\n * Follows SOLID principles by treating interceptors as an extensible collection.\n * Registry pattern architecture.\n */\nexport class Interceptors {\n constructor() {\n this.isInitialized = false;\n this.config = {\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true\n };\n\n this.registry = new Map();\n this.initializeRegistry();\n }\n\n /**\n * Declarative registration of standard interceptors.\n */\n initializeRegistry() {\n this.registry.set('clicks', new ClickInterceptor());\n this.registry.set('fetch', new FetchInterceptor());\n this.registry.set('errors', new ErrorInterceptor());\n }\n\n /**\n * Decoupled configuration.\n */\n configure(config = {}) {\n this.config = { ...this.config, ...config };\n // Inject config and optional callbacks into interceptors that need them\n this.registry.get('errors')?.configure?.(this.config, config.context || [], config.onError);\n }\n\n /**\n * Initialization via functional pipeline.\n */\n init() {\n // Guard: already initialized\n if (this.isInitialized) return;\n\n this.runLifecycle('init');\n\n this.isInitialized = true;\n console.log('SyntropyFront: Interceptors initialized (Refactored architecture)');\n }\n\n /**\n * Teardown via functional pipeline.\n */\n destroy() {\n // Guard: not initialized\n if (!this.isInitialized) return;\n\n this.runLifecycle('destroy');\n\n this.isInitialized = false;\n console.log('SyntropyFront: Interceptors destroyed');\n }\n\n /**\n * Runs a lifecycle method across the registry based on config.\n * Functional pipeline: filter -> map -> filter -> forEach.\n */\n runLifecycle(method) {\n const lifecycleMap = [\n { key: 'clicks', enabled: this.config.captureClicks },\n { key: 'fetch', enabled: this.config.captureFetch },\n { key: 'errors', enabled: this.config.captureErrors || this.config.captureUnhandledRejections }\n ];\n\n lifecycleMap\n .filter(item => item.enabled)\n .map(item => this.registry.get(item.key))\n .filter(interceptor => interceptor && typeof interceptor[method] === 'function')\n .forEach(interceptor => interceptor[method]());\n }\n\n // Compatibility accessors for tests or controlled direct access\n get clickInterceptor() { return this.registry.get('clicks'); }\n get fetchInterceptor() { return this.registry.get('fetch'); }\n get errorInterceptor() { return this.registry.get('errors'); }\n}\n\nexport const interceptors = new Interceptors();","/**\n * Copyright 2024 Syntropysoft\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * SyntropyFront - Observability library with automatic capture\n * Acts as a Facade connecting the Agent and modular Interceptors\n */\nimport { breadcrumbStore } from './core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from './core/agent/Agent.js';\nimport { interceptors } from './interceptors/Interceptors.js';\n\nclass SyntropyFront {\n constructor() {\n this.isActive = false;\n this.config = {\n maxEvents: 50,\n endpoint: null,\n headers: {},\n usePersistentBuffer: true,\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true,\n samplingRate: 1.0,\n onError: null\n };\n\n // Auto-initialize\n this.init();\n }\n\n /**\n * Initializes the library and activates interceptors\n */\n init() {\n if (this.isActive) return;\n\n this._applyConfig();\n interceptors.init();\n\n // Retry failed items from previous sessions\n agent.retryFailedItems().catch(err => {\n console.warn('SyntropyFront: Error attempting to recover persistent items:', err);\n });\n\n this.isActive = true;\n console.log('🚀 SyntropyFront: Initialized with modular resilient architecture');\n }\n\n /**\n * Private: applies current config to agent and interceptors.\n */\n _applyConfig() {\n agent.configure({\n endpoint: this.config.endpoint,\n headers: this.config.headers,\n usePersistentBuffer: this.config.usePersistentBuffer,\n samplingRate: this.config.samplingRate,\n batchTimeout: this.config.batchTimeout ?? (this.config.captureClicks || this.config.captureFetch ? 5000 : null)\n });\n\n breadcrumbStore.onBreadcrumbAdded = (crumb) => {\n if (agent.isEnabled() && agent.shouldSendBreadcrumbs()) {\n agent.sendBreadcrumbs([crumb]);\n }\n };\n\n interceptors.configure({\n captureClicks: this.config.captureClicks,\n captureFetch: this.config.captureFetch,\n captureErrors: this.config.captureErrors,\n captureUnhandledRejections: this.config.captureUnhandledRejections,\n onError: this.config.onError\n });\n }\n\n /**\n * Configures SyntropyFront\n * @param {Object} config - Configuration\n */\n configure(config = {}) {\n this.config = { ...this.config, ...config };\n\n // If 'fetch' is passed, extract endpoint and headers for compatibility\n if (config.fetch) {\n this.config.endpoint = config.fetch.url;\n this.config.headers = config.fetch.options?.headers || {};\n }\n\n this._applyConfig();\n\n const mode = this.config.endpoint ? `endpoint: ${this.config.endpoint}` : 'console only';\n console.log(`✅ SyntropyFront: Configured - ${mode}`);\n }\n\n /**\n * Adds a breadcrumb manually\n */\n addBreadcrumb(category, message, data = {}) {\n return breadcrumbStore.add({ category, message, data });\n }\n\n /**\n * Gets all breadcrumbs\n */\n getBreadcrumbs() {\n return breadcrumbStore.getAll();\n }\n\n /**\n * Clears breadcrumbs\n */\n clearBreadcrumbs() {\n breadcrumbStore.clear();\n }\n\n /**\n * Sends an error manually with context\n */\n sendError(error, context = {}) {\n const errorPayload = {\n type: 'manual_error',\n error: {\n message: error.message || String(error),\n name: error.name || 'Error',\n stack: error.stack\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n agent.sendError(errorPayload, context);\n return errorPayload;\n }\n\n /**\n * Forces sending pending data\n */\n async flush() {\n await agent.forceFlush();\n }\n\n /**\n * Gets usage statistics\n */\n getStats() {\n return {\n isActive: this.isActive,\n breadcrumbs: breadcrumbStore.count(),\n agent: agent.getStats(),\n config: { ...this.config }\n };\n }\n\n /**\n * Deactivates the library and restores original hooks\n */\n destroy() {\n interceptors.destroy();\n agent.disable();\n this.isActive = false;\n console.log('SyntropyFront: Deactivated');\n }\n}\n\n// Singleton instance\nconst syntropyFront = new SyntropyFront();\n\n// Export the default instance\nexport default syntropyFront;"],"names":[],"mappings":"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"}
|