@meframe/core 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/Meframe.d.ts.map +1 -1
  2. package/dist/Meframe.js +2 -1
  3. package/dist/Meframe.js.map +1 -1
  4. package/dist/config/defaults.d.ts.map +1 -1
  5. package/dist/config/defaults.js +2 -1
  6. package/dist/config/defaults.js.map +1 -1
  7. package/dist/config/types.d.ts +3 -0
  8. package/dist/config/types.d.ts.map +1 -1
  9. package/dist/orchestrator/Orchestrator.d.ts.map +1 -1
  10. package/dist/orchestrator/Orchestrator.js +2 -1
  11. package/dist/orchestrator/Orchestrator.js.map +1 -1
  12. package/dist/orchestrator/types.d.ts +1 -0
  13. package/dist/orchestrator/types.d.ts.map +1 -1
  14. package/dist/stages/compose/types.d.ts +2 -1
  15. package/dist/stages/compose/types.d.ts.map +1 -1
  16. package/dist/stages/demux/MP4Demuxer.d.ts +0 -1
  17. package/dist/stages/demux/MP4Demuxer.d.ts.map +1 -1
  18. package/dist/utils/time-utils.d.ts +3 -2
  19. package/dist/utils/time-utils.d.ts.map +1 -1
  20. package/dist/utils/time-utils.js +2 -1
  21. package/dist/utils/time-utils.js.map +1 -1
  22. package/dist/vite-plugin.d.ts +5 -3
  23. package/dist/vite-plugin.d.ts.map +1 -1
  24. package/dist/vite-plugin.js +109 -52
  25. package/dist/vite-plugin.js.map +1 -1
  26. package/dist/worker/WorkerPool.d.ts +7 -0
  27. package/dist/worker/WorkerPool.d.ts.map +1 -1
  28. package/dist/worker/WorkerPool.js +29 -5
  29. package/dist/worker/WorkerPool.js.map +1 -1
  30. package/dist/{stages/demux → workers}/MP4Demuxer.js +4 -13
  31. package/dist/workers/MP4Demuxer.js.map +1 -0
  32. package/dist/workers/WorkerChannel.js +486 -0
  33. package/dist/workers/WorkerChannel.js.map +1 -0
  34. package/dist/{assets/video-demux.worker-D019I7GQ.js → workers/mp4box.all.js} +4 -912
  35. package/dist/workers/mp4box.all.js.map +1 -0
  36. package/dist/{assets/audio-compose.worker-nGVvHD5Q.js → workers/stages/compose/audio-compose.worker.js} +7 -481
  37. package/dist/workers/stages/compose/audio-compose.worker.js.map +1 -0
  38. package/dist/{assets/video-compose.worker-DPzsC21d.js → workers/stages/compose/video-compose.worker.js} +7 -481
  39. package/dist/workers/stages/compose/video-compose.worker.js.map +1 -0
  40. package/dist/{assets/decode.worker-DpWHsc7R.js → workers/stages/decode/decode.worker.js} +7 -481
  41. package/dist/workers/stages/decode/decode.worker.js.map +1 -0
  42. package/dist/{stages → workers/stages}/demux/audio-demux.worker.js +184 -4
  43. package/dist/workers/stages/demux/audio-demux.worker.js.map +1 -0
  44. package/dist/{stages → workers/stages}/demux/video-demux.worker.js +2 -3
  45. package/dist/workers/stages/demux/video-demux.worker.js.map +1 -0
  46. package/dist/{stages → workers/stages}/encode/encode.worker.js +238 -4
  47. package/dist/workers/stages/encode/encode.worker.js.map +1 -0
  48. package/dist/{stages/mux/MP4Muxer.js → workers/stages/mux/mux.worker.js} +244 -5
  49. package/dist/workers/stages/mux/mux.worker.js.map +1 -0
  50. package/package.json +21 -21
  51. package/dist/assets/audio-compose.worker-nGVvHD5Q.js.map +0 -1
  52. package/dist/assets/audio-demux.worker-xwWBtbAe.js +0 -8299
  53. package/dist/assets/audio-demux.worker-xwWBtbAe.js.map +0 -1
  54. package/dist/assets/decode.worker-DpWHsc7R.js.map +0 -1
  55. package/dist/assets/encode.worker-nfOb3kw6.js +0 -1026
  56. package/dist/assets/encode.worker-nfOb3kw6.js.map +0 -1
  57. package/dist/assets/mux.worker-uEMQY066.js +0 -8019
  58. package/dist/assets/mux.worker-uEMQY066.js.map +0 -1
  59. package/dist/assets/video-compose.worker-DPzsC21d.js.map +0 -1
  60. package/dist/assets/video-demux.worker-D019I7GQ.js.map +0 -1
  61. package/dist/model/types.js +0 -5
  62. package/dist/model/types.js.map +0 -1
  63. package/dist/plugins/BackpressureMonitor.js +0 -62
  64. package/dist/plugins/BackpressureMonitor.js.map +0 -1
  65. package/dist/stages/compose/AudioDucker.js +0 -161
  66. package/dist/stages/compose/AudioDucker.js.map +0 -1
  67. package/dist/stages/compose/AudioMixer.js +0 -373
  68. package/dist/stages/compose/AudioMixer.js.map +0 -1
  69. package/dist/stages/compose/FilterProcessor.js +0 -226
  70. package/dist/stages/compose/FilterProcessor.js.map +0 -1
  71. package/dist/stages/compose/LayerRenderer.js +0 -215
  72. package/dist/stages/compose/LayerRenderer.js.map +0 -1
  73. package/dist/stages/compose/TransitionProcessor.js +0 -189
  74. package/dist/stages/compose/TransitionProcessor.js.map +0 -1
  75. package/dist/stages/compose/VideoComposer.js +0 -186
  76. package/dist/stages/compose/VideoComposer.js.map +0 -1
  77. package/dist/stages/compose/audio-compose.worker.d.ts +0 -79
  78. package/dist/stages/compose/audio-compose.worker.d.ts.map +0 -1
  79. package/dist/stages/compose/audio-compose.worker.js +0 -540
  80. package/dist/stages/compose/audio-compose.worker.js.map +0 -1
  81. package/dist/stages/compose/audio-compose.worker2.js +0 -5
  82. package/dist/stages/compose/audio-compose.worker2.js.map +0 -1
  83. package/dist/stages/compose/video-compose.worker.d.ts +0 -60
  84. package/dist/stages/compose/video-compose.worker.d.ts.map +0 -1
  85. package/dist/stages/compose/video-compose.worker.js +0 -379
  86. package/dist/stages/compose/video-compose.worker.js.map +0 -1
  87. package/dist/stages/compose/video-compose.worker2.js +0 -5
  88. package/dist/stages/compose/video-compose.worker2.js.map +0 -1
  89. package/dist/stages/decode/AudioChunkDecoder.js +0 -82
  90. package/dist/stages/decode/AudioChunkDecoder.js.map +0 -1
  91. package/dist/stages/decode/BaseDecoder.js +0 -130
  92. package/dist/stages/decode/BaseDecoder.js.map +0 -1
  93. package/dist/stages/decode/VideoChunkDecoder.js +0 -199
  94. package/dist/stages/decode/VideoChunkDecoder.js.map +0 -1
  95. package/dist/stages/decode/decode.worker.d.ts +0 -70
  96. package/dist/stages/decode/decode.worker.d.ts.map +0 -1
  97. package/dist/stages/decode/decode.worker.js +0 -423
  98. package/dist/stages/decode/decode.worker.js.map +0 -1
  99. package/dist/stages/decode/decode.worker2.js +0 -5
  100. package/dist/stages/decode/decode.worker2.js.map +0 -1
  101. package/dist/stages/demux/MP3FrameParser.js +0 -186
  102. package/dist/stages/demux/MP3FrameParser.js.map +0 -1
  103. package/dist/stages/demux/MP4Demuxer.js.map +0 -1
  104. package/dist/stages/demux/audio-demux.worker.d.ts +0 -51
  105. package/dist/stages/demux/audio-demux.worker.d.ts.map +0 -1
  106. package/dist/stages/demux/audio-demux.worker.js.map +0 -1
  107. package/dist/stages/demux/audio-demux.worker2.js +0 -5
  108. package/dist/stages/demux/audio-demux.worker2.js.map +0 -1
  109. package/dist/stages/demux/video-demux.worker.d.ts +0 -51
  110. package/dist/stages/demux/video-demux.worker.d.ts.map +0 -1
  111. package/dist/stages/demux/video-demux.worker.js.map +0 -1
  112. package/dist/stages/demux/video-demux.worker2.js +0 -5
  113. package/dist/stages/demux/video-demux.worker2.js.map +0 -1
  114. package/dist/stages/encode/AudioChunkEncoder.js +0 -37
  115. package/dist/stages/encode/AudioChunkEncoder.js.map +0 -1
  116. package/dist/stages/encode/BaseEncoder.js +0 -164
  117. package/dist/stages/encode/BaseEncoder.js.map +0 -1
  118. package/dist/stages/encode/VideoChunkEncoder.js +0 -50
  119. package/dist/stages/encode/VideoChunkEncoder.js.map +0 -1
  120. package/dist/stages/encode/encode.worker.d.ts +0 -3
  121. package/dist/stages/encode/encode.worker.d.ts.map +0 -1
  122. package/dist/stages/encode/encode.worker.js.map +0 -1
  123. package/dist/stages/encode/encode.worker2.js +0 -5
  124. package/dist/stages/encode/encode.worker2.js.map +0 -1
  125. package/dist/stages/mux/MP4Muxer.js.map +0 -1
  126. package/dist/stages/mux/mux.worker.d.ts +0 -65
  127. package/dist/stages/mux/mux.worker.d.ts.map +0 -1
  128. package/dist/stages/mux/mux.worker.js +0 -219
  129. package/dist/stages/mux/mux.worker.js.map +0 -1
  130. package/dist/stages/mux/mux.worker2.js +0 -5
  131. package/dist/stages/mux/mux.worker2.js.map +0 -1
  132. package/dist/stages/mux/utils.js +0 -34
  133. package/dist/stages/mux/utils.js.map +0 -1
  134. package/dist/worker/worker-registry.d.ts +0 -12
  135. package/dist/worker/worker-registry.d.ts.map +0 -1
  136. package/dist/worker/worker-registry.js +0 -20
  137. package/dist/worker/worker-registry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"audio-demux.worker-xwWBtbAe.js","sources":["../src/worker/types.ts","../src/worker/worker-retry.ts","../src/worker/transferable-helper.ts","../src/worker/WorkerChannel.ts","../../../node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js","../src/plugins/BackpressureMonitor.ts","../src/stages/demux/MP4Demuxer.ts","../src/stages/demux/MP3FrameParser.ts","../src/stages/demux/audio-demux.worker.ts"],"sourcesContent":["/**\n * Worker Communication Protocol Types\n * Define standard message types and protocols for worker communication\n */\n\n// A port-like object that supports postMessage/onmessage used by WorkerChannel\nexport type PortLike = MessagePort | DedicatedWorkerGlobalScope | Worker;\n\n/**\n * Worker types in the pipeline\n */\nexport type WorkerType =\n | 'videoDemux'\n | 'audioDemux'\n | 'decode'\n | 'videoCompose'\n | 'audioCompose'\n | 'encode'\n | 'mux';\n\nexport interface WorkerConfigurePayload<T = any> {\n config: T;\n initial: boolean;\n}\n\n/**\n * Worker state definition\n */\nexport interface WorkerStateInfo {\n state: 'idle' | 'busy' | 'error' | 'terminated';\n taskCount: number;\n lastError?: string;\n}\n\n/**\n * Worker status for all workers\n */\nexport type WorkerStatus = Record<WorkerType, WorkerStateInfo>;\n\n/**\n * Worker wrapper interface\n */\nexport interface IWorker {\n readonly type: WorkerType;\n readonly state: WorkerStateInfo;\n\n initialize(): Promise<void>;\n terminate(): Promise<void>;\n restart(): Promise<void>;\n\n postMessage(message: any, transfer?: Transferable[]): void;\n on(event: string, handler: (data: any) => void): void;\n off(event: string, handler: (data: any) => void): void;\n}\n\n// Message types for different workers\nexport enum WorkerMessageType {\n // Init = 'init', // configure, { initial: true }\n Ready = 'ready',\n Error = 'error',\n Dispose = 'dispose',\n Configure = 'configure',\n LoadResource = 'load_resource',\n ResourceLoaded = 'resource_loaded',\n ResourceProgress = 'resource_progress',\n ConfigureDemux = 'configure_demux',\n AppendBuffer = 'append_buffer',\n DemuxSamples = 'demux_samples',\n FlushDemux = 'flush_demux',\n ConfigureDecode = 'configure_decode',\n DecodeChunk = 'decode_chunk',\n DecodedFrame = 'decoded_frame',\n SeekGop = 'seek_gop',\n SetComposition = 'set_composition',\n ApplyPatch = 'apply_patch',\n RenderFrame = 'render_frame',\n ComposeFrameReady = 'compose_frame_ready',\n ConfigureEncode = 'configure_encode',\n EncodeFrame = 'encode_frame',\n EncodeAudio = 'encode_audio',\n EncodedChunk = 'encoded_chunk',\n FlushEncode = 'flush_encode',\n ConfigureMux = 'configure_mux',\n AddChunk = 'add_chunk',\n FinishMux = 'finish_mux',\n MuxComplete = 'mux_complete',\n PerformanceStats = 'performance_stats',\n RenderWindow = 'renderWindow',\n AudioTrackAdd = 'audio_track:add',\n AudioTrackRemove = 'audio_track:remove',\n AudioTrackUpdate = 'audio_track:update',\n}\n\n// Base message structure\nexport interface WorkerMessage<T = any> {\n type: WorkerMessageType;\n id: string; // Unique message ID for request-response pairing\n payload?: T;\n transfer?: Transferable[]; // Objects to transfer ownership\n timestamp: number;\n}\n\n// Response message structure\nexport interface WorkerResponse<T = any> {\n id: string; // Matches request ID\n success: boolean;\n result?: T;\n error?: WorkerError;\n timestamp: number;\n}\n\n// Error structure\nexport interface WorkerError {\n code: string;\n message: string;\n details?: any;\n stack?: string;\n}\n\n// Worker configuration\nexport interface WorkerConfig {\n name: string;\n workerUrl?: string;\n capabilities?: string[];\n maxRetries?: number;\n timeout?: number;\n}\n\n// Message handler type\nexport type MessageHandler<T = any, R = any> = (\n payload: T,\n transfer?: Transferable[]\n) => Promise<R> | R;\n\n// Message handler registry\nexport interface MessageHandlers {\n [key: string]: MessageHandler;\n}\n\n/**\n * Unified stream connection message for the data plane\n * Used by the stream-pipeline refactor to reduce message surface\n */\nexport interface ConnectMsg {\n direction: 'upstream';\n port: MessagePort;\n streamType: 'video' | 'audio' | 'frame' | 'chunk';\n clipId?: string;\n trackId?: string;\n}\n\n// Transferable types used in workers\nexport interface TransferableFrame {\n frame: VideoFrame;\n timestamp: number;\n duration?: number;\n}\n\nexport interface TransferableChunk {\n chunk: EncodedVideoChunk | EncodedAudioChunk;\n timestamp: number;\n duration?: number;\n trackId: string;\n}\n\nexport interface TransferableBuffer {\n buffer: ArrayBuffer;\n offset?: number;\n length?: number;\n}\n\n// Worker state\nexport enum WorkerState {\n Idle = 'idle',\n Initializing = 'initializing',\n Ready = 'ready',\n Processing = 'processing',\n Error = 'error',\n Disposed = 'disposed',\n}\n\n// Performance metrics\nexport interface WorkerPerformanceStats {\n workerId: string;\n workerName: string;\n messagesProcessed: number;\n averageProcessingTime: number;\n maxProcessingTime: number;\n errorCount: number;\n queueSize: number;\n memoryUsage?: number;\n}\n\n// Request tracking\nexport interface PendingRequest {\n id: string;\n type: WorkerMessageType;\n timestamp: number;\n timeout?: number;\n resolve: (value: any) => void;\n reject: (error: any) => void;\n retryCount?: number;\n maxRetries?: number;\n}\n\n// Stream support\nexport interface StreamConfig {\n highWaterMark?: number;\n strategy?: QueuingStrategy;\n}\n\n// Worker pool settings\nexport interface WorkerPoolSettings {\n maxWorkers?: number;\n workerIdleTimeout?: number;\n enableSharedArrayBuffer?: boolean;\n enableOffscreenCanvas?: boolean;\n}\n\n// Message priority levels\nexport enum MessagePriority {\n Low = 0,\n Normal = 1,\n High = 2,\n Critical = 3,\n}\n\n// Priority message\nexport interface PriorityMessage<T = any> extends WorkerMessage<T> {\n priority: MessagePriority;\n}\n","/**\n * Retry utility for worker communication\n * Provides configurable retry logic with exponential backoff\n */\n\nimport { WorkerMessageType } from './types';\n\nexport interface RetryConfig {\n maxRetries: number;\n initialDelay?: number; // Initial delay in ms\n maxDelay?: number; // Max delay in ms\n backoffFactor?: number; // Exponential backoff factor\n retryableErrors?: string[]; // Error codes that can be retried\n}\n\nexport interface RetryContext {\n attempt: number;\n maxRetries: number;\n lastError?: Error;\n messageType: WorkerMessageType;\n}\n\n/**\n * Default retry configuration\n */\nexport const defaultRetryConfig: Required<RetryConfig> = {\n maxRetries: 3,\n initialDelay: 100,\n maxDelay: 5000,\n backoffFactor: 2,\n retryableErrors: ['TIMEOUT', 'NETWORK_ERROR', 'WORKER_BUSY'],\n};\n\n/**\n * Calculate delay for next retry attempt\n */\nexport function calculateRetryDelay(attempt: number, config: RetryConfig): number {\n const { initialDelay = 100, maxDelay = 5000, backoffFactor = 2 } = config;\n\n const delay = initialDelay * Math.pow(backoffFactor, attempt - 1);\n return Math.min(delay, maxDelay);\n}\n\n/**\n * Check if error is retryable\n */\nexport function isRetryableError(error: Error | any, config: RetryConfig): boolean {\n const { retryableErrors = defaultRetryConfig.retryableErrors } = config;\n\n if (!error) return false;\n\n // Check error code\n const errorCode = error.code || error.name;\n if (errorCode && retryableErrors.includes(errorCode)) {\n return true;\n }\n\n // Check error message for known patterns\n const message = error.message || '';\n if (message.includes('timeout') || message.includes('Timeout')) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Execute function with retry logic\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config: RetryConfig\n // context?: Partial<RetryContext>\n): Promise<T> {\n const { maxRetries } = config;\n let lastError: Error | undefined;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n // Check if error is retryable\n if (!isRetryableError(error, config)) {\n throw error;\n }\n\n // Check if we've exhausted retries\n if (attempt === maxRetries) {\n throw error;\n }\n\n // Calculate and apply delay\n const delay = calculateRetryDelay(attempt, config);\n await sleep(delay);\n }\n }\n\n // This should never be reached, but TypeScript needs it\n throw lastError || new Error('Retry failed');\n}\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Create a retry wrapper for a specific operation\n */\nexport function createRetryWrapper<T extends (...args: any[]) => Promise<any>>(\n fn: T,\n config: RetryConfig\n): T {\n return (async (...args: Parameters<T>) => {\n return withRetry(() => fn(...args), config);\n }) as T;\n}\n","/**\n * Utility functions for handling Transferable objects\n * Simplifies the process of transferring ownership of objects between workers\n */\n\n/**\n * Check if an object is transferable\n */\nexport function isTransferable(obj: any): obj is Transferable {\n return (\n obj instanceof ArrayBuffer ||\n obj instanceof MessagePort ||\n (typeof ImageBitmap !== 'undefined' && obj instanceof ImageBitmap) ||\n (typeof OffscreenCanvas !== 'undefined' && obj instanceof OffscreenCanvas) ||\n (typeof ReadableStream !== 'undefined' && obj instanceof ReadableStream) ||\n (typeof WritableStream !== 'undefined' && obj instanceof WritableStream) ||\n (typeof TransformStream !== 'undefined' && obj instanceof TransformStream)\n );\n}\n\n/**\n * Recursively find transferable objects in a payload\n */\nfunction findTransferables(obj: any, transferables: Transferable[]): void {\n if (!obj || typeof obj !== 'object') {\n return;\n }\n\n // Check if object itself is transferable\n if (isTransferable(obj)) {\n transferables.push(obj);\n return;\n }\n\n // Check VideoFrame\n if (obj instanceof VideoFrame) {\n transferables.push(obj);\n return;\n }\n\n // Check AudioData\n if (typeof AudioData !== 'undefined' && obj instanceof AudioData) {\n transferables.push(obj);\n return;\n }\n\n // EncodedVideoChunk and EncodedAudioChunk are not transferable\n if (\n (typeof EncodedVideoChunk !== 'undefined' && obj instanceof EncodedVideoChunk) ||\n (typeof EncodedAudioChunk !== 'undefined' && obj instanceof EncodedAudioChunk)\n ) {\n return;\n }\n\n // Recursively check object properties\n if (Array.isArray(obj)) {\n for (const item of obj) {\n findTransferables(item, transferables);\n }\n } else {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n findTransferables(obj[key], transferables);\n }\n }\n }\n}\n\n/**\n * Extract transferable objects from a payload\n */\nexport function extractTransferables(payload: any): Transferable[] {\n const transferables: Transferable[] = [];\n findTransferables(payload, transferables);\n return transferables;\n}\n\n/**\n * Wrap VideoFrame for transfer with metadata\n */\nexport function wrapVideoFrame(frame: VideoFrame) {\n return {\n frame,\n metadata: {\n timestamp: frame.timestamp,\n duration: frame.duration,\n codedWidth: frame.codedWidth,\n codedHeight: frame.codedHeight,\n displayWidth: frame.displayWidth,\n displayHeight: frame.displayHeight,\n format: frame.format,\n },\n };\n}\n\n/**\n * Wrap AudioData for transfer with metadata\n */\nexport function wrapAudioData(audio: AudioData) {\n return {\n audio,\n metadata: {\n timestamp: audio.timestamp,\n duration: audio.duration,\n numberOfFrames: audio.numberOfFrames,\n numberOfChannels: audio.numberOfChannels,\n sampleRate: audio.sampleRate,\n format: audio.format,\n },\n };\n}\n\n/**\n * Convert EncodedVideoChunk to transferable format\n */\nexport function encodedVideoChunkToTransferable(chunk: EncodedVideoChunk) {\n const data = new ArrayBuffer(chunk.byteLength);\n chunk.copyTo(new Uint8Array(data));\n\n return {\n data,\n type: chunk.type,\n timestamp: chunk.timestamp,\n duration: chunk.duration,\n };\n}\n\n/**\n * Convert EncodedAudioChunk to transferable format\n */\nexport function encodedAudioChunkToTransferable(chunk: EncodedAudioChunk) {\n const data = new ArrayBuffer(chunk.byteLength);\n chunk.copyTo(new Uint8Array(data));\n\n return {\n data,\n type: chunk.type,\n timestamp: chunk.timestamp,\n duration: chunk.duration,\n };\n}\n\n/**\n * Recreate EncodedVideoChunk from transferable format\n */\nexport function transferableToEncodedVideoChunk(transferable: {\n data: ArrayBuffer;\n type: 'key' | 'delta';\n timestamp: number;\n duration?: number;\n}): EncodedVideoChunk {\n return new EncodedVideoChunk({\n type: transferable.type,\n timestamp: transferable.timestamp,\n duration: transferable.duration,\n data: transferable.data,\n });\n}\n\n/**\n * Recreate EncodedAudioChunk from transferable format\n */\nexport function transferableToEncodedAudioChunk(transferable: {\n data: ArrayBuffer;\n type: 'key' | 'delta';\n timestamp: number;\n duration?: number;\n}): EncodedAudioChunk {\n return new EncodedAudioChunk({\n type: transferable.type,\n timestamp: transferable.timestamp,\n duration: transferable.duration,\n data: transferable.data,\n });\n}\n\n/**\n * Transfer OffscreenCanvas control to worker\n */\nexport function transferCanvas(canvas: HTMLCanvasElement): OffscreenCanvas {\n return canvas.transferControlToOffscreen();\n}\n\n/**\n * Create a transferable stream pair\n */\nexport function createStreamPair<T>(): {\n readable: ReadableStream<T>;\n writable: WritableStream<T>;\n} {\n const { readable, writable } = new TransformStream<T>();\n return { readable, writable };\n}\n","/**\n * WorkerChannel - MessageChannel wrapper for worker communication\n * Provides type-safe message passing with automatic serialization/deserialization\n */\n\nimport {\n WorkerMessage,\n WorkerResponse,\n WorkerError,\n WorkerMessageType,\n PendingRequest,\n MessageHandler,\n MessageHandlers,\n WorkerState,\n PortLike,\n} from './types';\nimport { withRetry, RetryConfig, defaultRetryConfig } from './worker-retry';\nimport { isTransferable, extractTransferables } from './transferable-helper';\n\nexport interface WorkerChannelConfig {\n name: string;\n timeout?: number; // Default timeout in milliseconds\n maxRetries?: number; // Default max retries\n}\n\nexport class WorkerChannel {\n name: string;\n port: PortLike;\n pendingRequests = new Map<string, PendingRequest>();\n messageHandlers: MessageHandlers = {};\n state: WorkerState = WorkerState.Idle;\n defaultTimeout: number;\n defaultMaxRetries: number;\n\n constructor(port: PortLike, config: WorkerChannelConfig) {\n this.name = config.name;\n this.port = port;\n this.defaultTimeout = config.timeout ?? 30000; // 30 seconds default\n this.defaultMaxRetries = config.maxRetries ?? 3;\n\n this.setupMessageHandler();\n this.state = WorkerState.Ready;\n }\n\n /**\n * Send a message and wait for response with retry support\n */\n async send<T = any, R = any>(\n type: WorkerMessageType,\n payload?: T,\n options?: {\n timeout?: number;\n maxRetries?: number;\n transfer?: Transferable[];\n retryConfig?: Partial<RetryConfig>;\n }\n ): Promise<R> {\n const maxRetries = options?.maxRetries ?? this.defaultMaxRetries;\n\n // Create retry config\n const retryConfig: RetryConfig = {\n ...defaultRetryConfig,\n maxRetries,\n ...options?.retryConfig,\n };\n\n // Wrap send logic for retry\n return withRetry(() => this.sendOnce<T, R>(type, payload, options), retryConfig);\n }\n\n /**\n * Send a message once (without retry)\n */\n private async sendOnce<T = any, R = any>(\n type: WorkerMessageType,\n payload?: T,\n options?: {\n timeout?: number;\n transfer?: Transferable[];\n }\n ): Promise<R> {\n const id = this.generateMessageId();\n const timeout = options?.timeout ?? this.defaultTimeout;\n\n const message: WorkerMessage<T> = {\n type,\n id,\n payload,\n timestamp: Date.now(),\n };\n\n return new Promise((resolve, reject) => {\n const request: PendingRequest = {\n id,\n type,\n timestamp: Date.now(),\n timeout,\n resolve,\n reject,\n };\n\n this.pendingRequests.set(id, request);\n\n // Set timeout\n const timeoutId = setTimeout(() => {\n const pending = this.pendingRequests.get(id);\n if (pending) {\n this.pendingRequests.delete(id);\n const error = new Error(`Request timeout: ${id} ${type} (${timeout}ms)`);\n (error as any).code = 'TIMEOUT';\n pending.reject(error);\n }\n }, timeout);\n\n // Store timeout ID for cleanup\n (request as any).timeoutId = timeoutId;\n // Send message\n if (options?.transfer) {\n this.port.postMessage(message, options.transfer);\n } else {\n this.port.postMessage(message);\n }\n });\n }\n\n /**\n * Send a message without waiting for response\n */\n post<T = any>(type: WorkerMessageType, payload?: T, transfer?: Transferable[]): void {\n const message: WorkerMessage<T> = {\n type,\n id: this.generateMessageId(),\n payload,\n timestamp: Date.now(),\n };\n\n if (transfer) {\n this.port.postMessage(message, transfer);\n } else {\n this.port.postMessage(message);\n }\n }\n\n /**\n * Register a message handler\n */\n on<T = any, R = any>(type: WorkerMessageType, handler: MessageHandler<T, R>): void {\n this.messageHandlers[type] = handler;\n }\n\n /**\n * Unregister a message handler\n */\n off(type: WorkerMessageType): void {\n delete this.messageHandlers[type];\n }\n\n /**\n * Dispose the channel\n */\n dispose(): void {\n this.state = WorkerState.Disposed;\n\n // Clear all pending requests\n for (const [, request] of this.pendingRequests) {\n if ((request as any).timeoutId) {\n clearTimeout((request as any).timeoutId);\n }\n request.reject(new Error('Channel disposed'));\n }\n this.pendingRequests.clear();\n\n // Remove message handler\n this.port.onmessage = null;\n }\n\n /**\n * Setup message handler for incoming messages\n */\n private setupMessageHandler(): void {\n this.port.onmessage = async (event: MessageEvent) => {\n const data = event.data;\n\n // Handle response messages\n if (this.isResponse(data)) {\n this.handleResponse(data as WorkerResponse);\n return;\n }\n\n // Handle request messages\n if (this.isRequest(data)) {\n await this.handleRequest(data as WorkerMessage);\n return;\n }\n };\n }\n\n /**\n * Handle incoming request\n */\n private async handleRequest(message: WorkerMessage): Promise<void> {\n const handler = this.messageHandlers[message.type];\n\n if (!handler) {\n // Send error response if no handler registered\n this.sendResponse(message.id, false, null, {\n code: 'NO_HANDLER',\n message: `No handler registered for message type: ${message.type}`,\n });\n return;\n }\n\n this.state = WorkerState.Processing;\n\n // Handler execution with error handling at framework level\n Promise.resolve()\n .then(() => handler(message.payload, message.transfer))\n .then((result) => {\n this.sendResponse(message.id, true, result);\n this.state = WorkerState.Ready;\n })\n .catch((error) => {\n const workerError: WorkerError = {\n code: 'HANDLER_ERROR',\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n };\n this.sendResponse(message.id, false, null, workerError);\n this.state = WorkerState.Ready;\n });\n }\n\n /**\n * Handle incoming response\n */\n private handleResponse(response: WorkerResponse): void {\n const request = this.pendingRequests.get(response.id);\n if (!request) {\n return; // Response for unknown request\n }\n\n this.pendingRequests.delete(response.id);\n\n // Clear timeout\n if ((request as any).timeoutId) {\n clearTimeout((request as any).timeoutId);\n }\n\n if (response.success) {\n request.resolve(response.result);\n } else {\n const error = new Error(response.error?.message || 'Unknown error');\n if (response.error) {\n Object.assign(error, response.error);\n }\n request.reject(error);\n }\n }\n\n /**\n * Send a response message\n */\n private sendResponse(id: string, success: boolean, result?: any, error?: WorkerError): void {\n let transfer: Transferable[] = [];\n if (isTransferable(result)) {\n // Still include reference so caller can access the transferred object\n transfer.push(result);\n }\n const response: WorkerResponse = {\n id,\n success,\n result,\n error,\n timestamp: Date.now(),\n };\n\n this.port.postMessage(response, transfer);\n }\n\n /**\n * Check if message is a response\n */\n private isResponse(data: any): boolean {\n return (\n data && typeof data === 'object' && 'id' in data && 'success' in data && !('type' in data)\n );\n }\n\n /**\n * Check if message is a request\n */\n private isRequest(data: any): boolean {\n return data && typeof data === 'object' && 'id' in data && 'type' in data;\n }\n\n /**\n * Generate unique message ID\n */\n private generateMessageId(): string {\n return `${this.name}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n /**\n * Send a notification message without waiting for response\n * Alias for post() method for compatibility\n */\n notify<T = any>(type: WorkerMessageType | string, payload?: T, transfer?: Transferable[]): void {\n this.post(type as WorkerMessageType, payload, transfer);\n }\n\n /**\n * Register a message handler\n * Alias for on() method for compatibility\n */\n registerHandler<T = any, R = any>(\n type: WorkerMessageType | string,\n handler: MessageHandler<T, R>\n ): void {\n this.on(type as WorkerMessageType, handler);\n }\n\n /**\n * Send a ReadableStream to another worker\n * Automatically handles transferable streams vs chunk-by-chunk fallback\n */\n async sendStream<T = Uint8Array>(\n stream: ReadableStream<T>,\n metadata?: {\n type?: string;\n url?: string;\n streamId?: string;\n [key: string]: any;\n }\n ): Promise<void> {\n const streamId = metadata?.streamId || this.generateMessageId();\n // Check if streams are transferable in this environment\n if (isTransferable(stream)) {\n // Direct stream transfer (preferred)\n this.port.postMessage(\n {\n type: 'stream_transfer',\n ...metadata,\n stream,\n streamId,\n },\n [stream] // Transfer ownership\n );\n } else {\n // Fallback: chunk-by-chunk transfer\n await this.streamChunks(stream, streamId, metadata);\n }\n }\n\n /**\n * Stream chunks from a ReadableStream (fallback when transfer is not supported)\n */\n private async streamChunks<T = Uint8Array>(\n stream: ReadableStream<T>,\n streamId: string,\n metadata?: Record<string, any>\n ): Promise<void> {\n const reader = stream.getReader();\n\n // Send stream start notification\n this.post('stream_start' as WorkerMessageType, {\n streamId,\n ...metadata,\n mode: 'chunk_transfer',\n });\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n // Send stream end notification\n this.post('stream_end' as WorkerMessageType, {\n streamId,\n ...metadata,\n });\n break;\n }\n\n // Send chunk with transfer - use extractTransferables for complex objects\n const transfer: Transferable[] = [];\n if (value instanceof ArrayBuffer) {\n transfer.push(value);\n } else if (value instanceof Uint8Array) {\n transfer.push(value.buffer);\n } else if (typeof AudioData !== 'undefined' && value instanceof AudioData) {\n transfer.push(value as unknown as Transferable);\n } else if (typeof VideoFrame !== 'undefined' && value instanceof VideoFrame) {\n transfer.push(value as unknown as Transferable);\n } else if (typeof value === 'object' && value !== null) {\n // For wrapped objects (e.g., {frame: VideoFrame, metadata...}), extract transferables\n const extracted = extractTransferables(value);\n transfer.push(...extracted);\n }\n\n this.post(\n 'stream_chunk' as WorkerMessageType,\n {\n streamId,\n chunk: value,\n ...metadata,\n },\n transfer\n );\n }\n } catch (error) {\n // Send error notification\n this.post('stream_error' as WorkerMessageType, {\n streamId,\n error: error instanceof Error ? error.message : String(error),\n ...metadata,\n });\n throw error;\n } finally {\n reader.releaseLock();\n }\n }\n\n /**\n * Receive a stream from another worker\n * Handles both transferable streams and chunk-by-chunk reconstruction\n */\n async receiveStream<T = Uint8Array>(\n onStream: (stream: ReadableStream<T>, metadata?: Record<string, any>) => void\n ): Promise<void> {\n const chunkedStreams = new Map<\n string,\n {\n controller: ReadableStreamDefaultController<T>;\n metadata?: Record<string, any>;\n }\n >();\n\n // Intercept stream messages via onmessage to avoid extra event plumbing\n const prev = this.port.onmessage as any;\n // Use function assignment with explicit type to satisfy esbuild parser\n const handler: (event: MessageEvent) => void = (event) => {\n const raw = (event as any).data;\n const envelopeType = raw?.type;\n const hasPayload = raw && typeof raw === 'object' && 'payload' in raw;\n const payload = hasPayload ? (raw as any).payload : raw;\n\n if (envelopeType === 'stream_transfer' && (payload as any)?.stream) {\n onStream((payload as any).stream, payload);\n return;\n }\n if (envelopeType === 'stream_start' && (payload as any)?.streamId) {\n const stream = new ReadableStream<T>({\n start(controller) {\n chunkedStreams.set((payload as any).streamId, { controller, metadata: payload });\n },\n });\n onStream(stream, payload);\n return;\n }\n if (\n envelopeType === 'stream_chunk' &&\n (payload as any)?.streamId &&\n chunkedStreams.has((payload as any).streamId)\n ) {\n const s = chunkedStreams.get((payload as any).streamId);\n if (s) s.controller.enqueue((payload as any).chunk as T);\n return;\n }\n if (\n envelopeType === 'stream_end' &&\n (payload as any)?.streamId &&\n chunkedStreams.has((payload as any).streamId)\n ) {\n const s = chunkedStreams.get((payload as any).streamId);\n if (s) {\n s.controller.close();\n chunkedStreams.delete((payload as any).streamId);\n }\n return;\n }\n if (\n envelopeType === 'stream_error' &&\n (payload as any)?.streamId &&\n chunkedStreams.has((payload as any).streamId)\n ) {\n const s = chunkedStreams.get((payload as any).streamId);\n if (s) {\n s.controller.error(new Error(String((payload as any).error || 'stream error')));\n chunkedStreams.delete((payload as any).streamId);\n }\n return;\n }\n\n // Delegate non-stream messages to previous handler\n if (typeof prev === 'function') prev.call(this.port, event);\n };\n this.port.onmessage = handler as any;\n }\n}\n","// file:src/log.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar Log = (function (){\n\t\tvar start = new Date();\n\t\tvar LOG_LEVEL_ERROR \t= 4;\n\t\tvar LOG_LEVEL_WARNING \t= 3;\n\t\tvar LOG_LEVEL_INFO \t\t= 2;\n\t\tvar LOG_LEVEL_DEBUG\t\t= 1;\n\t\tvar log_level = LOG_LEVEL_ERROR;\n\t\tvar logObject = {\n\t\t\tsetLogLevel : function(level) {\n\t\t\t\tif (level == this.debug) log_level = LOG_LEVEL_DEBUG;\n\t\t\t\telse if (level == this.info) log_level = LOG_LEVEL_INFO;\n\t\t\t\telse if (level == this.warn) log_level = LOG_LEVEL_WARNING;\n\t\t\t\telse if (level == this.error) log_level = LOG_LEVEL_ERROR;\n\t\t\t\telse log_level = LOG_LEVEL_ERROR;\n\t\t\t},\n\t\t\tdebug : function(module, msg) {\n\t\t\t\tif (console.debug === undefined) {\n\t\t\t\t\tconsole.debug = console.log;\n\t\t\t\t}\n\t\t\t\tif (LOG_LEVEL_DEBUG >= log_level) {\n\t\t\t\t\tconsole.debug(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlog : function(module, msg) {\n\t\t\t\tthis.debug(module.msg)\n\t\t\t},\n\t\t\tinfo : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_INFO >= log_level) {\n\t\t\t\t\tconsole.info(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_WARNING >= log_level) {\n\t\t\t\t\tconsole.warn(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_ERROR >= log_level) {\n\t\t\t\t\tconsole.error(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn logObject;\n\t})();\n\t\n/* Helper function to print a duration value in the form H:MM:SS.MS */\nLog.getDurationString = function(duration, _timescale) {\n\tvar neg;\n\t/* Helper function to print a number on a fixed number of digits */\n\tfunction pad(number, length) {\n\t\tvar str = '' + number;\n\t\tvar a = str.split('.');\t\t\n\t\twhile (a[0].length < length) {\n\t\t\ta[0] = '0' + a[0];\n\t\t}\n\t\treturn a.join('.');\n\t}\n\tif (duration < 0) {\n\t\tneg = true;\n\t\tduration = -duration;\n\t} else {\n\t\tneg = false;\t\n\t}\n\tvar timescale = _timescale || 1;\n\tvar duration_sec = duration/timescale;\n\tvar hours = Math.floor(duration_sec/3600);\n\tduration_sec -= hours * 3600;\n\tvar minutes = Math.floor(duration_sec/60);\n\tduration_sec -= minutes * 60;\t\t\n\tvar msec = duration_sec*1000;\n\tduration_sec = Math.floor(duration_sec);\n\tmsec -= duration_sec*1000;\n\tmsec = Math.floor(msec);\n\treturn (neg ? \"-\": \"\")+hours+\":\"+pad(minutes,2)+\":\"+pad(duration_sec,2)+\".\"+pad(msec,3);\n}\n\t\n/* Helper function to stringify HTML5 TimeRanges objects */\t\nLog.printRanges = function(ranges) {\n\tvar length = ranges.length;\n\tif (length > 0) {\n\t\tvar str = \"\";\n\t\tfor (var i = 0; i < length; i++) {\n\t\t if (i > 0) str += \",\";\n\t\t str += \"[\"+Log.getDurationString(ranges.start(i))+ \",\"+Log.getDurationString(ranges.end(i))+\"]\";\n\t\t}\n\t\treturn str;\n\t} else {\n\t\treturn \"(empty)\";\n\t}\n}\n\nif (typeof exports !== 'undefined') {\n\texports.Log = Log;\n}\n// file:src/stream.js\nvar MP4BoxStream = function(arrayBuffer) {\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n this.dataview = new DataView(arrayBuffer);\n } else {\n throw (\"Needs an array buffer\");\n }\n this.position = 0;\n};\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\nMP4BoxStream.prototype.getPosition = function() {\n return this.position;\n}\n\nMP4BoxStream.prototype.getEndPosition = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.getLength = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.buffer.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n return true;\n}\n\nMP4BoxStream.prototype.isEos = function () {\n return this.getPosition() >= this.getEndPosition();\n}\n\n/*************************************************************************\n Read methods, simimar to DataStream but simpler\n *************************************************************************/\nMP4BoxStream.prototype.readAnyInt = function(size, signed) {\n var res = 0;\n if (this.position + size <= this.buffer.byteLength) {\n switch (size) {\n case 1:\n if (signed) {\n res = this.dataview.getInt8(this.position);\n } else {\n res = this.dataview.getUint8(this.position);\n }\n break;\n case 2:\n if (signed) {\n res = this.dataview.getInt16(this.position);\n } else {\n res = this.dataview.getUint16(this.position);\n }\n break;\n case 3:\n if (signed) {\n throw (\"No method for reading signed 24 bits values\");\n } else {\n res = this.dataview.getUint8(this.position) << 16;\n res |= this.dataview.getUint8(this.position+1) << 8;\n res |= this.dataview.getUint8(this.position+2);\n }\n break;\n case 4:\n if (signed) {\n res = this.dataview.getInt32(this.position);\n } else {\n res = this.dataview.getUint32(this.position);\n }\n break;\n case 8:\n if (signed) {\n throw (\"No method for reading signed 64 bits values\");\n } else {\n res = this.dataview.getUint32(this.position) << 32;\n res |= this.dataview.getUint32(this.position+4);\n }\n break;\n default:\n throw (\"readInt method not implemented for size: \"+size);\n }\n this.position+= size;\n return res;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readUint8 = function() {\n return this.readAnyInt(1, false);\n}\n\nMP4BoxStream.prototype.readUint16 = function() {\n return this.readAnyInt(2, false);\n}\n\nMP4BoxStream.prototype.readUint24 = function() {\n return this.readAnyInt(3, false);\n}\n\nMP4BoxStream.prototype.readUint32 = function() {\n return this.readAnyInt(4, false);\n}\n\nMP4BoxStream.prototype.readUint64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readString = function(length) {\n if (this.position + length <= this.buffer.byteLength) {\n var s = \"\";\n for (var i = 0; i < length; i++) {\n s += String.fromCharCode(this.readUint8());\n }\n return s;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readCString = function() {\n var arr = [];\n while(true) {\n var b = this.readUint8();\n if (b !== 0) {\n arr.push(b);\n } else {\n break;\n }\n }\n return String.fromCharCode.apply(null, arr); \n}\n\nMP4BoxStream.prototype.readInt8 = function() {\n return this.readAnyInt(1, true);\n}\n\nMP4BoxStream.prototype.readInt16 = function() {\n return this.readAnyInt(2, true);\n}\n\nMP4BoxStream.prototype.readInt32 = function() {\n return this.readAnyInt(4, true);\n}\n\nMP4BoxStream.prototype.readInt64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readUint8Array = function(length) {\n var arr = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint8();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint32Array = function(length) {\n var arr = new Uint32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint32();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt32Array = function(length) {\n var arr = new Int32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt32();\n }\n return arr;\n}\n\nif (typeof exports !== 'undefined') {\n exports.MP4BoxStream = MP4BoxStream;\n}// file:src/DataStream.js\n/**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n\n @param {ArrayBuffer} arrayBuffer ArrayBuffer to read from.\n @param {?Number} byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param {?Boolean} endianness DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN (the default).\n */\nvar DataStream = function(arrayBuffer, byteOffset, endianness) {\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n } else if (typeof arrayBuffer == \"object\") {\n this.dataView = arrayBuffer;\n if (byteOffset) {\n this._byteOffset += byteOffset;\n }\n } else {\n this.buffer = new ArrayBuffer(arrayBuffer || 0);\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n};\nDataStream.prototype = {};\n\nDataStream.prototype.getPosition = function() {\n return this.position;\n}\n\n/**\n Internal function to resize the DataStream buffer when required.\n @param {number} extra Number of bytes to add to the buffer allocation.\n @return {null}\n */\nDataStream.prototype._realloc = function(extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n};\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n\n @return {null}\n */\nDataStream.prototype._trimAlloc = function() {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n};\n\n\n/**\n Big-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.BIG_ENDIAN = false;\n\n/**\n Little-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.LITTLE_ENDIAN = true;\n\n/**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n @type {number}\n */\nDataStream.prototype._byteLength = 0;\n\n/**\n Returns the byte length of the DataStream object.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteLength',\n { get: function() {\n return this._byteLength - this._byteOffset;\n }});\n\n/**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'buffer',\n { get: function() {\n this._trimAlloc();\n return this._buffer;\n },\n set: function(v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteOffset',\n { get: function() {\n return this._byteOffset;\n },\n set: function(v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'dataView',\n { get: function() {\n return this._dataView;\n },\n set: function(v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n } });\n\n/**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n\n @param {number} pos Position to seek to.\n @return {null}\n */\nDataStream.prototype.seek = function(pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n};\n\n/**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n\n @return {boolean} True if the seek pointer is at the end of the buffer.\n */\nDataStream.prototype.isEof = function() {\n return (this.position >= this._byteLength);\n};\n\n\n/**\n Maps a Uint8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n\n/**\n Reads an Int32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int32Array.\n */\nDataStream.prototype.readInt32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int16Array.\n */\nDataStream.prototype.readInt16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int8Array.\n */\nDataStream.prototype.readInt8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint32Array.\n */\nDataStream.prototype.readUint32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint16Array.\n */\nDataStream.prototype.readUint16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint8Array.\n */\nDataStream.prototype.readUint8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float64Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float64Array.\n */\nDataStream.prototype.readFloat64Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 8) : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float32Array.\n */\nDataStream.prototype.readFloat32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n\n/**\n Reads a 32-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt32 = function(e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt16 = function(e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readInt8 = function() {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint32 = function(e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint16 = function(e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit unsigned int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readUint8 = function() {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat32 = function(e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 64-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat64 = function(e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n};\n\n/**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n\n @type {boolean}\n */\nDataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n\n/**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n\n @param {Object} dst Destination ArrayBuffer to write to.\n @param {number} dstOffset Offset to the destination ArrayBuffer.\n @param {Object} src Source ArrayBuffer to read from.\n @param {number} srcOffset Offset to the source ArrayBuffer.\n @param {number} byteLength Number of bytes to copy.\n */\nDataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n};\n\n/**\n Converts array to native endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.arrayToNative = function(array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Converts native endianness array to desired endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.nativeToEndian = function(array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Flips typed array endianness in-place.\n\n @param {Object} array Typed array to flip.\n @return {Object} The converted typed array.\n */\nDataStream.flipArrayEndianness = function(array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i=0; i<array.byteLength; i+=array.BYTES_PER_ELEMENT) {\n for (var j=i+array.BYTES_PER_ELEMENT-1, k=i; j>k; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n};\n\n/**\n Seek position where DataStream#readStruct ran into a problem.\n Useful for debugging struct parsing.\n\n @type {number}\n */\nDataStream.prototype.failurePosition = 0;\n\nString.fromCharCodeUint8 = function(uint8arr) {\n var arr = [];\n for (var i = 0; i < uint8arr.length; i++) {\n arr[i] = uint8arr[i];\n }\n return String.fromCharCode.apply(null, arr);\n}\n/**\n Read a string of desired length and encoding from the DataStream.\n\n @param {number} length The length of the string to read in bytes.\n @param {?string} encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return {string} The read string.\n */\nDataStream.prototype.readString = function(length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return String.fromCharCodeUint8.apply(null, [this.mapUint8Array(length == null ? this.byteLength-this.position : length)]);\n } else {\n return (new TextDecoder(encoding)).decode(this.mapUint8Array(length));\n }\n};\n\n/**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n\n @param {?number} length The length of the string to read.\n @return {string} The read string.\n */\nDataStream.prototype.readCString = function(length) {\n var blen = this.byteLength-this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] !== 0; i++); // find first zero byte\n var s = String.fromCharCodeUint8.apply(null, [this.mapUint8Array(i)]);\n if (length != null) {\n this.position += len-i;\n } else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n};\n\n/* \n TODO: fix endianness for 24/64-bit fields\n TODO: check range/support for 64-bits numbers in JavaScript\n*/\nvar MAX_SIZE = Math.pow(2, 32);\n\nDataStream.prototype.readInt64 = function () {\n return (this.readInt32()*MAX_SIZE)+this.readUint32();\n}\nDataStream.prototype.readUint64 = function () {\n\treturn (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readInt64 = function () {\n return (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readUint24 = function () {\n\treturn (this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8();\n}\n\nif (typeof exports !== 'undefined') {\n exports.DataStream = DataStream; \n}\n// file:src/DataStream-write.js\n/**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param {string} filename Filename to save as.\n @return {null}\n */\nDataStream.prototype.save = function(filename) {\n var blob = new Blob([this.buffer]);\n if (window.URL && URL.createObjectURL) {\n var url = window.URL.createObjectURL(blob);\n var a = document.createElement('a');\n // Required in Firefox:\n document.body.appendChild(a);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n // Required in Firefox:\n a.setAttribute('target', '_self');\n a.click();\n window.URL.revokeObjectURL(url);\n } else {\n throw(\"DataStream.save: Can't create object URL.\");\n }\n};\n\n/**\n Whether to extend DataStream buffer when trying to write beyond its size.\n If set, the buffer is reallocated to twice its current size until the\n requested write fits the buffer.\n @type {boolean}\n */\nDataStream.prototype._dynamicSize = true;\nObject.defineProperty(DataStream.prototype, 'dynamicSize',\n { get: function() {\n return this._dynamicSize;\n },\n set: function(v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n } });\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the first bytes when not needed anymore.\n\n @return {null}\n */\nDataStream.prototype.shift = function(offset) {\n var buf = new ArrayBuffer(this._byteLength-offset);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, offset, dst.length);\n dst.set(src);\n this.buffer = buf;\n this.position -= offset;\n};\n\n/**\n Writes an Int32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt32(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Int16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt16(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeInt8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Int8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Uint32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Uint32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint32(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Uint16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint16(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeUint8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Uint8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Float64Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat64Array = function(arr, e) {\n this._realloc(arr.length * 8);\n if (arr instanceof Float64Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat64Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat64(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Float32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Float32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat32(arr[i], e);\n }\n }\n};\n\n\n/**\n Writes a 32-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt32 = function(v, e) {\n this._realloc(4);\n this._dataView.setInt32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt16 = function(v, e) {\n this._realloc(2);\n this._dataView.setInt16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeInt8 = function(v) {\n this._realloc(1);\n this._dataView.setInt8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint32 = function(v, e) {\n this._realloc(4);\n this._dataView.setUint32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint16 = function(v, e) {\n this._realloc(2);\n this._dataView.setUint16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit unsigned int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeUint8 = function(v) {\n this._realloc(1);\n this._dataView.setUint8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat32 = function(v, e) {\n this._realloc(4);\n this._dataView.setFloat32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 64-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat64 = function(v, e) {\n this._realloc(8);\n this._dataView.setFloat64(this.position, v, e == null ? this.endianness : e);\n this.position += 8;\n};\n\n/**\n Write a UCS-2 string of desired endianness to the DataStream. The\n lengthOverride argument lets you define the number of characters to write.\n If the string is shorter than lengthOverride, the extra space is padded with\n zeroes.\n\n @param {string} str The string to write.\n @param {?boolean} endianness The endianness to use for the written string data.\n @param {?number} lengthOverride The number of characters to write.\n */\nDataStream.prototype.writeUCS2String = function(str, endianness, lengthOverride) {\n if (lengthOverride == null) {\n lengthOverride = str.length;\n }\n for (var i = 0; i < str.length && i < lengthOverride; i++) {\n this.writeUint16(str.charCodeAt(i), endianness);\n }\n for (; i<lengthOverride; i++) {\n this.writeUint16(0);\n }\n};\n\n/**\n Writes a string of desired length and encoding to the DataStream.\n\n @param {string} s The string to write.\n @param {?string} encoding The encoding for the written string data.\n Defaults to ASCII.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeString = function(s, encoding, length) {\n var i = 0;\n if (encoding == null || encoding == \"ASCII\") {\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n }\n } else {\n this.writeUint8Array((new TextEncoder(encoding)).encode(s.substring(0, length)));\n }\n};\n\n/**\n Writes a null-terminated string to DataStream and zero-pads it to length\n bytes. If length is not given, writes the string followed by a zero.\n If string is longer than length, the written part of the string does not have\n a trailing zero.\n\n @param {string} s The string to write.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeCString = function(s, length) {\n var i = 0;\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n this.writeUint8(0);\n }\n};\n\n/**\n Writes a struct to the DataStream. Takes a structDefinition that gives the\n types and a struct object that gives the values. Refer to readStruct for the\n structure of structDefinition.\n\n @param {Object} structDefinition Type definition of the struct.\n @param {Object} struct The struct data object.\n */\nDataStream.prototype.writeStruct = function(structDefinition, struct) {\n for (var i = 0; i < structDefinition.length; i+=2) {\n var t = structDefinition[i+1];\n this.writeType(t, struct[structDefinition[i]], struct);\n }\n};\n\n/**\n Writes object v of type t to the DataStream.\n\n @param {Object} t Type of data to write.\n @param {Object} v Value of data to write.\n @param {Object} struct Struct to pass to write callback functions.\n */\nDataStream.prototype.writeType = function(t, v, struct) {\n var tp;\n if (typeof t == \"function\") {\n return t(this, v);\n } else if (typeof t == \"object\" && !(t instanceof Array)) {\n return t.set(this, v, struct);\n }\n var lengthOverride = null;\n var charset = \"ASCII\";\n var pos = this.position;\n if (typeof(t) == 'string' && /:/.test(t)) {\n tp = t.split(\":\");\n t = tp[0];\n lengthOverride = parseInt(tp[1]);\n }\n if (typeof t == 'string' && /,/.test(t)) {\n tp = t.split(\",\");\n t = tp[0];\n charset = parseInt(tp[1]);\n }\n\n switch(t) {\n case 'uint8':\n this.writeUint8(v);\n break;\n case 'int8':\n this.writeInt8(v);\n break;\n\n case 'uint16':\n this.writeUint16(v, this.endianness);\n break;\n case 'int16':\n this.writeInt16(v, this.endianness);\n break;\n case 'uint32':\n this.writeUint32(v, this.endianness);\n break;\n case 'int32':\n this.writeInt32(v, this.endianness);\n break;\n case 'float32':\n this.writeFloat32(v, this.endianness);\n break;\n case 'float64':\n this.writeFloat64(v, this.endianness);\n break;\n\n case 'uint16be':\n this.writeUint16(v, DataStream.BIG_ENDIAN);\n break;\n case 'int16be':\n this.writeInt16(v, DataStream.BIG_ENDIAN);\n break;\n case 'uint32be':\n this.writeUint32(v, DataStream.BIG_ENDIAN);\n break;\n case 'int32be':\n this.writeInt32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float32be':\n this.writeFloat32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float64be':\n this.writeFloat64(v, DataStream.BIG_ENDIAN);\n break;\n\n case 'uint16le':\n this.writeUint16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int16le':\n this.writeInt16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'uint32le':\n this.writeUint32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int32le':\n this.writeInt32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float32le':\n this.writeFloat32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float64le':\n this.writeFloat64(v, DataStream.LITTLE_ENDIAN);\n break;\n\n case 'cstring':\n this.writeCString(v, lengthOverride);\n break;\n\n case 'string':\n this.writeString(v, charset, lengthOverride);\n break;\n\n case 'u16string':\n this.writeUCS2String(v, this.endianness, lengthOverride);\n break;\n\n case 'u16stringle':\n this.writeUCS2String(v, DataStream.LITTLE_ENDIAN, lengthOverride);\n break;\n\n case 'u16stringbe':\n this.writeUCS2String(v, DataStream.BIG_ENDIAN, lengthOverride);\n break;\n\n default:\n if (t.length == 3) {\n var ta = t[1];\n for (var i=0; i<v.length; i++) {\n this.writeType(ta, v[i]);\n }\n break;\n } else {\n this.writeStruct(t, v);\n break;\n }\n }\n if (lengthOverride != null) {\n this.position = pos;\n this._realloc(lengthOverride);\n this.position = pos + lengthOverride;\n }\n};\n\n\nDataStream.prototype.writeUint64 = function (v) {\n\tvar h = Math.floor(v / MAX_SIZE);\n\tthis.writeUint32(h);\n\tthis.writeUint32(v & 0xFFFFFFFF);\n}\n\nDataStream.prototype.writeUint24 = function (v) {\n\tthis.writeUint8((v & 0x00FF0000)>>16);\n\tthis.writeUint8((v & 0x0000FF00)>>8);\n\tthis.writeUint8((v & 0x000000FF));\n}\n\nDataStream.prototype.adjustUint32 = function(position, value) {\n\tvar pos = this.position;\n\tthis.seek(position);\n\tthis.writeUint32(value);\n\tthis.seek(pos);\n}\n// file:src/DataStream-map.js\n/**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps an Int8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n/**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float64Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat64Array = function(length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n};\n\n/**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n// file:src/buffer.js\n/**\n * MultiBufferStream is a class that acts as a SimpleStream for parsing \n * It holds several, possibly non-contiguous ArrayBuffer objects, each with a fileStart property \n * containing the offset for the buffer data in an original/virtual file \n *\n * It inherits also from DataStream for all read/write/alloc operations\n */\n\n/**\n * Constructor\n */\nvar MultiBufferStream = function(buffer) {\n\t/* List of ArrayBuffers, with a fileStart property, sorted in fileStart order and non overlapping */\n\tthis.buffers = [];\t\n\tthis.bufferIndex = -1;\n\tif (buffer) {\n\t\tthis.insertBuffer(buffer);\n\t\tthis.bufferIndex = 0;\n\t}\n}\nMultiBufferStream.prototype = new DataStream(new ArrayBuffer(), 0, DataStream.BIG_ENDIAN);\n\n/************************************************************************************\n Methods for the managnement of the buffers (insertion, removal, concatenation, ...)\n ***********************************************************************************/\n\nMultiBufferStream.prototype.initialized = function() {\n\tvar firstBuffer;\n\tif (this.bufferIndex > -1) {\n\t\treturn true;\n\t} else if (this.buffers.length > 0) {\n\t\tfirstBuffer = this.buffers[0];\n\t\tif (firstBuffer.fileStart === 0) {\n\t\t\tthis.buffer = firstBuffer;\n\t\t\tthis.bufferIndex = 0;\n\t\t\tLog.debug(\"MultiBufferStream\", \"Stream ready for parsing\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\tLog.warn(\"MultiBufferStream\", \"The first buffer should have a fileStart of 0\");\n\t\t\tthis.logBufferLevel();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tLog.warn(\"MultiBufferStream\", \"No buffer to start parsing from\");\n\t\tthis.logBufferLevel();\n\t\treturn false;\n\t}\t\t\t\n}\n\n/**\n * helper functions to concatenate two ArrayBuffer objects\n * @param {ArrayBuffer} buffer1 \n * @param {ArrayBuffer} buffer2 \n * @return {ArrayBuffer} the concatenation of buffer1 and buffer2 in that order\n */\nArrayBuffer.concat = function(buffer1, buffer2) {\n Log.debug(\"ArrayBuffer\", \"Trying to create a new buffer of size: \"+(buffer1.byteLength + buffer2.byteLength));\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n};\n\n/**\n * Reduces the size of a given buffer, but taking the part between offset and offset+newlength\n * @param {ArrayBuffer} buffer \n * @param {Number} offset the start of new buffer\n * @param {Number} newLength the length of the new buffer\n * @return {ArrayBuffer} the new buffer\n */\nMultiBufferStream.prototype.reduceBuffer = function(buffer, offset, newLength) {\n\tvar smallB;\n\tsmallB = new Uint8Array(newLength);\n\tsmallB.set(new Uint8Array(buffer, offset, newLength));\n\tsmallB.buffer.fileStart = buffer.fileStart+offset;\n\tsmallB.buffer.usedBytes = 0;\n\treturn smallB.buffer;\t\n}\n\n/**\n * Inserts the new buffer in the sorted list of buffers,\n * making sure, it is not overlapping with existing ones (possibly reducing its size).\n * if the new buffer overrides/replaces the 0-th buffer (for instance because it is bigger), \n * updates the DataStream buffer for parsing \n*/\nMultiBufferStream.prototype.insertBuffer = function(ab) {\t\n\tvar to_add = true;\n\t/* TODO: improve insertion if many buffers */\n\tfor (var i = 0; i < this.buffers.length; i++) {\n\t\tvar b = this.buffers[i];\n\t\tif (ab.fileStart <= b.fileStart) {\n\t\t\t/* the insertion position is found */\n\t\t\tif (ab.fileStart === b.fileStart) {\n\t\t\t\t/* The new buffer overlaps with an existing buffer */\n\t\t\t\tif (ab.byteLength > b.byteLength) {\n\t\t\t\t\t/* the new buffer is bigger than the existing one\n\t\t\t\t\t remove the existing buffer and try again to insert \n\t\t\t\t\t the new buffer to check overlap with the next ones */\n\t\t\t\t\tthis.buffers.splice(i, 1);\n\t\t\t\t\ti--; \n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t/* the new buffer is smaller than the existing one, just drop it */\n\t\t\t\t\tLog.warn(\"MultiBufferStream\", \"Buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\") already appended, ignoring\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* The beginning of the new buffer is not overlapping with an existing buffer\n\t\t\t\t let's check the end of it */\n\t\t\t\tif (ab.fileStart + ab.byteLength <= b.fileStart) {\n\t\t\t\t\t/* no overlap, we can add it as is */\n\t\t\t\t} else {\n\t\t\t\t\t/* There is some overlap, cut the new buffer short, and add it*/\n\t\t\t\t\tab = this.reduceBuffer(ab, 0, b.fileStart - ab.fileStart);\n\t\t\t\t}\n\t\t\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\t\t\tthis.buffers.splice(i, 0, ab);\n\t\t\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tthis.buffer = ab;\n\t\t\t\t}\n\t\t\t}\n\t\t\tto_add = false;\n\t\t\tbreak;\n\t\t} else if (ab.fileStart < b.fileStart + b.byteLength) {\n\t\t\t/* the new buffer overlaps its beginning with the end of the current buffer */\n\t\t\tvar offset = b.fileStart + b.byteLength - ab.fileStart;\n\t\t\tvar newLength = ab.byteLength - offset;\n\t\t\tif (newLength > 0) {\n\t\t\t\t/* the new buffer is bigger than the current overlap, drop the overlapping part and try again inserting the remaining buffer */\n\t\t\t\tab = this.reduceBuffer(ab, offset, newLength);\n\t\t\t} else {\n\t\t\t\t/* the content of the new buffer is entirely contained in the existing buffer, drop it entirely */\n\t\t\t\tto_add = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* if the buffer has not been added, we can add it at the end */\n\tif (to_add) {\n\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\tthis.buffers.push(ab);\n\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\tif (i === 0) {\n\t\t\tthis.buffer = ab;\n\t\t}\n\t}\n}\n\n/**\n * Displays the status of the buffers (number and used bytes)\n * @param {Object} info callback method for display\n */\nMultiBufferStream.prototype.logBufferLevel = function(info) {\n\tvar i;\n\tvar buffer;\n\tvar used, total;\n\tvar ranges = [];\n\tvar range;\n\tvar bufferedString = \"\";\n\tused = 0;\n\ttotal = 0;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (i === 0) {\n\t\t\trange = {};\n\t\t\tranges.push(range);\n\t\t\trange.start = buffer.fileStart;\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tbufferedString += \"[\"+range.start+\"-\";\n\t\t} else if (range.end === buffer.fileStart) {\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t} else {\n\t\t\trange = {};\n\t\t\trange.start = buffer.fileStart;\n\t\t\tbufferedString += (ranges[ranges.length-1].end-1)+\"], [\"+range.start+\"-\";\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tranges.push(range);\n\t\t}\n\t\tused += buffer.usedBytes;\n\t\ttotal += buffer.byteLength;\n\t}\n\tif (ranges.length > 0) {\n\t\tbufferedString += (range.end-1)+\"]\";\n\t}\n\tvar log = (info ? Log.info : Log.debug)\n\tif (this.buffers.length === 0) {\n\t\tlog(\"MultiBufferStream\", \"No more buffer in memory\");\n\t} else {\n\t\tlog(\"MultiBufferStream\", \"\"+this.buffers.length+\" stored buffer(s) (\"+used+\"/\"+total+\" bytes), continuous ranges: \"+bufferedString);\n\t}\n}\n\nMultiBufferStream.prototype.cleanBuffers = function () {\n\tvar i;\n\tvar buffer;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (buffer.usedBytes === buffer.byteLength) {\n\t\t\tLog.debug(\"MultiBufferStream\", \"Removing buffer #\"+i);\n\t\t\tthis.buffers.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n}\n\nMultiBufferStream.prototype.mergeNextBuffer = function() {\n\tvar next_buffer;\n\tif (this.bufferIndex+1 < this.buffers.length) {\n\t\tnext_buffer = this.buffers[this.bufferIndex+1];\n\t\tif (next_buffer.fileStart === this.buffer.fileStart + this.buffer.byteLength) {\n\t\t\tvar oldLength = this.buffer.byteLength;\n\t\t\tvar oldUsedBytes = this.buffer.usedBytes;\n\t\t\tvar oldFileStart = this.buffer.fileStart;\n\t\t\tthis.buffers[this.bufferIndex] = ArrayBuffer.concat(this.buffer, next_buffer);\n\t\t\tthis.buffer = this.buffers[this.bufferIndex];\n\t\t\tthis.buffers.splice(this.bufferIndex+1, 1);\n\t\t\tthis.buffer.usedBytes = oldUsedBytes; /* TODO: should it be += ? */\n\t\t\tthis.buffer.fileStart = oldFileStart;\n\t\t\tLog.debug(\"ISOFile\", \"Concatenating buffer for box parsing (length: \"+oldLength+\"->\"+this.buffer.byteLength+\")\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n}\n\n\n/*************************************************************************\n Seek-related functions\n *************************************************************************/\n\n/**\n * Finds the buffer that holds the given file position\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Number} the index of the buffer holding the seeked file position, -1 if not found.\n */\nMultiBufferStream.prototype.findPosition = function(fromStart, filePosition, markAsUsed) {\n\tvar i;\n\tvar abuffer = null;\n\tvar index = -1;\n\n\t/* find the buffer with the largest position smaller than the given position */\n\tif (fromStart === true) {\n\t /* the reposition can be in the past, we need to check from the beginning of the list of buffers */\n\t\ti = 0;\n\t} else {\n\t\ti = this.bufferIndex;\n\t}\n\n\twhile (i < this.buffers.length) {\n\t\tabuffer = this.buffers[i];\n\t\tif (abuffer.fileStart <= filePosition) {\n\t\t\tindex = i;\n\t\t\tif (markAsUsed) {\n\t\t\t\tif (abuffer.fileStart + abuffer.byteLength <= filePosition) {\n\t\t\t\t\tabuffer.usedBytes = abuffer.byteLength;\t\n\t\t\t\t} else {\n\t\t\t\t\tabuffer.usedBytes = filePosition - abuffer.fileStart;\n\t\t\t\t}\t\t\n\t\t\t\tthis.logBufferLevel();\t\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (index !== -1) {\n\t\tabuffer = this.buffers[index];\n\t\tif (abuffer.fileStart + abuffer.byteLength >= filePosition) {\t\t\t\n\t\t\tLog.debug(\"MultiBufferStream\", \"Found position in existing buffer #\"+index);\n\t\t\treturn index;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\treturn -1;\n\t}\n}\n\n/**\n * Finds the largest file position contained in a buffer or in the next buffers if they are contiguous (no gap)\n * starting from the given buffer index or from the current buffer if the index is not given\n *\n * @param {Number} inputindex Index of the buffer to start from\n * @return {Number} The largest file position found in the buffers\n */\nMultiBufferStream.prototype.findEndContiguousBuf = function(inputindex) {\n\tvar i;\n\tvar currentBuf;\n\tvar nextBuf;\n\tvar index = (inputindex !== undefined ? inputindex : this.bufferIndex);\n\tcurrentBuf = this.buffers[index];\n\t/* find the end of the contiguous range of data */\n\tif (this.buffers.length > index+1) {\n\t\tfor (i = index+1; i < this.buffers.length; i++) {\n\t\t\tnextBuf = this.buffers[i];\n\t\t\tif (nextBuf.fileStart === currentBuf.fileStart + currentBuf.byteLength) {\n\t\t\t\tcurrentBuf = nextBuf;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* return the position of last byte in the file that we have */\n\treturn currentBuf.fileStart + currentBuf.byteLength;\n}\n\n/**\n * Returns the largest file position contained in the buffers, larger than the given position\n * @param {Number} pos the file position to start from\n * @return {Number} the largest position in the current buffer or in the buffer and the next contiguous \n * buffer that holds the given position\n */\nMultiBufferStream.prototype.getEndFilePositionAfter = function(pos) {\n\tvar index = this.findPosition(true, pos, false);\n\tif (index !== -1) {\n\t\treturn this.findEndContiguousBuf(index);\n\t} else {\n\t\treturn pos;\n\t}\n}\n\n/*************************************************************************\n Garbage collection related functions\n *************************************************************************/\n\n/**\n * Marks a given number of bytes as used in the current buffer for garbage collection\n * @param {Number} nbBytes \n */\nMultiBufferStream.prototype.addUsedBytes = function(nbBytes) {\n\tthis.buffer.usedBytes += nbBytes;\n\tthis.logBufferLevel();\n}\n\n/**\n * Marks the entire current buffer as used, ready for garbage collection\n */\nMultiBufferStream.prototype.setAllUsedBytes = function() {\n\tthis.buffer.usedBytes = this.buffer.byteLength;\n\tthis.logBufferLevel();\n}\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\n\n/**\n * Tries to seek to a given file position\n * if possible, repositions the parsing from there and returns true \n * if not possible, does not change anything and returns false \n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Boolean} true if the seek succeeded, false otherwise\n */\nMultiBufferStream.prototype.seek = function(filePosition, fromStart, markAsUsed) {\n\tvar index;\n\tindex = this.findPosition(fromStart, filePosition, markAsUsed);\n\tif (index !== -1) {\n\t\tthis.buffer = this.buffers[index];\n\t\tthis.bufferIndex = index;\n\t\tthis.position = filePosition - this.buffer.fileStart;\n\t\tLog.debug(\"MultiBufferStream\", \"Repositioning parser at buffer position: \"+this.position);\n\t\treturn true;\n\t} else {\n\t\tLog.debug(\"MultiBufferStream\", \"Position \"+filePosition+\" not found in buffered data\");\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns the current position in the file\n * @return {Number} the position in the file\n */\nMultiBufferStream.prototype.getPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.position;\n}\n\n/**\n * Returns the length of the current buffer\n * @return {Number} the length of the current buffer\n */\nMultiBufferStream.prototype.getLength = function() {\n\treturn this.byteLength;\n}\n\nMultiBufferStream.prototype.getEndPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.byteLength;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MultiBufferStream = MultiBufferStream;\n}// file:src/descriptor.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MPEG4DescriptorParser = function () {\n\tvar ES_DescrTag \t\t\t= 0x03;\n\tvar DecoderConfigDescrTag \t= 0x04;\n\tvar DecSpecificInfoTag \t\t= 0x05;\n\tvar SLConfigDescrTag \t\t= 0x06;\n\n\tvar descTagToName = [];\n\tdescTagToName[ES_DescrTag] \t\t\t\t= \"ES_Descriptor\";\n\tdescTagToName[DecoderConfigDescrTag] \t= \"DecoderConfigDescriptor\";\n\tdescTagToName[DecSpecificInfoTag] \t\t= \"DecoderSpecificInfo\";\n\tdescTagToName[SLConfigDescrTag] \t\t= \"SLConfigDescriptor\";\n\n\tthis.getDescriptorName = function(tag) {\n\t\treturn descTagToName[tag];\n\t}\n\n\tvar that = this;\n\tvar classes = {};\n\n\tthis.parseOneDescriptor = function (stream) {\n\t\tvar hdrSize = 0;\n\t\tvar size = 0;\n\t\tvar tag;\n\t\tvar desc;\n\t\tvar byteRead;\n\t\ttag = stream.readUint8();\n\t\thdrSize++;\n\t\tbyteRead = stream.readUint8();\n\t\thdrSize++;\n\t\twhile (byteRead & 0x80) {\n\t\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\t\tbyteRead = stream.readUint8();\n\t\t\thdrSize++;\n\t\t}\n\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\tLog.debug(\"MPEG4DescriptorParser\", \"Found \"+(descTagToName[tag] || \"Descriptor \"+tag)+\", size \"+size+\" at position \"+stream.getPosition());\n\t\tif (descTagToName[tag]) {\n\t\t\tdesc = new classes[descTagToName[tag]](size);\n\t\t} else {\n\t\t\tdesc = new classes.Descriptor(size);\n\t\t}\n\t\tdesc.parse(stream);\n\t\treturn desc;\n\t}\n\n\tclasses.Descriptor = function(_tag, _size) {\n\t\tthis.tag = _tag;\n\t\tthis.size = _size;\n\t\tthis.descs = [];\n\t}\n\n\tclasses.Descriptor.prototype.parse = function (stream) {\n\t\tthis.data = stream.readUint8Array(this.size);\n\t}\n\n\tclasses.Descriptor.prototype.findDescriptor = function (tag) {\n\t\tfor (var i = 0; i < this.descs.length; i++) {\n\t\t\tif (this.descs[i].tag == tag) {\n\t\t\t\treturn this.descs[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tclasses.Descriptor.prototype.parseRemainingDescriptors = function (stream) {\n\t\tvar start = stream.position;\n\t\twhile (stream.position < start+this.size) {\n\t\t\tvar desc = that.parseOneDescriptor(stream);\n\t\t\tthis.descs.push(desc);\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor = function (size) {\n\t\tclasses.Descriptor.call(this, ES_DescrTag, size);\n\t}\n\n\tclasses.ES_Descriptor.prototype = new classes.Descriptor();\n\n\tclasses.ES_Descriptor.prototype.parse = function(stream) {\n\t\tthis.ES_ID = stream.readUint16();\n\t\tthis.flags = stream.readUint8();\n\t\tthis.size -= 3;\n\t\tif (this.flags & 0x80) {\n\t\t\tthis.dependsOn_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.dependsOn_ES_ID = 0;\n\t\t}\n\t\tif (this.flags & 0x40) {\n\t\t\tvar l = stream.readUint8();\n\t\t\tthis.URL = stream.readString(l);\n\t\t\tthis.size -= l+1;\n\t\t} else {\n\t\t\tthis.URL = \"\";\n\t\t}\n\t\tif (this.flags & 0x20) {\n\t\t\tthis.OCR_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.OCR_ES_ID = 0;\n\t\t}\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.ES_Descriptor.prototype.getOTI = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (dcd) {\n\t\t\treturn dcd.oti;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor.prototype.getAudioConfig = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (!dcd) return null;\n\t\tvar dsi = dcd.findDescriptor(DecSpecificInfoTag);\n\t\tif (dsi && dsi.data) {\n\t\t\tvar audioObjectType = (dsi.data[0]& 0xF8) >> 3;\n\t\t\tif (audioObjectType === 31 && dsi.data.length >= 2) {\n\t\t\t\taudioObjectType = 32 + ((dsi.data[0] & 0x7) << 3) + ((dsi.data[1] & 0xE0) >> 5);\n\t\t\t}\n\t\t\treturn audioObjectType;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclasses.DecoderConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, DecoderConfigDescrTag, size);\n\t}\n\tclasses.DecoderConfigDescriptor.prototype = new classes.Descriptor();\n\n\tclasses.DecoderConfigDescriptor.prototype.parse = function(stream) {\n\t\tthis.oti = stream.readUint8();\n\t\tthis.streamType = stream.readUint8();\n\t\tthis.upStream = ((this.streamType >> 1) & 1) !== 0;\n\t\tthis.streamType = this.streamType >>> 2;\n\t\tthis.bufferSize = stream.readUint24();\n\t\tthis.maxBitrate = stream.readUint32();\n\t\tthis.avgBitrate = stream.readUint32();\n\t\tthis.size -= 13;\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.DecoderSpecificInfo = function (size) {\n\t\tclasses.Descriptor.call(this, DecSpecificInfoTag, size);\n\t}\n\tclasses.DecoderSpecificInfo.prototype = new classes.Descriptor();\n\n\tclasses.SLConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, SLConfigDescrTag, size);\n\t}\n\tclasses.SLConfigDescriptor.prototype = new classes.Descriptor();\n\n\treturn this;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MPEG4DescriptorParser = MPEG4DescriptorParser;\n}\n// file:src/box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar BoxParser = {\n\tERR_INVALID_DATA : -1,\n\tERR_NOT_ENOUGH_DATA : 0,\n\tOK : 1,\n\n\t// Boxes to be created with default parsing\n\tBASIC_BOXES: [\n\t\t{type: \"mdat\", name: \"MediaDataBox\"},\n\t\t{type: \"idat\", name: \"ItemDataBox\"},\n\t\t{type: \"free\", name: \"FreeSpaceBox\"},\n\t\t{type: \"skip\", name: \"FreeSpaceBox\"},\n\t\t{type: \"meco\", name: \"AdditionalMetadataContainerBox\"},\n\t\t{type: \"strk\", name: \"SubTrackBox\"}\n\t],\n\tFULL_BOXES: [\n\t\t{type: \"hmhd\", name: \"HintMediaHeaderBox\"},\n\t\t{type: \"nmhd\", name: \"NullMediaHeaderBox\"},\n\t\t{type: \"iods\", name: \"ObjectDescriptorBox\"},\n\t\t{type: \"xml \", name: \"XMLBox\"},\n\t\t{type: \"bxml\", name: \"BinaryXMLBox\"},\n\t\t{type: \"ipro\", name: \"ItemProtectionBox\"},\n\t\t{type: \"mere\", name: \"MetaboxRelationBox\"}\n\t],\n\tCONTAINER_BOXES: [\n\t\t[{type: \"moov\", name: \"CompressedMovieBox\"}, [\"trak\", \"pssh\"]],\n\t\t[{type: \"trak\", name: \"TrackBox\"}],\n\t\t[{type: \"edts\", name: \"EditBox\"}],\n\t\t[{type: \"mdia\", name: \"MediaBox\"}],\n\t\t[{type: \"minf\", name: \"MediaInformationBox\"}],\n\t\t[{type: \"dinf\", name: \"DataInformationBox\"}],\n\t\t[{type: \"stbl\", name: \"SampleTableBox\"}, [\"sgpd\", \"sbgp\"]],\n\t\t[{type: \"mvex\", name: \"MovieExtendsBox\"}, [\"trex\"]],\n\t\t[{type: \"moof\", name: \"CompressedMovieFragmentBox\"}, [\"traf\"]],\n\t\t[{type: \"traf\", name: \"TrackFragmentBox\"}, [\"trun\", \"sgpd\", \"sbgp\"]],\n\t\t[{type: \"vttc\", name: \"VTTCueBox\"}],\n\t\t[{type: \"tref\", name: \"TrackReferenceBox\"}],\n\t\t[{type: \"iref\", name: \"ItemReferenceBox\"}],\n\t\t[{type: \"mfra\", name: \"MovieFragmentRandomAccessBox\"}, [\"tfra\"]],\n\t\t[{type: \"meco\", name: \"AdditionalMetadataContainerBox\"}],\n\t\t[{type: \"hnti\", name: \"trackhintinformation\"}],\n\t\t[{type: \"hinf\", name: \"hintstatisticsbox\"}],\n\t\t[{type: \"strk\", name: \"SubTrackBox\"}],\n\t\t[{type: \"strd\", name: \"SubTrackDefinitionBox\"}],\n\t\t[{type: \"sinf\", name: \"ProtectionSchemeInfoBox\"}],\n\t\t[{type: \"rinf\", name: \"RestrictedSchemeInfoBox\"}],\n\t\t[{type: \"schi\", name: \"SchemeInformationBox\"}],\n\t\t[{type: \"trgr\", name: \"TrackGroupBox\"}],\n\t\t[{type: \"udta\", name: \"UserDataBox\"}, [\"kind\"]],\n\t\t[{type: \"iprp\", name: \"ItemPropertiesBox\"}, [\"ipma\"]],\n\t\t[{type: \"ipco\", name: \"ItemPropertyContainerBox\"}],\n\t\t[{type: \"grpl\", name: \"GroupsListBox\"}],\n\t\t[{type: \"j2kH\", name: \"J2KHeaderInfoBox\"}],\n\t\t[{type: \"etyp\", name: \"ExtendedTypeBox\"}, [\"tyco\"]]\n\t],\n\t// Boxes effectively created\n\tboxCodes : [],\n\tfullBoxCodes : [],\n\tcontainerBoxCodes : [],\n\tsampleEntryCodes : {},\n\tsampleGroupEntryCodes: [],\n\ttrackGroupTypes: [],\n\tUUIDBoxes: {},\n\tUUIDs: [],\n\tinitialize: function() {\n\t\tBoxParser.FullBox.prototype = new BoxParser.Box();\n\t\tBoxParser.ContainerBox.prototype = new BoxParser.Box();\n\t\tBoxParser.SampleEntry.prototype = new BoxParser.Box();\n\t\tBoxParser.TrackGroupTypeBox.prototype = new BoxParser.FullBox();\n\n\t\t/* creating constructors for simple boxes */\n\t\tBoxParser.BASIC_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createBoxCtor(box.type, box.name)\n\t\t});\n\t\tBoxParser.FULL_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createFullBoxCtor(box.type, box.name);\n\t\t});\n\t\tBoxParser.CONTAINER_BOXES.forEach(function(boxes) {\n\t\t\tBoxParser.createContainerBoxCtor(boxes[0].type, boxes[0].name, null, boxes[1]);\n\t\t});\n\t},\n\tBox: function(_type, _size, _name, _uuid) {\n\t\tthis.type = _type;\n\t\tthis.box_name = _name;\n\t\tthis.size = _size;\n\t\tthis.uuid = _uuid;\n\t},\n\tFullBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.flags = 0;\n\t\tthis.version = 0;\n\t},\n\tContainerBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.boxes = [];\n\t},\n\tSampleEntry: function(type, size, hdr_size, start) {\n\t\tBoxParser.ContainerBox.call(this, type, size);\n\t\tthis.hdr_size = hdr_size;\n\t\tthis.start = start;\n\t},\n\tSampleGroupEntry: function(type) {\n\t\tthis.grouping_type = type;\n\t},\n\tTrackGroupTypeBox: function(type, size) {\n\t\tBoxParser.FullBox.call(this, type, size);\n\t},\n\tcreateBoxCtor: function(type, name, parseMethod){\n\t\tBoxParser.boxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.Box.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.Box();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateFullBoxCtor: function(type, name, parseMethod) {\n\t\t//BoxParser.fullBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.FullBox.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n\t\tBoxParser[type+\"Box\"].prototype.parse = function(stream) {\n\t\t\tthis.parseFullHeader(stream);\n\t\t\tif (parseMethod) {\n\t\t\t\tparseMethod.call(this, stream);\n\t\t\t}\n\t\t};\n\t},\n\taddSubBoxArrays: function(subBoxNames) {\n\t\tif (subBoxNames) {\n\t\t\tthis.subBoxNames = subBoxNames;\n\t\t\tvar nbSubBoxes = subBoxNames.length;\n\t\t\tfor (var k = 0; k<nbSubBoxes; k++) {\n\t\t\t\tthis[subBoxNames[k]+\"s\"] = [];\n\t\t\t}\n\t\t}\n\t},\n\tcreateContainerBoxCtor: function(type, name, parseMethod, subBoxNames) {\n\t\t//BoxParser.containerBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.ContainerBox.call(this, type, size, name);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.ContainerBox();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateMediaSampleEntryCtor: function(mediaType, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType] = [];\n\t\tBoxParser[mediaType+\"SampleEntry\"] = function(type, size) {\n\t\t\tBoxParser.SampleEntry.call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[mediaType+\"SampleEntry\"].prototype = new BoxParser.SampleEntry();\n\t\tif (parseMethod) BoxParser[mediaType+\"SampleEntry\"].prototype .parse = parseMethod;\n\t},\n\tcreateSampleEntryCtor: function(mediaType, type, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType].push(type);\n\t\tBoxParser[type+\"SampleEntry\"] = function(size) {\n\t\t\tBoxParser[mediaType+\"SampleEntry\"].call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[type+\"SampleEntry\"].prototype = new BoxParser[mediaType+\"SampleEntry\"]();\n\t\tif (parseMethod) BoxParser[type+\"SampleEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateEncryptedSampleEntryCtor: function(mediaType, type, parseMethod) {\n\t\tBoxParser.createSampleEntryCtor.call(this, mediaType, type, parseMethod, [\"sinf\"]);\n\t},\n\tcreateSampleGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.sampleGroupEntryCodes.push(type);\n\t\tBoxParser[type+\"SampleGroupEntry\"] = function(size) {\n\t\t\tBoxParser.SampleGroupEntry.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"SampleGroupEntry\"].prototype = new BoxParser.SampleGroupEntry();\n\t\tif (parseMethod) BoxParser[type+\"SampleGroupEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateTrackGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.trackGroupTypes.push(type);\n\t\tBoxParser[type+\"TrackGroupTypeBox\"] = function(size) {\n\t\t\tBoxParser.TrackGroupTypeBox.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"TrackGroupTypeBox\"].prototype = new BoxParser.TrackGroupTypeBox();\n\t\tif (parseMethod) BoxParser[type+\"TrackGroupTypeBox\"].prototype.parse = parseMethod;\n\t},\n\tcreateUUIDBox: function(uuid, name, isFullBox, isContainerBox, parseMethod) {\n\t\tBoxParser.UUIDs.push(uuid);\n\t\tBoxParser.UUIDBoxes[uuid] = function(size) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.FullBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t} else {\n\t\t\t\tif (isContainerBox) {\n\t\t\t\t\tBoxParser.ContainerBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t} else {\n\t\t\t\t\tBoxParser.Box.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tBoxParser.UUIDBoxes[uuid].prototype = (isFullBox ? new BoxParser.FullBox() : (isContainerBox ? new BoxParser.ContainerBox() : new BoxParser.Box()));\n\t\tif (parseMethod) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = function(stream) {\n\t\t\t\t\tthis.parseFullHeader(stream);\n\t\t\t\t\tif (parseMethod) {\n\t\t\t\t\t\tparseMethod.call(this, stream);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = parseMethod;\n\t\t\t}\n\t\t}\n\t}\n}\n\nBoxParser.initialize();\n\nBoxParser.TKHD_FLAG_ENABLED = 0x000001;\nBoxParser.TKHD_FLAG_IN_MOVIE = 0x000002;\nBoxParser.TKHD_FLAG_IN_PREVIEW = 0x000004;\n\nBoxParser.TFHD_FLAG_BASE_DATA_OFFSET\t= 0x01;\nBoxParser.TFHD_FLAG_SAMPLE_DESC\t\t\t= 0x02;\nBoxParser.TFHD_FLAG_SAMPLE_DUR\t\t\t= 0x08;\nBoxParser.TFHD_FLAG_SAMPLE_SIZE\t\t\t= 0x10;\nBoxParser.TFHD_FLAG_SAMPLE_FLAGS\t\t= 0x20;\nBoxParser.TFHD_FLAG_DUR_EMPTY\t\t\t= 0x10000;\nBoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF= 0x20000;\n\nBoxParser.TRUN_FLAGS_DATA_OFFSET= 0x01;\nBoxParser.TRUN_FLAGS_FIRST_FLAG\t= 0x04;\nBoxParser.TRUN_FLAGS_DURATION\t= 0x100;\nBoxParser.TRUN_FLAGS_SIZE\t\t= 0x200;\nBoxParser.TRUN_FLAGS_FLAGS\t\t= 0x400;\nBoxParser.TRUN_FLAGS_CTS_OFFSET\t= 0x800;\n\nBoxParser.Box.prototype.add = function(name) {\n\treturn this.addBox(new BoxParser[name+\"Box\"]());\n}\n\nBoxParser.Box.prototype.addBox = function(box) {\n\tthis.boxes.push(box);\n\tif (this[box.type+\"s\"]) {\n\t\tthis[box.type+\"s\"].push(box);\n\t} else {\n\t\tthis[box.type] = box;\n\t}\n\treturn box;\n}\n\nBoxParser.Box.prototype.set = function(prop, value) {\n\tthis[prop] = value;\n\treturn this;\n}\n\nBoxParser.Box.prototype.addEntry = function(value, _prop) {\n\tvar prop = _prop || \"entries\";\n\tif (!this[prop]) {\n\t\tthis[prop] = [];\n\t}\n\tthis[prop].push(value);\n\treturn this;\n}\n\nif (typeof exports !== \"undefined\") {\n\texports.BoxParser = BoxParser;\n}\n// file:src/box-parse.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.parseUUID = function(stream) {\n\treturn BoxParser.parseHex16(stream);\n}\n\nBoxParser.parseHex16 = function(stream) {\n\tvar hex16 = \"\"\n\tfor (var i = 0; i <16; i++) {\n\t\tvar hex = stream.readUint8().toString(16);\n\t\thex16 += (hex.length === 1 ? \"0\"+hex : hex);\n\t}\n\treturn hex16;\n}\n\nBoxParser.parseOneBox = function(stream, headerOnly, parentSize) {\n\tvar box;\n\tvar start = stream.getPosition();\n\tvar hdr_size = 0;\n\tvar diff;\n\tvar uuid;\n\tif (stream.getEndPosition() - start < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough data in stream to parse the type and size of the box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tif (parentSize && parentSize < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a new box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tvar size = stream.readUint32();\n\tvar type = stream.readString(4);\n\tvar box_type = type;\n\tLog.debug(\"BoxParser\", \"Found box of type '\"+type+\"' and size \"+size+\" at position \"+start);\n\thdr_size = 8;\n\tif (type == \"uuid\") {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 16) || (parentSize -hdr_size < 16)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a UUID box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tuuid = BoxParser.parseUUID(stream);\n\t\thdr_size += 16;\n\t\tbox_type = uuid;\n\t}\n\tif (size == 1) {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 8) || (parentSize && (parentSize - hdr_size) < 8)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.warn(\"BoxParser\", \"Not enough data in stream to parse the extended size of the \\\"\"+type+\"\\\" box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tsize = stream.readUint64();\n\t\thdr_size += 8;\n\t} else if (size === 0) {\n\t\t/* box extends till the end of file or invalid file */\n\t\tif (parentSize) {\n\t\t\tsize = parentSize;\n\t\t} else {\n\t\t\t/* box extends till the end of file */\n\t\t\tif (type !== \"mdat\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Unlimited box size not supported for type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\treturn { code: BoxParser.OK, box: box, size: box.size };\n\t\t\t}\n\t\t}\n\t}\n\tif (size !== 0 && size < hdr_size) {\n\t\tLog.error(\"BoxParser\", \"Box of type \"+type+\" has an invalid size \"+size+\" (too small to be a box)\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && parentSize && size > parentSize) {\n\t\tLog.error(\"BoxParser\", \"Box of type '\"+type+\"' has a size \"+size+\" greater than its container size \"+parentSize);\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && start + size > stream.getEndPosition()) {\n\t\tstream.seek(start);\n\t\tLog.info(\"BoxParser\", \"Not enough data in stream to parse the entire '\"+type+\"' box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (headerOnly) {\n\t\treturn { code: BoxParser.OK, type: type, size: size, hdr_size: hdr_size, start: start };\n\t} else {\n\t\tif (BoxParser[type+\"Box\"]) {\n\t\t\tbox = new BoxParser[type+\"Box\"](size);\n\t\t} else {\n\t\t\tif (type !== \"uuid\") {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown box type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t} else {\n\t\t\t\tif (BoxParser.UUIDBoxes[uuid]) {\n\t\t\t\t\tbox = new BoxParser.UUIDBoxes[uuid](size);\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"BoxParser\", \"Unknown uuid type: '\"+uuid+\"'\");\n\t\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\t\tbox.uuid = uuid;\n\t\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbox.hdr_size = hdr_size;\n\t/* recording the position of the box in the input stream */\n\tbox.start = start;\n\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\tLog.info(\"BoxParser\", \"'\"+box_type+\"' box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\tbox.parseDataAndRewind(stream);\n\t}\n\tbox.parse(stream);\n\tdiff = stream.getPosition() - (box.start+box.size);\n\tif (diff < 0) {\n\t\tLog.warn(\"BoxParser\", \"Parsing of box '\"+box_type+\"' did not read the entire indicated box data size (missing \"+(-diff)+\" bytes), seeking forward\");\n\t\tstream.seek(box.start+box.size);\n\t} else if (diff > 0) {\n\t\tLog.error(\"BoxParser\", \"Parsing of box '\"+box_type+\"' read \"+diff+\" more bytes than the indicated box data size, seeking backwards\");\n\t\tif (box.size !== 0) stream.seek(box.start+box.size);\n\t}\n\treturn { code: BoxParser.OK, box: box, size: box.size };\n}\n\nBoxParser.Box.prototype.parse = function(stream) {\n\tif (this.type != \"mdat\") {\n\t\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t} else {\n\t\tif (this.size === 0) {\n\t\t\tstream.seek(stream.getEndPosition());\n\t\t} else {\n\t\t\tstream.seek(this.start+this.size);\n\t\t}\n\t}\n}\n\n/* Used to parse a box without consuming its data, to allow detailled parsing\n Useful for boxes for which a write method is not yet implemented */\nBoxParser.Box.prototype.parseDataAndRewind = function(stream) {\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// restore the header size as if the full header had not been parsed\n\tthis.hdr_size -= 4;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseFullHeader = function (stream) {\n\tthis.version = stream.readUint8();\n\tthis.flags = stream.readUint24();\n\tthis.hdr_size += 4;\n}\n\nBoxParser.FullBox.prototype.parse = function (stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n}\n\nBoxParser.ContainerBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\t/* store the box in the 'boxes' array to preserve box order (for offset) but also store box in a property for more direct access */\n\t\t\tthis.boxes.push(box);\n\t\t\tif (this.subBoxNames && this.subBoxNames.indexOf(box.type) != -1) {\n\t\t\t\tthis[this.subBoxNames[this.subBoxNames.indexOf(box.type)]+\"s\"].push(box);\n\t\t\t} else {\n\t\t\t\tvar box_type = box.type !== \"uuid\" ? box.type : box.uuid;\n\t\t\t\tif (this[box_type]) {\n\t\t\t\t\tLog.warn(\"Box of type \"+box_type+\" already stored in field of this type\");\n\t\t\t\t} else {\n\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nBoxParser.Box.prototype.parseLanguage = function(stream) {\n\tthis.language = stream.readUint16();\n\tvar chars = [];\n\tchars[0] = (this.language>>10)&0x1F;\n\tchars[1] = (this.language>>5)&0x1F;\n\tchars[2] = (this.language)&0x1F;\n\tthis.languageString = String.fromCharCode(chars[0]+0x60, chars[1]+0x60, chars[2]+0x60);\n}\n\n// file:src/parsing/sampleentries/sampleentry.js\nBoxParser.SAMPLE_ENTRY_TYPE_VISUAL \t\t= \"Visual\";\nBoxParser.SAMPLE_ENTRY_TYPE_AUDIO \t\t= \"Audio\";\nBoxParser.SAMPLE_ENTRY_TYPE_HINT \t\t= \"Hint\";\nBoxParser.SAMPLE_ENTRY_TYPE_METADATA \t= \"Metadata\";\nBoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE \t= \"Subtitle\";\nBoxParser.SAMPLE_ENTRY_TYPE_SYSTEM \t\t= \"System\";\nBoxParser.SAMPLE_ENTRY_TYPE_TEXT \t\t= \"Text\";\n\nBoxParser.SampleEntry.prototype.parseHeader = function(stream) {\n\tstream.readUint8Array(6);\n\tthis.data_reference_index = stream.readUint16();\n\tthis.hdr_size += 8;\n}\n\nBoxParser.SampleEntry.prototype.parse = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n}\n\nBoxParser.SampleEntry.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n\t// restore the header size as if the sample entry header had not been parsed\n\tthis.hdr_size -= 8;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.SampleEntry.prototype.parseFooter = function(stream) {\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n}\n\n// Base SampleEntry types with default parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT);\n\n//Base SampleEntry types for Audio and Video with specific parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, function(stream) {\n\tvar compressorname_length;\n\tthis.parseHeader(stream);\n\tstream.readUint16();\n\tstream.readUint16();\n\tstream.readUint32Array(3);\n\tthis.width = stream.readUint16();\n\tthis.height = stream.readUint16();\n\tthis.horizresolution = stream.readUint32();\n\tthis.vertresolution = stream.readUint32();\n\tstream.readUint32();\n\tthis.frame_count = stream.readUint16();\n\tcompressorname_length = Math.min(31, stream.readUint8());\n\tthis.compressorname = stream.readString(compressorname_length);\n\tif (compressorname_length < 31) {\n\t\tstream.readString(31 - compressorname_length);\n\t}\n\tthis.depth = stream.readUint16();\n\tstream.readUint16();\n\tthis.parseFooter(stream);\n});\n\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, function(stream) {\n\tthis.parseHeader(stream);\n\tstream.readUint32Array(2);\n\tthis.channel_count = stream.readUint16();\n\tthis.samplesize = stream.readUint16();\n\tstream.readUint16();\n\tstream.readUint16();\n\tthis.samplerate = (stream.readUint32()/(1<<16));\n\tthis.parseFooter(stream);\n});\n\n// Sample entries inheriting from Audio and Video\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"av01\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dav1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hev1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvt1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"lhe1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvh1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvhe\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvi1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvs1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvcN\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp08\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp09\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avs3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"j2ki\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjp2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjpg\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,\t\"uncv\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mp4a\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ec-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"Opus\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"fLaC\");\n\n// Encrypted sample entries\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \t\"encv\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"enca\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \t\"encu\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM, \t\"encs\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT, \t\t\"enct\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \t\"encm\");\n// file:src/parsing/a1lx.js\nBoxParser.createBoxCtor(\"a1lx\", \"AV1LayeredImageIndexingProperty\", function(stream) {\n\tvar large_size = stream.readUint8() & 1;\n\tvar FieldLength = ((large_size & 1) + 1) * 16;\n\tthis.layer_size = [];\n\tfor (var i = 0; i < 3; i++) {\n\t\tif (FieldLength == 16) {\n\t\t\tthis.layer_size[i] = stream.readUint16();\n\t\t} else {\n\t\t\tthis.layer_size[i] = stream.readUint32();\n\t\t}\n\t}\n});// file:src/parsing/a1op.js\nBoxParser.createBoxCtor(\"a1op\", \"OperatingPointSelectorProperty\", function(stream) {\n\tthis.op_index = stream.readUint8();\n});// file:src/parsing/auxC.js\nBoxParser.createFullBoxCtor(\"auxC\", \"AuxiliaryTypeProperty\", function(stream) {\n\tthis.aux_type = stream.readCString();\n\tvar aux_subtype_length = this.size - this.hdr_size - (this.aux_type.length + 1);\n\tthis.aux_subtype = stream.readUint8Array(aux_subtype_length);\n});// file:src/parsing/av1C.js\nBoxParser.createBoxCtor(\"av1C\", \"AV1CodecConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tvar tmp = stream.readUint8();\n\tif ((tmp >> 7 & 0x1) !== 1) {\n\t\tLog.error(\"av1C marker problem\");\n\t\treturn;\n\t}\n\tthis.version = tmp & 0x7F;\n\tif (this.version !== 1) {\n\t\tLog.error(\"av1C version \"+this.version+\" not supported\");\n\t\treturn;\n\t}\n\ttmp = stream.readUint8();\n\tthis.seq_profile = (tmp >> 5) & 0x7;\n\tthis.seq_level_idx_0 = tmp & 0x1F;\n\ttmp = stream.readUint8();\n\tthis.seq_tier_0 = (tmp >> 7) & 0x1;\n\tthis.high_bitdepth = (tmp >> 6) & 0x1;\n\tthis.twelve_bit = (tmp >> 5) & 0x1;\n\tthis.monochrome = (tmp >> 4) & 0x1;\n\tthis.chroma_subsampling_x = (tmp >> 3) & 0x1;\n\tthis.chroma_subsampling_y = (tmp >> 2) & 0x1;\n\tthis.chroma_sample_position = (tmp & 0x3);\n\ttmp = stream.readUint8();\n\tthis.reserved_1 = (tmp >> 5) & 0x7;\n\tif (this.reserved_1 !== 0) {\n\t\tLog.error(\"av1C reserved_1 parsing problem\");\n\t\treturn;\n\t}\n\tthis.initial_presentation_delay_present = (tmp >> 4) & 0x1;\n\tif (this.initial_presentation_delay_present === 1) {\n\t\tthis.initial_presentation_delay_minus_one = (tmp & 0xF);\n\t} else {\n\t\tthis.reserved_2 = (tmp & 0xF);\n\t\tif (this.reserved_2 !== 0) {\n\t\t\tLog.error(\"av1C reserved_2 parsing problem\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tvar configOBUs_length = this.size - this.hdr_size - 4;\n\tthis.configOBUs = stream.readUint8Array(configOBUs_length);\n});\n\n// file:src/parsing/avcC.js\nfunction printPS(ps) {\n\tvar str = \"<table class='inner-table'>\";\n\tstr += \"<thead><tr><th>length</th><th>nalu_data</th></tr></thead>\";\n\tstr += \"<tbody>\";\n\n\tfor (var i=0; i < ps.length; i++) {\n\t\tvar nalu = ps[i];\n\t\tstr += \"<tr>\";\n\t\tstr += \"<td>\"+nalu.length+\"</td>\";\n\t\tstr += \"<td>\";\n\t\tstr += nalu.nalu.reduce(function(str, byte) {\n\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t}, \"0x\");\n\t\tstr += \"</td></tr>\";\n\t}\n\tstr += \"</tbody></table>\";\n\treturn str;\n}\n\nBoxParser.createBoxCtor(\"avcC\", \"AVCConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.AVCProfileIndication = stream.readUint8();\n\tthis.profile_compatibility = stream.readUint8();\n\tthis.AVCLevelIndication = stream.readUint8();\n\tthis.lengthSizeMinusOne = (stream.readUint8() & 0x3);\n\tthis.nb_SPS_nalus = (stream.readUint8() & 0x1F);\n\ttoparse = this.size - this.hdr_size - 6;\n\tthis.SPS = [];\n\tthis.SPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_SPS_nalus; i++) {\n\t\tthis.SPS[i] = {};\n\t\tthis.SPS[i].length = stream.readUint16();\n\t\tthis.SPS[i].nalu = stream.readUint8Array(this.SPS[i].length);\n\t\ttoparse -= 2+this.SPS[i].length;\n\t}\n\tthis.nb_PPS_nalus = stream.readUint8();\n\ttoparse--;\n\tthis.PPS = [];\n\tthis.PPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_PPS_nalus; i++) {\n\t\tthis.PPS[i] = {};\n\t\tthis.PPS[i].length = stream.readUint16();\n\t\tthis.PPS[i].nalu = stream.readUint8Array(this.PPS[i].length);\n\t\ttoparse -= 2+this.PPS[i].length;\n\t}\n\tif (toparse>0) {\n\t\tthis.ext = stream.readUint8Array(toparse);\n\t}\n});\n\n// file:src/parsing/btrt.js\nBoxParser.createBoxCtor(\"btrt\", \"BitRateBox\", function(stream) {\n\tthis.bufferSizeDB = stream.readUint32();\n\tthis.maxBitrate = stream.readUint32();\n\tthis.avgBitrate = stream.readUint32();\n});\n\n// file:src/parsing/ccst.js\nBoxParser.createFullBoxCtor(\"ccst\", \"CodingConstraintsBox\", function(stream) {\n\tvar flags = stream.readUint8();\n\tthis.all_ref_pics_intra = ((flags & 0x80) == 0x80);\n\tthis.intra_pred_used = ((flags & 0x40) == 0x40);\n\tthis.max_ref_per_pic = ((flags & 0x3f) >> 2);\n\tstream.readUint24();\n});\n\n// file:src/parsing/cdef.js\nBoxParser.createBoxCtor(\"cdef\", \"ComponentDefinitionBox\", function(stream) {\n var i;\n this.channel_count = stream.readUint16();\n this.channel_indexes = [];\n this.channel_types = [];\n this.channel_associations = [];\n for (i = 0; i < this.channel_count; i++) {\n this.channel_indexes.push(stream.readUint16());\n this.channel_types.push(stream.readUint16());\n this.channel_associations.push(stream.readUint16());\n }\n});\n\n// file:src/parsing/clap.js\nBoxParser.createBoxCtor(\"clap\", \"CleanApertureBox\", function(stream) {\n\tthis.cleanApertureWidthN = stream.readUint32();\n\tthis.cleanApertureWidthD = stream.readUint32();\n\tthis.cleanApertureHeightN = stream.readUint32();\n\tthis.cleanApertureHeightD = stream.readUint32();\n\tthis.horizOffN = stream.readUint32();\n\tthis.horizOffD = stream.readUint32();\n\tthis.vertOffN = stream.readUint32();\n\tthis.vertOffD = stream.readUint32();\n});// file:src/parsing/clli.js\nBoxParser.createBoxCtor(\"clli\", \"ContentLightLevelBox\", function(stream) {\n\tthis.max_content_light_level = stream.readUint16();\n this.max_pic_average_light_level = stream.readUint16();\n});\n\n// file:src/parsing/cmex.js\nBoxParser.createFullBoxCtor(\"cmex\", \"CameraExtrinsicMatrixProperty\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.pos_x = stream.readInt32();\n\t}\n\tif (this.flags & 0x2) {\n\t\tthis.pos_y = stream.readInt32();\n\t}\n\tif (this.flags & 0x4) {\n\t\tthis.pos_z = stream.readInt32();\n\t}\n\tif (this.flags & 0x8) {\n\t\tif (this.version == 0) {\n\t\t\tif (this.flags & 0x10) {\n\t\t\t\tthis.quat_x = stream.readInt32();\n\t\t\t\tthis.quat_y = stream.readInt32();\n\t\t\t\tthis.quat_z = stream.readInt32();\n\t\t\t} else {\n\t\t\t\tthis.quat_x = stream.readInt16();\n\t\t\t\tthis.quat_y = stream.readInt16();\n\t\t\t\tthis.quat_z = stream.readInt16();\n\t\t\t}\n\t\t} else if (this.version == 1) {\n\t\t\t//ViewpointGlobalCoordinateSysRotationStruct rot;\n\t\t}\n\t}\n\tif (this.flags & 0x20) {\n\t\tthis.id = stream.readUint32();\n\t}\n});\n// file:src/parsing/cmin.js\nBoxParser.createFullBoxCtor(\"cmin\", \"CameraIntrinsicMatrixProperty\", function(stream) {\n\tthis.focal_length_x = stream.readInt32();\n\tthis.principal_point_x = stream.readInt32();\n\tthis.principal_point_y = stream.readInt32();\n\tif (this.flags & 0x1) {\n\t\tthis.focal_length_y = stream.readInt32();\n\t\tthis.skew_factor = stream.readInt32();\n\t}\n});// file:src/parsing/cmpd.js\nBoxParser.createBoxCtor(\"cmpd\", \"ComponentDefinitionBox\", function(stream) {\n\tthis.component_count = stream.readUint32();\n\tthis.component_types = [];\n\tthis.component_type_urls = [];\n\tfor (i = 0; i < this.component_count; i++) {\n\t\tvar component_type = stream.readUint16();\n\t\tthis.component_types.push(component_type);\n\t\tif (component_type >= 0x8000) {\n\t\t\tthis.component_type_urls.push(stream.readCString());\n\t\t}\n\t}\n});// file:src/parsing/co64.js\nBoxParser.createFullBoxCtor(\"co64\", \"ChunkLargeOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint64());\n\t\t}\n\t}\n});\n\n// file:src/parsing/CoLL.js\nBoxParser.createFullBoxCtor(\"CoLL\", \"ContentLightLevelBox\", function(stream) {\n\tthis.maxCLL = stream.readUint16();\n this.maxFALL = stream.readUint16();\n});\n\n// file:src/parsing/colr.js\nBoxParser.createBoxCtor(\"colr\", \"ColourInformationBox\", function(stream) {\n\tthis.colour_type = stream.readString(4);\n\tif (this.colour_type === 'nclx') {\n\t\tthis.colour_primaries = stream.readUint16();\n\t\tthis.transfer_characteristics = stream.readUint16();\n\t\tthis.matrix_coefficients = stream.readUint16();\n\t\tvar tmp = stream.readUint8();\n\t\tthis.full_range_flag = tmp >> 7;\n\t} else if (this.colour_type === 'rICC') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t} else if (this.colour_type === 'prof') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t}\n});// file:src/parsing/cprt.js\nBoxParser.createFullBoxCtor(\"cprt\", \"CopyrightBox\", function (stream) {\n\tthis.parseLanguage(stream);\n\tthis.notice = stream.readCString();\n});\n\n// file:src/parsing/cslg.js\nBoxParser.createFullBoxCtor(\"cslg\", \"CompositionToDecodeBox\", function(stream) {\n\tvar entry_count;\n\tif (this.version === 0) {\n\t\tthis.compositionToDTSShift = stream.readInt32(); /* signed */\n\t\tthis.leastDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.greatestDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.compositionStartTime = stream.readInt32(); /* signed */\n\t\tthis.compositionEndTime = stream.readInt32(); /* signed */\n\t}\n});\n\n// file:src/parsing/ctts.js\nBoxParser.createFullBoxCtor(\"ctts\", \"CompositionOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\t/* some files are buggy and declare version=0 while using signed offsets.\n\t\t\t The likelyhood of using the most significant bit in a 32-bits time offset is very low,\n\t\t\t so using signed value here as well */\n\t\t\t var value = stream.readInt32();\n\t\t\t if (value < 0) {\n\t\t\t \t\tLog.warn(\"BoxParser\", \"ctts box uses negative values without using version 1\");\n\t\t\t }\n\t\t\tthis.sample_offsets.push(value);\n\t\t}\n\t} else if (this.version == 1) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tthis.sample_offsets.push(stream.readInt32()); /* signed */\n\t\t}\n\t}\n});\n\n// file:src/parsing/dac3.js\nBoxParser.createBoxCtor(\"dac3\", \"AC3SpecificBox\", function(stream) {\n\tvar tmp_byte1 = stream.readUint8();\n\tvar tmp_byte2 = stream.readUint8();\n\tvar tmp_byte3 = stream.readUint8();\n\tthis.fscod = tmp_byte1 >> 6;\n\tthis.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\tthis.bsmod = ((tmp_byte1 & 0x1) << 2) | ((tmp_byte2 >> 6) & 0x3);\n\tthis.acmod = ((tmp_byte2 >> 3) & 0x7);\n\tthis.lfeon = ((tmp_byte2 >> 2) & 0x1);\n\tthis.bit_rate_code = (tmp_byte2 & 0x3) | ((tmp_byte3 >> 5) & 0x7);\n});\n\n// file:src/parsing/dec3.js\nBoxParser.createBoxCtor(\"dec3\", \"EC3SpecificBox\", function(stream) {\n\tvar tmp_16 = stream.readUint16();\n\tthis.data_rate = tmp_16 >> 3;\n\tthis.num_ind_sub = tmp_16 & 0x7;\n\tthis.ind_subs = [];\n\tfor (var i = 0; i < this.num_ind_sub+1; i++) {\n\t\tvar ind_sub = {};\n\t\tthis.ind_subs.push(ind_sub);\n\t\tvar tmp_byte1 = stream.readUint8();\n\t\tvar tmp_byte2 = stream.readUint8();\n\t\tvar tmp_byte3 = stream.readUint8();\n\t\tind_sub.fscod = tmp_byte1 >> 6;\n\t\tind_sub.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\t\tind_sub.bsmod = ((tmp_byte1 & 0x1) << 4) | ((tmp_byte2 >> 4) & 0xF);\n\t\tind_sub.acmod = ((tmp_byte2 >> 1) & 0x7);\n\t\tind_sub.lfeon = (tmp_byte2 & 0x1);\n\t\tind_sub.num_dep_sub = ((tmp_byte3 >> 1) & 0xF);\n\t\tif (ind_sub.num_dep_sub > 0) {\n\t\t\tind_sub.chan_loc = ((tmp_byte3 & 0x1) << 8) | stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dfLa.js\nBoxParser.createFullBoxCtor(\"dfLa\", \"FLACSpecificBox\", function(stream) {\n var BLOCKTYPE_MASK = 0x7F;\n var LASTMETADATABLOCKFLAG_MASK = 0x80;\n\n var boxesFound = [];\n var knownBlockTypes = [\n \"STREAMINFO\",\n \"PADDING\",\n \"APPLICATION\",\n \"SEEKTABLE\",\n \"VORBIS_COMMENT\",\n \"CUESHEET\",\n \"PICTURE\",\n \"RESERVED\"\n ];\n\n // for (i=0; ; i++) { // to end of box\n do {\n var flagAndType = stream.readUint8();\n\n var type = Math.min(\n (flagAndType & BLOCKTYPE_MASK),\n (knownBlockTypes.length - 1)\n );\n\n // if this is a STREAMINFO block, read the true samplerate since this\n // can be different to the AudioSampleEntry samplerate.\n if (!(type)) {\n // read past all the other stuff\n stream.readUint8Array(13);\n\n // extract samplerate\n this.samplerate = (stream.readUint32() >> 12);\n\n // read to end of STREAMINFO\n stream.readUint8Array(20);\n } else {\n // not interested in other block types so just discard length bytes\n stream.readUint8Array(stream.readUint24());\n }\n\n boxesFound.push(knownBlockTypes[type]);\n\n if (!!(flagAndType & LASTMETADATABLOCKFLAG_MASK)) {\n break;\n }\n } while (true);\n\n this.numMetadataBlocks =\n boxesFound.length + \" (\" + boxesFound.join(\", \") + \")\";\n});\n// file:src/parsing/dimm.js\nBoxParser.createBoxCtor(\"dimm\", \"hintimmediateBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dmax.js\nBoxParser.createBoxCtor(\"dmax\", \"hintlongestpacket\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/dmed.js\nBoxParser.createBoxCtor(\"dmed\", \"hintmediaBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dOps.js\nBoxParser.createBoxCtor(\"dOps\", \"OpusSpecificBox\", function(stream) {\n\tthis.Version = stream.readUint8();\n\tthis.OutputChannelCount = stream.readUint8();\n\tthis.PreSkip = stream.readUint16();\n\tthis.InputSampleRate = stream.readUint32();\n\tthis.OutputGain = stream.readInt16();\n\tthis.ChannelMappingFamily = stream.readUint8();\n\tif (this.ChannelMappingFamily !== 0) {\n\t\tthis.StreamCount = stream.readUint8();\n\t\tthis.CoupledCount = stream.readUint8();\n\t\tthis.ChannelMapping = [];\n\t\tfor (var i = 0; i < this.OutputChannelCount; i++) {\n\t\t\tthis.ChannelMapping[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dref.js\nBoxParser.createFullBoxCtor(\"dref\", \"DataReferenceBox\", function(stream) {\n\tvar ret;\n\tvar box;\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/drep.js\nBoxParser.createBoxCtor(\"drep\", \"hintrepeatedBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/elng.js\nBoxParser.createFullBoxCtor(\"elng\", \"ExtendedLanguageBox\", function(stream) {\n\tthis.extended_language = stream.readString(this.size-this.hdr_size);\n});\n\n// file:src/parsing/elst.js\nBoxParser.createFullBoxCtor(\"elst\", \"EditListBox\", function(stream) {\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tentry.segment_duration = stream.readUint64();\n\t\t\tentry.media_time = stream.readInt64();\n\t\t} else {\n\t\t\tentry.segment_duration = stream.readUint32();\n\t\t\tentry.media_time = stream.readInt32();\n\t\t}\n\t\tentry.media_rate_integer = stream.readInt16();\n\t\tentry.media_rate_fraction = stream.readInt16();\n\t}\n});\n\n// file:src/parsing/emsg.js\nBoxParser.createFullBoxCtor(\"emsg\", \"EventMessageBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time \t\t\t= stream.readUint64();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t} else {\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time_delta \t= stream.readUint32();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t}\n\tvar message_size = this.size - this.hdr_size - (4*4 + (this.scheme_id_uri.length+1) + (this.value.length+1));\n\tif (this.version == 1) {\n\t\tmessage_size -= 4;\n\t}\n\tthis.message_data = stream.readUint8Array(message_size);\n});\n\n// file:src/parsing/EntityToGroup.js\n// ISO/IEC 14496-12:2022 Section 8.18.3 Entity to group box\nBoxParser.createEntityToGroupCtor = function(type, parseMethod) {\n BoxParser[type+\"Box\"] = function(size) {\n BoxParser.FullBox.call(this, type, size);\n }\n BoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n BoxParser[type+\"Box\"].prototype.parse = function(stream) {\n this.parseFullHeader(stream);\n if (parseMethod) {\n parseMethod.call(this, stream);\n } else {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n }\n };\n};\n\n// Auto exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.2.1)\nBoxParser.createEntityToGroupCtor(\"aebr\");\n\n// Flash exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.5.1)\nBoxParser.createEntityToGroupCtor(\"afbr\");\n\n// Album collection (ISO/IEC 23008-12:2022 Section 6.8.7.1)\nBoxParser.createEntityToGroupCtor(\"albc\");\n\n// Alternative entity (ISO/IEC 14496-12:2022 Section 8.18.3.1)\nBoxParser.createEntityToGroupCtor(\"altr\");\n\n// Burst image entity group (ISO/IEC 23008-12:2022 Section 6.8.2.2)\nBoxParser.createEntityToGroupCtor(\"brst\");\n\n// Depth of field bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.6.1)\nBoxParser.createEntityToGroupCtor(\"dobr\");\n\n// Equivalent entity (ISO/IEC 23008-12:2022 Section 6.8.1.1)\nBoxParser.createEntityToGroupCtor(\"eqiv\");\n\n// Favourites collection (ISO/IEC 23008-12:2022 Section 6.8.7.2)\nBoxParser.createEntityToGroupCtor(\"favc\");\n\n// Focus bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.4.1)\nBoxParser.createEntityToGroupCtor(\"fobr\");\n\n// Audio to image entity group (ISO/IEC 23008-12:2022 Section 6.8.4)\nBoxParser.createEntityToGroupCtor(\"iaug\");\n\n// Panorama (ISO/IEC 23008-12:2022 Section 6.8.8.1)\nBoxParser.createEntityToGroupCtor(\"pano\");\n\n// Slideshow (ISO/IEC 23008-12:2022 Section 6.8.9.1)\nBoxParser.createEntityToGroupCtor(\"slid\");\n\n// Stereo pair (ISO/IEC 23008-12:2022 Section 6.8.5)\nBoxParser.createEntityToGroupCtor(\"ster\");\n\n// Time-synchronised capture entity group (ISO/IEC 23008-12:2022 Section 6.8.3)\nBoxParser.createEntityToGroupCtor(\"tsyn\");\n\n// White balance bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.3.1)\nBoxParser.createEntityToGroupCtor(\"wbbr\");\n\n// Alternative entity (ISO/IEC 23008-12:2022 AMD1 Section 6.8.10)\nBoxParser.createEntityToGroupCtor(\"prgr\");\n\n// Image Pyramid entity group (ISO/IEC 23008-12:20xx Section 6.8.11)\nBoxParser.createEntityToGroupCtor(\"pymd\", function(stream) {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (var i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n \n this.tile_size_x = stream.readUint16();\n this.tile_size_y = stream.readUint16();\n this.layer_binning = [];\n this.tiles_in_layer_column_minus1 = [];\n this.tiles_in_layer_row_minus1 = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n this.layer_binning[i] = stream.readUint16();\n this.tiles_in_layer_row_minus1[i] = stream.readUint16();\n this.tiles_in_layer_column_minus1[i] = stream.readUint16();\n }\n});\n\n// file:src/parsing/esds.js\nBoxParser.createFullBoxCtor(\"esds\", \"ElementaryStreamDescriptorBox\", function(stream) {\n\tvar esd_data = stream.readUint8Array(this.size-this.hdr_size);\n\tif (typeof MPEG4DescriptorParser !== \"undefined\") {\n\t\tvar esd_parser = new MPEG4DescriptorParser();\n\t\tthis.esd = esd_parser.parseOneDescriptor(new DataStream(esd_data.buffer, 0, DataStream.BIG_ENDIAN));\n\t}\n});\n\n// file:src/parsing/fiel.js\nBoxParser.createBoxCtor(\"fiel\", \"FieldHandlingBox\", function(stream) {\n\tthis.fieldCount = stream.readUint8();\n\tthis.fieldOrdering = stream.readUint8();\n});\n\n// file:src/parsing/frma.js\nBoxParser.createBoxCtor(\"frma\", \"OriginalFormatBox\", function(stream) {\n\tthis.data_format = stream.readString(4);\n});\n\n// file:src/parsing/ftyp.js\nBoxParser.createBoxCtor(\"ftyp\", \"FileTypeBox\", function(stream) {\n\tvar toparse = this.size - this.hdr_size;\n\tthis.major_brand = stream.readString(4);\n\tthis.minor_version = stream.readUint32();\n\ttoparse -= 8;\n\tthis.compatible_brands = [];\n\tvar i = 0;\n\twhile (toparse>=4) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t\ttoparse -= 4;\n\t\ti++;\n\t}\n});\n\n// file:src/parsing/hdlr.js\nBoxParser.createFullBoxCtor(\"hdlr\", \"HandlerBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tstream.readUint32();\n\t\tthis.handler = stream.readString(4);\n\t\tstream.readUint32Array(3);\n\t\tthis.name = stream.readString(this.size-this.hdr_size-20);\n\t\tif (this.name[this.name.length-1]==='\\0') {\n\t\t\tthis.name = this.name.slice(0,-1);\n\t\t}\n\t}\n});\n\n// file:src/parsing/hvcC.js\nBoxParser.createBoxCtor(\"hvcC\", \"HEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar nb_nalus;\n\tvar length;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\ttmp_byte = stream.readUint8();\n\tthis.general_profile_space = tmp_byte >> 6;\n\tthis.general_tier_flag = (tmp_byte & 0x20) >> 5;\n\tthis.general_profile_idc = (tmp_byte & 0x1F);\n\tthis.general_profile_compatibility = stream.readUint32();\n\tthis.general_constraint_indicator = stream.readUint8Array(6);\n\tthis.general_level_idc = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\tthis.chroma_format_idc = (stream.readUint8() & 0x3);\n\tthis.bit_depth_luma_minus8 = (stream.readUint8() & 0x7);\n\tthis.bit_depth_chroma_minus8 = (stream.readUint8() & 0x7);\n\tthis.avgFrameRate = stream.readUint16();\n\ttmp_byte = stream.readUint8();\n\tthis.constantFrameRate = (tmp_byte >> 6);\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tlength = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/iinf.js\nBoxParser.createFullBoxCtor(\"iinf\", \"ItemInfoBox\", function(stream) {\n\tvar ret;\n\tif (this.version === 0) {\n\t\tthis.entry_count = stream.readUint16();\n\t} else {\n\t\tthis.entry_count = stream.readUint32();\n\t}\n\tthis.item_infos = [];\n\tfor (var i = 0; i < this.entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (ret.box.type !== \"infe\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Expected 'infe' box, got \"+ret.box.type);\n\t\t\t}\n\t\t\tthis.item_infos[i] = ret.box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/iloc.js\nBoxParser.createFullBoxCtor(\"iloc\", \"ItemLocationBox\", function(stream) {\n\tvar byte;\n\tbyte = stream.readUint8();\n\tthis.offset_size = (byte >> 4) & 0xF;\n\tthis.length_size = byte & 0xF;\n\tbyte = stream.readUint8();\n\tthis.base_offset_size = (byte >> 4) & 0xF;\n\tif (this.version === 1 || this.version === 2) {\n\t\tthis.index_size = byte & 0xF;\n\t} else {\n\t\tthis.index_size = 0;\n\t\t// reserved = byte & 0xF;\n\t}\n\tthis.items = [];\n\tvar item_count = 0;\n\tif (this.version < 2) {\n\t\titem_count = stream.readUint16();\n\t} else if (this.version === 2) {\n\t\titem_count = stream.readUint32();\n\t} else {\n\t\tthrow \"version of iloc box not supported\";\n\t}\n\tfor (var i = 0; i < item_count; i++) {\n\t\tvar item = {};\n\t\tthis.items.push(item);\n\t\tif (this.version < 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else if (this.version === 2) {\n\t\t\titem.item_ID = stream.readUint32();\n\t\t} else {\n\t\t\tthrow \"version of iloc box not supported\";\n\t\t}\n\t\tif (this.version === 1 || this.version === 2) {\n\t\t\titem.construction_method = (stream.readUint16() & 0xF);\n\t\t} else {\n\t\t\titem.construction_method = 0;\n\t\t}\n\t\titem.data_reference_index = stream.readUint16();\n\t\tswitch(this.base_offset_size) {\n\t\t\tcase 0:\n\t\t\t\titem.base_offset = 0;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\titem.base_offset = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\titem.base_offset = stream.readUint64();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Error reading base offset size\";\n\t\t}\n\t\tvar extent_count = stream.readUint16();\n\t\titem.extents = [];\n\t\tfor (var j=0; j < extent_count; j++) {\n\t\t\tvar extent = {};\n\t\t\titem.extents.push(extent);\n\t\t\tif (this.version === 1 || this.version === 2) {\n\t\t\t\tswitch(this.index_size) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\textent.extent_index = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\textent.extent_index = stream.readUint32();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\textent.extent_index = stream.readUint64();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch(this.offset_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_offset = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_offset = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_offset = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t\tswitch(this.length_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_length = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_length = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/imir.js\nBoxParser.createBoxCtor(\"imir\", \"ImageMirror\", function(stream) {\n\tvar tmp = stream.readUint8();\n\tthis.reserved = tmp >> 7;\n\tthis.axis = tmp & 1;\n});// file:src/parsing/infe.js\nBoxParser.createFullBoxCtor(\"infe\", \"ItemInfoEntry\", function(stream) {\n\tif (this.version === 0 || this.version === 1) {\n\t\tthis.item_ID = stream.readUint16();\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_name = stream.readCString();\n\t\tthis.content_type = stream.readCString();\n\t\tthis.content_encoding = stream.readCString();\n\t}\n\tif (this.version === 1) {\n\t\tthis.extension_type = stream.readString(4);\n\t\tLog.warn(\"BoxParser\", \"Cannot parse extension type\");\n\t\tstream.seek(this.start+this.size);\n\t\treturn;\n\t}\n\tif (this.version >= 2) {\n\t\tif (this.version === 2) {\n\t\t\tthis.item_ID = stream.readUint16();\n\t\t} else if (this.version === 3) {\n\t\t\tthis.item_ID = stream.readUint32();\n\t\t}\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_type = stream.readString(4);\n\t\tthis.item_name = stream.readCString();\n\t\tif (this.item_type === \"mime\") {\n\t\t\tthis.content_type = stream.readCString();\n\t\t\tthis.content_encoding = stream.readCString();\n\t\t} else if (this.item_type === \"uri \") {\n\t\t\tthis.item_uri_type = stream.readCString();\n\t\t}\n\t}\n});\n// file:src/parsing/ipma.js\nBoxParser.createFullBoxCtor(\"ipma\", \"ItemPropertyAssociationBox\", function(stream) {\n\tvar i, j;\n\tentry_count = stream.readUint32();\n\tthis.associations = [];\n\tfor(i=0; i<entry_count; i++) {\n\t\tvar item_assoc = {};\n\t\tthis.associations.push(item_assoc);\n\t\tif (this.version < 1) {\n\t\t\titem_assoc.id = stream.readUint16();\n\t\t} else {\n\t\t\titem_assoc.id = stream.readUint32();\n\t\t}\n\t\tvar association_count = stream.readUint8();\n\t\titem_assoc.props = [];\n\t\tfor (j = 0; j < association_count; j++) {\n\t\t\tvar tmp = stream.readUint8();\n\t\t\tvar p = {};\n\t\t\titem_assoc.props.push(p);\n\t\t\tp.essential = ((tmp & 0x80) >> 7) === 1;\n\t\t\tif (this.flags & 0x1) {\n\t\t\t\tp.property_index = (tmp & 0x7F) << 8 | stream.readUint8();\n\t\t\t} else {\n\t\t\t\tp.property_index = (tmp & 0x7F);\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/iref.js\nBoxParser.createFullBoxCtor(\"iref\", \"ItemReferenceBox\", function(stream) {\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.references = [];\n\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t} else {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBoxLarge(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.warn(\"BoxParser\", box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.references.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n// file:src/parsing/irot.js\nBoxParser.createBoxCtor(\"irot\", \"ImageRotation\", function(stream) {\n\tthis.angle = stream.readUint8() & 0x3;\n});\n\n// file:src/parsing/ispe.js\nBoxParser.createFullBoxCtor(\"ispe\", \"ImageSpatialExtentsProperty\", function(stream) {\n\tthis.image_width = stream.readUint32();\n\tthis.image_height = stream.readUint32();\n});// file:src/parsing/kind.js\nBoxParser.createFullBoxCtor(\"kind\", \"KindBox\", function(stream) {\n\tthis.schemeURI = stream.readCString();\n\tthis.value = stream.readCString();\n});\n// file:src/parsing/leva.js\nBoxParser.createFullBoxCtor(\"leva\", \"LevelAssignmentBox\", function(stream) {\n\tvar count = stream.readUint8();\n\tthis.levels = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tvar level = {};\n\t\tthis.levels[i] = level;\n\t\tlevel.track_ID = stream.readUint32();\n\t\tvar tmp_byte = stream.readUint8();\n\t\tlevel.padding_flag = tmp_byte >> 7;\n\t\tlevel.assignment_type = tmp_byte & 0x7F;\n\t\tswitch (level.assignment_type) {\n\t\t\tcase 0:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tlevel.grouping_type_parameter = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tlevel.sub_track_id = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown leva assignement type\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/lhvC.js\nBoxParser.createBoxCtor(\"lhvC\", \"LHEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\ttmp_byte = stream.readUint8();\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tvar length = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/lsel.js\nBoxParser.createBoxCtor(\"lsel\", \"LayerSelectorProperty\", function(stream) {\n\tthis.layer_id = stream.readUint16();\n});// file:src/parsing/maxr.js\nBoxParser.createBoxCtor(\"maxr\", \"hintmaxrate\", function(stream) {\n\tthis.period = stream.readUint32();\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/mdcv.js\nfunction ColorPoint(x, y) {\n this.x = x;\n this.y = y;\n}\n\nColorPoint.prototype.toString = function() {\n return \"(\"+this.x+\",\"+this.y+\")\";\n}\n\nBoxParser.createBoxCtor(\"mdcv\", \"MasteringDisplayColourVolumeBox\", function(stream) {\n this.display_primaries = [];\n this.display_primaries[0] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[1] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[2] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.white_point = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.max_display_mastering_luminance = stream.readUint32();\n this.min_display_mastering_luminance = stream.readUint32();\n});\n\n// file:src/parsing/mdhd.js\nBoxParser.createFullBoxCtor(\"mdhd\", \"MediaHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.parseLanguage(stream);\n\tstream.readUint16();\n});\n\n// file:src/parsing/mehd.js\nBoxParser.createFullBoxCtor(\"mehd\", \"MovieExtendsHeaderBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tLog.warn(\"BoxParser\", \"mehd box incorrectly uses flags set to 1, converting version to 1\");\n\t\tthis.version = 1;\n\t}\n\tif (this.version == 1) {\n\t\tthis.fragment_duration = stream.readUint64();\n\t} else {\n\t\tthis.fragment_duration = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/meta.js\nBoxParser.createFullBoxCtor(\"meta\", \"MetaBox\", function(stream) {\n\tthis.boxes = [];\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n});\n// file:src/parsing/mfhd.js\nBoxParser.createFullBoxCtor(\"mfhd\", \"MovieFragmentHeaderBox\", function(stream) {\n\tthis.sequence_number = stream.readUint32();\n});\n\n// file:src/parsing/mfro.js\nBoxParser.createFullBoxCtor(\"mfro\", \"MovieFragmentRandomAccessOffsetBox\", function(stream) {\n\tthis._size = stream.readUint32();\n});\n\n// file:src/parsing/mskC.js\nBoxParser.createFullBoxCtor(\"mskC\", \"MaskConfigurationProperty\", function(stream) {\n this.bits_per_pixel = stream.readUint8();\n});\n\n// file:src/parsing/mvhd.js\nBoxParser.createFullBoxCtor(\"mvhd\", \"MovieHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.rate = stream.readUint32();\n\tthis.volume = stream.readUint16()>>8;\n\tstream.readUint16();\n\tstream.readUint32Array(2);\n\tthis.matrix = stream.readUint32Array(9);\n\tstream.readUint32Array(6);\n\tthis.next_track_id = stream.readUint32();\n});\n// file:src/parsing/npck.js\nBoxParser.createBoxCtor(\"npck\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint32();\n});\n\n// file:src/parsing/nump.js\nBoxParser.createBoxCtor(\"nump\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint64();\n});\n\n// file:src/parsing/padb.js\nBoxParser.createFullBoxCtor(\"padb\", \"PaddingBitsBox\", function(stream) {\n\tvar sample_count = stream.readUint32();\n\tthis.padbits = [];\n\tfor (var i = 0; i < Math.floor((sample_count+1)/2); i++) {\n\t\tthis.padbits = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pasp.js\nBoxParser.createBoxCtor(\"pasp\", \"PixelAspectRatioBox\", function(stream) {\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n});// file:src/parsing/payl.js\nBoxParser.createBoxCtor(\"payl\", \"CuePayloadBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/payt.js\nBoxParser.createBoxCtor(\"payt\", \"hintpayloadID\", function(stream) {\n\tthis.payloadID = stream.readUint32();\n\tvar count = stream.readUint8();\n\tthis.rtpmap_string = stream.readString(count);\n});\n\n// file:src/parsing/pdin.js\nBoxParser.createFullBoxCtor(\"pdin\", \"ProgressiveDownloadInfoBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/8;\n\tthis.rate = [];\n\tthis.initial_delay = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.rate[i] = stream.readUint32();\n\t\tthis.initial_delay[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pitm.js\nBoxParser.createFullBoxCtor(\"pitm\", \"PrimaryItemBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tthis.item_id = stream.readUint16();\n\t} else {\n\t\tthis.item_id = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pixi.js\nBoxParser.createFullBoxCtor(\"pixi\", \"PixelInformationProperty\", function(stream) {\n\tvar i;\n\tthis.num_channels = stream.readUint8();\n\tthis.bits_per_channels = [];\n\tfor (i = 0; i < this.num_channels; i++) {\n\t\tthis.bits_per_channels[i] = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pmax.js\nBoxParser.createBoxCtor(\"pmax\", \"hintlargestpacket\", function(stream) {\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/prdi.js\nBoxParser.createFullBoxCtor(\"prdi\", \"ProgressiveDerivedImageItemInformationProperty\", function(stream) {\n\tthis.step_count = stream.readUint16();\n\tthis.item_count = [];\n\tif (this.flags & 0x2) {\n\t\tfor (var i = 0; i < this.step_count; i++) {\n\t\t\tthis.item_count[i] = stream.readUint16();\n\t\t}\n\t}\n});// file:src/parsing/prft.js\nBoxParser.createFullBoxCtor(\"prft\", \"ProducerReferenceTimeBox\", function(stream) {\n\tthis.ref_track_id = stream.readUint32();\n\tthis.ntp_timestamp = stream.readUint64();\n\tif (this.version === 0) {\n\t\tthis.media_time = stream.readUint32();\n\t} else {\n\t\tthis.media_time = stream.readUint64();\n\t}\n});\n\n// file:src/parsing/pssh.js\nBoxParser.createFullBoxCtor(\"pssh\", \"ProtectionSystemSpecificHeaderBox\", function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tif (this.version > 0) {\n\t\tvar count = stream.readUint32();\n\t\tthis.kid = [];\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.kid[i] = BoxParser.parseHex16(stream);\n\t\t}\n\t}\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/qt/clef.js\nBoxParser.createFullBoxCtor(\"clef\", \"TrackCleanApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/enof.js\nBoxParser.createFullBoxCtor(\"enof\", \"TrackEncodedPixelsDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/prof.js\nBoxParser.createFullBoxCtor(\"prof\", \"TrackProductionApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/tapt.js\nBoxParser.createContainerBoxCtor(\"tapt\", \"TrackApertureModeDimensionsBox\", null, [ \"clef\", \"prof\", \"enof\"]);// file:src/parsing/rtp.js\nBoxParser.createBoxCtor(\"rtp \", \"rtpmoviehintinformation\", function(stream) {\n\tthis.descriptionformat = stream.readString(4);\n\tthis.sdptext = stream.readString(this.size - this.hdr_size - 4);\n});\n\n// file:src/parsing/saio.js\nBoxParser.createFullBoxCtor(\"saio\", \"SampleAuxiliaryInformationOffsetsBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tvar count = stream.readUint32();\n\tthis.offset = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tif (this.version === 0) {\n\t\t\tthis.offset[i] = stream.readUint32();\n\t\t} else {\n\t\t\tthis.offset[i] = stream.readUint64();\n\t\t}\n\t}\n});\n// file:src/parsing/saiz.js\nBoxParser.createFullBoxCtor(\"saiz\", \"SampleAuxiliaryInformationSizesBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tthis.default_sample_info_size = stream.readUint8();\n\tthis.sample_count = stream.readUint32();\n\tthis.sample_info_size = [];\n\tif (this.default_sample_info_size === 0) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tthis.sample_info_size[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/sampleentries/mett.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"mett\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/metx.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"metx\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/sbtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"sbtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stpp.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stpp\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.auxiliary_mime_types = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stxt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stxt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/tx3g.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"tx3g\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.displayFlags = stream.readUint32();\n\tthis.horizontal_justification = stream.readInt8();\n\tthis.vertical_justification = stream.readInt8();\n\tthis.bg_color_rgba = stream.readUint8Array(4);\n\tthis.box_record = stream.readInt16Array(4);\n\tthis.style_record = stream.readUint8Array(12);\n\tthis.parseFooter(stream);\n});\n// file:src/parsing/sampleentries/wvtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"wvtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/samplegroups/alst.js\nBoxParser.createSampleGroupCtor(\"alst\", function(stream) {\n\tvar i;\n\tvar roll_count = stream.readUint16();\n\tthis.first_output_sample = stream.readUint16();\n\tthis.sample_offset = [];\n\tfor (i = 0; i < roll_count; i++) {\n\t\tthis.sample_offset[i] = stream.readUint32();\n\t}\n\tvar remaining = this.description_length - 4 - 4*roll_count;\n\tthis.num_output_samples = [];\n\tthis.num_total_samples = [];\n\tfor (i = 0; i < remaining/4; i++) {\n\t\tthis.num_output_samples[i] = stream.readUint16();\n\t\tthis.num_total_samples[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/avll.js\nBoxParser.createSampleGroupCtor(\"avll\", function(stream) {\n\tthis.layerNumber = stream.readUint8();\n\tthis.accurateStatisticsFlag = stream.readUint8();\n\tthis.avgBitRate = stream.readUint16();\n\tthis.avgFrameRate = stream.readUint16();\n});\n\n// file:src/parsing/samplegroups/avss.js\nBoxParser.createSampleGroupCtor(\"avss\", function(stream) {\n\tthis.subSequenceIdentifier = stream.readUint16();\n\tthis.layerNumber = stream.readUint8();\n\tvar tmp_byte = stream.readUint8();\n\tthis.durationFlag = tmp_byte >> 7;\n\tthis.avgRateFlag = (tmp_byte >> 6) & 0x1;\n\tif (this.durationFlag) {\n\t\tthis.duration = stream.readUint32();\n\t}\n\tif (this.avgRateFlag) {\n\t\tthis.accurateStatisticsFlag = stream.readUint8();\n\t\tthis.avgBitRate = stream.readUint16();\n\t\tthis.avgFrameRate = stream.readUint16();\n\t}\n\tthis.dependency = [];\n\tvar numReferences = stream.readUint8();\n\tfor (var i = 0; i < numReferences; i++) {\n\t\tvar dependencyInfo = {};\n\t\tthis.dependency.push(dependencyInfo);\n\t\tdependencyInfo.subSeqDirectionFlag = stream.readUint8();\n\t\tdependencyInfo.layerNumber = stream.readUint8();\n\t\tdependencyInfo.subSequenceIdentifier = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/dtrt.js\nBoxParser.createSampleGroupCtor(\"dtrt\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/mvif.js\nBoxParser.createSampleGroupCtor(\"mvif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/prol.js\nBoxParser.createSampleGroupCtor(\"prol\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/rap.js\nBoxParser.createSampleGroupCtor(\"rap \", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.num_leading_samples_known = tmp_byte >> 7;\n\tthis.num_leading_samples = tmp_byte & 0x7F;\n});\n\n// file:src/parsing/samplegroups/rash.js\nBoxParser.createSampleGroupCtor(\"rash\", function(stream) {\n\tthis.operation_point_count = stream.readUint16();\n\tif (this.description_length !== 2+(this.operation_point_count === 1?2:this.operation_point_count*6)+9) {\n\t\tLog.warn(\"BoxParser\", \"Mismatch in \"+this.grouping_type+\" sample group length\");\n\t\tthis.data = stream.readUint8Array(this.description_length-2);\n\t} else {\n\t\tif (this.operation_point_count === 1) {\n\t\t\tthis.target_rate_share = stream.readUint16();\n\t\t} else {\n\t\t\tthis.target_rate_share = [];\n\t\t\tthis.available_bitrate = [];\n\t\t\tfor (var i = 0; i < this.operation_point_count; i++) {\n\t\t\t\tthis.available_bitrate[i] = stream.readUint32();\n\t\t\t\tthis.target_rate_share[i] = stream.readUint16();\n\t\t\t}\n\t\t}\n\t\tthis.maximum_bitrate = stream.readUint32();\n\t\tthis.minimum_bitrate = stream.readUint32();\n\t\tthis.discard_priority = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/samplegroups/roll.js\nBoxParser.createSampleGroupCtor(\"roll\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.parse = function(stream) {\n\tLog.warn(\"BoxParser\", \"Unknown Sample Group type: \"+this.grouping_type);\n\tthis.data = stream.readUint8Array(this.description_length);\n}\n\n// file:src/parsing/samplegroups/scif.js\nBoxParser.createSampleGroupCtor(\"scif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/scnm.js\nBoxParser.createSampleGroupCtor(\"scnm\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/seig.js\nBoxParser.createSampleGroupCtor(\"seig\", function(stream) {\n\tthis.reserved = stream.readUint8();\n\tvar tmp = stream.readUint8();\n\tthis.crypt_byte_block = tmp >> 4;\n\tthis.skip_byte_block = tmp & 0xF;\n\tthis.isProtected = stream.readUint8();\n\tthis.Per_Sample_IV_Size = stream.readUint8();\n\tthis.KID = BoxParser.parseHex16(stream);\n\tthis.constant_IV_size = 0;\n\tthis.constant_IV = 0;\n\tif (this.isProtected === 1 && this.Per_Sample_IV_Size === 0) {\n\t\tthis.constant_IV_size = stream.readUint8();\n\t\tthis.constant_IV = stream.readUint8Array(this.constant_IV_size);\n\t}\n});\n\n// file:src/parsing/samplegroups/stsa.js\nBoxParser.createSampleGroupCtor(\"stsa\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/sync.js\nBoxParser.createSampleGroupCtor(\"sync\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.NAL_unit_type = tmp_byte & 0x3F;\n});\n\n// file:src/parsing/samplegroups/tele.js\nBoxParser.createSampleGroupCtor(\"tele\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.level_independently_decodable = tmp_byte >> 7;\n});\n\n// file:src/parsing/samplegroups/tsas.js\nBoxParser.createSampleGroupCtor(\"tsas\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/tscl.js\nBoxParser.createSampleGroupCtor(\"tscl\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/vipr.js\nBoxParser.createSampleGroupCtor(\"vipr\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/sbgp.js\nBoxParser.createFullBoxCtor(\"sbgp\", \"SampleToGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tif (this.version === 1) {\n\t\tthis.grouping_type_parameter = stream.readUint32();\n\t} else {\n\t\tthis.grouping_type_parameter = 0;\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tentry.sample_count = stream.readInt32();\n\t\tentry.group_description_index = stream.readInt32();\n\t}\n});\n\n// file:src/parsing/sbpm.js\nfunction Pixel(row, col) {\n\tthis.bad_pixel_row = row;\n\tthis.bad_pixel_column = col;\n}\n\nPixel.prototype.toString = function pixelToString() {\n\treturn \"[row: \" + this.bad_pixel_row + \", column: \" + this.bad_pixel_column + \"]\";\n}\n\nBoxParser.createFullBoxCtor(\"sbpm\", \"SensorBadPixelsMapBox\", function(stream) {\n\tvar i;\n\tthis.component_count = stream.readUint16();\n this.component_index = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n }\n\tvar flags = stream.readUint8();\n\tthis.correction_applied = (0x80 == (flags & 0x80));\n\tthis.num_bad_rows = stream.readUint32();\n\tthis.num_bad_cols = stream.readUint32();\n\tthis.num_bad_pixels = stream.readUint32();\n\tthis.bad_rows = [];\n\tthis.bad_columns = [];\n\tthis.bad_pixels = [];\n\tfor (i = 0; i < this.num_bad_rows; i++) {\n\t\tthis.bad_rows.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_cols; i++) {\n\t\tthis.bad_columns.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_pixels; i++) {\n\t\tvar row = stream.readUint32();\n\t\tvar col = stream.readUint32();\n\t\tthis.bad_pixels.push(new Pixel(row, col));\n\t}\n});\n\n// file:src/parsing/schm.js\nBoxParser.createFullBoxCtor(\"schm\", \"SchemeTypeBox\", function(stream) {\n\tthis.scheme_type = stream.readString(4);\n\tthis.scheme_version = stream.readUint32();\n\tif (this.flags & 0x000001) {\n\t\tthis.scheme_uri = stream.readString(this.size - this.hdr_size - 8);\n\t}\n});\n\n// file:src/parsing/sdp.js\nBoxParser.createBoxCtor(\"sdp \", \"rtptracksdphintinformation\", function(stream) {\n\tthis.sdptext = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/sdtp.js\nBoxParser.createFullBoxCtor(\"sdtp\", \"SampleDependencyTypeBox\", function(stream) {\n\tvar tmp_byte;\n\tvar count = (this.size - this.hdr_size);\n\tthis.is_leading = [];\n\tthis.sample_depends_on = [];\n\tthis.sample_is_depended_on = [];\n\tthis.sample_has_redundancy = [];\n\tfor (var i = 0; i < count; i++) {\n\t\ttmp_byte = stream.readUint8();\n\t\tthis.is_leading[i] = tmp_byte >> 6;\n\t\tthis.sample_depends_on[i] = (tmp_byte >> 4) & 0x3;\n\t\tthis.sample_is_depended_on[i] = (tmp_byte >> 2) & 0x3;\n\t\tthis.sample_has_redundancy[i] = tmp_byte & 0x3;\n\t}\n});\n\n// file:src/parsing/senc.js\n// Cannot be fully parsed because Per_Sample_IV_Size needs to be known\r\nBoxParser.createFullBoxCtor(\"senc\", \"SampleEncryptionBox\" /*, function(stream) {\r\n\tthis.parseFullHeader(stream);\r\n\tvar sample_count = stream.readUint32();\r\n\tthis.samples = [];\r\n\tfor (var i = 0; i < sample_count; i++) {\r\n\t\tvar sample = {};\r\n\t\t// tenc.default_Per_Sample_IV_Size or seig.Per_Sample_IV_Size\r\n\t\tsample.InitializationVector = this.readUint8Array(Per_Sample_IV_Size*8);\r\n\t\tif (this.flags & 0x2) {\r\n\t\t\tsample.subsamples = [];\r\n\t\t\tsubsample_count = stream.readUint16();\r\n\t\t\tfor (var j = 0; j < subsample_count; j++) {\r\n\t\t\t\tvar subsample = {};\r\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\r\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\r\n\t\t\t\tsample.subsamples.push(subsample);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// TODO\r\n\t\tthis.samples.push(sample);\r\n\t}\r\n}*/);\r\n// file:src/parsing/sgpd.js\nBoxParser.createFullBoxCtor(\"sgpd\", \"SampleGroupDescriptionBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tLog.debug(\"BoxParser\", \"Found Sample Groups of type \"+this.grouping_type);\n\tif (this.version === 1) {\n\t\tthis.default_length = stream.readUint32();\n\t} else {\n\t\tthis.default_length = 0;\n\t}\n\tif (this.version >= 2) {\n\t\tthis.default_group_description_index = stream.readUint32();\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry;\n\t\tif (BoxParser[this.grouping_type+\"SampleGroupEntry\"]) {\n\t\t\tentry = new BoxParser[this.grouping_type+\"SampleGroupEntry\"](this.grouping_type);\n\t\t} else {\n\t\t\tentry = new BoxParser.SampleGroupEntry(this.grouping_type);\n\t\t}\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tentry.description_length = stream.readUint32();\n\t\t\t} else {\n\t\t\t\tentry.description_length = this.default_length;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.description_length = this.default_length;\n\t\t}\n\t\tif (entry.write === BoxParser.SampleGroupEntry.prototype.write) {\n\t\t\tLog.info(\"BoxParser\", \"SampleGroup for type \"+this.grouping_type+\" writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t// storing data\n\t\t\tentry.data = stream.readUint8Array(entry.description_length);\n\t\t\t// rewinding\n\t\t\tstream.position -= entry.description_length;\n\t\t}\n\t\tentry.parse(stream);\n\t}\n});\n\n// file:src/parsing/sidx.js\nBoxParser.createFullBoxCtor(\"sidx\", \"CompressedSegmentIndexBox\", function(stream) {\n\tthis.reference_ID = stream.readUint32();\n\tthis.timescale = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.earliest_presentation_time = stream.readUint32();\n\t\tthis.first_offset = stream.readUint32();\n\t} else {\n\t\tthis.earliest_presentation_time = stream.readUint64();\n\t\tthis.first_offset = stream.readUint64();\n\t}\n\tstream.readUint16();\n\tthis.references = [];\n\tvar count = stream.readUint16();\n\tfor (var i = 0; i < count; i++) {\n\t\tvar ref = {};\n\t\tthis.references.push(ref);\n\t\tvar tmp_32 = stream.readUint32();\n\t\tref.reference_type = (tmp_32 >> 31) & 0x1;\n\t\tref.referenced_size = tmp_32 & 0x7FFFFFFF;\n\t\tref.subsegment_duration = stream.readUint32();\n\t\ttmp_32 = stream.readUint32();\n\t\tref.starts_with_SAP = (tmp_32 >> 31) & 0x1;\n\t\tref.SAP_type = (tmp_32 >> 28) & 0x7;\n\t\tref.SAP_delta_time = tmp_32 & 0xFFFFFFF;\n\t}\n});\n\n// file:src/parsing/singleitemtypereference.js\nBoxParser.SingleItemTypeReferenceBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBox.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBox.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint16();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint16();\n\t}\n}\n\n// file:src/parsing/singleitemtypereferencelarge.js\nBoxParser.SingleItemTypeReferenceBoxLarge = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint32();\n\t}\n}\n\n// file:src/parsing/SmDm.js\nBoxParser.createFullBoxCtor(\"SmDm\", \"SMPTE2086MasteringDisplayMetadataBox\", function(stream) {\n\tthis.primaryRChromaticity_x = stream.readUint16();\n this.primaryRChromaticity_y = stream.readUint16();\n this.primaryGChromaticity_x = stream.readUint16();\n this.primaryGChromaticity_y = stream.readUint16();\n this.primaryBChromaticity_x = stream.readUint16();\n this.primaryBChromaticity_y = stream.readUint16();\n this.whitePointChromaticity_x = stream.readUint16();\n this.whitePointChromaticity_y = stream.readUint16();\n this.luminanceMax = stream.readUint32();\n this.luminanceMin = stream.readUint32();\n});\n\n// file:src/parsing/smhd.js\nBoxParser.createFullBoxCtor(\"smhd\", \"SoundMediaHeaderBox\", function(stream) {\n\tthis.balance = stream.readUint16();\n\tstream.readUint16();\n});\n\n// file:src/parsing/ssix.js\nBoxParser.createFullBoxCtor(\"ssix\", \"CompressedSubsegmentIndexBox\", function(stream) {\n\tthis.subsegments = [];\n\tvar subsegment_count = stream.readUint32();\n\tfor (var i = 0; i < subsegment_count; i++) {\n\t\tvar subsegment = {};\n\t\tthis.subsegments.push(subsegment);\n\t\tsubsegment.ranges = [];\n\t\tvar range_count = stream.readUint32();\n\t\tfor (var j = 0; j < range_count; j++) {\n\t\t\tvar range = {};\n\t\t\tsubsegment.ranges.push(range);\n\t\t\trange.level = stream.readUint8();\n\t\t\trange.range_size = stream.readUint24();\n\t\t}\n\t}\n});\n\n// file:src/parsing/stco.js\nBoxParser.createFullBoxCtor(\"stco\", \"ChunkOffsetBox\", function(stream) {\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor (var i = 0; i < entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stdp.js\nBoxParser.createFullBoxCtor(\"stdp\", \"DegradationPriorityBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/2;\n\tthis.priority = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.priority[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/sthd.js\nBoxParser.createFullBoxCtor(\"sthd\", \"SubtitleMediaHeaderBox\");\n\n// file:src/parsing/stri.js\nBoxParser.createFullBoxCtor(\"stri\", \"SubTrackInformationBox\", function(stream) {\n\tthis.switch_group = stream.readUint16();\n\tthis.alternate_group = stream.readUint16();\n\tthis.sub_track_id = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 8)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsc.js\nBoxParser.createFullBoxCtor(\"stsc\", \"SampleToChunkBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.first_chunk = [];\n\tthis.samples_per_chunk = [];\n\tthis.sample_description_index = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.first_chunk.push(stream.readUint32());\n\t\t\tthis.samples_per_chunk.push(stream.readUint32());\n\t\t\tthis.sample_description_index.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsd.js\nBoxParser.createFullBoxCtor(\"stsd\", \"SampleDescriptionBox\", function(stream) {\n\tvar i;\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.entries = [];\n\tentryCount = stream.readUint32();\n\tfor (i = 1; i <= entryCount; i++) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (BoxParser[ret.type+\"SampleEntry\"]) {\n\t\t\t\tbox = new BoxParser[ret.type+\"SampleEntry\"](ret.size);\n\t\t\t\tbox.hdr_size = ret.hdr_size;\n\t\t\t\tbox.start = ret.start;\n\t\t\t} else {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown sample entry type: \"+ret.type);\n\t\t\t\tbox = new BoxParser.SampleEntry(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.SampleEntry.prototype.write) {\n\t\t\t\tLog.info(\"BoxParser\", \"SampleEntry \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsg.js\nBoxParser.createFullBoxCtor(\"stsg\", \"SubTrackSampleGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.group_description_index = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.group_description_index[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsh.js\nBoxParser.createFullBoxCtor(\"stsh\", \"ShadowSyncSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.shadowed_sample_numbers = [];\n\tthis.sync_sample_numbers = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.shadowed_sample_numbers.push(stream.readUint32());\n\t\t\tthis.sync_sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stss.js\nBoxParser.createFullBoxCtor(\"stss\", \"SyncSampleBox\", function(stream) {\n\tvar i;\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.sample_numbers = [];\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsz.js\nBoxParser.createFullBoxCtor(\"stsz\", \"SampleSizeBox\", function(stream) {\n\tvar i;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.sample_size = stream.readUint32();\n\t\tthis.sample_count = stream.readUint32();\n\t\tfor (i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.sample_size === 0) {\n\t\t\t\tthis.sample_sizes.push(stream.readUint32());\n\t\t\t} else {\n\t\t\t\tthis.sample_sizes[i] = this.sample_size;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/stts.js\nBoxParser.createFullBoxCtor(\"stts\", \"TimeToSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tvar delta;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_deltas = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tdelta = stream.readInt32();\n\t\t\tif (delta < 0) {\n\t\t\t\tLog.warn(\"BoxParser\", \"File uses negative stts sample delta, using value 1 instead, sync may be lost!\");\n\t\t\t\tdelta = 1;\n\t\t\t}\n\t\t\tthis.sample_deltas.push(delta);\n\t\t}\n\t}\n});\n\n// file:src/parsing/stvi.js\nBoxParser.createFullBoxCtor(\"stvi\", \"StereoVideoBox\", function(stream) {\n\tvar tmp32 = stream.readUint32();\n\tthis.single_view_allowed = tmp32 & 0x3;\n\tthis.stereo_scheme = stream.readUint32();\n\tvar length = stream.readUint32();\n\tthis.stereo_indication_type = stream.readString(length);\n\tvar ret;\n\tvar box;\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t\tthis[box.type] = box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/styp.js\nBoxParser.createBoxCtor(\"styp\", \"SegmentTypeBox\", function(stream) {\n\tBoxParser.ftypBox.prototype.parse.call(this, stream);\n});\n\n// file:src/parsing/stz2.js\nBoxParser.createFullBoxCtor(\"stz2\", \"CompactSampleSizeBox\", function(stream) {\n\tvar i;\n\tvar sample_size;\n\tvar sample_count;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.reserved = stream.readUint24();\n\t\tthis.field_size = stream.readUint8();\n\t\tsample_count = stream.readUint32();\n\t\tif (this.field_size === 4) {\n\t\t\tfor (i = 0; i < sample_count; i+=2) {\n\t\t\t\tvar tmp = stream.readUint8();\n\t\t\t\tthis.sample_sizes[i] = (tmp >> 4) & 0xF;\n\t\t\t\tthis.sample_sizes[i+1] = tmp & 0xF;\n\t\t\t}\n\t\t} else if (this.field_size === 8) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint8();\n\t\t\t}\n\t\t} else if (this.field_size === 16) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint16();\n\t\t\t}\n\t\t} else {\n\t\t\tLog.error(\"BoxParser\", \"Error in length field in stz2 box\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/subs.js\nBoxParser.createFullBoxCtor(\"subs\", \"SubSampleInformationBox\", function(stream) {\n\tvar i,j;\n\tvar entry_count;\n\tvar subsample_count;\n\tentry_count = stream.readUint32();\n\tthis.entries = [];\n\tfor (i = 0; i < entry_count; i++) {\n\t\tvar sampleInfo = {};\n\t\tthis.entries[i] = sampleInfo;\n\t\tsampleInfo.sample_delta = stream.readUint32();\n\t\tsampleInfo.subsamples = [];\n\t\tsubsample_count = stream.readUint16();\n\t\tif (subsample_count>0) {\n\t\t\tfor (j = 0; j < subsample_count; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsampleInfo.subsamples.push(subsample);\n\t\t\t\tif (this.version == 1) {\n\t\t\t\t\tsubsample.size = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tsubsample.size = stream.readUint16();\n\t\t\t\t}\n\t\t\t\tsubsample.priority = stream.readUint8();\n\t\t\t\tsubsample.discardable = stream.readUint8();\n\t\t\t\tsubsample.codec_specific_parameters = stream.readUint32();\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tenc.js\nBoxParser.createFullBoxCtor(\"tenc\", \"TrackEncryptionBox\", function(stream) {\n\tstream.readUint8(); // reserved\n\tif (this.version === 0) {\n\t\tstream.readUint8();\n\t} else {\n\t\tvar tmp = stream.readUint8();\n\t\tthis.default_crypt_byte_block = (tmp >> 4) & 0xF;\n\t\tthis.default_skip_byte_block = tmp & 0xF;\n\t}\n\tthis.default_isProtected = stream.readUint8();\n\tthis.default_Per_Sample_IV_Size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n\tif (this.default_isProtected === 1 && this.default_Per_Sample_IV_Size === 0) {\n\t\tthis.default_constant_IV_size = stream.readUint8();\n\t\tthis.default_constant_IV = stream.readUint8Array(this.default_constant_IV_size);\n\t}\n});// file:src/parsing/tfdt.js\nBoxParser.createFullBoxCtor(\"tfdt\", \"TrackFragmentBaseMediaDecodeTimeBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.baseMediaDecodeTime = stream.readUint64();\n\t} else {\n\t\tthis.baseMediaDecodeTime = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/tfhd.js\nBoxParser.createFullBoxCtor(\"tfhd\", \"TrackFragmentHeaderBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.track_id = stream.readUint32();\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET)) {\n\t\tthis.base_data_offset = stream.readUint64();\n\t\treadBytes += 8;\n\t} else {\n\t\tthis.base_data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC)) {\n\t\tthis.default_sample_description_index = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_description_index = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR)) {\n\t\tthis.default_sample_duration = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_duration = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE)) {\n\t\tthis.default_sample_size = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_size = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS)) {\n\t\tthis.default_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_flags = 0;\n\t}\n});\n\n// file:src/parsing/tfra.js\nBoxParser.createFullBoxCtor(\"tfra\", \"TrackFragmentRandomAccessBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tstream.readUint24();\n\tvar tmp_byte = stream.readUint8();\n\tthis.length_size_of_traf_num = (tmp_byte >> 4) & 0x3;\n\tthis.length_size_of_trun_num = (tmp_byte >> 2) & 0x3;\n\tthis.length_size_of_sample_num = (tmp_byte) & 0x3;\n\tthis.entries = [];\n\tvar number_of_entries = stream.readUint32();\n\tfor (var i = 0; i < number_of_entries; i++) {\n\t\tif (this.version === 1) {\n\t\t\tthis.time = stream.readUint64();\n\t\t\tthis.moof_offset = stream.readUint64();\n\t\t} else {\n\t\t\tthis.time = stream.readUint32();\n\t\t\tthis.moof_offset = stream.readUint32();\n\t\t}\n\t\tthis.traf_number = stream[\"readUint\"+(8*(this.length_size_of_traf_num+1))]();\n\t\tthis.trun_number = stream[\"readUint\"+(8*(this.length_size_of_trun_num+1))]();\n\t\tthis.sample_number = stream[\"readUint\"+(8*(this.length_size_of_sample_num+1))]();\n\t}\n});\n\n// file:src/parsing/tkhd.js\nBoxParser.createFullBoxCtor(\"tkhd\", \"TrackHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tstream.readUint32Array(2);\n\tthis.layer = stream.readInt16();\n\tthis.alternate_group = stream.readInt16();\n\tthis.volume = stream.readInt16()>>8;\n\tstream.readUint16();\n\tthis.matrix = stream.readInt32Array(9);\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});\n\n// file:src/parsing/tmax.js\nBoxParser.createBoxCtor(\"tmax\", \"hintmaxrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/tmin.js\nBoxParser.createBoxCtor(\"tmin\", \"hintminrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/totl.js\nBoxParser.createBoxCtor(\"totl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpay.js\nBoxParser.createBoxCtor(\"tpay\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpyl.js\nBoxParser.createBoxCtor(\"tpyl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/TrackGroup.js\nBoxParser.TrackGroupTypeBox.prototype.parse = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.track_group_id = stream.readUint32();\n}\n\n// file:src/parsing/trackgroups/msrc.js\nBoxParser.createTrackGroupCtor(\"msrc\");// file:src/parsing/TrakReference.js\nBoxParser.TrackReferenceTypeBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.TrackReferenceTypeBox.prototype = new BoxParser.Box();\nBoxParser.TrackReferenceTypeBox.prototype.parse = function(stream) {\n\tthis.track_ids = stream.readUint32Array((this.size-this.hdr_size)/4);\n}\n\n// file:src/parsing/tref.js\nBoxParser.trefBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = new BoxParser.TrackReferenceTypeBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.info(\"BoxParser\", \"TrackReference \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\n// file:src/parsing/trep.js\nBoxParser.createFullBoxCtor(\"trep\", \"TrackExtensionPropertiesBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/trex.js\nBoxParser.createFullBoxCtor(\"trex\", \"TrackExtendsBox\", function(stream) {\n\tthis.track_id = stream.readUint32();\n\tthis.default_sample_description_index = stream.readUint32();\n\tthis.default_sample_duration = stream.readUint32();\n\tthis.default_sample_size = stream.readUint32();\n\tthis.default_sample_flags = stream.readUint32();\n});\n\n// file:src/parsing/trpy.js\nBoxParser.createBoxCtor(\"trpy\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/trun.js\nBoxParser.createFullBoxCtor(\"trun\", \"TrackRunBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.sample_count = stream.readUint32();\n\treadBytes+= 4;\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ) {\n\t\tthis.data_offset = stream.readInt32(); //signed\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) ) {\n\t\tthis.first_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.first_sample_flags = 0;\n\t}\n\tthis.sample_duration = [];\n\tthis.sample_size = [];\n\tthis.sample_flags = [];\n\tthis.sample_composition_time_offset = [];\n\tif (this.size - this.hdr_size > readBytes) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\tthis.sample_duration[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\tthis.sample_size[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\tthis.sample_flags[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\tif (this.version === 0) {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readInt32(); //signed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tsel.js\nBoxParser.createFullBoxCtor(\"tsel\", \"TrackSelectionBox\", function(stream) {\n\tthis.switch_group = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 4)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/txtC.js\nBoxParser.createFullBoxCtor(\"txtC\", \"TextConfigBox\", function(stream) {\n\tthis.config = stream.readCString();\n});\n\n// file:src/parsing/tyco.js\nBoxParser.createBoxCtor(\"tyco\", \"TypeCombinationBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size) / 4;\n\tthis.compatible_brands = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t}\n});\n\n// file:src/parsing/udes.js\nBoxParser.createFullBoxCtor(\"udes\", \"UserDescriptionProperty\", function(stream) {\n\tthis.lang = stream.readCString();\n\tthis.name = stream.readCString();\n\tthis.description = stream.readCString();\n\tthis.tags = stream.readCString();\n});\n\n// file:src/parsing/uncC.js\nBoxParser.createFullBoxCtor(\"uncC\", \"UncompressedFrameConfigBox\", function(stream) {\n var i;\n this.profile = stream.readString(4);\n if (this.version == 1) {\n // Nothing - just the profile\n } else if (this.version == 0) {\n this.component_count = stream.readUint32();\n this.component_index = [];\n this.component_bit_depth_minus_one = [];\n this.component_format = [];\n this.component_align_size = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n this.component_bit_depth_minus_one.push(stream.readUint8());\n this.component_format.push(stream.readUint8());\n this.component_align_size.push(stream.readUint8());\n }\n this.sampling_type = stream.readUint8();\n this.interleave_type = stream.readUint8();\n this.block_size = stream.readUint8();\n var flags = stream.readUint8();\n this.component_little_endian = (flags >> 7) & 0x1;\n this.block_pad_lsb = (flags >> 6) & 0x1;\n this.block_little_endian = (flags >> 5) & 0x1;\n this.block_reversed = (flags >> 4) & 0x1;\n this.pad_unknown = (flags >> 3) & 0x1;\n this.pixel_size = stream.readUint32();\n this.row_align_size = stream.readUint32();\n this.tile_align_size = stream.readUint32();\n this.num_tile_cols_minus_one = stream.readUint32();\n this.num_tile_rows_minus_one = stream.readUint32();\n }\n});\n\n// file:src/parsing/url.js\nBoxParser.createFullBoxCtor(\"url \", \"DataEntryUrlBox\", function(stream) {\n\tif (this.flags !== 0x000001) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/urn.js\nBoxParser.createFullBoxCtor(\"urn \", \"DataEntryUrnBox\", function(stream) {\n\tthis.name = stream.readCString();\n\tif (this.size - this.hdr_size - this.name.length - 1 > 0) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffLsm.js\nBoxParser.createUUIDBox(\"a5d40b30e81411ddba2f0800200c9a66\", \"LiveServerManifestBox\", true, false, function(stream) {\n this.LiveServerManifest = stream.readString(this.size - this.hdr_size)\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#039;\");\n});// file:src/parsing/uuid/piff/piffPssh.js\nBoxParser.createUUIDBox(\"d08a4f1810f34a82b6c832d8aba183d3\", \"PiffProtectionSystemSpecificHeaderBox\", true, false, function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffSenc.js\nBoxParser.createUUIDBox(\"a2394f525a9b4f14a2446c427c648df4\", \"PiffSampleEncryptionBox\", true, false /*, function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.AlgorithmID = stream.readUint24();\n\t\tthis.IV_size = stream.readUint8();\n\t\tthis.KID = BoxParser.parseHex16(stream);\n\t}\n\tvar sample_count = stream.readUint32();\n\tthis.samples = [];\n\tfor (var i = 0; i < sample_count; i++) {\n\t\tvar sample = {};\n\t\tsample.InitializationVector = this.readUint8Array(this.IV_size*8);\n\t\tif (this.flags & 0x2) {\n\t\t\tsample.subsamples = [];\n\t\t\tsample.NumberOfEntries = stream.readUint16();\n\t\t\tfor (var j = 0; j < sample.NumberOfEntries; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\n\t\t\t\tsample.subsamples.push(subsample);\n\t\t\t}\n\t\t}\n\t\tthis.samples.push(sample);\n\t}\n}*/);\n// file:src/parsing/uuid/piff/piffTenc.js\nBoxParser.createUUIDBox(\"8974dbce7be74c5184f97148f9882554\", \"PiffTrackEncryptionBox\", true, false, function(stream) {\n\tthis.default_AlgorithmID = stream.readUint24();\n\tthis.default_IV_size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n});// file:src/parsing/uuid/piff/piffTfrf.js\nBoxParser.createUUIDBox(\"d4807ef2ca3946958e5426cb9e46a79f\", \"TfrfBox\", true, false, function(stream) {\n this.fragment_count = stream.readUint8();\n this.entries = [];\n\n for (var i = 0; i < this.fragment_count; i++) {\n var entry = {};\n var absolute_time = 0;\n var absolute_duration = 0;\n\n if (this.version === 1) {\n absolute_time = stream.readUint64();\n absolute_duration = stream.readUint64();\n } else {\n absolute_time = stream.readUint32();\n absolute_duration = stream.readUint32();\n }\n\n entry.absolute_time = absolute_time;\n entry.absolute_duration = absolute_duration;\n\n this.entries.push(entry);\n }\n});// file:src/parsing/uuid/piff/piffTfxd.js\nBoxParser.createUUIDBox(\"6d1d9b0542d544e680e2141daff757b2\", \"TfxdBox\", true, false, function(stream) {\n if (this.version === 1) {\n this.absolute_time = stream.readUint64();\n this.duration = stream.readUint64();\n } else {\n this.absolute_time = stream.readUint32();\n this.duration = stream.readUint32();\n }\n});// file:src/parsing/vmhd.js\nBoxParser.createFullBoxCtor(\"vmhd\", \"VideoMediaHeaderBox\", function(stream) {\n\tthis.graphicsmode = stream.readUint16();\n\tthis.opcolor = stream.readUint16Array(3);\n});\n\n// file:src/parsing/vpcC.js\nBoxParser.createFullBoxCtor(\"vpcC\", \"VPCodecConfigurationRecord\", function (stream) {\n\tvar tmp;\n\tif (this.version === 1) {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = tmp >> 4;\n\t\tthis.chromaSubsampling = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.colourPrimaries = stream.readUint8();\n\t\tthis.transferCharacteristics = stream.readUint8();\n\t\tthis.matrixCoefficients = stream.readUint8();\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t} else {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = (tmp >> 4) & 0xF;\n\t\tthis.colorSpace = tmp & 0xF;\n\t\ttmp = stream.readUint8();\n\t\tthis.chromaSubsampling = (tmp >> 4) & 0xF;\n\t\tthis.transferFunction = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t}\n});// file:src/parsing/vttC.js\nBoxParser.createBoxCtor(\"vttC\", \"WebVTTConfigurationBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/vvcC.js\nBoxParser.createFullBoxCtor(\"vvcC\", \"VvcConfigurationBox\", function (stream) {\n var i, j;\n\n // helper object to simplify extracting individual bits\n var bitReader = {\n held_bits: undefined,\n num_held_bits: 0,\n\n stream_read_1_bytes: function (strm) {\n this.held_bits = strm.readUint8();\n this.num_held_bits = 1 * 8;\n },\n stream_read_2_bytes: function (strm) {\n this.held_bits = strm.readUint16();\n this.num_held_bits = 2 * 8;\n },\n\n extract_bits: function (num_bits) {\n var ret = (this.held_bits >> (this.num_held_bits - num_bits)) & ((1 << num_bits) - 1);\n this.num_held_bits -= num_bits;\n return ret;\n }\n };\n\n // VvcDecoderConfigurationRecord\n bitReader.stream_read_1_bytes(stream);\n bitReader.extract_bits(5); // reserved\n this.lengthSizeMinusOne = bitReader.extract_bits(2);\n this.ptl_present_flag = bitReader.extract_bits(1);\n\n if (this.ptl_present_flag) {\n bitReader.stream_read_2_bytes(stream);\n this.ols_idx = bitReader.extract_bits(9);\n this.num_sublayers = bitReader.extract_bits(3);\n this.constant_frame_rate = bitReader.extract_bits(2);\n this.chroma_format_idc = bitReader.extract_bits(2);\n\n bitReader.stream_read_1_bytes(stream);\n this.bit_depth_minus8 = bitReader.extract_bits(3);\n bitReader.extract_bits(5); // reserved\n\n // VvcPTLRecord\n {\n bitReader.stream_read_2_bytes(stream);\n bitReader.extract_bits(2); // reserved\n this.num_bytes_constraint_info = bitReader.extract_bits(6);\n this.general_profile_idc = bitReader.extract_bits(7);\n this.general_tier_flag = bitReader.extract_bits(1);\n\n this.general_level_idc = stream.readUint8();\n\n bitReader.stream_read_1_bytes(stream);\n this.ptl_frame_only_constraint_flag = bitReader.extract_bits(1);\n this.ptl_multilayer_enabled_flag = bitReader.extract_bits(1);\n\n this.general_constraint_info = new Uint8Array(this.num_bytes_constraint_info);\n if (this.num_bytes_constraint_info) {\n for (i = 0; i < this.num_bytes_constraint_info - 1; i++) {\n var cnstr1 = bitReader.extract_bits(6);\n bitReader.stream_read_1_bytes(stream);\n var cnstr2 = bitReader.extract_bits(2);\n\n this.general_constraint_info[i] = ((cnstr1 << 2) | cnstr2);\n }\n this.general_constraint_info[this.num_bytes_constraint_info - 1] = bitReader.extract_bits(6);\n } else {\n //forbidden in spec!\n bitReader.extract_bits(6);\n }\n\n if (this.num_sublayers > 1) {\n bitReader.stream_read_1_bytes(stream);\n this.ptl_sublayer_present_mask = 0;\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n var val = bitReader.extract_bits(1);\n this.ptl_sublayer_present_mask |= val << j;\n }\n for (j = this.num_sublayers; j <= 8 && this.num_sublayers > 1; ++j) {\n bitReader.extract_bits(1); // ptl_reserved_zero_bit\n }\n\n this.sublayer_level_idc = [];\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n if (this.ptl_sublayer_present_mask & (1 << j)) {\n this.sublayer_level_idc[j] = stream.readUint8();\n }\n }\n }\n\n this.ptl_num_sub_profiles = stream.readUint8();\n this.general_sub_profile_idc = [];\n if (this.ptl_num_sub_profiles) {\n for (i = 0; i < this.ptl_num_sub_profiles; i++) {\n this.general_sub_profile_idc.push(stream.readUint32());\n }\n }\n } // end VvcPTLRecord\n\n this.max_picture_width = stream.readUint16();\n this.max_picture_height = stream.readUint16();\n this.avg_frame_rate = stream.readUint16();\n }\n\n var VVC_NALU_OPI = 12;\n var VVC_NALU_DEC_PARAM = 13;\n\n this.nalu_arrays = [];\n var num_of_arrays = stream.readUint8();\n for (i = 0; i < num_of_arrays; i++) {\n var nalu_array = [];\n this.nalu_arrays.push(nalu_array);\n\n bitReader.stream_read_1_bytes(stream);\n nalu_array.completeness = bitReader.extract_bits(1);\n bitReader.extract_bits(2); // reserved\n nalu_array.nalu_type = bitReader.extract_bits(5);\n\n var numNalus = 1;\n if (nalu_array.nalu_type != VVC_NALU_DEC_PARAM && nalu_array.nalu_type != VVC_NALU_OPI) {\n numNalus = stream.readUint16();\n }\n\n for (j = 0; j < numNalus; j++) {\n var len = stream.readUint16();\n nalu_array.push({\n data: stream.readUint8Array(len),\n length: len\n });\n }\n }\n});\n// file:src/parsing/vvnC.js\nBoxParser.createFullBoxCtor(\"vvnC\", \"VvcNALUConfigBox\", function (stream) {\n // VvcNALUConfigBox\n var tmp = strm.readUint8();\n this.lengthSizeMinusOne = (tmp & 0x3);\n});\n// file:src/box-codecs.js\nBoxParser.SampleEntry.prototype.isVideo = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isAudio = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isSubtitle = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isMetadata = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isHint = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.getCodec = function() {\n\treturn this.type.replace('.','');\n}\n\nBoxParser.SampleEntry.prototype.getWidth = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getHeight = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getChannelCount = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleRate = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleSize = function() {\n\treturn \"\";\n}\n\nBoxParser.VisualSampleEntry.prototype.isVideo = function() {\n\treturn true;\n}\n\nBoxParser.VisualSampleEntry.prototype.getWidth = function() {\n\treturn this.width;\n}\n\nBoxParser.VisualSampleEntry.prototype.getHeight = function() {\n\treturn this.height;\n}\n\nBoxParser.AudioSampleEntry.prototype.isAudio = function() {\n\treturn true;\n}\n\nBoxParser.AudioSampleEntry.prototype.getChannelCount = function() {\n\treturn this.channel_count;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleRate = function() {\n\treturn this.samplerate;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleSize = function() {\n\treturn this.samplesize;\n}\n\nBoxParser.SubtitleSampleEntry.prototype.isSubtitle = function() {\n\treturn true;\n}\n\nBoxParser.MetadataSampleEntry.prototype.isMetadata = function() {\n\treturn true;\n}\n\n\nBoxParser.decimalToHex = function(d, padding) {\n\tvar hex = Number(d).toString(16);\n\tpadding = typeof (padding) === \"undefined\" || padding === null ? padding = 2 : padding;\n\twhile (hex.length < padding) {\n\t\thex = \"0\" + hex;\n\t}\n\treturn hex;\n}\n\nBoxParser.avc1SampleEntry.prototype.getCodec =\nBoxParser.avc2SampleEntry.prototype.getCodec =\nBoxParser.avc3SampleEntry.prototype.getCodec =\nBoxParser.avc4SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.avcC) {\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.profile_compatibility)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.AVCLevelIndication);\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.hev1SampleEntry.prototype.getCodec =\nBoxParser.hvc1SampleEntry.prototype.getCodec = function() {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.hvcC) {\n\t\tbaseCodec += '.';\n\t\tswitch (this.hvcC.general_profile_space) {\n\t\t\tcase 0:\n\t\t\t\tbaseCodec += '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tbaseCodec += 'A';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbaseCodec += 'B';\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbaseCodec += 'C';\n\t\t\t\tbreak;\n\t\t}\n\t\tbaseCodec += this.hvcC.general_profile_idc;\n\t\tbaseCodec += '.';\n\t\tvar val = this.hvcC.general_profile_compatibility;\n\t\tvar reversed = 0;\n\t\tfor (i=0; i<32; i++) {\n\t\t\treversed |= val & 1;\n\t\t\tif (i==31) break;\n\t\t\treversed <<= 1;\n\t\t\tval >>=1;\n\t\t}\n\t\tbaseCodec += BoxParser.decimalToHex(reversed, 0);\n\t\tbaseCodec += '.';\n\t\tif (this.hvcC.general_tier_flag === 0) {\n\t\t\tbaseCodec += 'L';\n\t\t} else {\n\t\t\tbaseCodec += 'H';\n\t\t}\n\t\tbaseCodec += this.hvcC.general_level_idc;\n\t\tvar hasByte = false;\n\t\tvar constraint_string = \"\";\n\t\tfor (i = 5; i >= 0; i--) {\n\t\t\tif (this.hvcC.general_constraint_indicator[i] || hasByte) {\n\t\t\t\tconstraint_string = \".\"+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i], 0)+constraint_string;\n\t\t\t\thasByte = true;\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.vvc1SampleEntry.prototype.getCodec =\nBoxParser.vvi1SampleEntry.prototype.getCodec = function () {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.vvcC) {\n\t\tbaseCodec += '.' + this.vvcC.general_profile_idc;\n\t\tif (this.vvcC.general_tier_flag) {\n\t\t\tbaseCodec += '.H';\n\t\t} else {\n\t\t\tbaseCodec += '.L';\n\t\t}\n\t\tbaseCodec += this.vvcC.general_level_idc;\n\n\t\tvar constraint_string = \"\";\n\t\tif (this.vvcC.general_constraint_info) {\n\t\t\tvar bytes = [];\n\t\t\tvar byte = 0;\n\t\t\tbyte |= this.vvcC.ptl_frame_only_constraint << 7;\n\t\t\tbyte |= this.vvcC.ptl_multilayer_enabled << 6;\n\t\t\tvar last_nonzero;\n\t\t\tfor (i = 0; i < this.vvcC.general_constraint_info.length; ++i) {\n\t\t\t\tbyte |= (this.vvcC.general_constraint_info[i] >> 2) & 0x3f;\n\t\t\t\tbytes.push(byte);\n\t\t\t\tif (byte) {\n\t\t\t\t\tlast_nonzero = i;\n\t\t\t\t}\n\n\t\t\t\tbyte = (this.vvcC.general_constraint_info[i] >> 2) & 0x03;\n\t\t\t}\n\n\t\t\tif (last_nonzero === undefined) {\n\t\t\t\tconstraint_string = \".CA\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint_string = \".C\"\n\t\t\t\tvar base32_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\t\t\t\tvar held_bits = 0;\n\t\t\t\tvar num_held_bits = 0;\n\t\t\t\tfor (i = 0; i <= last_nonzero; ++i) {\n\t\t\t\t\theld_bits = (held_bits << 8) | bytes[i];\n\t\t\t\t\tnum_held_bits += 8;\n\n\t\t\t\t\twhile (num_held_bits >= 5) {\n\t\t\t\t\t\tvar val = (held_bits >> (num_held_bits - 5)) & 0x1f;\n\t\t\t\t\t\tconstraint_string += base32_chars[val];\n\n\t\t\t\t\t\tnum_held_bits -= 5;\n\t\t\t\t\t\theld_bits &= (1 << num_held_bits) - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_held_bits) {\n\t\t\t\t\theld_bits <<= (5 - num_held_bits); // right-pad with zeros to 5 bits (is this correct?)\n\t\t\t\t\tconstraint_string += base32_chars[held_bits & 0x1f];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.mp4aSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.esds && this.esds.esd) {\n\t\tvar oti = this.esds.esd.getOTI();\n\t\tvar dsi = this.esds.esd.getAudioConfig();\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(oti)+(dsi ? \".\"+dsi: \"\");\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.stxtSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif(this.mime_format) {\n\t\treturn baseCodec + \".\" + this.mime_format;\n\t} else {\n\t\treturn baseCodec\n\t}\n}\n\nBoxParser.vp08SampleEntry.prototype.getCodec =\nBoxParser.vp09SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.vpcC.level;\n\tif (level == 0) {\n\t\tlevel = \"00\";\n\t}\n\tvar bitDepth = this.vpcC.bitDepth;\n\tif (bitDepth == 8) {\n\t\tbitDepth = \"08\";\n\t}\n\treturn baseCodec + \".0\" + this.vpcC.profile + \".\" + level + \".\" + bitDepth;\n}\n\nBoxParser.av01SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.av1C.seq_level_idx_0;\n\tif (level < 10) {\n\t\tlevel = \"0\" + level;\n\t}\n\tvar bitdepth;\n\tif (this.av1C.seq_profile === 2 && this.av1C.high_bitdepth === 1) {\n\t\tbitdepth = (this.av1C.twelve_bit === 1) ? \"12\" : \"10\";\n\t} else if ( this.av1C.seq_profile <= 2 ) {\n\t\tbitdepth = (this.av1C.high_bitdepth === 1) ? \"10\" : \"08\";\n\t}\n\t// TODO need to parse the SH to find color config\n\treturn baseCodec+\".\"+this.av1C.seq_profile+\".\"+level+(this.av1C.seq_tier_0?\"H\":\"M\")+\".\"+bitdepth;//+\".\"+this.av1C.monochrome+\".\"+this.av1C.chroma_subsampling_x+\"\"+this.av1C.chroma_subsampling_y+\"\"+this.av1C.chroma_sample_position;\n}\n// file:src/box-write.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.writeHeader = function(stream, msg) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\tLog.debug(\"BoxWriter\", \"Writing box \"+this.type+\" of size: \"+this.size+\" at position \"+stream.getPosition()+(msg || \"\"));\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint32(1);\n\t} else {\n\t\tthis.sizePosition = stream.getPosition();\n\t\tstream.writeUint32(this.size);\n\t}\n\tstream.writeString(this.type, null, 4);\n\tif (this.type === \"uuid\") {\n\t\tstream.writeUint8Array(this.uuid);\n\t}\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint64(this.size);\n\t} \n}\n\nBoxParser.FullBox.prototype.writeHeader = function(stream) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream, \" v=\"+this.version+\" f=\"+this.flags);\n\tstream.writeUint8(this.version);\n\tstream.writeUint24(this.flags);\n}\n\nBoxParser.Box.prototype.write = function(stream) {\n\tif (this.type === \"mdat\") {\n\t\t/* TODO: fix this */\n\t\tif (this.data) {\n\t\t\tthis.size = this.data.length;\n\t\t\tthis.writeHeader(stream);\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t} else {\n\t\tthis.size = (this.data ? this.data.length : 0);\n\t\tthis.writeHeader(stream);\n\t\tif (this.data) {\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t}\n}\n\nBoxParser.ContainerBox.prototype.write = function(stream) {\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].write(stream);\n\t\t\tthis.size += this.boxes[i].size;\n\t\t}\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\nBoxParser.TrackReferenceTypeBox.prototype.write = function(stream) {\n\tthis.size = this.track_ids.length*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32Array(this.track_ids);\n}\n\n// file:src/writing/avcC.js\nBoxParser.avcCBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.size = 7;\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tthis.size += 2+this.SPS[i].length;\n\t}\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tthis.size += 2+this.PPS[i].length;\n\t}\n\tif (this.ext) {\n\t\tthis.size += this.ext.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint8(this.configurationVersion);\n\tstream.writeUint8(this.AVCProfileIndication);\n\tstream.writeUint8(this.profile_compatibility);\n\tstream.writeUint8(this.AVCLevelIndication);\n\tstream.writeUint8(this.lengthSizeMinusOne + (63<<2));\n\tstream.writeUint8(this.SPS.length + (7<<5));\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tstream.writeUint16(this.SPS[i].length);\n\t\tstream.writeUint8Array(this.SPS[i].nalu);\n\t}\n\tstream.writeUint8(this.PPS.length);\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tstream.writeUint16(this.PPS[i].length);\n\t\tstream.writeUint8Array(this.PPS[i].nalu);\n\t}\n\tif (this.ext) {\n\t\tstream.writeUint8Array(this.ext);\n\t}\n}\n\n// file:src/writing/co64.js\nBoxParser.co64Box.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tfor(i=0; i<this.chunk_offsets.length; i++) {\n\t\tstream.writeUint64(this.chunk_offsets[i]);\n\t}\n}\n\n// file:src/writing/cslg.js\nBoxParser.cslgBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeInt32(this.compositionToDTSShift);\n\tstream.writeInt32(this.leastDecodeToDisplayDelta);\n\tstream.writeInt32(this.greatestDecodeToDisplayDelta);\n\tstream.writeInt32(this.compositionStartTime);\n\tstream.writeInt32(this.compositionEndTime);\n}\n\n// file:src/writing/ctts.js\nBoxParser.cttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tif (this.version === 1) {\n\t\t\tstream.writeInt32(this.sample_offsets[i]); /* signed */\n\t\t} else {\t\t\t\n\t\t\tstream.writeUint32(this.sample_offsets[i]); /* unsigned */\n\t\t}\n\t}\n}\n\n// file:src/writing/dref.js\nBoxParser.drefBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4; //\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\t\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/elng.js\nBoxParser.elngBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.extended_language.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.extended_language);\n}\n\n// file:src/writing/elst.js\nBoxParser.elstBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4+12*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeUint32(entry.segment_duration);\n\t\tstream.writeInt32(entry.media_time);\n\t\tstream.writeInt16(entry.media_rate_integer);\n\t\tstream.writeInt16(entry.media_rate_fraction);\n\t}\n}\n\n// file:src/writing/emsg.js\nBoxParser.emsgBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.scheme_id_uri);\n\tstream.writeCString(this.value);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.presentation_time_delta);\n\tstream.writeUint32(this.event_duration);\n\tstream.writeUint32(this.id);\n\tstream.writeUint8Array(this.message_data);\n}\n\n// file:src/writing/ftyp.js\nBoxParser.ftypBox.prototype.write = function(stream) {\n\tthis.size = 8+4*this.compatible_brands.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.major_brand, null, 4);\n\tstream.writeUint32(this.minor_version);\n\tfor (var i = 0; i < this.compatible_brands.length; i++) {\n\t\tstream.writeString(this.compatible_brands[i], null, 4);\n\t}\n}\n\n// file:src/writing/hdlr.js\nBoxParser.hdlrBox.prototype.write = function(stream) {\n\tthis.size = 5*4+this.name.length+1;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(0);\n\tstream.writeString(this.handler, null, 4);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeCString(this.name);\n}\n\n// file:src/writing/hvcC.js\nBoxParser.hvcCBox.prototype.write = function(stream) {\n var i,j;\n this.size = 23;\n\n for (i = 0; i < this.nalu_arrays.length; i++) {\n this.size += 3;\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n this.size += 2 + this.nalu_arrays[i][j].data.length;\n }\n }\n\n this.writeHeader(stream);\n\n stream.writeUint8(this.configurationVersion);\n stream.writeUint8((this.general_profile_space << 6) +\n (this.general_tier_flag << 5) +\n this.general_profile_idc);\n stream.writeUint32(this.general_profile_compatibility);\n stream.writeUint8Array(this.general_constraint_indicator);\n stream.writeUint8(this.general_level_idc);\n stream.writeUint16(this.min_spatial_segmentation_idc + (15<<24));\n stream.writeUint8(this.parallelismType + (63<<2));\n stream.writeUint8(this.chroma_format_idc + (63<<2));\n stream.writeUint8(this.bit_depth_luma_minus8 + (31<<3));\n stream.writeUint8(this.bit_depth_chroma_minus8 + (31<<3));\n stream.writeUint16(this.avgFrameRate);\n stream.writeUint8((this.constantFrameRate<<6) +\n (this.numTemporalLayers<<3) +\n (this.temporalIdNested<<2) +\n this.lengthSizeMinusOne);\n stream.writeUint8(this.nalu_arrays.length);\n for (i = 0; i < this.nalu_arrays.length; i++) {\n // bit(1) array_completeness + bit(1) reserved = 0 + bit(6) nal_unit_type\n stream.writeUint8((this.nalu_arrays[i].completeness<<7) +\n this.nalu_arrays[i].nalu_type);\n stream.writeUint16(this.nalu_arrays[i].length);\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n stream.writeUint16(this.nalu_arrays[i][j].data.length);\n stream.writeUint8Array(this.nalu_arrays[i][j].data);\n }\n }\n}\n// file:src/writing/kind.js\nBoxParser.kindBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = (this.schemeURI.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.schemeURI);\n\tstream.writeCString(this.value);\n}\n\n// file:src/writing/mdhd.js\nBoxParser.mdhdBox.prototype.write = function(stream) {\n\tthis.size = 4*4+2*2;\n\tthis.flags = 0;\n\tthis.version = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint16(this.language);\n\tstream.writeUint16(0);\n}\n\n// file:src/writing/mehd.js\nBoxParser.mehdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.fragment_duration);\n}\n\n// file:src/writing/mfhd.js\nBoxParser.mfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sequence_number);\n}\n\n// file:src/writing/mvhd.js\nBoxParser.mvhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 23*4+2*2;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(this.rate);\n\tstream.writeUint16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32Array(this.matrix);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.next_track_id);\n}\n\n// file:src/writing/sampleentry.js\nBoxParser.SampleEntry.prototype.writeHeader = function(stream) {\n\tthis.size = 8;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint16(this.data_reference_index);\n}\n\nBoxParser.SampleEntry.prototype.writeFooter = function(stream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(stream);\n\t\tthis.size += this.boxes[i].size;\n\t}\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.SampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tstream.writeUint8Array(this.data);\n\tthis.size += this.data.length;\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.VisualSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*7+6*4+32;\n\tstream.writeUint16(0); \n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.width);\n\tstream.writeUint16(this.height);\n\tstream.writeUint32(this.horizresolution);\n\tstream.writeUint32(this.vertresolution);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.frame_count);\n\tstream.writeUint8(Math.min(31, this.compressorname.length));\n\tstream.writeString(this.compressorname, null, 31);\n\tstream.writeUint16(this.depth);\n\tstream.writeInt16(-1);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.AudioSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*4+3*4;\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.channel_count);\n\tstream.writeUint16(this.samplesize);\n\tstream.writeUint16(0);\n\tstream.writeUint16(0);\n\tstream.writeUint32(this.samplerate<<16);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.stppSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += this.namespace.length+1+\n\t\t\t\t this.schema_location.length+1+\n\t\t\t\t this.auxiliary_mime_types.length+1;\n\tstream.writeCString(this.namespace);\n\tstream.writeCString(this.schema_location);\n\tstream.writeCString(this.auxiliary_mime_types);\n\tthis.writeFooter(stream);\n}\n\n// file:src/writing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.write = function(stream) {\n\tstream.writeUint8Array(this.data);\n}\n\n// file:src/writing/sbgp.js\nBoxParser.sbgpBox.prototype.write = function(stream) {\n\tthis.version = 1;\t\n\tthis.flags = 0;\n\tthis.size = 12+8*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tstream.writeUint32(this.grouping_type_parameter);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeInt32(entry.sample_count);\n\t\tstream.writeInt32(entry.group_description_index);\n\t}\n}\n\n// file:src/writing/sgpd.js\nBoxParser.sgpdBox.prototype.write = function(stream) {\n\tvar i;\n\tvar entry;\n\t// leave version as read\n\t// this.version;\n\tthis.flags = 0;\n\tthis.size = 12;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tthis.size += 4;\n\t\t\t}\n\t\t\tthis.size += entry.data.length;\n\t\t}\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tif (this.version === 1) {\n\t\tstream.writeUint32(this.default_length);\n\t}\n\tif (this.version >= 2) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tstream.writeUint32(this.entries.length);\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tstream.writeUint32(entry.description_length);\n\t\t\t}\n\t\t}\n\t\tentry.write(stream);\n\t}\n}\n\n\n// file:src/writing/sidx.js\nBoxParser.sidxBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+2+2+12*this.references.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.reference_ID);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.earliest_presentation_time);\n\tstream.writeUint32(this.first_offset);\n\tstream.writeUint16(0);\n\tstream.writeUint16(this.references.length);\n\tfor (var i = 0; i < this.references.length; i++) {\n\t\tvar ref = this.references[i];\n\t\tstream.writeUint32(ref.reference_type << 31 | ref.referenced_size);\n\t\tstream.writeUint32(ref.subsegment_duration);\n\t\tstream.writeUint32(ref.starts_with_SAP << 31 | ref.SAP_type << 28 | ref.SAP_delta_time);\n\t}\n}\n\n// file:src/writing/smhd.js\nBoxParser.smhdBox.prototype.write = function(stream) {\n var i;\n this.version = 0;\n this.flags = 1;\n this.size = 4;\n this.writeHeader(stream);\n stream.writeUint16(this.balance);\n stream.writeUint16(0);\n}\n// file:src/writing/stco.js\nBoxParser.stcoBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tstream.writeUint32Array(this.chunk_offsets);\n}\n\n// file:src/writing/stsc.js\nBoxParser.stscBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+12*this.first_chunk.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.first_chunk.length);\n\tfor(i=0; i<this.first_chunk.length; i++) {\n\t\tstream.writeUint32(this.first_chunk[i]);\n\t\tstream.writeUint32(this.samples_per_chunk[i]);\n\t\tstream.writeUint32(this.sample_description_index[i]);\n\t}\n}\n\n// file:src/writing/stsd.js\nBoxParser.stsdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tthis.size += 4;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/stsh.js\nBoxParser.stshBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.shadowed_sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.shadowed_sample_numbers.length);\n\tfor(i=0; i<this.shadowed_sample_numbers.length; i++) {\n\t\tstream.writeUint32(this.shadowed_sample_numbers[i]);\n\t\tstream.writeUint32(this.sync_sample_numbers[i]);\n\t}\n}\n\n// file:src/writing/stss.js\nBoxParser.stssBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_numbers.length);\n\tstream.writeUint32Array(this.sample_numbers);\n}\n\n// file:src/writing/stsz.js\nBoxParser.stszBox.prototype.write = function(stream) {\n\tvar i;\n\tvar constant = true;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tif (this.sample_sizes.length > 0) {\n\t\ti = 0;\n\t\twhile (i+1 < this.sample_sizes.length) {\n\t\t\tif (this.sample_sizes[i+1] !== this.sample_sizes[0]) {\n\t\t\t\tconstant = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconstant = false;\n\t}\n\tthis.size = 8;\n\tif (!constant) {\n\t\tthis.size += 4*this.sample_sizes.length;\n\t}\n\tthis.writeHeader(stream);\n\tif (!constant) {\n\t\tstream.writeUint32(0);\n\t} else {\n\t\tstream.writeUint32(this.sample_sizes[0]);\n\t}\n\tstream.writeUint32(this.sample_sizes.length);\n\tif (!constant) {\n\t\tstream.writeUint32Array(this.sample_sizes);\n\t}\t\n}\n\n// file:src/writing/stts.js\nBoxParser.sttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tstream.writeUint32(this.sample_deltas[i]);\n\t}\n}\n\n// file:src/writing/tfdt.js\nBoxParser.tfdtBox.prototype.write = function(stream) {\n\tvar UINT32_MAX = Math.pow(2, 32) - 1;\n\t// use version 1 if baseMediaDecodeTime does not fit 32 bits\n\tthis.version = this.baseMediaDecodeTime > UINT32_MAX ? 1 : 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tif (this.version === 1) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.version === 1) {\n\t\tstream.writeUint64(this.baseMediaDecodeTime);\n\t} else {\n\t\tstream.writeUint32(this.baseMediaDecodeTime);\n\t}\n}\n\n// file:src/writing/tfhd.js\nBoxParser.tfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tthis.size += 8;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tstream.writeUint64(this.base_data_offset);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tstream.writeUint32(this.default_sample_duration);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tstream.writeUint32(this.default_sample_size);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tstream.writeUint32(this.default_sample_flags);\n\t}\n}\n\n// file:src/writing/tkhd.js\nBoxParser.tkhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\t//this.flags = 0;\n\tthis.size = 4*18+2*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeInt16(this.layer);\n\tstream.writeInt16(this.alternate_group);\n\tstream.writeInt16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeInt32Array(this.matrix);\n\tstream.writeUint32(this.width);\n\tstream.writeUint32(this.height);\n}\n\n// file:src/writing/trex.js\nBoxParser.trexBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(this.default_sample_description_index);\n\tstream.writeUint32(this.default_sample_duration);\n\tstream.writeUint32(this.default_sample_size);\n\tstream.writeUint32(this.default_sample_flags);\n}\n\n// file:src/writing/trun.js\nBoxParser.trunBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\tthis.size += 4*this.sample_duration.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\tthis.size += 4*this.sample_size.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\tthis.size += 4*this.sample_flags.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\tthis.size += 4*this.sample_composition_time_offset.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_count);\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.data_offset_position = stream.getPosition();\n\t\tstream.writeInt32(this.data_offset); //signed\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tstream.writeUint32(this.first_sample_flags);\n\t}\n\tfor (var i = 0; i < this.sample_count; i++) {\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\tstream.writeUint32(this.sample_duration[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\tstream.writeUint32(this.sample_size[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\tstream.writeUint32(this.sample_flags[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tstream.writeUint32(this.sample_composition_time_offset[i]);\n\t\t\t} else {\n\t\t\t\tstream.writeInt32(this.sample_composition_time_offset[i]); //signed\n\t\t\t}\n\t\t}\n\t}\t\t\n}\n\n// file:src/writing/url.js\nBoxParser[\"url Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tif (this.location) {\n\t\tthis.flags = 0;\n\t\tthis.size = this.location.length+1;\n\t} else {\n\t\tthis.flags = 0x000001;\n\t\tthis.size = 0;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/urn.js\nBoxParser[\"urn Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.name.length+1+(this.location ? this.location.length+1 : 0);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.name);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/vmhd.js\nBoxParser.vmhdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 1;\n\tthis.size = 8;\n\tthis.writeHeader(stream);\n\tstream.writeUint16(this.graphicsmode);\n\tstream.writeUint16Array(this.opcolor);\n}\n\n// file:src/box-unpack.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.cttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tsamples[k].pts = samples[k].dts + this.sample_offsets[i];\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.sttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tif (k === 0) {\n\t\t\t\tsamples[k].dts = 0;\n\t\t\t} else {\n\t\t\t\tsamples[k].dts = samples[k-1].dts + this.sample_deltas[i];\n\t\t\t}\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.stcoBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.chunk_offsets.length; i++) {\n\t\tsamples[i].offset = this.chunk_offsets[i];\n\t}\n}\n\nBoxParser.stscBox.prototype.unpack = function(samples) {\n\tvar i, j, k, l, m;\n\tl = 0;\n\tm = 0;\n\tfor (i = 0; i < this.first_chunk.length; i++) {\n\t\tfor (j = 0; j < (i+1 < this.first_chunk.length ? this.first_chunk[i+1] : Infinity); j++) {\n\t\t\tm++;\n\t\t\tfor (k = 0; k < this.samples_per_chunk[i]; k++) {\n\t\t\t\tif (samples[l]) {\n\t\t\t\t\tsamples[l].description_index = this.sample_description_index[i];\n\t\t\t\t\tsamples[l].chunk_index = m;\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tl++;\n\t\t\t}\t\t\t\n\t\t}\n\t}\n}\n\nBoxParser.stszBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.sample_sizes.length; i++) {\n\t\tsamples[i].size = this.sample_sizes[i];\n\t}\n}\n// file:src/box-diff.js\n\nBoxParser.DIFF_BOXES_PROP_NAMES = [ \"boxes\", \"entries\", \"references\", \"subsamples\",\n\t\t\t\t\t \t \"items\", \"item_infos\", \"extents\", \"associations\",\n\t\t\t\t\t \t \"subsegments\", \"ranges\", \"seekLists\", \"seekPoints\",\n\t\t\t\t\t \t \"esd\", \"levels\"];\n\nBoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES = [ \"compatible_brands\", \"matrix\", \"opcolor\", \"sample_counts\", \"sample_deltas\",\n\"first_chunk\", \"samples_per_chunk\", \"sample_sizes\", \"chunk_offsets\", \"sample_offsets\", \"sample_description_index\", \"sample_duration\" ];\n\nBoxParser.boxEqualFields = function(box_a, box_b) {\n\tif (box_a && !box_b) return false;\n\tvar prop;\n\tfor (prop in box_a) {\n\t\tif (BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\tcontinue;\n\t\t// } else if (excluded_fields && excluded_fields.indexOf(prop) > -1) {\n\t\t// \tcontinue;\n\t\t} else if (box_a[prop] instanceof BoxParser.Box || box_b[prop] instanceof BoxParser.Box) {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"undefined\" || typeof box_b[prop] === \"undefined\") {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"function\" || typeof box_b[prop] === \"function\") {\n\t\t\tcontinue;\n\t\t} else if (\n\t\t\t(box_a.subBoxNames && box_a.subBoxNames.indexOf(prop.slice(0,4)) > -1) ||\n\t\t\t(box_b.subBoxNames && box_b.subBoxNames.indexOf(prop.slice(0,4)) > -1)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (prop === \"data\" || prop === \"start\" || prop === \"size\" || prop === \"creation_time\" || prop === \"modification_time\") {\n\t\t\t\tcontinue;\n\t\t\t} else if (BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (box_a[prop] !== box_b[prop]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nBoxParser.boxEqual = function(box_a, box_b) {\n\tif (!BoxParser.boxEqualFields(box_a, box_b)) {\n\t\treturn false;\n\t}\n\tfor (var j = 0; j < BoxParser.DIFF_BOXES_PROP_NAMES.length; j++) {\n\t\tvar name = BoxParser.DIFF_BOXES_PROP_NAMES[j];\n\t\tif (box_a[name] && box_b[name]) {\n\t\t\tif (!BoxParser.boxEqual(box_a[name], box_b[name])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n// file:src/text-mp4.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar VTTin4Parser = function() {\t\n}\n\nVTTin4Parser.prototype.parseSample = function(data) {\n\tvar cues, cue;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tcues = [];\n\twhile (!stream.isEos()) {\n\t\tcue = BoxParser.parseOneBox(stream, false);\n\t\tif (cue.code === BoxParser.OK && cue.box.type === \"vttc\") {\n\t\t\tcues.push(cue.box);\n\t\t}\t\t\n\t}\n\treturn cues;\n}\n\nVTTin4Parser.prototype.getText = function (startTime, endTime, data) {\n\tfunction pad(n, width, z) {\n\t z = z || '0';\n\t n = n + '';\n\t return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n\t}\n\tfunction secToTimestamp(insec) {\n\t\tvar h = Math.floor(insec/3600);\n\t\tvar m = Math.floor((insec - h*3600)/60);\n\t\tvar s = Math.floor(insec - h*3600 - m*60);\n\t\tvar ms = Math.floor((insec - h*3600 - m*60 - s)*1000);\n\t\treturn \"\"+pad(h, 2)+\":\"+pad(m,2)+\":\"+pad(s, 2)+\".\"+pad(ms, 3);\n\t}\n\tvar cues = this.parseSample(data);\n\tvar string = \"\";\n\tfor (var i = 0; i < cues.length; i++) {\n\t\tvar cueIn4 = cues[i];\n\t\tstring += secToTimestamp(startTime)+\" --> \"+secToTimestamp(endTime)+\"\\r\\n\";\n\t\tstring += cueIn4.payl.text;\n\t}\n\treturn string;\n}\n\nvar XMLSubtitlein4Parser = function() {\t\n}\n\nXMLSubtitlein4Parser.prototype.parseSample = function(sample) {\n\tvar res = {};\t\n\tvar i;\n\tres.resources = [];\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\tif (!sample.subsamples || sample.subsamples.length === 0) {\n\t\tres.documentString = stream.readString(sample.data.length);\n\t} else {\n\t\tres.documentString = stream.readString(sample.subsamples[0].size);\n\t\tif (sample.subsamples.length > 1) {\n\t\t\tfor (i = 1; i < sample.subsamples.length; i++) {\n\t\t\t\tres.resources[i] = stream.readUint8Array(sample.subsamples[i].size);\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof (DOMParser) !== \"undefined\") {\n\t\tres.document = (new DOMParser()).parseFromString(res.documentString, \"application/xml\");\n\t}\n\treturn res;\n}\n\nvar Textin4Parser = function() {\t\n}\n\nTextin4Parser.prototype.parseSample = function(sample) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\ttextString = stream.readString(sample.data.length);\n\treturn textString;\n}\n\nTextin4Parser.prototype.parseConfig = function(data) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tstream.readUint32(); // version & flags\n\ttextString = stream.readCString();\n\treturn textString;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.VTTin4Parser = VTTin4Parser;\n\texports.XMLSubtitlein4Parser = XMLSubtitlein4Parser;\n\texports.Textin4Parser = Textin4Parser;\n}\n// file:src/isofile.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar ISOFile = function (stream) {\n\t/* MutiBufferStream object used to parse boxes */\n\tthis.stream = stream || new MultiBufferStream();\n\t/* Array of all boxes (in order) found in the file */\n\tthis.boxes = [];\n\t/* Array of all mdats */\n\tthis.mdats = [];\n\t/* Array of all moofs */\n\tthis.moofs = [];\n\t/* Boolean indicating if the file is compatible with progressive parsing (moov first) */\n\tthis.isProgressive = false;\n\t/* Boolean used to fire moov start event only once */\n\tthis.moovStartFound = false;\n\t/* Callback called when the moov parsing starts */\n\tthis.onMoovStart = null;\n\t/* Boolean keeping track of the call to onMoovStart, to avoid double calls */\n\tthis.moovStartSent = false;\n\t/* Callback called when the moov is entirely parsed */\n\tthis.onReady = null;\n\t/* Boolean keeping track of the call to onReady, to avoid double calls */\n\tthis.readySent = false;\n\t/* Callback to call when segments are ready */\n\tthis.onSegment = null;\n\t/* Callback to call when samples are ready */\n\tthis.onSamples = null;\n\t/* Callback to call when there is an error in the parsing or processing of samples */\n\tthis.onError = null;\n\t/* Boolean indicating if the moov box run-length encoded tables of sample information have been processed */\n\tthis.sampleListBuilt = false;\n\t/* Array of Track objects for which fragmentation of samples is requested */\n\tthis.fragmentedTracks = [];\n\t/* Array of Track objects for which extraction of samples is requested */\n\tthis.extractedTracks = [];\n\t/* Boolean indicating that fragmention is ready */\n\tthis.isFragmentationInitialized = false;\n\t/* Boolean indicating that fragmented has started */\n\tthis.sampleProcessingStarted = false;\n\t/* Number of the next 'moof' to generate when fragmenting */\n\tthis.nextMoofNumber = 0;\n\t/* Boolean indicating if the initial list of items has been produced */\n\tthis.itemListBuilt = false;\n\t/* Array of items */\n\tthis.items = [];\n\t/* Array of entity groups */\n\tthis.entity_groups = [];\n\t/* Callback called when the sidx box is entirely parsed */\n\tthis.onSidx = null;\n\t/* Boolean keeping track of the call to onSidx, to avoid double calls */\n\tthis.sidxSent = false;\n}\n\nISOFile.prototype.setSegmentOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar fragTrack = {};\n\t\tthis.fragmentedTracks.push(fragTrack);\n\t\tfragTrack.id = id;\n\t\tfragTrack.user = user;\n\t\tfragTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\tfragTrack.segmentStream = null;\n\t\tfragTrack.nb_samples = 1000;\n\t\tfragTrack.rapAlignement = true;\n\t\tif (options) {\n\t\t\tif (options.nbSamples) fragTrack.nb_samples = options.nbSamples;\n\t\t\tif (options.rapAlignement) fragTrack.rapAlignement = options.rapAlignement;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetSegmentOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar fragTrack = this.fragmentedTracks[i];\n\t\tif (fragTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.fragmentedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.setExtractionOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar extractTrack = {};\n\t\tthis.extractedTracks.push(extractTrack);\n\t\textractTrack.id = id;\n\t\textractTrack.user = user;\n\t\textractTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\textractTrack.nb_samples = 1000;\n\t\textractTrack.samples = [];\n\t\tif (options) {\n\t\t\tif (options.nbSamples) extractTrack.nb_samples = options.nbSamples;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetExtractionOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.extractedTracks.length; i++) {\n\t\tvar extractTrack = this.extractedTracks[i];\n\t\tif (extractTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.extractedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.parse = function() {\n\tvar found;\n\tvar ret;\n\tvar box;\n\tvar parseBoxHeadersOnly = false;\n\n\tif (this.restoreParsePosition)\t{\n\t\tif (!this.restoreParsePosition()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\twhile (true) {\n\n\t\tif (this.hasIncompleteMdat && this.hasIncompleteMdat()) {\n\t\t\tif (this.processIncompleteMdat()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.saveParsePosition)\t{\n\t\t\t\tthis.saveParsePosition();\n\t\t\t}\n\t\t\tret = BoxParser.parseOneBox(this.stream, parseBoxHeadersOnly);\n\t\t\tif (ret.code === BoxParser.ERR_NOT_ENOUGH_DATA) {\n\t\t\t\tif (this.processIncompleteBox) {\n\t\t\t\t\tif (this.processIncompleteBox(ret)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar box_type;\n\t\t\t\t/* the box is entirely parsed */\n\t\t\t\tbox = ret.box;\n\t\t\t\tbox_type = (box.type !== \"uuid\" ? box.type : box.uuid);\n\t\t\t\t/* store the box in the 'boxes' array to preserve box order (for file rewrite if needed) */\n\t\t\t\tthis.boxes.push(box);\n\t\t\t\t/* but also store box in a property for more direct access */\n\t\t\t\tswitch (box_type) {\n\t\t\t\t\tcase \"mdat\":\n\t\t\t\t\t\tthis.mdats.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moof\":\n\t\t\t\t\t\tthis.moofs.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moov\":\n\t\t\t\t\t\tthis.moovStartFound = true;\n\t\t\t\t\t\tif (this.mdats.length === 0) {\n\t\t\t\t\t\t\tthis.isProgressive = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* no break */\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (this[box_type] !== undefined) {\n\t\t\t\t\t\t\tLog.warn(\"ISOFile\", \"Duplicate Box of type: \"+box_type+\", overriding previous occurrence\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this.updateUsedBytes) {\n\t\t\t\t\tthis.updateUsedBytes(box, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.checkBuffer = function (ab) {\n\tif (ab === null || ab === undefined) {\n\t\tthrow(\"Buffer must be defined and non empty\");\n\t}\n\tif (ab.fileStart === undefined) {\n\t\tthrow(\"Buffer must have a fileStart property\");\n\t}\n\tif (ab.byteLength === 0) {\n\t\tLog.warn(\"ISOFile\", \"Ignoring empty buffer (fileStart: \"+ab.fileStart+\")\");\n\t\tthis.stream.logBufferLevel();\n\t\treturn false;\n\t}\n\tLog.info(\"ISOFile\", \"Processing buffer (fileStart: \"+ab.fileStart+\")\");\n\n\t/* mark the bytes in the buffer as not being used yet */\n\tab.usedBytes = 0;\n\tthis.stream.insertBuffer(ab);\n\tthis.stream.logBufferLevel();\n\n\tif (!this.stream.initialized()) {\n\t\tLog.warn(\"ISOFile\", \"Not ready to start parsing\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/* Processes a new ArrayBuffer (with a fileStart property)\n Returns the next expected file position, or undefined if not ready to parse */\nISOFile.prototype.appendBuffer = function(ab, last) {\n\tvar nextFileStart;\n\tif (!this.checkBuffer(ab)) {\n\t\treturn;\n\t}\n\n\t/* Parse whatever is in the existing buffers */\n\tthis.parse();\n\n\t/* Check if the moovStart callback needs to be called */\n\tif (this.moovStartFound && !this.moovStartSent) {\n\t\tthis.moovStartSent = true;\n\t\tif (this.onMoovStart) this.onMoovStart();\n\t}\n\n\tif (this.moov) {\n\t\t/* A moov box has been entirely parsed */\n\n\t\t/* if this is the first call after the moov is found we initialize the list of samples (may be empty in fragmented files) */\n\t\tif (!this.sampleListBuilt) {\n\t\t\tthis.buildSampleLists();\n\t\t\tthis.sampleListBuilt = true;\n\t\t}\n\n\t\t/* We update the sample information if there are any new moof boxes */\n\t\tthis.updateSampleLists();\n\n\t\t/* If the application needs to be informed that the 'moov' has been found,\n\t\t we create the information object and callback the application */\n\t\tif (this.onReady && !this.readySent) {\n\t\t\tthis.readySent = true;\n\t\t\tthis.onReady(this.getInfo());\n\t\t}\n\n\t\t/* See if any sample extraction or segment creation needs to be done with the available samples */\n\t\tthis.processSamples(last);\n\n\t\t/* Inform about the best range to fetch next */\n\t\tif (this.nextSeekPosition) {\n\t\t\tnextFileStart = this.nextSeekPosition;\n\t\t\tthis.nextSeekPosition = undefined;\n\t\t} else {\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t}\n\t\tif (this.stream.getEndFilePositionAfter) {\n\t\t\tnextFileStart = this.stream.getEndFilePositionAfter(nextFileStart);\n\t\t}\n\t} else {\n\t\tif (this.nextParsePosition) {\n\t\t\t/* moov has not been parsed but the first buffer was received,\n\t\t\t the next fetch should probably be the next box start */\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t} else {\n\t\t\t/* No valid buffer has been parsed yet, we cannot know what to parse next */\n\t\t\tnextFileStart = 0;\n\t\t}\n\t}\n\tif (this.sidx) {\n\t\tif (this.onSidx && !this.sidxSent) {\n\t\t\tthis.onSidx(this.sidx);\n\t\t\tthis.sidxSent = true;\n\t\t}\n\t}\n\tif (this.meta) {\n\t\tif (this.flattenItemInfo && !this.itemListBuilt) {\n\t\t\tthis.flattenItemInfo();\n\t\t\tthis.itemListBuilt = true;\n\t\t}\n\t\tif (this.processItems) {\n\t\t\tthis.processItems(this.onItem);\n\t\t}\n\t}\n\n\tif (this.stream.cleanBuffers) {\n\t\tLog.info(\"ISOFile\", \"Done processing buffer (fileStart: \"+ab.fileStart+\") - next buffer to fetch should have a fileStart position of \"+nextFileStart);\n\t\tthis.stream.logBufferLevel();\n\t\tthis.stream.cleanBuffers();\n\t\tthis.stream.logBufferLevel(true);\n\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t}\n\treturn nextFileStart;\n}\n\nISOFile.prototype.getInfo = function() {\n\tvar i, j;\n\tvar movie = {};\n\tvar trak;\n\tvar track;\n\tvar ref;\n\tvar sample_desc;\n\tvar _1904 = (new Date('1904-01-01T00:00:00Z').getTime());\n\n\tif (this.moov) {\n\t\tmovie.hasMoov = true;\n\t\tmovie.duration = this.moov.mvhd.duration;\n\t\tmovie.timescale = this.moov.mvhd.timescale;\n\t\tmovie.isFragmented = (this.moov.mvex != null);\n\t\tif (movie.isFragmented && this.moov.mvex.mehd) {\n\t\t\tmovie.fragment_duration = this.moov.mvex.mehd.fragment_duration;\n\t\t}\n\t\tmovie.isProgressive = this.isProgressive;\n\t\tmovie.hasIOD = (this.moov.iods != null);\n\t\tmovie.brands = [];\n\t\tmovie.brands.push(this.ftyp.major_brand);\n\t\tmovie.brands = movie.brands.concat(this.ftyp.compatible_brands);\n\t\tmovie.created = new Date(_1904+this.moov.mvhd.creation_time*1000);\n\t\tmovie.modified = new Date(_1904+this.moov.mvhd.modification_time*1000);\n\t\tmovie.tracks = [];\n\t\tmovie.audioTracks = [];\n\t\tmovie.videoTracks = [];\n\t\tmovie.subtitleTracks = [];\n\t\tmovie.metadataTracks = [];\n\t\tmovie.hintTracks = [];\n\t\tmovie.otherTracks = [];\n\t\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\t\ttrak = this.moov.traks[i];\n\t\t\tsample_desc = trak.mdia.minf.stbl.stsd.entries[0];\n\t\t\ttrack = {};\n\t\t\tmovie.tracks.push(track);\n\t\t\ttrack.id = trak.tkhd.track_id;\n\t\t\ttrack.name = trak.mdia.hdlr.name;\n\t\t\ttrack.references = [];\n\t\t\tif (trak.tref) {\n\t\t\t\tfor (j = 0; j < trak.tref.boxes.length; j++) {\n\t\t\t\t\tref = {};\n\t\t\t\t\ttrack.references.push(ref);\n\t\t\t\t\tref.type = trak.tref.boxes[j].type;\n\t\t\t\t\tref.track_ids = trak.tref.boxes[j].track_ids;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (trak.edts) {\n\t\t\t\ttrack.edits = trak.edts.elst.entries;\n\t\t\t}\n\t\t\ttrack.created = new Date(_1904+trak.tkhd.creation_time*1000);\n\t\t\ttrack.modified = new Date(_1904+trak.tkhd.modification_time*1000);\n\t\t\ttrack.movie_duration = trak.tkhd.duration;\n\t\t\ttrack.movie_timescale = movie.timescale;\n\t\t\ttrack.layer = trak.tkhd.layer;\n\t\t\ttrack.alternate_group = trak.tkhd.alternate_group;\n\t\t\ttrack.volume = trak.tkhd.volume;\n\t\t\ttrack.matrix = trak.tkhd.matrix;\n\t\t\ttrack.track_width = trak.tkhd.width/(1<<16);\n\t\t\ttrack.track_height = trak.tkhd.height/(1<<16);\n\t\t\ttrack.timescale = trak.mdia.mdhd.timescale;\n\t\t\ttrack.cts_shift = trak.mdia.minf.stbl.cslg;\n\t\t\ttrack.duration = trak.mdia.mdhd.duration;\n\t\t\ttrack.samples_duration = trak.samples_duration;\n\t\t\ttrack.codec = sample_desc.getCodec();\n\t\t\ttrack.kind = (trak.udta && trak.udta.kinds.length ? trak.udta.kinds[0] : { schemeURI: \"\", value: \"\"});\n\t\t\ttrack.language = (trak.mdia.elng ? trak.mdia.elng.extended_language : trak.mdia.mdhd.languageString);\n\t\t\ttrack.nb_samples = trak.samples.length;\n\t\t\ttrack.size = trak.samples_size;\n\t\t\ttrack.bitrate = (track.size*8*track.timescale)/track.samples_duration;\n\t\t\tif (sample_desc.isAudio()) {\n\t\t\t\ttrack.type = \"audio\";\n\t\t\t\tmovie.audioTracks.push(track);\n\t\t\t\ttrack.audio = {};\n\t\t\t\ttrack.audio.sample_rate = sample_desc.getSampleRate();\n\t\t\t\ttrack.audio.channel_count = sample_desc.getChannelCount();\n\t\t\t\ttrack.audio.sample_size = sample_desc.getSampleSize();\n\t\t\t} else if (sample_desc.isVideo()) {\n\t\t\t\ttrack.type = \"video\";\n\t\t\t\tmovie.videoTracks.push(track);\n\t\t\t\ttrack.video = {};\n\t\t\t\ttrack.video.width = sample_desc.getWidth();\n\t\t\t\ttrack.video.height = sample_desc.getHeight();\n\t\t\t} else if (sample_desc.isSubtitle()) {\n\t\t\t\ttrack.type = \"subtitles\";\n\t\t\t\tmovie.subtitleTracks.push(track);\n\t\t\t} else if (sample_desc.isHint()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.hintTracks.push(track);\n\t\t\t} else if (sample_desc.isMetadata()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.metadataTracks.push(track);\n\t\t\t} else {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.otherTracks.push(track);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmovie.hasMoov = false;\n\t}\n\tmovie.mime = \"\";\n\tif (movie.hasMoov && movie.tracks) {\n\t\tif (movie.videoTracks && movie.videoTracks.length > 0) {\n\t\t\tmovie.mime += 'video/mp4; codecs=\\\"';\n\t\t} else if (movie.audioTracks && movie.audioTracks.length > 0) {\n\t\t\tmovie.mime += 'audio/mp4; codecs=\\\"';\n\t\t} else {\n\t\t\tmovie.mime += 'application/mp4; codecs=\\\"';\n\t\t}\n\t\tfor (i = 0; i < movie.tracks.length; i++) {\n\t\t\tif (i !== 0) movie.mime += ',';\n\t\t\tmovie.mime+= movie.tracks[i].codec;\n\t\t}\n\t\tmovie.mime += '\\\"; profiles=\\\"';\n\t\tmovie.mime += this.ftyp.compatible_brands.join();\n\t\tmovie.mime += '\\\"';\n\t}\n\treturn movie;\n}\n\nISOFile.prototype.setNextSeekPositionFromSample = function (sample) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (this.nextSeekPosition) {\n\t\tthis.nextSeekPosition = Math.min(sample.offset+sample.alreadyRead,this.nextSeekPosition);\n\t} else {\n\t\tthis.nextSeekPosition = sample.offset+sample.alreadyRead;\n\t}\n}\n\nISOFile.prototype.processSamples = function(last) {\n\tvar i;\n\tvar trak;\n\tif (!this.sampleProcessingStarted) return;\n\n\t/* For each track marked for fragmentation,\n\t check if the next sample is there (i.e. if the sample information is known (i.e. moof has arrived) and if it has been downloaded)\n\t and create a fragment with it */\n\tif (this.isFragmentationInitialized && this.onSegment !== null) {\n\t\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\t\tvar fragTrak = this.fragmentedTracks[i];\n\t\t\ttrak = fragTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\t/* The sample information is there (either because the file is not fragmented and this is not the last sample,\n\t\t\t\tor because the file is fragmented and the moof for that sample has been received */\n\t\t\t\tLog.debug(\"ISOFile\", \"Creating media fragment on track #\"+fragTrak.id +\" for sample \"+trak.nextSample);\n\t\t\t\tvar result = this.createFragment(fragTrak.id, trak.nextSample, fragTrak.segmentStream);\n\t\t\t\tif (result) {\n\t\t\t\t\tfragTrak.segmentStream = result;\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t} else {\n\t\t\t\t\t/* The fragment could not be created because the media data is not there (not downloaded), wait for it */\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t/* A fragment is created by sample, but the segment is the accumulation in the buffer of these fragments.\n\t\t\t\t It is flushed only as requested by the application (nb_samples) to avoid too many callbacks */\n\t\t\t\tif (trak.nextSample % fragTrak.nb_samples === 0 || (last || trak.nextSample >= trak.samples.length)) {\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sending fragmented data on track #\"+fragTrak.id+\" for samples [\"+Math.max(0,trak.nextSample-fragTrak.nb_samples)+\",\"+(trak.nextSample-1)+\"]\");\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t\t\t\t\tif (this.onSegment) {\n\t\t\t\t\t\tthis.onSegment(fragTrak.id, fragTrak.user, fragTrak.segmentStream.buffer, trak.nextSample, (last || trak.nextSample >= trak.samples.length));\n\t\t\t\t\t}\n\t\t\t\t\t/* force the creation of a new buffer */\n\t\t\t\t\tfragTrak.segmentStream = null;\n\t\t\t\t\tif (fragTrak !== this.fragmentedTracks[i]) {\n\t\t\t\t\t\t/* make sure we can stop fragmentation if needed */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.onSamples !== null) {\n\t\t/* For each track marked for data export,\n\t\t check if the next sample is there (i.e. has been downloaded) and send it */\n\t\tfor (i = 0; i < this.extractedTracks.length; i++) {\n\t\t\tvar extractTrak = this.extractedTracks[i];\n\t\t\ttrak = extractTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\tLog.debug(\"ISOFile\", \"Exporting on track #\"+extractTrak.id +\" sample #\"+trak.nextSample);\n\t\t\t\tvar sample = this.getSample(trak, trak.nextSample);\n\t\t\t\tif (sample) {\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t\textractTrak.samples.push(sample);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setNextSeekPositionFromSample(trak.samples[trak.nextSample]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (trak.nextSample % extractTrak.nb_samples === 0 || trak.nextSample >= trak.samples.length) {\n\t\t\t\t\tLog.debug(\"ISOFile\", \"Sending samples on track #\"+extractTrak.id+\" for sample \"+trak.nextSample);\n\t\t\t\t\tif (this.onSamples) {\n\t\t\t\t\t\tthis.onSamples(extractTrak.id, extractTrak.user, extractTrak.samples);\n\t\t\t\t\t}\n\t\t\t\t\textractTrak.samples = [];\n\t\t\t\t\tif (extractTrak !== this.extractedTracks[i]) {\n\t\t\t\t\t\t/* check if the extraction needs to be stopped */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Find and return specific boxes using recursion and early return */\nISOFile.prototype.getBox = function(type) {\n var result = this.getBoxes(type, true);\n return (result.length ? result[0] : null);\n}\n\nISOFile.prototype.getBoxes = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n}\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n}\n\nISOFile.prototype.getTrackSamplesInfo = function(track_id) {\n\tvar track = this.getTrackById(track_id);\n\tif (track) {\n\t\treturn track.samples;\n\t} else {\n\t\treturn;\n\t}\n}\n\nISOFile.prototype.getTrackSample = function(track_id, number) {\n\tvar track = this.getTrackById(track_id);\n\tvar sample = this.getSample(track, number);\n\treturn sample;\n}\n\n/* Called by the application to release the resources associated to samples already forwarded to the application */\nISOFile.prototype.releaseUsedSamples = function (id, sampleNum) {\n\tvar size = 0;\n\tvar trak = this.getTrackById(id);\n\tif (!trak.lastValidSample) trak.lastValidSample = 0;\n\tfor (var i = trak.lastValidSample; i < sampleNum; i++) {\n\t\tsize+=this.releaseSample(trak, i);\n\t}\n\tLog.info(\"ISOFile\", \"Track #\"+id+\" released samples up to \"+sampleNum+\" (released size: \"+size+\", remaining: \"+this.samplesDataSize+\")\");\n\ttrak.lastValidSample = sampleNum;\n}\n\nISOFile.prototype.start = function() {\n\tthis.sampleProcessingStarted = true;\n\tthis.processSamples(false);\n}\n\nISOFile.prototype.stop = function() {\n\tthis.sampleProcessingStarted = false;\n}\n\n/* Called by the application to flush the remaining samples (e.g. once the download is finished or when no more samples will be added) */\nISOFile.prototype.flush = function() {\n\tLog.info(\"ISOFile\", \"Flushing remaining samples\");\n\tthis.updateSampleLists();\n\tthis.processSamples(true);\n\tthis.stream.cleanBuffers();\n\tthis.stream.logBufferLevel(true);\n}\n\n/* Finds the byte offset for a given time on a given track\n also returns the time of the previous rap */\nISOFile.prototype.seekTrack = function(time, useRap, trak) {\n\tvar j;\n\tvar sample;\n\tvar seek_offset = Infinity;\n\tvar rap_seek_sample_num = 0;\n\tvar seek_sample_num = 0;\n\tvar timescale;\n\n\tif (trak.samples.length === 0) {\n\t\tLog.info(\"ISOFile\", \"No sample in track, cannot seek! Using time \"+Log.getDurationString(0, 1) +\" and offset: \"+0);\n\t\treturn { offset: 0, time: 0 };\n\t}\n\n\tfor (j = 0; j < trak.samples.length; j++) {\n\t\tsample = trak.samples[j];\n\t\tif (j === 0) {\n\t\t\tseek_sample_num = 0;\n\t\t\ttimescale = sample.timescale;\n\t\t} else if (sample.cts > time * sample.timescale) {\n\t\t\tseek_sample_num = j-1;\n\t\t\tbreak;\n\t\t}\n\t\tif (useRap && sample.is_sync) {\n\t\t\trap_seek_sample_num = j;\n\t\t}\n\t}\n\tif (useRap) {\n\t\tseek_sample_num = rap_seek_sample_num;\n\t}\n\ttime = trak.samples[seek_sample_num].cts;\n\ttrak.nextSample = seek_sample_num;\n\twhile (trak.samples[seek_sample_num].alreadyRead === trak.samples[seek_sample_num].size) {\n\t\t// No remaining samples to look for, all are downloaded.\n\t\tif (!trak.samples[seek_sample_num + 1]) {\n\t\t\tbreak;\n\t\t}\n\t\tseek_sample_num++;\n\t}\n\tseek_offset = trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;\n\tLog.info(\"ISOFile\", \"Seeking to \"+(useRap ? \"RAP\": \"\")+\" sample #\"+trak.nextSample+\" on track \"+trak.tkhd.track_id+\", time \"+Log.getDurationString(time, timescale) +\" and offset: \"+seek_offset);\n\treturn { offset: seek_offset, time: time/timescale };\n}\n\nISOFile.prototype.getTrackDuration = function (trak) {\n\tvar sample;\n\n\tif (!trak.samples) {\n\t\treturn Infinity;\n\t}\n\tsample = trak.samples[trak.samples.length - 1];\n\treturn (sample.cts + sample.duration) / sample.timescale;\n}\n\n/* Finds the byte offset in the file corresponding to the given time or to the time of the previous RAP */\nISOFile.prototype.seek = function(time, useRap) {\n\tvar moov = this.moov;\n\tvar trak;\n\tvar trak_seek_info;\n\tvar i;\n\tvar seek_info = { offset: Infinity, time: Infinity };\n\tif (!this.moov) {\n\t\tthrow \"Cannot seek: moov not received!\";\n\t} else {\n\t\tfor (i = 0; i<moov.traks.length; i++) {\n\t\t\ttrak = moov.traks[i];\n\t\t\tif (time > this.getTrackDuration(trak)) { // skip tracks that already ended\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttrak_seek_info = this.seekTrack(time, useRap, trak);\n\t\t\tif (trak_seek_info.offset < seek_info.offset) {\n\t\t\t\tseek_info.offset = trak_seek_info.offset;\n\t\t\t}\n\t\t\tif (trak_seek_info.time < seek_info.time) {\n\t\t\t\tseek_info.time = trak_seek_info.time;\n\t\t\t}\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Seeking at time \"+Log.getDurationString(seek_info.time, 1)+\" needs a buffer with a fileStart position of \"+seek_info.offset);\n\t\tif (seek_info.offset === Infinity) {\n\t\t\t/* No sample info, in all tracks, cannot seek */\n\t\t\tseek_info = { offset: this.nextParsePosition, time: 0 };\n\t\t} else {\n\t\t\t/* check if the seek position is already in some buffer and\n\t\t\t in that case return the end of that buffer (or of the last contiguous buffer) */\n\t\t\t/* TODO: Should wait until append operations are done */\n\t\t\tseek_info.offset = this.stream.getEndFilePositionAfter(seek_info.offset);\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Adjusted seek position (after checking data already in buffer): \"+seek_info.offset);\n\t\treturn seek_info;\n\t}\n}\n\nISOFile.prototype.equal = function(b) {\n\tvar box_index = 0;\n\twhile (box_index < this.boxes.length && box_index < b.boxes.length) {\n\t\tvar a_box = this.boxes[box_index];\n\t\tvar b_box = b.boxes[box_index];\n\t\tif (!BoxParser.boxEqual(a_box, b_box)) {\n\t\t\treturn false;\n\t\t}\n\t\tbox_index++;\n\t}\n\treturn true;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.ISOFile = ISOFile;\n}\n// file:src/isofile-advanced-parsing.js\n/* position in the current buffer of the beginning of the last box parsed */\nISOFile.prototype.lastBoxStartPosition = 0;\n/* indicator if the parsing is stuck in the middle of an mdat box */\nISOFile.prototype.parsingMdat = null;\n/* next file position that the parser needs:\n - 0 until the first buffer (i.e. fileStart ===0) has been received \n - otherwise, the next box start until the moov box has been parsed\n - otherwise, the position of the next sample to fetch\n */\nISOFile.prototype.nextParsePosition = 0;\n/* keep mdat data */\nISOFile.prototype.discardMdatData = false;\n\nISOFile.prototype.processIncompleteBox = function(ret) {\n\tvar box;\n\tvar merged;\n\tvar found;\n\t\n\t/* we did not have enough bytes in the current buffer to parse the entire box */\n\tif (ret.type === \"mdat\") { \n\t\t/* we had enough bytes to get its type and size and it's an 'mdat' */\n\t\t\n\t\t/* special handling for mdat boxes, since we don't actually need to parse it linearly \n\t\t we create the box */\n\t\tbox = new BoxParser[ret.type+\"Box\"](ret.size);\t\n\t\tthis.parsingMdat = box;\n\t\tthis.boxes.push(box);\n\t\tthis.mdats.push(box);\t\t\t\n\t\tbox.start = ret.start;\n\t\tbox.hdr_size = ret.hdr_size;\n\t\tthis.stream.addUsedBytes(box.hdr_size);\n\n\t\t/* indicate that the parsing should start from the end of the box */\n\t\tthis.lastBoxStartPosition = box.start + box.size;\n \t\t/* let's see if we have the end of the box in the other buffers */\n\t\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\t\tif (found) {\n\t\t\t/* found the end of the box */\n\t\t\tthis.parsingMdat = null;\n\t\t\t/* let's see if we can parse more in this buffer */\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* 'mdat' end not found in the existing buffers */\n\t\t\t/* determine the next position in the file to start parsing from */\n\t\t\tif (!this.moovStartFound) {\n\t\t\t\t/* moov not find yet, \n\t\t\t\t the file probably has 'mdat' at the beginning, and 'moov' at the end, \n\t\t\t\t indicate that the downloader should not try to download those bytes now */\n\t\t\t\tthis.nextParsePosition = box.start + box.size;\n\t\t\t} else {\n\t\t\t\t/* we have the start of the moov box, \n\t\t\t\t the next bytes should try to complete the current 'mdat' */\n\t\t\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\t\t}\n\t\t\t/* not much we can do, wait for more buffers to arrive */\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\t/* box is incomplete, we may not even know its type */\n\t\tif (ret.type === \"moov\") { \n\t\t\t/* the incomplete box is a 'moov' box */\n\t\t\tthis.moovStartFound = true;\n\t\t\tif (this.mdats.length === 0) {\n\t\t\t\tthis.isProgressive = true;\n\t\t\t}\n\t\t}\n\t\t/* either it's not an mdat box (and we need to parse it, we cannot skip it)\n\t\t (TODO: we could skip 'free' boxes ...)\n\t\t\t or we did not have enough data to parse the type and size of the box, \n\t\t we try to concatenate the current buffer with the next buffer to restart parsing */\n\t\tmerged = (this.stream.mergeNextBuffer ? this.stream.mergeNextBuffer() : false);\n\t\tif (merged) {\n\t\t\t/* The next buffer was contiguous, the merging succeeded,\n\t\t\t we can now continue parsing, \n\t\t\t the next best position to parse is at the end of this new buffer */\n\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* we cannot concatenate existing buffers because they are not contiguous or because there is no additional buffer */\n\t\t\t/* The next best position to parse is still at the end of this old buffer */\n\t\t\tif (!ret.type) {\n\t\t\t\t/* There were not enough bytes in the buffer to parse the box type and length,\n\t\t\t\t the next fetch should retrieve those missing bytes, i.e. the next bytes after this buffer */\n\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t} else {\n\t\t\t\t/* we had enough bytes to parse size and type of the incomplete box\n\t\t\t\t if we haven't found yet the moov box, skip this one and try the next one \n\t\t\t\t if we have found the moov box, let's continue linear parsing */\n\t\t\t\tif (this.moovStartFound) {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getPosition() + ret.size;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasIncompleteMdat = function () {\n\treturn (this.parsingMdat !== null);\n}\n\nISOFile.prototype.processIncompleteMdat = function () {\n\tvar box;\n\tvar found;\n\t\n\t/* we are in the parsing of an incomplete mdat box */\n\tbox = this.parsingMdat;\n\n\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\tif (found) {\n\t\tLog.debug(\"ISOFile\", \"Found 'mdat' end in buffered data\");\n\t\t/* the end of the mdat has been found */ \n\t\tthis.parsingMdat = null;\n\t\t/* we can parse more in this buffer */\n\t\treturn true;\n\t} else {\n\t\t/* we don't have the end of this mdat yet, \n\t\t indicate that the next byte to fetch is the end of the buffers we have so far, \n\t\t return and wait for more buffer to come */\n\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\treturn false;\n\t}\n}\n\nISOFile.prototype.restoreParsePosition = function() {\n\t/* Reposition at the start position of the previous box not entirely parsed */\n\treturn this.stream.seek(this.lastBoxStartPosition, true, this.discardMdatData);\n}\n\nISOFile.prototype.saveParsePosition = function() {\n\t/* remember the position of the box start in case we need to roll back (if the box is incomplete) */\n\tthis.lastBoxStartPosition = this.stream.getPosition();\t\n}\n\nISOFile.prototype.updateUsedBytes = function(box, ret) {\n\tif (this.stream.addUsedBytes) {\n\t\tif (box.type === \"mdat\") {\n\t\t\t/* for an mdat box, only its header is considered used, other bytes will be used when sample data is requested */\n\t\t\tthis.stream.addUsedBytes(box.hdr_size);\n\t\t\tif (this.discardMdatData) {\n\t\t\t\tthis.stream.addUsedBytes(box.size-box.hdr_size);\n\t\t\t}\n\t\t} else {\n\t\t\t/* for all other boxes, the entire box data is considered used */\n\t\t\tthis.stream.addUsedBytes(box.size);\n\t\t}\t\n\t}\n}\n// file:src/isofile-advanced-creation.js\nISOFile.prototype.add = BoxParser.Box.prototype.add;\nISOFile.prototype.addBox = BoxParser.Box.prototype.addBox;\n\nISOFile.prototype.init = function (_options) {\n\tvar options = _options || {}; \n\tvar ftyp = this.add(\"ftyp\").set(\"major_brand\", (options.brands && options.brands[0]) || \"iso4\")\n\t\t\t\t\t\t\t .set(\"minor_version\", 0)\n\t\t\t\t\t\t\t .set(\"compatible_brands\", options.brands || [\"iso4\"]);\n\tvar moov = this.add(\"moov\");\n\tmoov.add(\"mvhd\").set(\"timescale\", options.timescale || 600)\n\t\t\t\t\t.set(\"rate\", options.rate || 1<<16)\n\t\t\t\t\t.set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"volume\", (options.width) ? 0 : 0x0100)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000])\n\t\t\t\t\t.set(\"next_track_id\", 1);\n\tmoov.add(\"mvex\");\n\treturn this;\n}\n\nISOFile.prototype.addTrack = function (_options) {\n\tif (!this.moov) {\n\t\tthis.init(_options);\n\t}\n\n\tvar options = _options || {}; \n\toptions.width = options.width || 320;\n\toptions.height = options.height || 320;\n\toptions.id = options.id || this.moov.mvhd.next_track_id;\n\toptions.type = options.type || \"avc1\";\n\n\tvar trak = this.moov.add(\"trak\");\n\tthis.moov.mvhd.next_track_id = options.id+1;\n\ttrak.add(\"tkhd\").set(\"flags\",BoxParser.TKHD_FLAG_ENABLED | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_MOVIE | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_PREVIEW)\n\t\t\t\t\t.set(\"creation_time\",0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"track_id\", options.id)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"layer\", options.layer || 0)\n\t\t\t\t\t.set(\"alternate_group\", 0)\n\t\t\t\t\t.set(\"volume\", 1)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000 ])\n\t\t\t\t\t.set(\"width\", options.width << 16)\n\t\t\t\t\t.set(\"height\", options.height << 16);\n\n\tvar mdia = trak.add(\"mdia\");\n\tmdia.add(\"mdhd\").set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"timescale\", options.timescale || 1)\n\t\t\t\t\t.set(\"duration\", options.media_duration || 0)\n\t\t\t\t\t.set(\"language\", options.language || \"und\");\n\n\tmdia.add(\"hdlr\").set(\"handler\", options.hdlr || \"vide\")\n\t\t\t\t\t.set(\"name\", options.name || \"Track created with MP4Box.js\");\n\n\tmdia.add(\"elng\").set(\"extended_language\", options.language || \"fr-FR\");\n\n\tvar minf = mdia.add(\"minf\");\n\tif (BoxParser[options.type+\"SampleEntry\"] === undefined) return;\n\tvar sample_description_entry = new BoxParser[options.type+\"SampleEntry\"]();\n\tsample_description_entry.data_reference_index = 1;\n\tvar media_type = \"\";\n\tfor (var mediaType in BoxParser.sampleEntryCodes) {\n\t\tvar codes = BoxParser.sampleEntryCodes[mediaType];\n\t\tfor (var i = 0; i < codes.length; i++) {\n\t\t\tif (codes.indexOf(options.type) > -1) {\n\t\t\t\tmedia_type = mediaType;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tswitch(media_type) {\n\t\tcase \"Visual\":\n\t\t\tminf.add(\"vmhd\").set(\"graphicsmode\",0).set(\"opcolor\", [ 0, 0, 0 ]);\n\t\t\tsample_description_entry.set(\"width\", options.width)\n\t\t\t\t\t\t.set(\"height\", options.height)\n\t\t\t\t\t\t.set(\"horizresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"vertresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"frame_count\", 1)\n\t\t\t\t\t\t.set(\"compressorname\", options.type+\" Compressor\")\n\t\t\t\t\t\t.set(\"depth\", 0x18);\n\t\t\tif (options.avcDecoderConfigRecord) {\n\t\t\t\tvar avcC = new BoxParser.avcCBox();\n\t\t\t\tavcC.parse(new MP4BoxStream(options.avcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(avcC);\n\t\t\t} else if (options.hevcDecoderConfigRecord) {\n\t\t\t\tvar hvcC = new BoxParser.hvcCBox();\n\t\t\t\thvcC.parse(new MP4BoxStream(options.hevcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(hvcC);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Audio\":\n\t\t\tminf.add(\"smhd\").set(\"balance\", options.balance || 0);\n\t\t\tsample_description_entry.set(\"channel_count\", options.channel_count || 2)\n\t\t\t\t\t\t.set(\"samplesize\", options.samplesize || 16)\n\t\t\t\t\t\t.set(\"samplerate\", options.samplerate || 1<<16);\n\t\t\tbreak;\n\t\tcase \"Hint\":\n\t\t\tminf.add(\"hmhd\"); // TODO: add properties\n\t\t\tbreak;\n\t\tcase \"Subtitle\":\n\t\t\tminf.add(\"sthd\");\n\t\t\tswitch (options.type) {\n\t\t\t\tcase \"stpp\":\n\t\t\t\t\tsample_description_entry.set(\"namespace\", options.namespace || \"nonamespace\")\n\t\t\t\t\t\t\t\t.set(\"schema_location\", options.schema_location || \"\")\n\t\t\t\t\t\t\t\t.set(\"auxiliary_mime_types\", options.auxiliary_mime_types || \"\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Metadata\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tcase \"System\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t}\n\tif (options.description) {\n\t\tsample_description_entry.addBox(options.description);\n\t}\n\tif (options.description_boxes) {\n\t\toptions.description_boxes.forEach(function (b) {\n\t\t\tsample_description_entry.addBox(b);\n\t\t});\n\t}\n\tminf.add(\"dinf\").add(\"dref\").addEntry((new BoxParser[\"url Box\"]()).set(\"flags\", 0x1));\n\tvar stbl = minf.add(\"stbl\");\n\tstbl.add(\"stsd\").addEntry(sample_description_entry);\n\tstbl.add(\"stts\").set(\"sample_counts\", [])\n\t\t\t\t\t.set(\"sample_deltas\", []);\n\tstbl.add(\"stsc\").set(\"first_chunk\", [])\n\t\t\t\t\t.set(\"samples_per_chunk\", [])\n\t\t\t\t\t.set(\"sample_description_index\", []);\n\tstbl.add(\"stco\").set(\"chunk_offsets\", []);\n\tstbl.add(\"stsz\").set(\"sample_sizes\", []);\n\n\tthis.moov.mvex.add(\"trex\").set(\"track_id\", options.id)\n\t\t\t\t\t\t\t .set(\"default_sample_description_index\", options.default_sample_description_index || 1)\n\t\t\t\t\t\t\t .set(\"default_sample_duration\", options.default_sample_duration || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_size\", options.default_sample_size || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_flags\", options.default_sample_flags || 0);\n\tthis.buildTrakSampleLists(trak);\n\treturn options.id;\n}\n\nBoxParser.Box.prototype.computeSize = function(stream_) {\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n}\n\nISOFile.prototype.addSample = function (track_id, data, _options) {\n\tvar options = _options || {};\n\tvar sample = {};\n\tvar trak = this.getTrackById(track_id);\n\tif (trak === null) return;\n sample.number = trak.samples.length;\n\tsample.track_id = trak.tkhd.track_id;\n\tsample.timescale = trak.mdia.mdhd.timescale;\n\tsample.description_index = (options.sample_description_index ? options.sample_description_index - 1: 0);\n\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\tsample.data = data;\n\tsample.size = data.byteLength;\n\tsample.alreadyRead = sample.size;\n\tsample.duration = options.duration || 1;\n\tsample.cts = options.cts || 0;\n\tsample.dts = options.dts || 0;\n\tsample.is_sync = options.is_sync || false;\n\tsample.is_leading = options.is_leading || 0;\n\tsample.depends_on = options.depends_on || 0;\n\tsample.is_depended_on = options.is_depended_on || 0;\n\tsample.has_redundancy = options.has_redundancy || 0;\n\tsample.degradation_priority = options.degradation_priority || 0;\n\tsample.offset = 0;\n\tsample.subsamples = options.subsamples;\n\ttrak.samples.push(sample);\n\ttrak.samples_size += sample.size;\n\ttrak.samples_duration += sample.duration;\n\tif (trak.first_dts === undefined) {\n\t\ttrak.first_dts = options.dts;\n\t}\n\n\tthis.processSamples();\n\t\n\tvar moof = this.createSingleSampleMoof(sample);\n\tthis.addBox(moof);\n\tmoof.computeSize();\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tthis.add(\"mdat\").data = new Uint8Array(data);\n\treturn sample;\n}\n\nISOFile.prototype.createSingleSampleMoof = function(sample) {\n\tvar sample_flags = 0;\n\tif (sample.is_sync)\n\t\tsample_flags = (1 << 25); // sample_depends_on_none (I picture)\n\telse\n\t\tsample_flags = (1 << 16); // non-sync\n\n\tvar moof = new BoxParser.moofBox();\n\tmoof.add(\"mfhd\").set(\"sequence_number\", this.nextMoofNumber);\n\tthis.nextMoofNumber++;\n\tvar traf = moof.add(\"traf\");\n\tvar trak = this.getTrackById(sample.track_id);\n\ttraf.add(\"tfhd\").set(\"track_id\", sample.track_id)\n\t\t\t\t\t.set(\"flags\", BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF);\n\ttraf.add(\"tfdt\").set(\"baseMediaDecodeTime\", (sample.dts - (trak.first_dts || 0)));\n\ttraf.add(\"trun\").set(\"flags\", BoxParser.TRUN_FLAGS_DATA_OFFSET | BoxParser.TRUN_FLAGS_DURATION | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_SIZE | BoxParser.TRUN_FLAGS_FLAGS | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_CTS_OFFSET)\n\t\t\t\t\t.set(\"data_offset\",0)\n\t\t\t\t\t.set(\"first_sample_flags\",0)\n\t\t\t\t\t.set(\"sample_count\",1)\n\t\t\t\t\t.set(\"sample_duration\",[sample.duration])\n\t\t\t\t\t.set(\"sample_size\",[sample.size])\n\t\t\t\t\t.set(\"sample_flags\",[sample_flags])\n\t\t\t\t\t.set(\"sample_composition_time_offset\", [sample.cts - sample.dts]);\n\treturn moof;\n}\n\n// file:src/isofile-sample-processing.js\n/* Index of the last moof box received */\nISOFile.prototype.lastMoofIndex = 0;\n\n/* size of the buffers allocated for samples */\nISOFile.prototype.samplesDataSize = 0;\n\n/* Resets all sample tables */\nISOFile.prototype.resetTables = function () {\n\tvar i;\n\tvar trak, stco, stsc, stsz, stts, ctts, stss;\n\tthis.initial_duration = this.moov.mvhd.duration;\n\tthis.moov.mvhd.duration = 0;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\ttrak.tkhd.duration = 0;\n\t\ttrak.mdia.mdhd.duration = 0;\n\t\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\t\tstco.chunk_offsets = [];\n\t\tstsc = trak.mdia.minf.stbl.stsc;\n\t\tstsc.first_chunk = [];\n\t\tstsc.samples_per_chunk = [];\n\t\tstsc.sample_description_index = [];\n\t\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\t\tstsz.sample_sizes = [];\n\t\tstts = trak.mdia.minf.stbl.stts;\n\t\tstts.sample_counts = [];\n\t\tstts.sample_deltas = [];\n\t\tctts = trak.mdia.minf.stbl.ctts;\n\t\tif (ctts) {\n\t\t\tctts.sample_counts = [];\n\t\t\tctts.sample_offsets = [];\n\t\t}\n\t\tstss = trak.mdia.minf.stbl.stss;\n\t\tvar k = trak.mdia.minf.stbl.boxes.indexOf(stss);\n\t\tif (k != -1) trak.mdia.minf.stbl.boxes[k] = null;\n\t}\n}\n\nISOFile.initSampleGroups = function(trak, traf, sbgps, trak_sgpds, traf_sgpds) {\n\tvar l;\n\tvar k;\n\tvar sample_groups_info;\n\tvar sample_group_info;\n\tvar sample_group_key;\n\tfunction SampleGroupInfo(_type, _parameter, _sbgp) {\n\t\tthis.grouping_type = _type;\n\t\tthis.grouping_type_parameter = _parameter;\n\t\tthis.sbgp = _sbgp;\n\t\tthis.last_sample_in_run = -1;\n\t\tthis.entry_index = -1;\t\t\n\t}\n\tif (traf) {\n\t\ttraf.sample_groups_info = [];\n\t} \n\tif (!trak.sample_groups_info) {\n\t\ttrak.sample_groups_info = [];\n\t}\n\tfor (k = 0; k < sbgps.length; k++) {\n\t\tsample_group_key = sbgps[k].grouping_type +\"/\"+ sbgps[k].grouping_type_parameter;\n\t\tsample_group_info = new SampleGroupInfo(sbgps[k].grouping_type, sbgps[k].grouping_type_parameter, sbgps[k]);\n\t\tif (traf) {\n\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tfor (l=0; l <trak_sgpds.length; l++) {\n\t\t\tif (trak_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\tsample_group_info.description = trak_sgpds[l];\n\t\t\t\tsample_group_info.description.used = true;\n\t\t\t}\n\t\t}\n\t\tif (traf_sgpds) {\n\t\t\tfor (l=0; l <traf_sgpds.length; l++) {\n\t\t\t\tif (traf_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\t\tsample_group_info.fragment_description = traf_sgpds[l];\n\t\t\t\t\tsample_group_info.fragment_description.used = true;\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t}\n\tif (!traf) {\n\t\tfor (k = 0; k < trak_sgpds.length; k++) {\n\t\t\tif (!trak_sgpds[k].used && trak_sgpds[k].version >= 2) {\n\t\t\t\tsample_group_key = trak_sgpds[k].grouping_type +\"/0\";\n\t\t\t\tsample_group_info = new SampleGroupInfo(trak_sgpds[k].grouping_type, 0);\n\t\t\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (traf_sgpds) {\n\t\t\tfor (k = 0; k < traf_sgpds.length; k++) {\n\t\t\t\tif (!traf_sgpds[k].used && traf_sgpds[k].version >= 2) {\n\t\t\t\t\tsample_group_key = traf_sgpds[k].grouping_type +\"/0\";\n\t\t\t\t\tsample_group_info = new SampleGroupInfo(traf_sgpds[k].grouping_type, 0);\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t\tif (!traf.sample_groups_info[sample_group_key]) {\n\t\t\t\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.setSampleGroupProperties = function(trak, sample, sample_number, sample_groups_info) {\n\tvar k;\n\tvar index;\n\tsample.sample_groups = [];\n\tfor (k in sample_groups_info) {\n\t\tsample.sample_groups[k] = {};\n\t\tsample.sample_groups[k].grouping_type = sample_groups_info[k].grouping_type;\n\t\tsample.sample_groups[k].grouping_type_parameter = sample_groups_info[k].grouping_type_parameter;\n\t\tif (sample_number >= sample_groups_info[k].last_sample_in_run) {\n\t\t\tif (sample_groups_info[k].last_sample_in_run < 0) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run = 0;\n\t\t\t}\n\t\t\tsample_groups_info[k].entry_index++;\t\n\t\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run += sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].sample_count;\n\t\t\t}\n\t\t}\n\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\tsample.sample_groups[k].group_description_index = sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].group_description_index;\n\t\t} else {\n\t\t\tsample.sample_groups[k].group_description_index = -1; // special value for not defined\n\t\t}\n\t\tif (sample.sample_groups[k].group_description_index !== 0) {\n\t\t\tvar description;\n\t\t\tif (sample_groups_info[k].fragment_description) {\n\t\t\t\tdescription = sample_groups_info[k].fragment_description;\n\t\t\t} else {\n\t\t\t\tdescription = sample_groups_info[k].description;\n\t\t\t}\n\t\t\tif (sample.sample_groups[k].group_description_index > 0) {\n\t\t\t\tif (sample.sample_groups[k].group_description_index > 65535) {\n\t\t\t\t\tindex = (sample.sample_groups[k].group_description_index >> 16)-1;\n\t\t\t\t} else {\n\t\t\t\t\tindex = sample.sample_groups[k].group_description_index-1;\n\t\t\t\t}\n\t\t\t\tif (description && index >= 0) {\n\t\t\t\t\tsample.sample_groups[k].description = description.entries[index];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (description && description.version >= 2) {\n\t\t\t\t\tif (description.default_group_description_index > 0) {\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tsample.sample_groups[k].description = description.entries[description.default_group_description_index-1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.process_sdtp = function (sdtp, sample, number) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (sdtp) {\n\t\tsample.is_leading = sdtp.is_leading[number];\n\t\tsample.depends_on = sdtp.sample_depends_on[number];\n\t\tsample.is_depended_on = sdtp.sample_is_depended_on[number];\n\t\tsample.has_redundancy = sdtp.sample_has_redundancy[number];\n\t} else {\n\t\tsample.is_leading = 0;\n\t\tsample.depends_on = 0;\n\t\tsample.is_depended_on = 0\n\t\tsample.has_redundancy = 0;\n\t}\t\n}\n\n/* Build initial sample list from sample tables */\nISOFile.prototype.buildSampleLists = function() {\t\n\tvar i;\n\tvar trak;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\tthis.buildTrakSampleLists(trak);\n\t}\n}\n\nISOFile.prototype.buildTrakSampleLists = function(trak) {\t\n\tvar j, k;\n\tvar stco, stsc, stsz, stts, ctts, stss, stsd, subs, sbgps, sgpds, stdp;\n\tvar chunk_run_index, chunk_index, last_chunk_in_run, offset_in_chunk, last_sample_in_chunk;\n\tvar last_sample_in_stts_run, stts_run_index, last_sample_in_ctts_run, ctts_run_index, last_stss_index, last_subs_index, subs_entry_index, last_subs_sample_index;\n\n\ttrak.samples = [];\n\ttrak.samples_duration = 0;\n\ttrak.samples_size = 0;\n\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\tstsc = trak.mdia.minf.stbl.stsc;\n\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\tstts = trak.mdia.minf.stbl.stts;\n\tctts = trak.mdia.minf.stbl.ctts;\n\tstss = trak.mdia.minf.stbl.stss;\n\tstsd = trak.mdia.minf.stbl.stsd;\n\tsubs = trak.mdia.minf.stbl.subs;\n\tstdp = trak.mdia.minf.stbl.stdp;\n\tsbgps = trak.mdia.minf.stbl.sbgps;\n\tsgpds = trak.mdia.minf.stbl.sgpds;\n\t\n\tlast_sample_in_stts_run = -1;\n\tstts_run_index = -1;\n\tlast_sample_in_ctts_run = -1;\n\tctts_run_index = -1;\n\tlast_stss_index = 0;\n\tsubs_entry_index = 0;\n\tlast_subs_sample_index = 0;\t\t\n\n\tISOFile.initSampleGroups(trak, null, sbgps, sgpds);\n\n\tif (typeof stsz === \"undefined\") {\n\t\treturn;\n\t}\n\n\t/* we build the samples one by one and compute their properties */\n\tfor (j = 0; j < stsz.sample_sizes.length; j++) {\n\t\tvar sample = {};\n\t\tsample.number = j;\n\t\tsample.track_id = trak.tkhd.track_id;\n\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\tsample.alreadyRead = 0;\n\t\ttrak.samples[j] = sample;\n\t\t/* size can be known directly */\n\t\tsample.size = stsz.sample_sizes[j];\n\t\ttrak.samples_size += sample.size;\n\t\t/* computing chunk-based properties (offset, sample description index)*/\n\t\tif (j === 0) {\t\t\t\t\n\t\t\tchunk_index = 1; /* the first sample is in the first chunk (chunk indexes are 1-based) */\n\t\t\tchunk_run_index = 0; /* the first chunk is the first entry in the first_chunk table */\n\t\t\tsample.chunk_index = chunk_index;\n\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\tlast_sample_in_chunk = stsc.samples_per_chunk[chunk_run_index];\n\t\t\toffset_in_chunk = 0;\n\n\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t} else {\n\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t}\n\t\t} else {\n\t\t\tif (j < last_sample_in_chunk) {\n\t\t\t\t/* the sample is still in the current chunk */\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t} else {\n\t\t\t\t/* the sample is in the next chunk */\n\t\t\t\tchunk_index++;\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\t/* reset the accumulated offset in the chunk */\n\t\t\t\toffset_in_chunk = 0;\n\t\t\t\tif (chunk_index <= last_chunk_in_run) {\n\t\t\t\t\t/* stay in the same entry of the first_chunk table */\n\t\t\t\t\t/* chunk_run_index unmodified */\n\t\t\t\t} else {\n\t\t\t\t\tchunk_run_index++;\n\t\t\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t\tlast_sample_in_chunk += stsc.samples_per_chunk[chunk_run_index];\n\t\t\t}\n\t\t}\n\n\t\tsample.description_index = stsc.sample_description_index[sample.chunk_run_index]-1;\n\t\tsample.description = stsd.entries[sample.description_index];\n\t\tsample.offset = stco.chunk_offsets[sample.chunk_index-1] + offset_in_chunk; /* chunk indexes are 1-based */\n\t\toffset_in_chunk += sample.size;\n\n\t\t/* setting dts, cts, duration and rap flags */\n\t\tif (j > last_sample_in_stts_run) {\n\t\t\tstts_run_index++;\n\t\t\tif (last_sample_in_stts_run < 0) {\n\t\t\t\tlast_sample_in_stts_run = 0;\n\t\t\t}\n\t\t\tlast_sample_in_stts_run += stts.sample_counts[stts_run_index];\t\t\t\t\n\t\t}\n\t\tif (j > 0) {\n\t\t\ttrak.samples[j-1].duration = stts.sample_deltas[stts_run_index];\n\t\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t\t\tsample.dts = trak.samples[j-1].dts + trak.samples[j-1].duration;\n\t\t} else {\n\t\t\tsample.dts = 0;\n\t\t}\n\t\tif (ctts) {\n\t\t\tif (j >= last_sample_in_ctts_run) {\n\t\t\t\tctts_run_index++;\n\t\t\t\tif (last_sample_in_ctts_run < 0) {\n\t\t\t\t\tlast_sample_in_ctts_run = 0;\n\t\t\t\t}\n\t\t\t\tlast_sample_in_ctts_run += ctts.sample_counts[ctts_run_index];\t\t\t\t\n\t\t\t}\n\t\t\tsample.cts = trak.samples[j].dts + ctts.sample_offsets[ctts_run_index];\n\t\t} else {\n\t\t\tsample.cts = sample.dts;\n\t\t}\n\t\tif (stss) {\n\t\t\tif (j == stss.sample_numbers[last_stss_index] - 1) { // sample numbers are 1-based\n\t\t\t\tsample.is_sync = true;\n\t\t\t\tlast_stss_index++;\n\t\t\t} else {\n\t\t\t\tsample.is_sync = false;\t\t\t\t\n\t\t\t\tsample.degradation_priority = 0;\n\t\t\t}\n\t\t\tif (subs) {\n\t\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j+1) {\n\t\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t\t\tsubs_entry_index++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tsample.is_sync = true;\n\t\t}\n\t\tISOFile.process_sdtp(trak.mdia.minf.stbl.sdtp, sample, sample.number);\n\t\tif (stdp) {\n\t\t\tsample.degradation_priority = stdp.priority[j];\n\t\t} else {\n\t\t\tsample.degradation_priority = 0;\n\t\t}\n\t\tif (subs) {\n\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j) {\n\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t}\n\t\t}\n\t\tif (sbgps.length > 0 || sgpds.length > 0) {\n\t\t\tISOFile.setSampleGroupProperties(trak, sample, j, trak.sample_groups_info);\n\t\t}\n\t}\n\tif (j>0) {\n\t\ttrak.samples[j-1].duration = Math.max(trak.mdia.mdhd.duration - trak.samples[j-1].dts, 0);\n\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t}\n}\n\n/* Update sample list when new 'moof' boxes are received */\nISOFile.prototype.updateSampleLists = function() {\t\n\tvar i, j, k;\n\tvar default_sample_description_index, default_sample_duration, default_sample_size, default_sample_flags;\n\tvar last_run_position;\n\tvar box, moof, traf, trak, trex;\n\tvar sample;\n\tvar sample_flags;\n\t\n\tif (this.moov === undefined) {\n\t\treturn;\n\t}\n\t/* if the input file is fragmented and fetched in multiple downloads, we need to update the list of samples */\n\twhile (this.lastMoofIndex < this.moofs.length) {\n\t\tbox = this.moofs[this.lastMoofIndex];\n\t\tthis.lastMoofIndex++;\n\t\tif (box.type == \"moof\") {\n\t\t\tmoof = box;\n\t\t\tfor (i = 0; i < moof.trafs.length; i++) {\n\t\t\t\ttraf = moof.trafs[i];\n\t\t\t\ttrak = this.getTrackById(traf.tfhd.track_id);\n\t\t\t\ttrex = this.getTrexById(traf.tfhd.track_id);\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\t\t\t\tdefault_sample_description_index = traf.tfhd.default_sample_description_index;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_description_index = (trex ? trex.default_sample_description_index: 1);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\t\t\t\tdefault_sample_duration = traf.tfhd.default_sample_duration;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_duration = (trex ? trex.default_sample_duration : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\t\t\t\tdefault_sample_size = traf.tfhd.default_sample_size;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_size = (trex ? trex.default_sample_size : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\t\t\t\tdefault_sample_flags = traf.tfhd.default_sample_flags;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_flags = (trex ? trex.default_sample_flags : 0);\n\t\t\t\t}\n\t\t\t\ttraf.sample_number = 0;\n\t\t\t\t/* process sample groups */\n\t\t\t\tif (traf.sbgps.length > 0) {\n\t\t\t\t\tISOFile.initSampleGroups(trak, traf, traf.sbgps, trak.mdia.minf.stbl.sgpds, traf.sgpds);\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < traf.truns.length; j++) {\n\t\t\t\t\tvar trun = traf.truns[j];\n\t\t\t\t\tfor (k = 0; k < trun.sample_count; k++) {\n\t\t\t\t\t\tsample = {};\n\t\t\t\t\t\tsample.moof_number = this.lastMoofIndex;\n\t\t\t\t\t\tsample.number_in_traf = traf.sample_number;\n\t\t\t\t\t\ttraf.sample_number++;\n\t\t\t sample.number = trak.samples.length;\n\t\t\t\t\t\ttraf.first_sample_index = trak.samples.length;\n\t\t\t\t\t\ttrak.samples.push(sample);\n\t\t\t\t\t\tsample.track_id = trak.tkhd.track_id;\n\t\t\t\t\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\t\t\t\t\tsample.description_index = default_sample_description_index-1;\n\t\t\t\t\t\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\t\t\t\t\t\tsample.size = default_sample_size;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\t\t\t\tsample.size = trun.sample_size[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_size += sample.size;\n\t\t\t\t\t\tsample.duration = default_sample_duration;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\t\t\t\tsample.duration = trun.sample_duration[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_duration += sample.duration;\n\t\t\t\t\t\tif (trak.first_traf_merged || k > 0) {\n\t\t\t\t\t\t\tsample.dts = trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (traf.tfdt) {\n\t\t\t\t\t\t\t\tsample.dts = traf.tfdt.baseMediaDecodeTime;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.dts = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrak.first_traf_merged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.cts = sample.dts;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\t\t\t\tsample.cts = sample.dts + trun.sample_composition_time_offset[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample_flags = default_sample_flags;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\t\t\t\tsample_flags = trun.sample_flags[k];\n\t\t\t\t\t\t} else if (k === 0 && (trun.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG)) {\n\t\t\t\t\t\t\tsample_flags = trun.first_sample_flags;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.is_sync = ((sample_flags >> 16 & 0x1) ? false : true);\n\t\t\t\t\t\tsample.is_leading = (sample_flags >> 26 & 0x3);\n\t\t\t\t\t\tsample.depends_on = (sample_flags >> 24 & 0x3);\n\t\t\t\t\t\tsample.is_depended_on = (sample_flags >> 22 & 0x3);\n\t\t\t\t\t\tsample.has_redundancy = (sample_flags >> 20 & 0x3);\n\t\t\t\t\t\tsample.degradation_priority = (sample_flags & 0xFFFF);\n\t\t\t\t\t\t//ISOFile.process_sdtp(traf.sdtp, sample, sample.number_in_traf);\n\t\t\t\t\t\tvar bdop = (traf.tfhd.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar dbim = (traf.tfhd.flags & BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF) ? true : false;\n\t\t\t\t\t\tvar dop = (trun.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar bdo = 0;\n\t\t\t\t\t\tif (!bdop) {\n\t\t\t\t\t\t\tif (!dbim) {\n\t\t\t\t\t\t\t\tif (j === 0) { // the first track in the movie fragment\n\t\t\t\t\t\t\t\t\tbdo = moof.start; // the position of the first byte of the enclosing Movie Fragment Box\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbdo = last_run_position; // end of the data defined by the preceding *track* (irrespective of the track id) fragment in the moof\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbdo = moof.start;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbdo = traf.tfhd.base_data_offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === 0 && k === 0) {\n\t\t\t\t\t\t\tif (dop) {\n\t\t\t\t\t\t\t\tsample.offset = bdo + trun.data_offset; // If the data-offset is present, it is relative to the base-data-offset established in the track fragment header\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.offset = bdo; // the data for this run starts the base-data-offset defined by the track fragment header\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsample.offset = last_run_position; // this run starts immediately after the data of the previous run\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_run_position = sample.offset + sample.size;\n\t\t\t\t\t\tif (traf.sbgps.length > 0 || traf.sgpds.length > 0 ||\n\t\t\t\t\t\t\ttrak.mdia.minf.stbl.sbgps.length > 0 || trak.mdia.minf.stbl.sgpds.length > 0) {\n\t\t\t\t\t\t\tISOFile.setSampleGroupProperties(trak, sample, sample.number_in_traf, traf.sample_groups_info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (traf.subs) {\n\t\t\t\t\ttrak.has_fragment_subsamples = true;\n\t\t\t\t\tvar sample_index = traf.first_sample_index;\n\t\t\t\t\tfor (j = 0; j < traf.subs.entries.length; j++) {\n\t\t\t\t\t\tsample_index += traf.subs.entries[j].sample_delta;\n\t\t\t\t\t\tsample = trak.samples[sample_index-1];\n\t\t\t\t\t\tsample.subsamples = traf.subs.entries[j].subsamples;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n}\n\n/* Try to get sample data for a given sample:\n returns null if not found\n returns the same sample if already requested\n */\nISOFile.prototype.getSample = function(trak, sampleNum) {\t\n\tvar buffer;\n\tvar sample = trak.samples[sampleNum];\n\t\n\tif (!this.moov) {\n\t\treturn null;\n\t}\n\n\tif (!sample.data) {\n\t\t/* Not yet fetched */\n\t\tsample.data = new Uint8Array(sample.size);\n\t\tsample.alreadyRead = 0;\n\t\tthis.samplesDataSize += sample.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating sample #\"+sampleNum+\" on track #\"+trak.tkhd.track_id+\" of size \"+sample.size+\" (total: \"+this.samplesDataSize+\")\");\n\t} else if (sample.alreadyRead == sample.size) {\n\t\t/* Already fetched entirely */\n\t\treturn sample;\n\t}\n\n\t/* The sample has only been partially fetched, we need to check in all buffers */\n\twhile(true) {\n\t\tvar index =\tthis.stream.findPosition(true, sample.offset + sample.alreadyRead, false);\n\t\tif (index > -1) {\n\t\t\tbuffer = this.stream.buffers[index];\n\t\t\tvar lengthAfterStart = buffer.byteLength - (sample.offset + sample.alreadyRead - buffer.fileStart);\n\t\t\tif (sample.size - sample.alreadyRead <= lengthAfterStart) {\n\t\t\t\t/* the (rest of the) sample is entirely contained in this buffer */\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+(sample.size - sample.alreadyRead)+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, sample.size - sample.alreadyRead);\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += sample.size - sample.alreadyRead;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\tsample.alreadyRead = sample.size;\n\n\t\t\t\treturn sample;\n\t\t\t} else {\n\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\tif (lengthAfterStart === 0) return null;\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" partial data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\tsample.alreadyRead += lengthAfterStart;\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t/* keep looking in the next buffer */\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/* Release the memory used to store the data of the sample */\nISOFile.prototype.releaseSample = function(trak, sampleNum) {\t\n\tvar sample = trak.samples[sampleNum];\n\tif (sample.data) {\n\t\tthis.samplesDataSize -= sample.size;\n\t\tsample.data = null;\n\t\tsample.alreadyRead = 0;\n\t\treturn sample.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nISOFile.prototype.getAllocatedSampleDataSize = function() {\n\treturn this.samplesDataSize;\n}\n\n/* Builds the MIME Type 'codecs' sub-parameters for the whole file */\nISOFile.prototype.getCodecs = function() {\t\n\tvar i;\n\tvar codecs = \"\";\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\tvar trak = this.moov.traks[i];\n\t\tif (i>0) {\n\t\t\tcodecs+=\",\"; \n\t\t}\n\t\tcodecs += trak.mdia.minf.stbl.stsd.entries[0].getCodec();\t\t\n\t}\n\treturn codecs;\n}\n\n/* Helper function */\nISOFile.prototype.getTrexById = function(id) {\t\n\tvar i;\n\tif (!this.moov || !this.moov.mvex) return null;\n\tfor (i = 0; i < this.moov.mvex.trexs.length; i++) {\n\t\tvar trex = this.moov.mvex.trexs[i];\n\t\tif (trex.track_id == id) return trex;\n\t}\n\treturn null;\n}\n\n/* Helper function */\nISOFile.prototype.getTrackById = function(id) {\n\tif (this.moov === undefined) {\n\t\treturn null;\n\t}\n\tfor (var j = 0; j < this.moov.traks.length; j++) {\n\t\tvar trak = this.moov.traks[j];\n\t\tif (trak.tkhd.track_id == id) return trak;\n\t}\n\treturn null;\n}\n// file:src/isofile-item-processing.js\n/* size of the buffers allocated for samples */\nISOFile.prototype.itemsDataSize = 0;\n\nISOFile.prototype.flattenItemInfo = function() {\t\n\tvar items = this.items;\n\tvar entity_groups = this.entity_groups;\n\tvar i, j;\n\tvar item;\n\tvar meta = this.meta;\n\tif (meta === null || meta === undefined) return;\n\tif (meta.hdlr === undefined) return;\n\tif (meta.iinf === undefined) return;\n\tfor (i = 0; i < meta.iinf.item_infos.length; i++) {\n\t\titem = {};\n\t\titem.id = meta.iinf.item_infos[i].item_ID;\n\t\titems[item.id] = item;\n\t\titem.ref_to = [];\n\t\titem.name = meta.iinf.item_infos[i].item_name;\n\t\tif (meta.iinf.item_infos[i].protection_index > 0) {\n\t\t\titem.protection = meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1];\n\t\t}\n\t\tif (meta.iinf.item_infos[i].item_type) {\n\t\t\titem.type = meta.iinf.item_infos[i].item_type;\n\t\t} else {\n\t\t\titem.type = \"mime\";\n\t\t}\n\t\titem.content_type = meta.iinf.item_infos[i].content_type;\n\t\titem.content_encoding = meta.iinf.item_infos[i].content_encoding;\n\t\titem.item_uri_type = meta.iinf.item_infos[i].item_uri_type;\n\t}\n\tif (meta.grpl) {\n\t\tfor (i = 0; i < meta.grpl.boxes.length; i++) {\n\t\t\tentity_group = {};\n\t\t\tentity_group.id = meta.grpl.boxes[i].group_id;\n\t\t\tentity_group.entity_ids = meta.grpl.boxes[i].entity_ids;\n\t\t\tentity_group.type = meta.grpl.boxes[i].type;\n\t\t\tentity_groups[entity_group.id] = entity_group;\n\t\t}\n\t}\n\tif (meta.iloc) {\n\t\tfor(i = 0; i < meta.iloc.items.length; i++) {\n\t\t\tvar offset;\n\t\t\tvar itemloc = meta.iloc.items[i];\n\t\t\titem = items[itemloc.item_ID];\n\t\t\tif (itemloc.data_reference_index !== 0) {\n\t\t\t\tLog.warn(\"Item storage with reference to other files: not supported\");\n\t\t\t\titem.source = meta.dinf.boxes[itemloc.data_reference_index-1];\n\t\t\t}\n\t\t\tswitch(itemloc.construction_method) {\n\t\t\t\tcase 0: // offset into the file referenced by the data reference index\n\t\t\t\tbreak;\n\t\t\t\tcase 1: // offset into the idat box of this meta box\n\t\t\t\tbreak;\n\t\t\t\tcase 2: // offset into another item\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem.extents = [];\n\t\t\titem.size = 0;\n\t\t\tfor (j = 0; j < itemloc.extents.length; j++) {\n\t\t\t\titem.extents[j] = {};\n\t\t\t\titem.extents[j].offset = itemloc.extents[j].extent_offset + itemloc.base_offset;\n\t\t\t\tif (itemloc.construction_method == 1) {\n\t\t\t\t\titem.extents[j].offset += meta.idat.start + meta.idat.hdr_size;\n\t\t\t\t}\n\t\t\t\titem.extents[j].length = itemloc.extents[j].extent_length;\n\t\t\t\titem.extents[j].alreadyRead = 0;\n\t\t\t\titem.size += item.extents[j].length;\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.pitm) {\n\t\titems[meta.pitm.item_id].primary = true;\n\t}\n\tif (meta.iref) {\n\t\tfor (i=0; i <meta.iref.references.length; i++) {\n\t\t\tvar ref = meta.iref.references[i];\n\t\t\tfor (j=0; j<ref.references.length; j++) {\n\t\t\t\titems[ref.from_item_ID].ref_to.push({type: ref.type, id: ref.references[j]});\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.iprp) {\n\t\tfor (var k = 0; k < meta.iprp.ipmas.length; k++) {\n\t\t\tvar ipma = meta.iprp.ipmas[k];\n\t\t\tfor (i = 0; i < ipma.associations.length; i++) {\n\t\t\t\tvar association = ipma.associations[i];\n\t\t\t\titem = items[association.id];\n\t\t\t\tif (!item) {\n\t\t\t\t\titem = entity_groups[association.id];\n\t\t\t\t}\n\t\t\t\tif (item) {\n\t\t\t\t\tif (item.properties === undefined) {\n\t\t\t\t\t\titem.properties = {};\n\t\t\t\t\t\titem.properties.boxes = [];\n\t\t\t\t\t}\n\t\t\t\t\tfor (j = 0; j < association.props.length; j++) {\n\t\t\t\t\t\tvar propEntry = association.props[j];\n\t\t\t\t\t\tif (propEntry.property_index > 0 && propEntry.property_index-1 < meta.iprp.ipco.boxes.length) {\n\t\t\t\t\t\t\tvar propbox = meta.iprp.ipco.boxes[propEntry.property_index-1];\n\t\t\t\t\t\t\titem.properties[propbox.type] = propbox;\n\t\t\t\t\t\t\titem.properties.boxes.push(propbox);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.getItem = function(item_id) {\t\n\tvar buffer;\n\tvar item;\n\t\n\tif (!this.meta) {\n\t\treturn null;\n\t}\n\n \titem = this.items[item_id];\n\tif (!item.data && item.size) {\n\t\t/* Not yet fetched */\n\t\titem.data = new Uint8Array(item.size);\n\t\titem.alreadyRead = 0;\n\t\tthis.itemsDataSize += item.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating item #\"+item_id+\" of size \"+item.size+\" (total: \"+this.itemsDataSize+\")\");\n\t} else if (item.alreadyRead === item.size) {\n\t\t/* Already fetched entirely */\n\t\treturn item;\n\t}\n\n\t/* The item has only been partially fetched, we need to check in all buffers to find the remaining extents*/\n\n\tfor (var i = 0; i < item.extents.length; i++) {\n\t\tvar extent = item.extents[i];\n\t\tif (extent.alreadyRead === extent.length) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tvar index =\tthis.stream.findPosition(true, extent.offset + extent.alreadyRead, false);\n\t\t\tif (index > -1) {\n\t\t\t\tbuffer = this.stream.buffers[index];\n\t\t\t\tvar lengthAfterStart = buffer.byteLength - (extent.offset + extent.alreadyRead - buffer.fileStart);\n\t\t\t\tif (extent.length - extent.alreadyRead <= lengthAfterStart) {\n\t\t\t\t\t/* the (rest of the) extent is entirely contained in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" data (alreadyRead: \"+extent.alreadyRead+\n\t\t\t\t\t\t\" offset: \"+(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+(extent.length - extent.alreadyRead)+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, extent.length - extent.alreadyRead);\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += extent.length - extent.alreadyRead;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t\titem.alreadyRead += (extent.length - extent.alreadyRead);\n\t\t\t\t\textent.alreadyRead = extent.length;\n\t\t\t\t} else {\n\t\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" partial data (alreadyRead: \"+extent.alreadyRead+\" offset: \"+\n\t\t\t\t\t\t(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\t\textent.alreadyRead += lengthAfterStart;\n\t\t\t\t\titem.alreadyRead += lengthAfterStart;\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tif (item.alreadyRead === item.size) {\n\t\t/* fetched entirely */\n\t\treturn item;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Release the memory used to store the data of the item */\nISOFile.prototype.releaseItem = function(item_id) {\t\n\tvar item = this.items[item_id];\n\tif (item.data) {\n\t\tthis.itemsDataSize -= item.size;\n\t\titem.data = null;\n\t\titem.alreadyRead = 0;\n\t\tfor (var i = 0; i < item.extents.length; i++) {\n\t\t\tvar extent = item.extents[i];\n\t\t\textent.alreadyRead = 0;\n\t\t}\n\t\treturn item.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\nISOFile.prototype.processItems = function(callback) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tthis.getItem(item.id);\n\t\tif (callback && !item.sent) {\n\t\t\tcallback(item);\n\t\t\titem.sent = true;\n\t\t\titem.data = null;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasItem = function(name) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tif (item.name === name) {\n\t\t\treturn item.id;\n\t\t}\n\t}\n\treturn -1;\n}\n\nISOFile.prototype.getMetaHandler = function() {\n\tif (!this.meta) {\n\t\treturn null;\n\t} else {\n\t\treturn this.meta.hdlr.handler;\t\t\n\t}\n}\n\nISOFile.prototype.getPrimaryItem = function() {\n\tif (!this.meta || !this.meta.pitm) {\n\t\treturn null;\n\t} else {\n\t\treturn this.getItem(this.meta.pitm.item_id);\n\t}\n}\n\nISOFile.prototype.itemToFragmentedTrackFile = function(_options) {\n\tvar options = _options || {};\n\tvar item = null;\n\tif (options.itemId) {\n\t\titem = this.getItem(options.itemId);\n\t} else {\n\t\titem = this.getPrimaryItem();\n\t}\n\tif (item == null) return null;\n\n\tvar file = new ISOFile();\n\tfile.discardMdatData = false;\n\t// assuming the track type is the same as the item type\n\tvar trackOptions = { type: item.type, description_boxes: item.properties.boxes};\n\tif (item.properties.ispe) {\n\t\ttrackOptions.width = item.properties.ispe.image_width;\n\t\ttrackOptions.height = item.properties.ispe.image_height;\n\t}\n\tvar trackId = file.addTrack(trackOptions);\n\tif (trackId) {\n\t\tfile.addSample(trackId, item.data);\n\t\treturn file;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n// file:src/isofile-write.js\n/* Rewrite the entire file */\nISOFile.prototype.write = function(outstream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(outstream);\n\t}\n}\n\nISOFile.prototype.createFragment = function(track_id, sampleNumber, stream_) {\n\tvar trak = this.getTrackById(track_id);\n\tvar sample = this.getSample(trak, sampleNumber);\n\tif (sample == null) {\n\t\tthis.setNextSeekPositionFromSample(trak.samples[sampleNumber]);\n\t\treturn null;\n\t}\n\t\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\n\tvar moof = this.createSingleSampleMoof(sample);\n\tmoof.write(stream);\n\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tLog.debug(\"MP4Box\", \"Adjusting data_offset with new value \"+moof.trafs[0].truns[0].data_offset);\n\tstream.adjustUint32(moof.trafs[0].truns[0].data_offset_position, moof.trafs[0].truns[0].data_offset);\n\t\t\n\tvar mdat = new BoxParser.mdatBox();\n\tmdat.data = sample.data;\n\tmdat.write(stream);\n\treturn stream;\n}\n\n/* Modify the file and create the initialization segment */\nISOFile.writeInitializationSegment = function(ftyp, moov, total_duration, sample_duration) {\n\tvar i;\n\tvar index;\n\tvar mehd;\n\tvar trex;\n\tvar box;\n\tLog.debug(\"ISOFile\", \"Generating initialization segment\");\n\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tftyp.write(stream);\n\t\n\t/* we can now create the new mvex box */\n\tvar mvex = moov.add(\"mvex\");\n\tif (total_duration) {\n\t\tmvex.add(\"mehd\").set(\"fragment_duration\", total_duration);\n\t}\n\tfor (i = 0; i < moov.traks.length; i++) {\n\t\tmvex.add(\"trex\").set(\"track_id\", moov.traks[i].tkhd.track_id)\n\t\t\t\t\t\t.set(\"default_sample_description_index\", 1)\n\t\t\t\t\t\t.set(\"default_sample_duration\", sample_duration)\n\t\t\t\t\t\t.set(\"default_sample_size\", 0)\n\t\t\t\t\t\t.set(\"default_sample_flags\", 1<<16)\n\t}\n\tmoov.write(stream);\n\n\treturn stream.buffer;\n\n}\n\nISOFile.prototype.save = function(name) {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\tstream.save(name);\t\n}\n\nISOFile.prototype.getBuffer = function() {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\treturn stream.buffer;\n}\n\nISOFile.prototype.initializeSegmentation = function() {\n\tvar i;\n\tvar j;\n\tvar box;\n\tvar initSegs;\n\tvar trak;\n\tvar seg;\n\tif (this.onSegment === null) {\n\t\tLog.warn(\"MP4Box\", \"No segmentation callback set!\");\n\t}\n\tif (!this.isFragmentationInitialized) {\n\t\tthis.isFragmentationInitialized = true;\t\t\n\t\tthis.nextMoofNumber = 0;\n\t\tthis.resetTables();\n\t}\t\n\tinitSegs = [];\t\n\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar moov = new BoxParser.moovBox();\n\t\tmoov.mvhd = this.moov.mvhd;\n\t moov.boxes.push(moov.mvhd);\n\t\ttrak = this.getTrackById(this.fragmentedTracks[i].id);\n\t\tmoov.boxes.push(trak);\n\t\tmoov.traks.push(trak);\n\t\tseg = {};\n\t\tseg.id = trak.tkhd.track_id;\n\t\tseg.user = this.fragmentedTracks[i].user;\n\t\tseg.buffer = ISOFile.writeInitializationSegment(this.ftyp, moov, (this.moov.mvex && this.moov.mvex.mehd ? this.moov.mvex.mehd.fragment_duration: undefined), (this.moov.traks[i].samples.length>0 ? this.moov.traks[i].samples[0].duration: 0));\n\t\tinitSegs.push(seg);\n\t}\n\treturn initSegs;\n}\n\n// file:src/box-print.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.printHeader = function(output) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\toutput.log(output.indent+\"size:\"+this.size);\n\toutput.log(output.indent+\"type:\"+this.type);\n}\n\nBoxParser.FullBox.prototype.printHeader = function(output) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"version:\"+this.version);\n\toutput.log(output.indent+\"flags:\"+this.flags);\n}\n\nBoxParser.Box.prototype.print = function(output) {\n\tthis.printHeader(output);\n}\n\nBoxParser.ContainerBox.prototype.print = function(output) {\n\tthis.printHeader(output);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tvar prev_indent = output.indent;\n\t\t\toutput.indent += \" \";\n\t\t\tthis.boxes[i].print(output);\n\t\t\toutput.indent = prev_indent;\n\t\t}\n\t}\n}\n\nISOFile.prototype.print = function(output) {\n\toutput.indent = \"\";\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].print(output);\n\t\t}\n\t}\t\n}\n\nBoxParser.mvhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"timescale: \"+this.timescale);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"rate: \"+this.rate);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"next_track_id: \"+this.next_track_id);\n}\n\nBoxParser.tkhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"track_id: \"+this.track_id);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"layer: \"+this.layer);\n\toutput.log(output.indent+\"alternate_group: \"+this.alternate_group);\n\toutput.log(output.indent+\"width: \"+this.width);\n\toutput.log(output.indent+\"height: \"+this.height);\n}// file:src/mp4box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MP4Box = {};\n\nMP4Box.createFile = function (_keepMdatData, _stream) {\n\t/* Boolean indicating if bytes containing media data should be kept in memory */\n\tvar keepMdatData = (_keepMdatData !== undefined ? _keepMdatData : true);\n\tvar file = new ISOFile(_stream);\n\tfile.discardMdatData = (keepMdatData ? false : true);\n\treturn file;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.createFile = MP4Box.createFile;\n}\n","/**\n * Monitor and report backpressure status across pipeline stages\n * This is a runtime monitoring tool used by plugins\n */\nexport class BackpressureMonitor {\n private metrics = new Map<\n string,\n {\n desiredSize: number;\n queueSize: number;\n isPaused: boolean;\n lastUpdate: number;\n }\n >();\n\n /**\n * Update metrics for a stage\n */\n updateMetrics(stage: string, desiredSize: number, queueSize: number = 0): void {\n const isPaused = desiredSize <= 0;\n this.metrics.set(stage, {\n desiredSize,\n queueSize,\n isPaused,\n lastUpdate: Date.now(),\n });\n }\n\n /**\n * Get current metrics snapshot\n */\n getSnapshot(): Record<\n string,\n {\n desiredSize: number;\n queueSize: number;\n isPaused: boolean;\n age: number;\n }\n > {\n const now = Date.now();\n const snapshot: Record<string, any> = {};\n\n for (const [stage, metrics] of this.metrics) {\n snapshot[stage] = {\n ...metrics,\n age: now - metrics.lastUpdate,\n };\n }\n\n return snapshot;\n }\n\n /**\n * Check if any stage is experiencing backpressure\n */\n hasBackpressure(): boolean {\n for (const metrics of this.metrics.values()) {\n if (metrics.isPaused) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get stages currently experiencing backpressure\n */\n getBottlenecks(): string[] {\n const bottlenecks: string[] = [];\n for (const [stage, metrics] of this.metrics) {\n if (metrics.isPaused) {\n bottlenecks.push(stage);\n }\n }\n return bottlenecks;\n }\n\n /**\n * Clear all metrics\n */\n clear(): void {\n this.metrics.clear();\n }\n}\n","import * as MP4Box from 'mp4box';\nimport type { DemuxConfig, TrackInfo } from './types';\nimport { BackpressureMonitor } from '../../plugins/BackpressureMonitor';\n\n/**\n * MP4 Demuxer - Extract encoded chunks from MP4 container\n * Simplified implementation following Stream API pattern\n */\nexport class MP4Demuxer {\n private mp4boxFile: any;\n tracks = new Map<number, TrackInfo>();\n isReady = false;\n private videoController?: TransformStreamDefaultController<EncodedVideoChunk>;\n private audioController?: TransformStreamDefaultController<EncodedAudioChunk>;\n private backpressureMonitor: BackpressureMonitor;\n private demuxHighWaterMark: number;\n private onReadyCallback?: () => void;\n private fileOffset = 0;\n private videoTimestampOffset: number | null = null;\n private audioTimestampOffset: number | null = null;\n\n constructor(config: DemuxConfig & { onReady?: () => void } = {}) {\n this.mp4boxFile = MP4Box.createFile();\n this.backpressureMonitor = new BackpressureMonitor();\n this.onReadyCallback = config.onReady;\n\n // Use provided config with local default as fallback\n const DEFAULT_HIGH_WATER_MARK = 10; // Default for video chunks\n this.demuxHighWaterMark = config.highWaterMark ?? DEFAULT_HIGH_WATER_MARK;\n\n this.setupHandlers();\n }\n\n updateConfig(config: DemuxConfig): void {\n this.demuxHighWaterMark = config.highWaterMark ?? this.demuxHighWaterMark;\n }\n\n private setupHandlers(): void {\n this.mp4boxFile.onError = (error: string) => {\n console.error('MP4Box error:', error);\n this.videoController?.error(new Error(error));\n this.audioController?.error(new Error(error));\n };\n\n this.mp4boxFile.onReady = (info: any) => {\n this.processTracks(info.tracks);\n this.isReady = true;\n\n // Call the ready callback before starting\n if (this.onReadyCallback) {\n this.onReadyCallback();\n }\n\n // Start processing samples after callback\n // Note: start() enables extraction, actual samples will be output\n // when flush() is called (by TransformStream's flush callback)\n this.mp4boxFile.start();\n };\n\n this.mp4boxFile.onSamples = (trackId: number, _user: any, samples: any[]) => {\n this.processSamples(trackId, samples);\n };\n }\n\n private processTracks(tracks: any[]): void {\n for (const track of tracks) {\n const trackInfo: TrackInfo = {\n id: track.id,\n type: track.type === 'video' ? 'video' : 'audio',\n codec: track.codec,\n timescale: track.timescale,\n };\n\n if (track.type === 'video') {\n trackInfo.width = track.video?.width;\n trackInfo.height = track.video?.height;\n trackInfo.description = this.getVideoDescription(track);\n } else if (track.type === 'audio') {\n trackInfo.sampleRate = track.audio?.sample_rate;\n trackInfo.numberOfChannels = track.audio?.channel_count;\n trackInfo.description = this.getAudioDescription(track);\n }\n\n this.tracks.set(track.id, trackInfo);\n\n // Configure extraction\n this.mp4boxFile.setExtractionOptions(track.id, track, {\n nbSamples: 30, // Batch size per callback (balance between latency and overhead)\n });\n }\n }\n\n private processSamples(trackId: number, samples: any[]): void {\n const track = this.tracks.get(trackId);\n if (!track) return;\n\n const timescale = track.timescale || 90000;\n for (const sample of samples) {\n const rawTimestamp = (sample.cts * 1000000) / timescale;\n const duration = (sample.duration * 1000000) / timescale;\n\n if (track.type === 'video') {\n if (!this.videoController) {\n console.error('[MP4Demuxer] videoController is null when trying to output chunk!');\n // Should not happen - stream should be created before appendBuffer\n return;\n }\n\n // Normalize timestamp: first frame starts at 0\n if (this.videoTimestampOffset === null) {\n this.videoTimestampOffset = rawTimestamp;\n }\n const timestamp = rawTimestamp - this.videoTimestampOffset;\n\n const chunk = new EncodedVideoChunk({\n type: sample.is_sync ? 'key' : 'delta',\n timestamp,\n duration,\n data: sample.data,\n });\n this.videoController.enqueue(chunk);\n } else if (track.type === 'audio' && this.audioController) {\n // Normalize timestamp: first frame starts at 0\n if (this.audioTimestampOffset === null) {\n this.audioTimestampOffset = rawTimestamp;\n }\n const timestamp = rawTimestamp - this.audioTimestampOffset;\n\n const chunk = new EncodedAudioChunk({\n type: 'key',\n timestamp,\n duration,\n data: sample.data,\n });\n this.audioController.enqueue(chunk);\n }\n }\n\n const last = samples[samples.length - 1].number;\n // Release memory immediately\n this.mp4boxFile.releaseUsedSamples(trackId, last + 1);\n }\n\n private getVideoDescription(track: any): ArrayBuffer | undefined {\n try {\n const fullTrack = this.mp4boxFile.getTrackById(track.id);\n for (const entry of fullTrack.mdia.minf.stbl.stsd.entries) {\n const box = entry.avcC ?? entry.hvcC ?? entry.av1C ?? entry.vpcC;\n if (box) {\n const stream = new (MP4Box as any).DataStream(\n undefined,\n 0,\n (MP4Box as any).DataStream.BIG_ENDIAN // IMPORTANT: must be BIG_ENDIAN\n );\n box.write(stream);\n return new Uint8Array(stream.buffer.slice(8)).buffer;\n }\n }\n } catch (error) {\n console.error('Failed to get video description:', error);\n }\n return undefined;\n }\n\n // private getVideoDescription(track: any): ArrayBuffer | undefined {\n // if (!this.mp4boxFile) return undefined;\n // return getVideoDescription(this.mp4boxFile, track);\n // }\n\n private getAudioDescription(track: any): ArrayBuffer | undefined {\n try {\n const fullTrack = this.mp4boxFile.getTrackById(track.id);\n for (const entry of fullTrack.mdia.minf.stbl.stsd.entries) {\n if (entry.esds || entry.dOps) {\n const stream = new (MP4Box as any).DataStream();\n (entry.esds || entry.dOps).write(stream);\n return new Uint8Array(stream.buffer.slice(8)).buffer;\n }\n }\n } catch (error) {\n console.error('Failed to get audio description:', error);\n }\n return undefined;\n }\n\n /**\n * Create transform stream for video track\n */\n createVideoStream(): TransformStream<Uint8Array, EncodedVideoChunk> {\n // const hasVideo = Array.from(this.tracks.values()).some((t) => t.type === 'video');\n return new TransformStream<Uint8Array, EncodedVideoChunk>(\n {\n start: (controller) => {\n this.videoController = controller;\n },\n transform: (chunk, controller) => {\n // Update backpressure metrics\n // desiredSize can be null, negative (backpressure), or positive\n const desiredSize = controller.desiredSize ?? this.demuxHighWaterMark;\n this.backpressureMonitor.updateMetrics('demux-video', desiredSize);\n\n // Create a copy to avoid buffer reuse issues (required for mp4box 0.5.x)\n const chunkData = new Uint8Array(chunk);\n this.appendBuffer(chunkData);\n\n // Flush after each append to trigger sample extraction immediately\n this.mp4boxFile.flush();\n },\n flush: async () => {\n // Trigger MP4Box flush\n this.mp4boxFile.flush();\n\n // Wait for MP4Box to complete sample extraction (onSamples callbacks)\n // Give MP4Box time to process asynchronously\n await new Promise((resolve) => setTimeout(resolve, 100));\n },\n },\n // Queuing strategy: use configuration\n {\n highWaterMark: this.demuxHighWaterMark,\n size: () => 1, // Count-based\n }\n );\n }\n\n /**\n * Create transform stream for audio track\n */\n createAudioStream(): TransformStream<Uint8Array, EncodedAudioChunk> | null {\n const hasAudio = Array.from(this.tracks.values()).some((t) => t.type === 'audio');\n if (!hasAudio) return null;\n\n return new TransformStream<Uint8Array, EncodedAudioChunk>(\n {\n start: (controller) => {\n this.audioController = controller;\n },\n transform: (chunk, controller) => {\n // Update backpressure metrics\n // desiredSize can be null, negative (backpressure), or positive\n const desiredSize = controller.desiredSize ?? this.demuxHighWaterMark;\n this.backpressureMonitor.updateMetrics('demux-audio', desiredSize);\n\n // Create a copy to avoid buffer reuse issues (required for mp4box 0.5.x)\n const chunkData = new Uint8Array(chunk);\n this.appendBuffer(chunkData);\n\n // Flush after each append to trigger sample extraction immediately\n this.mp4boxFile.flush();\n },\n flush: () => {\n this.mp4boxFile.flush();\n },\n },\n // Queuing strategy: use configuration\n {\n highWaterMark: this.demuxHighWaterMark,\n size: () => 1,\n }\n );\n }\n\n appendBuffer(chunk: Uint8Array): void {\n const buffer = chunk.buffer as ArrayBuffer & { fileStart: number };\n buffer.fileStart = this.fileOffset;\n this.mp4boxFile.appendBuffer(buffer);\n this.fileOffset += chunk.byteLength;\n }\n\n /**\n * Get video track info if available\n */\n get videoTrackInfo(): TrackInfo | undefined {\n return Array.from(this.tracks.values()).find((track) => track.type === 'video');\n }\n\n /**\n * Get audio track info if available\n */\n get audioTrackInfo(): TrackInfo | undefined {\n return Array.from(this.tracks.values()).find((track) => track.type === 'audio');\n }\n\n destroy(): void {\n this.mp4boxFile?.stop();\n this.mp4boxFile = null;\n this.tracks.clear();\n this.backpressureMonitor.clear();\n this.isReady = false;\n this.videoTimestampOffset = null;\n this.audioTimestampOffset = null;\n }\n}\n","const BITRATE_TABLE: Record<string, number[]> = {\n '1-3': [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0],\n '1-2': [0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 0],\n '1-1': [0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0],\n '2-3': [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0],\n '2-2': [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0],\n '2-1': [0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0],\n};\n\nconst SAMPLE_RATE_TABLE: Record<number, number[]> = {\n 1: [44100, 48000, 32000],\n 2: [22050, 24000, 16000],\n 2.5: [11025, 12000, 8000],\n};\n\nexport interface MP3Config {\n codec: 'mp3';\n sampleRate: number;\n channels: number;\n bitrateKbps: number | null;\n samplesPerFrame: number;\n}\n\nexport interface MP3Frame {\n data: Uint8Array;\n timestampUs: number;\n durationUs: number;\n}\n\ninterface ParseResult {\n frames: MP3Frame[];\n config?: MP3Config;\n}\n\nexport class MP3FrameParser {\n private buffer = new Uint8Array(0);\n private config: MP3Config | null = null;\n private timestampUs = 0;\n\n push(chunk: Uint8Array): ParseResult {\n this.appendToBuffer(chunk);\n this.skipId3Headers();\n\n const frames: MP3Frame[] = [];\n let configEmitted: MP3Config | undefined;\n\n let offset = 0;\n while (offset <= this.buffer.length - 4) {\n const header = this.parseHeader(this.buffer, offset);\n if (!header) {\n offset += 1;\n continue;\n }\n\n if (offset + header.frameSize > this.buffer.length) {\n break;\n }\n\n const frameBytes = this.buffer.slice(offset, offset + header.frameSize);\n const durationUs = Math.round((header.samplesPerFrame * 1_000_000) / header.sampleRate);\n\n if (!this.config) {\n this.config = {\n codec: 'mp3',\n sampleRate: header.sampleRate,\n channels: header.channels,\n bitrateKbps: header.bitrateKbps,\n samplesPerFrame: header.samplesPerFrame,\n };\n configEmitted = this.config;\n }\n\n frames.push({\n data: frameBytes,\n timestampUs: this.timestampUs,\n durationUs,\n });\n\n this.timestampUs += durationUs;\n offset += header.frameSize;\n }\n\n if (offset > 0) {\n this.buffer = this.buffer.slice(offset);\n }\n\n return { frames, config: configEmitted };\n }\n\n flush(): MP3Frame[] {\n const { frames } = this.push(new Uint8Array(0));\n const remainder = this.buffer;\n this.buffer = new Uint8Array(0);\n if (remainder.length) {\n console.warn('[MP3FrameParser] Remaining unparsed bytes:', remainder.length);\n }\n return frames;\n }\n\n private appendToBuffer(chunk: Uint8Array): void {\n if (chunk.length === 0) {\n return;\n }\n const combined = new Uint8Array(this.buffer.length + chunk.length);\n combined.set(this.buffer, 0);\n combined.set(chunk, this.buffer.length);\n this.buffer = combined;\n }\n\n private skipId3Headers(): void {\n let offset = 0;\n while (this.buffer.length - offset >= 10) {\n if (\n this.buffer[offset] === 0x49 &&\n this.buffer[offset + 1] === 0x44 &&\n this.buffer[offset + 2] === 0x33\n ) {\n const size = this.readSynchsafeInteger(this.buffer.subarray(offset + 6, offset + 10));\n const total = size + 10;\n if (offset + total <= this.buffer.length) {\n offset += total;\n continue;\n }\n }\n break;\n }\n if (offset > 0) {\n this.buffer = this.buffer.slice(offset);\n }\n }\n\n private parseHeader(\n buffer: Uint8Array,\n offset: number\n ): {\n frameSize: number;\n sampleRate: number;\n channels: number;\n bitrateKbps: number | null;\n samplesPerFrame: number;\n } | null {\n if (offset + 3 >= buffer.length) {\n return null;\n }\n if (buffer[offset] !== 0xff || ((buffer[offset + 1] ?? 0) & 0xe0) !== 0xe0) {\n return null;\n }\n\n const versionBits = ((buffer[offset + 1] ?? 0) >> 3) & 0x03;\n const layerBits = ((buffer[offset + 1] ?? 0) >> 1) & 0x03;\n const bitrateIndex = ((buffer[offset + 2] ?? 0) >> 4) & 0x0f;\n const sampleRateIndex = ((buffer[offset + 2] ?? 0) >> 2) & 0x03;\n const paddingBit = ((buffer[offset + 2] ?? 0) >> 1) & 0x01;\n const channelMode = ((buffer[offset + 3] ?? 0) >> 6) & 0x03;\n\n const version = this.getVersion(versionBits);\n const layer = this.getLayer(layerBits);\n if (!version || !layer) {\n return null;\n }\n\n const sampleRate = SAMPLE_RATE_TABLE[version]?.[sampleRateIndex] ?? null;\n if (!sampleRate) {\n return null;\n }\n\n const bitrateKey = `${version === 1 ? 1 : 2}-${layer}`;\n const bitrateKbps = BITRATE_TABLE[bitrateKey]?.[bitrateIndex] ?? null;\n if (bitrateKbps === null) {\n return null;\n }\n\n const samplesPerFrame = this.getSamplesPerFrame(version, layer);\n const frameSize = this.calculateFrameSize(layer, bitrateKbps, sampleRate, paddingBit);\n if (!frameSize || frameSize < 24) {\n return null;\n }\n\n const channels = channelMode === 3 ? 1 : 2;\n\n return {\n frameSize,\n sampleRate,\n channels,\n bitrateKbps: bitrateKbps || null,\n samplesPerFrame,\n };\n }\n\n private getVersion(bits: number): 1 | 2 | 2.5 | null {\n switch (bits) {\n case 0b11:\n return 1;\n case 0b10:\n return 2;\n case 0b00:\n return 2.5;\n default:\n return null;\n }\n }\n\n private getLayer(bits: number): 1 | 2 | 3 | null {\n switch (bits) {\n case 0b11:\n return 1;\n case 0b10:\n return 2;\n case 0b01:\n return 3;\n default:\n return null;\n }\n }\n\n private getSamplesPerFrame(version: 1 | 2 | 2.5, layer: 1 | 2 | 3): number {\n if (layer === 1) {\n return 384;\n }\n if (layer === 2) {\n return 1152;\n }\n return version === 1 ? 1152 : 576;\n }\n\n private calculateFrameSize(\n layer: 1 | 2 | 3,\n bitrateKbps: number,\n sampleRate: number,\n padding: number\n ): number {\n if (bitrateKbps <= 0) {\n return 0;\n }\n\n if (layer === 1) {\n return ((12 * bitrateKbps * 1000) / sampleRate + padding) * 4;\n }\n\n return Math.floor((144 * bitrateKbps * 1000) / sampleRate + padding);\n }\n\n private readSynchsafeInteger(bytes: Uint8Array): number {\n if (bytes.length !== 4) {\n return 0;\n }\n return (\n (((bytes[0] ?? 0) & 0x7f) << 21) |\n (((bytes[1] ?? 0) & 0x7f) << 14) |\n (((bytes[2] ?? 0) & 0x7f) << 7) |\n ((bytes[3] ?? 0) & 0x7f)\n );\n }\n}\n","import { WorkerChannel } from '../../worker/WorkerChannel';\nimport { WorkerMessageType, WorkerState } from '../../worker/types';\nimport { MP4Demuxer } from './MP4Demuxer';\nimport { MP3FrameParser, type MP3Config, type MP3Frame } from './MP3FrameParser';\nimport type { DemuxConfig } from './types';\n\n/**\n * AudioDemuxWorker - First stage for audio processing\n * Extracts audio tracks from various container formats (MP3, MP4/M4A, etc.)\n *\n * Pipeline: ResourceLoader (Main Thread) → AudioDemuxWorker → DecodeWorker\n *\n * Features:\n * - Multi-format support (MP3, AAC in MP4/M4A)\n * - Stream-based processing with backpressure\n * - Direct streaming to DecodeWorker\n */\nexport class AudioDemuxWorker {\n private channel: WorkerChannel;\n private demuxer: MP4Demuxer | null = null;\n private audioStream: TransformStream<Uint8Array, EncodedAudioChunk> | null = null;\n private mp3Parser: MP3FrameParser | null = null;\n private currentFormat: 'mp3' | 'mp4' | null = null;\n\n // Connection to decoder worker\n private decoderPort: MessagePort | null = null;\n\n constructor() {\n // Initialize WorkerChannel\n this.channel = new WorkerChannel(self as any, {\n name: 'AudioDemuxWorker',\n timeout: 30000,\n });\n\n this.setupHandlers();\n }\n\n private setupHandlers(): void {\n // Register message handlers\n this.channel.registerHandler('configure', this.handleConfigure.bind(this));\n // Unified stream connect (feature-flagged)\n this.channel.registerHandler('connect' as any, this.handleConnect.bind(this));\n // Unified stream connect only\n this.channel.registerHandler('get_stats', this.handleGetStats.bind(this));\n this.channel.registerHandler(WorkerMessageType.Dispose, this.handleDispose.bind(this));\n\n // Setup stream receiver from ResourceLoader (main thread)\n this.channel.receiveStream(this.handleInputStream.bind(this));\n }\n\n /**\n * Unified connect handler used by stream pipeline\n */\n private async handleConnect(payload: {\n direction: 'upstream';\n port: MessagePort;\n streamType: 'video' | 'audio' | 'frame' | 'chunk';\n }): Promise<{ success: boolean }> {\n this.decoderPort = payload.port;\n // Demux connects upstream to decoder\n return { success: true };\n }\n\n /**\n * Configure demuxer with format settings\n * @param payload.config - Demuxer configuration\n * @param payload.initial - If true, initialize worker state; otherwise just update config\n */\n private async handleConfigure(payload: {\n config: DemuxConfig;\n initial?: boolean;\n }): Promise<{ success: boolean; tracks?: any[] }> {\n const { config, initial = false } = payload;\n\n try {\n if (initial) {\n // Initial setup - set worker state to ready\n this.channel.state = WorkerState.Ready;\n\n // Detect format and create appropriate demuxer\n const format = config.container || this.detectFormat(config);\n\n if (format === 'mp3') {\n this.mp3Parser = new MP3FrameParser();\n this.demuxer?.destroy();\n this.demuxer = null;\n this.audioStream = null;\n this.currentFormat = 'mp3';\n\n const mp3Track = { id: 1, type: 'audio', codec: 'mp3' };\n this.channel.notify('configured', {\n tracks: [mp3Track],\n format,\n codec: 'mp3',\n });\n\n return { success: true, tracks: [mp3Track] };\n } else if (format === 'mp4' || format === 'm4a') {\n if (this.demuxer) {\n this.demuxer.destroy();\n }\n\n this.demuxer = new MP4Demuxer({\n ...config,\n skipVideo: true, // Audio only\n });\n this.audioStream = this.demuxer.createAudioStream();\n this.mp3Parser = null;\n this.currentFormat = 'mp4';\n } else {\n throw {\n code: 'UNSUPPORTED_FORMAT',\n message: `Unsupported audio format: ${format}`,\n };\n }\n\n if (!this.audioStream) {\n throw {\n code: 'NO_AUDIO_TRACK',\n message: 'No audio track found in container',\n };\n }\n\n const tracks = Array.from(this.demuxer.tracks.values());\n\n // Notify configuration complete\n this.channel.notify('configured', {\n tracks,\n format,\n codec: tracks[0]?.codec,\n });\n\n return { success: true, tracks };\n } else {\n // Update configuration only (e.g., backpressure settings)\n if (!this.demuxer) {\n throw {\n code: 'NOT_INITIALIZED',\n message: 'Demuxer not initialized. Call configure with initial=true first',\n };\n }\n\n // Demuxers don't support runtime config updates\n // Would need initial=true for changes\n\n return { success: true };\n }\n } catch (error: any) {\n throw {\n code: error.code || 'CONFIG_ERROR',\n message: error.message,\n };\n }\n }\n\n /**\n * Detect audio format from configuration\n */\n private detectFormat(config: DemuxConfig): string {\n // Simple format detection based on codec or file extension\n if (config.codec?.includes('mp3')) return 'mp3';\n if (config.codec?.includes('aac')) return 'mp4';\n if (config.codec?.includes('opus')) return 'webm';\n\n return 'mp3';\n }\n\n /**\n * Handle input stream from ResourceLoader (main thread)\n */\n private async handleInputStream(\n stream: ReadableStream<Uint8Array>,\n metadata?: Record<string, any>\n ): Promise<void> {\n // Initialize demuxer if not configured\n if (this.currentFormat === 'mp3' && !this.mp3Parser) {\n this.mp3Parser = new MP3FrameParser();\n }\n\n if (this.currentFormat === 'mp4' && (!this.demuxer || !this.audioStream)) {\n await this.handleConfigure({\n config: { container: 'mp4', highWaterMark: 10 },\n initial: true,\n });\n }\n\n if (!this.decoderPort) {\n throw new Error('Decoder not connected');\n }\n\n // Setup channel to decoder\n const decoderChannel = new WorkerChannel(this.decoderPort, {\n name: 'AudioDemux-Decoder',\n timeout: 30000,\n });\n\n if (this.currentFormat === 'mp3') {\n await this.pipeMp3Stream(stream, decoderChannel, metadata);\n } else if (this.demuxer && this.audioStream) {\n const transformed = stream.pipeThrough(this.audioStream);\n const trackInfo = Array.from(this.demuxer.tracks.values())[0];\n\n await decoderChannel.sendStream(transformed, {\n streamType: 'audio',\n clipId: metadata?.clipId ?? 'default',\n trackId: metadata?.trackId ?? 'main',\n codec: trackInfo?.codec ?? 'mp4a.40.2',\n sampleRate: trackInfo?.sampleRate ?? 44_100,\n numberOfChannels: trackInfo?.numberOfChannels ?? 2,\n description: trackInfo?.description,\n });\n\n this.channel.notify('demux_complete', {\n tracksProcessed: this.demuxer?.tracks.size || 0,\n });\n } else {\n throw new Error('Audio demuxer not initialized');\n }\n }\n\n private async pipeMp3Stream(\n stream: ReadableStream<Uint8Array>,\n decoderChannel: WorkerChannel,\n metadata?: Record<string, any>\n ): Promise<void> {\n if (!this.mp3Parser) {\n this.mp3Parser = new MP3FrameParser();\n }\n\n const reader = stream.getReader();\n let currentConfig: MP3Config | null = null;\n let configured = false;\n const bufferedFrames: MP3Frame[] = [];\n let writer: WritableStreamDefaultWriter<EncodedAudioChunk> | null = null;\n\n const ensureWriter = async (): Promise<WritableStreamDefaultWriter<EncodedAudioChunk>> => {\n if (!writer) {\n const cfg = currentConfig;\n if (!cfg) {\n throw new Error('MP3 config missing while creating writer');\n }\n const transform = new TransformStream<EncodedAudioChunk, EncodedAudioChunk>();\n writer = transform.writable.getWriter();\n await decoderChannel.sendStream(transform.readable, {\n streamType: 'audio',\n clipId: metadata?.clipId ?? 'default',\n trackId: metadata?.trackId ?? 'main',\n codec: 'mp3',\n sampleRate: cfg.sampleRate,\n numberOfChannels: cfg.channels,\n description: undefined,\n });\n }\n return writer!;\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n if (!value) {\n continue;\n }\n\n const { frames, config } = this.mp3Parser.push(value);\n\n if (config) {\n currentConfig = config;\n }\n\n if (config && !configured) {\n await decoderChannel.send('configure' as any, {\n streamType: 'audio',\n clipId: metadata?.clipId ?? 'default',\n codec: 'mp3',\n sampleRate: config.sampleRate,\n numberOfChannels: config.channels,\n description: undefined,\n });\n this.channel.notify('demux_configured', {\n clipId: metadata?.clipId ?? 'default',\n codec: 'mp3',\n sampleRate: config.sampleRate,\n numberOfChannels: config.channels,\n });\n configured = true;\n }\n\n if (config) {\n this.currentFormat = 'mp3';\n }\n\n if (!configured) {\n bufferedFrames.push(...frames);\n continue;\n }\n\n const targetWriter = await ensureWriter();\n const readyFrames = bufferedFrames.splice(0, bufferedFrames.length);\n readyFrames.push(...frames);\n for (const frame of readyFrames) {\n const chunk = new EncodedAudioChunk({\n type: 'key',\n timestamp: frame.timestampUs,\n duration: frame.durationUs,\n data: frame.data.buffer.slice(\n frame.data.byteOffset,\n frame.data.byteOffset + frame.data.byteLength\n ),\n });\n await targetWriter.write(chunk);\n }\n }\n\n const remaining = this.mp3Parser.flush();\n if (remaining.length) {\n if (!configured) {\n throw new Error('MP3 stream ended before configuration');\n }\n const targetWriter = await ensureWriter();\n for (const frame of remaining) {\n const chunk = new EncodedAudioChunk({\n type: 'key',\n timestamp: frame.timestampUs,\n duration: frame.durationUs,\n data: frame.data.buffer.slice(\n frame.data.byteOffset,\n frame.data.byteOffset + frame.data.byteLength\n ),\n });\n await targetWriter.write(chunk);\n }\n }\n\n if (writer) {\n await (writer as WritableStreamDefaultWriter<EncodedAudioChunk>).close();\n }\n\n this.channel.notify('demux_complete', {\n tracksProcessed: 1,\n });\n } finally {\n reader.releaseLock();\n }\n }\n\n /**\n * Get demuxer statistics\n */\n private async handleGetStats(): Promise<{\n queueSize?: number;\n tracksInfo?: any[];\n format?: string;\n state?: WorkerState;\n }> {\n if (this.currentFormat === 'mp3') {\n return {\n tracksInfo: this.mp3Parser ? [{ id: 1, type: 'audio', codec: 'mp3' }] : [],\n format: 'mp3',\n state: this.channel.state,\n };\n }\n\n if (this.demuxer) {\n return {\n tracksInfo: Array.from(this.demuxer.tracks.values()),\n format: 'mp4',\n state: this.channel.state,\n };\n }\n\n return { state: this.channel.state };\n }\n\n /**\n * Dispose worker and cleanup resources\n */\n private async handleDispose(): Promise<{ success: boolean }> {\n if (this.demuxer) {\n this.demuxer.destroy();\n }\n this.demuxer = null;\n this.audioStream = null;\n this.mp3Parser = null;\n this.currentFormat = null;\n\n this.decoderPort?.close();\n this.decoderPort = null;\n\n this.channel.state = WorkerState.Disposed;\n\n return { success: true };\n }\n}\n\n// Initialize worker\nconst worker = new AudioDemuxWorker();\n\n// Handle worker termination\nself.addEventListener('beforeunload', () => {\n worker['handleDispose']();\n});\n\nexport default null; // Required for TypeScript worker compilation\n"],"names":["WorkerMessageType","WorkerState","i","box","ret","str","entry_count","nalu_array","j","nalu","strm","MP4Box.createFile","MP4Box.DataStream"],"mappings":"AAwDO,IAAK,sCAAAA,uBAAL;AAELA,qBAAA,OAAA,IAAQ;AACRA,qBAAA,OAAA,IAAQ;AACRA,qBAAA,SAAA,IAAU;AACVA,qBAAA,WAAA,IAAY;AACZA,qBAAA,cAAA,IAAe;AACfA,qBAAA,gBAAA,IAAiB;AACjBA,qBAAA,kBAAA,IAAmB;AACnBA,qBAAA,gBAAA,IAAiB;AACjBA,qBAAA,cAAA,IAAe;AACfA,qBAAA,cAAA,IAAe;AACfA,qBAAA,YAAA,IAAa;AACbA,qBAAA,iBAAA,IAAkB;AAClBA,qBAAA,aAAA,IAAc;AACdA,qBAAA,cAAA,IAAe;AACfA,qBAAA,SAAA,IAAU;AACVA,qBAAA,gBAAA,IAAiB;AACjBA,qBAAA,YAAA,IAAa;AACbA,qBAAA,aAAA,IAAc;AACdA,qBAAA,mBAAA,IAAoB;AACpBA,qBAAA,iBAAA,IAAkB;AAClBA,qBAAA,aAAA,IAAc;AACdA,qBAAA,aAAA,IAAc;AACdA,qBAAA,cAAA,IAAe;AACfA,qBAAA,aAAA,IAAc;AACdA,qBAAA,cAAA,IAAe;AACfA,qBAAA,UAAA,IAAW;AACXA,qBAAA,WAAA,IAAY;AACZA,qBAAA,aAAA,IAAc;AACdA,qBAAA,kBAAA,IAAmB;AACnBA,qBAAA,cAAA,IAAe;AACfA,qBAAA,eAAA,IAAgB;AAChBA,qBAAA,kBAAA,IAAmB;AACnBA,qBAAA,kBAAA,IAAmB;AAlCT,SAAAA;AAAA,GAAA,qBAAA,CAAA,CAAA;AAoHL,IAAK,gCAAAC,iBAAL;AACLA,eAAA,MAAA,IAAO;AACPA,eAAA,cAAA,IAAe;AACfA,eAAA,OAAA,IAAQ;AACRA,eAAA,YAAA,IAAa;AACbA,eAAA,OAAA,IAAQ;AACRA,eAAA,UAAA,IAAW;AAND,SAAAA;AAAA,GAAA,eAAA,CAAA,CAAA;ACnJL,MAAM,qBAA4C;AAAA,EACvD,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,UAAU;AAAA,EACV,eAAe;AAAA,EACf,iBAAiB,CAAC,WAAW,iBAAiB,aAAa;AAC7D;AAKO,SAAS,oBAAoB,SAAiB,QAA6B;AAChF,QAAM,EAAE,eAAe,KAAK,WAAW,KAAM,gBAAgB,MAAM;AAEnE,QAAM,QAAQ,eAAe,KAAK,IAAI,eAAe,UAAU,CAAC;AAChE,SAAO,KAAK,IAAI,OAAO,QAAQ;AACjC;AAKO,SAAS,iBAAiB,OAAoB,QAA8B;AACjF,QAAM,EAAE,kBAAkB,mBAAmB,gBAAA,IAAoB;AAEjE,MAAI,CAAC,MAAO,QAAO;AAGnB,QAAM,YAAY,MAAM,QAAQ,MAAM;AACtC,MAAI,aAAa,gBAAgB,SAAS,SAAS,GAAG;AACpD,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,MAAM,WAAW;AACjC,MAAI,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,SAAS,GAAG;AAC9D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAKA,eAAsB,UACpB,IACA,QAEY;AACZ,QAAM,EAAE,eAAe;AACvB,MAAI;AAEJ,WAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACtD,QAAI;AACF,aAAO,MAAM,GAAA;AAAA,IACf,SAAS,OAAO;AACd,kBAAY;AAGZ,UAAI,CAAC,iBAAiB,OAAO,MAAM,GAAG;AACpC,cAAM;AAAA,MACR;AAGA,UAAI,YAAY,YAAY;AAC1B,cAAM;AAAA,MACR;AAGA,YAAM,QAAQ,oBAAoB,SAAS,MAAM;AACjD,YAAM,MAAM,KAAK;AAAA,IACnB;AAAA,EACF;AAGA,QAAM,aAAa,IAAI,MAAM,cAAc;AAC7C;AAKA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;ACpGO,SAAS,eAAe,KAA+B;AAC5D,SACE,eAAe,eACf,eAAe,eACd,OAAO,gBAAgB,eAAe,eAAe,eACrD,OAAO,oBAAoB,eAAe,eAAe,mBACzD,OAAO,mBAAmB,eAAe,eAAe,kBACxD,OAAO,mBAAmB,eAAe,eAAe,kBACxD,OAAO,oBAAoB,eAAe,eAAe;AAE9D;AAKA,SAAS,kBAAkB,KAAU,eAAqC;AACxE,MAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC;AAAA,EACF;AAGA,MAAI,eAAe,GAAG,GAAG;AACvB,kBAAc,KAAK,GAAG;AACtB;AAAA,EACF;AAGA,MAAI,eAAe,YAAY;AAC7B,kBAAc,KAAK,GAAG;AACtB;AAAA,EACF;AAGA,MAAI,OAAO,cAAc,eAAe,eAAe,WAAW;AAChE,kBAAc,KAAK,GAAG;AACtB;AAAA,EACF;AAGA,MACG,OAAO,sBAAsB,eAAe,eAAe,qBAC3D,OAAO,sBAAsB,eAAe,eAAe,mBAC5D;AACA;AAAA,EACF;AAGA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,eAAW,QAAQ,KAAK;AACtB,wBAAkB,MAAM,aAAa;AAAA,IACvC;AAAA,EACF,OAAO;AACL,eAAW,OAAO,KAAK;AACrB,UAAI,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG,GAAG;AAClD,0BAAkB,IAAI,GAAG,GAAG,aAAa;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,qBAAqB,SAA8B;AACjE,QAAM,gBAAgC,CAAA;AACtC,oBAAkB,SAAS,aAAa;AACxC,SAAO;AACT;AClDO,MAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA,sCAAsB,IAAA;AAAA,EACtB,kBAAmC,CAAA;AAAA,EACnC,QAAqB,YAAY;AAAA,EACjC;AAAA,EACA;AAAA,EAEA,YAAY,MAAgB,QAA6B;AACvD,SAAK,OAAO,OAAO;AACnB,SAAK,OAAO;AACZ,SAAK,iBAAiB,OAAO,WAAW;AACxC,SAAK,oBAAoB,OAAO,cAAc;AAE9C,SAAK,oBAAA;AACL,SAAK,QAAQ,YAAY;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KACJ,MACA,SACA,SAMY;AACZ,UAAM,aAAa,SAAS,cAAc,KAAK;AAG/C,UAAM,cAA2B;AAAA,MAC/B,GAAG;AAAA,MACH;AAAA,MACA,GAAG,SAAS;AAAA,IAAA;AAId,WAAO,UAAU,MAAM,KAAK,SAAe,MAAM,SAAS,OAAO,GAAG,WAAW;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,SACZ,MACA,SACA,SAIY;AACZ,UAAM,KAAK,KAAK,kBAAA;AAChB,UAAM,UAAU,SAAS,WAAW,KAAK;AAEzC,UAAM,UAA4B;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAA;AAAA,IAAI;AAGtB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAA0B;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,WAAW,KAAK,IAAA;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAGF,WAAK,gBAAgB,IAAI,IAAI,OAAO;AAGpC,YAAM,YAAY,WAAW,MAAM;AACjC,cAAM,UAAU,KAAK,gBAAgB,IAAI,EAAE;AAC3C,YAAI,SAAS;AACX,eAAK,gBAAgB,OAAO,EAAE;AAC9B,gBAAM,QAAQ,IAAI,MAAM,oBAAoB,EAAE,IAAI,IAAI,KAAK,OAAO,KAAK;AACtE,gBAAc,OAAO;AACtB,kBAAQ,OAAO,KAAK;AAAA,QACtB;AAAA,MACF,GAAG,OAAO;AAGT,cAAgB,YAAY;AAE7B,UAAI,SAAS,UAAU;AACrB,aAAK,KAAK,YAAY,SAAS,QAAQ,QAAQ;AAAA,MACjD,OAAO;AACL,aAAK,KAAK,YAAY,OAAO;AAAA,MAC/B;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,KAAc,MAAyB,SAAa,UAAiC;AACnF,UAAM,UAA4B;AAAA,MAChC;AAAA,MACA,IAAI,KAAK,kBAAA;AAAA,MACT;AAAA,MACA,WAAW,KAAK,IAAA;AAAA,IAAI;AAGtB,QAAI,UAAU;AACZ,WAAK,KAAK,YAAY,SAAS,QAAQ;AAAA,IACzC,OAAO;AACL,WAAK,KAAK,YAAY,OAAO;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,GAAqB,MAAyB,SAAqC;AACjF,SAAK,gBAAgB,IAAI,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAA+B;AACjC,WAAO,KAAK,gBAAgB,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,QAAQ,YAAY;AAGzB,eAAW,CAAA,EAAG,OAAO,KAAK,KAAK,iBAAiB;AAC9C,UAAK,QAAgB,WAAW;AAC9B,qBAAc,QAAgB,SAAS;AAAA,MACzC;AACA,cAAQ,OAAO,IAAI,MAAM,kBAAkB,CAAC;AAAA,IAC9C;AACA,SAAK,gBAAgB,MAAA;AAGrB,SAAK,KAAK,YAAY;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAA4B;AAClC,SAAK,KAAK,YAAY,OAAO,UAAwB;AACnD,YAAM,OAAO,MAAM;AAGnB,UAAI,KAAK,WAAW,IAAI,GAAG;AACzB,aAAK,eAAe,IAAsB;AAC1C;AAAA,MACF;AAGA,UAAI,KAAK,UAAU,IAAI,GAAG;AACxB,cAAM,KAAK,cAAc,IAAqB;AAC9C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAAc,SAAuC;AACjE,UAAM,UAAU,KAAK,gBAAgB,QAAQ,IAAI;AAEjD,QAAI,CAAC,SAAS;AAEZ,WAAK,aAAa,QAAQ,IAAI,OAAO,MAAM;AAAA,QACzC,MAAM;AAAA,QACN,SAAS,2CAA2C,QAAQ,IAAI;AAAA,MAAA,CACjE;AACD;AAAA,IACF;AAEA,SAAK,QAAQ,YAAY;AAGzB,YAAQ,QAAA,EACL,KAAK,MAAM,QAAQ,QAAQ,SAAS,QAAQ,QAAQ,CAAC,EACrD,KAAK,CAAC,WAAW;AAChB,WAAK,aAAa,QAAQ,IAAI,MAAM,MAAM;AAC1C,WAAK,QAAQ,YAAY;AAAA,IAC3B,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,YAAM,cAA2B;AAAA,QAC/B,MAAM;AAAA,QACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC9D,OAAO,iBAAiB,QAAQ,MAAM,QAAQ;AAAA,MAAA;AAEhD,WAAK,aAAa,QAAQ,IAAI,OAAO,MAAM,WAAW;AACtD,WAAK,QAAQ,YAAY;AAAA,IAC3B,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,UAAgC;AACrD,UAAM,UAAU,KAAK,gBAAgB,IAAI,SAAS,EAAE;AACpD,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,SAAK,gBAAgB,OAAO,SAAS,EAAE;AAGvC,QAAK,QAAgB,WAAW;AAC9B,mBAAc,QAAgB,SAAS;AAAA,IACzC;AAEA,QAAI,SAAS,SAAS;AACpB,cAAQ,QAAQ,SAAS,MAAM;AAAA,IACjC,OAAO;AACL,YAAM,QAAQ,IAAI,MAAM,SAAS,OAAO,WAAW,eAAe;AAClE,UAAI,SAAS,OAAO;AAClB,eAAO,OAAO,OAAO,SAAS,KAAK;AAAA,MACrC;AACA,cAAQ,OAAO,KAAK;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,IAAY,SAAkB,QAAc,OAA2B;AAC1F,QAAI,WAA2B,CAAA;AAC/B,QAAI,eAAe,MAAM,GAAG;AAE1B,eAAS,KAAK,MAAM;AAAA,IACtB;AACA,UAAM,WAA2B;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAA;AAAA,IAAI;AAGtB,SAAK,KAAK,YAAY,UAAU,QAAQ;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,MAAoB;AACrC,WACE,QAAQ,OAAO,SAAS,YAAY,QAAQ,QAAQ,aAAa,QAAQ,EAAE,UAAU;AAAA,EAEzF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,MAAoB;AACpC,WAAO,QAAQ,OAAO,SAAS,YAAY,QAAQ,QAAQ,UAAU;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAA4B;AAClC,WAAO,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAgB,MAAkC,SAAa,UAAiC;AAC9F,SAAK,KAAK,MAA2B,SAAS,QAAQ;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBACE,MACA,SACM;AACN,SAAK,GAAG,MAA2B,OAAO;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WACJ,QACA,UAMe;AACf,UAAM,WAAW,UAAU,YAAY,KAAK,kBAAA;AAE5C,QAAI,eAAe,MAAM,GAAG;AAE1B,WAAK,KAAK;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,GAAG;AAAA,UACH;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,CAAC,MAAM;AAAA;AAAA,MAAA;AAAA,IAEX,OAAO;AAEL,YAAM,KAAK,aAAa,QAAQ,UAAU,QAAQ;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aACZ,QACA,UACA,UACe;AACf,UAAM,SAAS,OAAO,UAAA;AAGtB,SAAK,KAAK,gBAAqC;AAAA,MAC7C;AAAA,MACA,GAAG;AAAA,MACH,MAAM;AAAA,IAAA,CACP;AAED,QAAI;AACF,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAA,IAAU,MAAM,OAAO,KAAA;AAErC,YAAI,MAAM;AAER,eAAK,KAAK,cAAmC;AAAA,YAC3C;AAAA,YACA,GAAG;AAAA,UAAA,CACJ;AACD;AAAA,QACF;AAGA,cAAM,WAA2B,CAAA;AACjC,YAAI,iBAAiB,aAAa;AAChC,mBAAS,KAAK,KAAK;AAAA,QACrB,WAAW,iBAAiB,YAAY;AACtC,mBAAS,KAAK,MAAM,MAAM;AAAA,QAC5B,WAAW,OAAO,cAAc,eAAe,iBAAiB,WAAW;AACzE,mBAAS,KAAK,KAAgC;AAAA,QAChD,WAAW,OAAO,eAAe,eAAe,iBAAiB,YAAY;AAC3E,mBAAS,KAAK,KAAgC;AAAA,QAChD,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AAEtD,gBAAM,YAAY,qBAAqB,KAAK;AAC5C,mBAAS,KAAK,GAAG,SAAS;AAAA,QAC5B;AAEA,aAAK;AAAA,UACH;AAAA,UACA;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP,GAAG;AAAA,UAAA;AAAA,UAEL;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF,SAAS,OAAO;AAEd,WAAK,KAAK,gBAAqC;AAAA,QAC7C;AAAA,QACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC5D,GAAG;AAAA,MAAA,CACJ;AACD,YAAM;AAAA,IACR,UAAA;AACE,aAAO,YAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cACJ,UACe;AACf,UAAM,qCAAqB,IAAA;AAS3B,UAAM,OAAO,KAAK,KAAK;AAEvB,UAAM,UAAyC,CAAC,UAAU;AACxD,YAAM,MAAO,MAAc;AAC3B,YAAM,eAAe,KAAK;AAC1B,YAAM,aAAa,OAAO,OAAO,QAAQ,YAAY,aAAa;AAClE,YAAM,UAAU,aAAc,IAAY,UAAU;AAEpD,UAAI,iBAAiB,qBAAsB,SAAiB,QAAQ;AAClE,iBAAU,QAAgB,QAAQ,OAAO;AACzC;AAAA,MACF;AACA,UAAI,iBAAiB,kBAAmB,SAAiB,UAAU;AACjE,cAAM,SAAS,IAAI,eAAkB;AAAA,UACnC,MAAM,YAAY;AAChB,2BAAe,IAAK,QAAgB,UAAU,EAAE,YAAY,UAAU,SAAS;AAAA,UACjF;AAAA,QAAA,CACD;AACD,iBAAS,QAAQ,OAAO;AACxB;AAAA,MACF;AACA,UACE,iBAAiB,kBAChB,SAAiB,YAClB,eAAe,IAAK,QAAgB,QAAQ,GAC5C;AACA,cAAM,IAAI,eAAe,IAAK,QAAgB,QAAQ;AACtD,YAAI,EAAG,GAAE,WAAW,QAAS,QAAgB,KAAU;AACvD;AAAA,MACF;AACA,UACE,iBAAiB,gBAChB,SAAiB,YAClB,eAAe,IAAK,QAAgB,QAAQ,GAC5C;AACA,cAAM,IAAI,eAAe,IAAK,QAAgB,QAAQ;AACtD,YAAI,GAAG;AACL,YAAE,WAAW,MAAA;AACb,yBAAe,OAAQ,QAAgB,QAAQ;AAAA,QACjD;AACA;AAAA,MACF;AACA,UACE,iBAAiB,kBAChB,SAAiB,YAClB,eAAe,IAAK,QAAgB,QAAQ,GAC5C;AACA,cAAM,IAAI,eAAe,IAAK,QAAgB,QAAQ;AACtD,YAAI,GAAG;AACL,YAAE,WAAW,MAAM,IAAI,MAAM,OAAQ,QAAgB,SAAS,cAAc,CAAC,CAAC;AAC9E,yBAAe,OAAQ,QAAgB,QAAQ;AAAA,QACjD;AACA;AAAA,MACF;AAGA,UAAI,OAAO,SAAS,iBAAiB,KAAK,KAAK,MAAM,KAAK;AAAA,IAC5D;AACA,SAAK,KAAK,YAAY;AAAA,EACxB;AACF;;;AC7eA,MAAI,MAAO,2BAAW;AACpB,QAAI,QAAQ,oBAAI,KAAI;AACpB,QAAI,kBAAmB;AACvB,QAAI,oBAAqB;AACzB,QAAI,iBAAmB;AACvB,QAAI,kBAAmB;AACvB,QAAI,YAAY;AAChB,QAAI,YAAY;AAAA,MACf,aAAc,SAAS,OAAO;AAC7B,YAAI,SAAS,KAAK,MAAO,aAAY;AAAA,iBAC5B,SAAS,KAAK,KAAM,aAAY;AAAA,iBAChC,SAAS,KAAK,KAAM,aAAY;AAAA,iBAChC,SAAS,KAAK,MAAO,aAAY;AAAA,YACrC,aAAY;AAAA,MACrB;AAAA,MACG,OAAQ,SAAS,QAAQ,KAAK;AAC7B,YAAI,QAAQ,UAAU,QAAW;AAChC,kBAAQ,QAAQ,QAAQ;AAAA,QAC7B;AACI,YAAI,mBAAmB,WAAW;AACjC,kBAAQ,MAAM,MAAI,IAAI,kBAAkB,oBAAI,KAAI,IAAG,OAAM,GAAI,IAAE,KAAI,MAAI,SAAO,KAAI,GAAG;AAAA,QAC1F;AAAA,MACA;AAAA,MACG,KAAM,SAAS,QAAQ,KAAK;AAC3B,aAAK,MAAM,OAAO,GAAG;AAAA,MACzB;AAAA,MACG,MAAO,SAAS,QAAQ,KAAK;AAC5B,YAAI,kBAAkB,WAAW;AAChC,kBAAQ,KAAK,MAAI,IAAI,kBAAkB,oBAAI,KAAI,IAAG,OAAM,GAAI,IAAE,KAAI,MAAI,SAAO,KAAI,GAAG;AAAA,QACzF;AAAA,MACA;AAAA,MACG,MAAO,SAAS,QAAQ,KAAK;AAC5B,YAAI,qBAAqB,WAAW;AACnC,kBAAQ,KAAK,MAAI,IAAI,kBAAkB,oBAAI,KAAI,IAAG,OAAM,GAAI,IAAE,KAAI,MAAI,SAAO,KAAI,GAAG;AAAA,QACzF;AAAA,MACA;AAAA,MACG,OAAQ,SAAS,QAAQ,KAAK;AAC7B,YAAI,mBAAmB,WAAW;AACjC,kBAAQ,MAAM,MAAI,IAAI,kBAAkB,oBAAI,KAAI,IAAG,OAAM,GAAI,IAAE,KAAI,MAAI,SAAO,KAAI,GAAG;AAAA,QAC1F;AAAA,MACA;AAAA,IACA;AACE,WAAO;AAAA,EACT,EAAE;AAGF,MAAI,oBAAoB,SAAS,UAAU,YAAY;AACtD,QAAI;AAEJ,aAAS,IAAI,QAAQ,QAAQ;AAC5B,UAAI,MAAM,KAAK;AACf,UAAI,IAAI,IAAI,MAAM,GAAG;AACrB,aAAO,EAAE,CAAC,EAAE,SAAS,QAAQ;AAC5B,UAAE,CAAC,IAAI,MAAM,EAAE,CAAC;AAAA,MACnB;AACE,aAAO,EAAE,KAAK,GAAG;AAAA,IACnB;AACC,QAAI,WAAW,GAAG;AACjB,YAAM;AACN,iBAAW,CAAC;AAAA,IACd,OAAQ;AACN,YAAM;AAAA,IACR;AACC,QAAI,YAAY,cAAc;AAC9B,QAAI,eAAe,WAAS;AAC5B,QAAI,QAAQ,KAAK,MAAM,eAAa,IAAI;AACxC,oBAAgB,QAAQ;AACxB,QAAI,UAAU,KAAK,MAAM,eAAa,EAAE;AACxC,oBAAgB,UAAU;AAC1B,QAAI,OAAO,eAAa;AACxB,mBAAe,KAAK,MAAM,YAAY;AACtC,YAAQ,eAAa;AACrB,WAAO,KAAK,MAAM,IAAI;AACtB,YAAQ,MAAM,MAAK,MAAI,QAAM,MAAI,IAAI,SAAQ,CAAC,IAAE,MAAI,IAAI,cAAa,CAAC,IAAE,MAAI,IAAI,MAAK,CAAC;AAAA,EACvF;AAGA,MAAI,cAAc,SAAS,QAAQ;AAClC,QAAI,SAAS,OAAO;AACpB,QAAI,SAAS,GAAG;AACf,UAAI,MAAM;AACV,eAASC,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,YAAIA,KAAI,EAAG,QAAO;AAClB,eAAO,MAAI,IAAI,kBAAkB,OAAO,MAAMA,EAAC,CAAC,IAAG,MAAI,IAAI,kBAAkB,OAAO,IAAIA,EAAC,CAAC,IAAE;AAAA,MAChG;AACE,aAAO;AAAA,IACT,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAEoC;AACnC,YAAA,MAAc;AAAA,EACf;AAEA,MAAI,eAAe,SAAS,aAAa;AACvC,QAAI,uBAAuB,aAAa;AACtC,WAAK,SAAS;AACd,WAAK,WAAW,IAAI,SAAS,WAAW;AAAA,IAC5C,OAAS;AACL,YAAO;AAAA,IACX;AACE,SAAK,WAAW;AAAA,EAClB;AAKA,eAAa,UAAU,cAAc,WAAW;AAC9C,WAAO,KAAK;AAAA,EACd;AAEA,eAAa,UAAU,iBAAiB,WAAW;AACjD,WAAO,KAAK,OAAO;AAAA,EACrB;AAEA,eAAa,UAAU,YAAY,WAAW;AAC5C,WAAO,KAAK,OAAO;AAAA,EACrB;AAEA,eAAa,UAAU,OAAO,SAAU,KAAK;AAC3C,QAAI,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,YAAY,GAAG,CAAC;AAC5D,SAAK,WAAY,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,IAAK,IAAI;AACvD,WAAO;AAAA,EACT;AAEA,eAAa,UAAU,QAAQ,WAAY;AACzC,WAAO,KAAK,iBAAiB,KAAK,eAAc;AAAA,EAClD;AAKA,eAAa,UAAU,aAAa,SAAS,MAAM,QAAQ;AACzD,QAAI,MAAM;AACV,QAAI,KAAK,WAAW,QAAQ,KAAK,OAAO,YAAY;AAClD,cAAQ,MAAI;AAAA,QACV,KAAK;AACH,cAAI,QAAQ;AACV,kBAAM,KAAK,SAAS,QAAQ,KAAK,QAAQ;AAAA,UACnD,OAAe;AACL,kBAAM,KAAK,SAAS,SAAS,KAAK,QAAQ;AAAA,UACpD;AACQ;AAAA,QACF,KAAK;AACH,cAAI,QAAQ;AACV,kBAAM,KAAK,SAAS,SAAS,KAAK,QAAQ;AAAA,UACpD,OAAe;AACL,kBAAM,KAAK,SAAS,UAAU,KAAK,QAAQ;AAAA,UACrD;AACQ;AAAA,QACF,KAAK;AACH,cAAI,QAAQ;AACV,kBAAO;AAAA,UACjB,OAAe;AACL,kBAAM,KAAK,SAAS,SAAS,KAAK,QAAQ,KAAK;AAC/C,mBAAO,KAAK,SAAS,SAAS,KAAK,WAAS,CAAC,KAAK;AAClD,mBAAO,KAAK,SAAS,SAAS,KAAK,WAAS,CAAC;AAAA,UACvD;AACQ;AAAA,QACF,KAAK;AACH,cAAI,QAAQ;AACV,kBAAM,KAAK,SAAS,SAAS,KAAK,QAAQ;AAAA,UACpD,OAAe;AACL,kBAAM,KAAK,SAAS,UAAU,KAAK,QAAQ;AAAA,UACrD;AACQ;AAAA,QACF,KAAK;AACH,cAAI,QAAQ;AACV,kBAAO;AAAA,UACjB,OAAe;AACL,kBAAM,KAAK,SAAS,UAAU,KAAK,QAAQ,KAAK;AAChD,mBAAO,KAAK,SAAS,UAAU,KAAK,WAAS,CAAC;AAAA,UACxD;AACQ;AAAA,QACF;AACE,gBAAO,8CAA4C;AAAA;AAEvD,WAAK,YAAW;AAChB,aAAO;AAAA,IACX,OAAS;AACL,YAAO;AAAA,IACX;AAAA,EACA;AAEA,eAAa,UAAU,YAAY,WAAW;AAC5C,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAEA,eAAa,UAAU,aAAa,WAAW;AAC7C,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAEA,eAAa,UAAU,aAAa,WAAW;AAC7C,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAEA,eAAa,UAAU,aAAa,WAAW;AAC7C,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAEA,eAAa,UAAU,aAAa,WAAW;AAC7C,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAEA,eAAa,UAAU,aAAa,SAAS,QAAQ;AACnD,QAAI,KAAK,WAAW,UAAU,KAAK,OAAO,YAAY;AACpD,UAAI,IAAI;AACR,eAASA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,aAAK,OAAO,aAAa,KAAK,UAAS,CAAE;AAAA,MAC/C;AACI,aAAO;AAAA,IACX,OAAS;AACL,YAAO;AAAA,IACX;AAAA,EACA;AAEA,eAAa,UAAU,cAAc,WAAW;AAC9C,QAAI,MAAM,CAAA;AACV,WAAM,MAAM;AACV,UAAI,IAAI,KAAK,UAAS;AACtB,UAAI,MAAM,GAAG;AACX,YAAI,KAAK,CAAC;AAAA,MAChB,OAAW;AACL;AAAA,MACN;AAAA,IACA;AACE,WAAO,OAAO,aAAa,MAAM,MAAM,GAAG;AAAA,EAC5C;AAEA,eAAa,UAAU,WAAW,WAAW;AAC3C,WAAO,KAAK,WAAW,GAAG,IAAI;AAAA,EAChC;AAEA,eAAa,UAAU,YAAY,WAAW;AAC5C,WAAO,KAAK,WAAW,GAAG,IAAI;AAAA,EAChC;AAEA,eAAa,UAAU,YAAY,WAAW;AAC5C,WAAO,KAAK,WAAW,GAAG,IAAI;AAAA,EAChC;AAEA,eAAa,UAAU,YAAY,WAAW;AAC5C,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAEA,eAAa,UAAU,iBAAiB,SAAS,QAAQ;AACvD,QAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,aAASA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,UAAIA,EAAC,IAAI,KAAK,UAAS;AAAA,IAC3B;AACE,WAAO;AAAA,EACT;AAEA,eAAa,UAAU,iBAAiB,SAAS,QAAQ;AACvD,QAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,aAASA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,UAAIA,EAAC,IAAI,KAAK,UAAS;AAAA,IAC3B;AACE,WAAO;AAAA,EACT;AAEA,eAAa,UAAU,kBAAkB,SAAS,QAAQ;AACxD,QAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,aAASA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,UAAIA,EAAC,IAAI,KAAK,WAAU;AAAA,IAC5B;AACE,WAAO;AAAA,EACT;AAEA,eAAa,UAAU,kBAAkB,SAAS,QAAQ;AACxD,QAAI,MAAM,IAAI,YAAY,MAAM;AAChC,aAASA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,UAAIA,EAAC,IAAI,KAAK,WAAU;AAAA,IAC5B;AACE,WAAO;AAAA,EACT;AAEA,eAAa,UAAU,iBAAiB,SAAS,QAAQ;AACvD,QAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,aAASA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,UAAIA,EAAC,IAAI,KAAK,UAAS;AAAA,IAC3B;AACE,WAAO;AAAA,EACT;AAEoC;AAClC,YAAA,eAAuB;AAAA,EACzB;AASA,MAAI,aAAa,SAAS,aAAa,YAAY,YAAY;AAC7D,SAAK,cAAc,cAAc;AACjC,QAAI,uBAAuB,aAAa;AACtC,WAAK,SAAS;AAAA,IAClB,WAAa,OAAO,eAAe,UAAU;AACzC,WAAK,WAAW;AAChB,UAAI,YAAY;AACd,aAAK,eAAe;AAAA,MAC1B;AAAA,IACA,OAAS;AACL,WAAK,SAAS,IAAI,YAAY,eAAe,CAAC;AAAA,IAClD;AACE,SAAK,WAAW;AAChB,SAAK,aAAa,cAAc,OAAO,WAAW,gBAAgB;AAAA,EACpE;AACA,aAAW,YAAY,CAAA;AAEvB,aAAW,UAAU,cAAc,WAAW;AAC5C,WAAO,KAAK;AAAA,EACd;AAOA,aAAW,UAAU,WAAW,SAAS,OAAO;AAC9C,QAAI,CAAC,KAAK,cAAc;AACtB;AAAA,IACJ;AACE,QAAI,MAAM,KAAK,cAAc,KAAK,WAAW;AAC7C,QAAI,OAAO,KAAK,QAAQ;AACxB,QAAI,OAAO,MAAM;AACf,UAAI,MAAM,KAAK,aAAa;AAC1B,aAAK,cAAc;AAAA,MACzB;AACI;AAAA,IACJ;AACE,QAAI,OAAO,GAAG;AACZ,aAAO;AAAA,IACX;AACE,WAAO,MAAM,MAAM;AACjB,cAAQ;AAAA,IACZ;AACE,QAAI,MAAM,IAAI,YAAY,IAAI;AAC9B,QAAI,MAAM,IAAI,WAAW,KAAK,OAAO;AACrC,QAAI,MAAM,IAAI,WAAW,KAAK,GAAG,IAAI,MAAM;AAC3C,QAAI,IAAI,GAAG;AACX,SAAK,SAAS;AACd,SAAK,cAAc;AAAA,EACrB;AAUA,aAAW,UAAU,aAAa,WAAW;AAC3C,QAAI,KAAK,eAAe,KAAK,QAAQ,YAAY;AAC/C;AAAA,IACJ;AACE,QAAI,MAAM,IAAI,YAAY,KAAK,WAAW;AAC1C,QAAI,MAAM,IAAI,WAAW,GAAG;AAC5B,QAAI,MAAM,IAAI,WAAW,KAAK,SAAS,GAAG,IAAI,MAAM;AACpD,QAAI,IAAI,GAAG;AACX,SAAK,SAAS;AAAA,EAChB;AAOA,aAAW,aAAa;AAMxB,aAAW,gBAAgB;AAQ3B,aAAW,UAAU,cAAc;AAMnC,SAAO;AAAA,IAAe,WAAW;AAAA,IAAW;AAAA,IAC1C,EAAE,KAAK,WAAW;AAChB,aAAO,KAAK,cAAc,KAAK;AAAA,IACnC,EAAG;AAAA,EAAC;AAOJ,SAAO;AAAA,IAAe,WAAW;AAAA,IAAW;AAAA,IAC1C;AAAA,MAAE,KAAK,WAAW;AACd,aAAK,WAAU;AACf,eAAO,KAAK;AAAA,MAClB;AAAA,MACI,KAAK,SAAS,GAAG;AACf,aAAK,UAAU;AACf,aAAK,YAAY,IAAI,SAAS,KAAK,SAAS,KAAK,WAAW;AAC5D,aAAK,cAAc,KAAK,QAAQ;AAAA,MACtC;AAAA;EAAO;AAOP,SAAO;AAAA,IAAe,WAAW;AAAA,IAAW;AAAA,IAC1C;AAAA,MAAE,KAAK,WAAW;AACd,eAAO,KAAK;AAAA,MAClB;AAAA,MACI,KAAK,SAAS,GAAG;AACf,aAAK,cAAc;AACnB,aAAK,YAAY,IAAI,SAAS,KAAK,SAAS,KAAK,WAAW;AAC5D,aAAK,cAAc,KAAK,QAAQ;AAAA,MACtC;AAAA;EAAO;AAOP,SAAO;AAAA,IAAe,WAAW;AAAA,IAAW;AAAA,IAC1C;AAAA,MAAE,KAAK,WAAW;AACd,eAAO,KAAK;AAAA,MAClB;AAAA,MACI,KAAK,SAAS,GAAG;AACf,aAAK,cAAc,EAAE;AACrB,aAAK,UAAU,EAAE;AACjB,aAAK,YAAY,IAAI,SAAS,KAAK,SAAS,KAAK,WAAW;AAC5D,aAAK,cAAc,KAAK,cAAc,EAAE;AAAA,MAC9C;AAAA;EAAO;AASP,aAAW,UAAU,OAAO,SAAS,KAAK;AACxC,QAAI,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,YAAY,GAAG,CAAC;AACrD,SAAK,WAAY,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,IAAK,IAAI;AAAA,EACzD;AAQA,aAAW,UAAU,QAAQ,WAAW;AACtC,WAAQ,KAAK,YAAY,KAAK;AAAA,EAChC;AAYA,aAAW,UAAU,gBAAgB,SAAS,QAAQ;AACpD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,WAAW,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC5E,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAUA,aAAW,UAAU,iBAAiB,SAAS,QAAQ,GAAG;AACxD,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAW,IAAK;AAChE,QAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,iBAAiB,SAAS,QAAQ,GAAG;AACxD,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAW,IAAK;AAChE,QAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,gBAAgB,SAAS,QAAQ;AACpD,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAY;AAC5D,QAAI,MAAM,IAAI,UAAU,MAAM;AAC9B,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,kBAAkB,SAAS,QAAQ,GAAG;AACzD,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAW,IAAK;AAChE,QAAI,MAAM,IAAI,YAAY,MAAM;AAChC,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,kBAAkB,SAAS,QAAQ,GAAG;AACzD,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAW,IAAK;AAChE,QAAI,MAAM,IAAI,YAAY,MAAM;AAChC,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,iBAAiB,SAAS,QAAQ;AACrD,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAY;AAC5D,QAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,mBAAmB,SAAS,QAAQ,GAAG;AAC1D,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAW,IAAK;AAChE,QAAI,MAAM,IAAI,aAAa,MAAM;AACjC,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,mBAAmB,SAAS,QAAQ,GAAG;AAC1D,aAAS,UAAU,OAAQ,KAAK,aAAW,KAAK,WAAW,IAAK;AAChE,QAAI,MAAM,IAAI,aAAa,MAAM;AACjC,eAAW;AAAA,MAAO,IAAI;AAAA,MAAQ;AAAA,MACZ,KAAK;AAAA,MAAQ,KAAK,aAAW,KAAK;AAAA,MAClC,SAAO,IAAI;AAAA,IAAiB;AAC9C,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,IAAI;AACrB,WAAO;AAAA,EACT;AASA,aAAW,UAAU,YAAY,SAAS,GAAG;AAC3C,QAAI,IAAI,KAAK,UAAU,SAAS,KAAK,UAAU,KAAK,OAAO,KAAK,aAAa,CAAC;AAC9E,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAQA,aAAW,UAAU,YAAY,SAAS,GAAG;AAC3C,QAAI,IAAI,KAAK,UAAU,SAAS,KAAK,UAAU,KAAK,OAAO,KAAK,aAAa,CAAC;AAC9E,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAOA,aAAW,UAAU,WAAW,WAAW;AACzC,QAAI,IAAI,KAAK,UAAU,QAAQ,KAAK,QAAQ;AAC5C,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAQA,aAAW,UAAU,aAAa,SAAS,GAAG;AAC5C,QAAI,IAAI,KAAK,UAAU,UAAU,KAAK,UAAU,KAAK,OAAO,KAAK,aAAa,CAAC;AAC/E,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAQA,aAAW,UAAU,aAAa,SAAS,GAAG;AAC5C,QAAI,IAAI,KAAK,UAAU,UAAU,KAAK,UAAU,KAAK,OAAO,KAAK,aAAa,CAAC;AAC/E,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAOA,aAAW,UAAU,YAAY,WAAW;AAC1C,QAAI,IAAI,KAAK,UAAU,SAAS,KAAK,QAAQ;AAC7C,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAQA,aAAW,UAAU,cAAc,SAAS,GAAG;AAC7C,QAAI,IAAI,KAAK,UAAU,WAAW,KAAK,UAAU,KAAK,OAAO,KAAK,aAAa,CAAC;AAChF,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAQA,aAAW,UAAU,cAAc,SAAS,GAAG;AAC7C,QAAI,IAAI,KAAK,UAAU,WAAW,KAAK,UAAU,KAAK,OAAO,KAAK,aAAa,CAAC;AAChF,SAAK,YAAY;AACjB,WAAO;AAAA,EACT;AAQA,aAAW,aAAa,IAAI,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI;AAYvE,aAAW,SAAS,SAAS,KAAK,WAAW,KAAK,WAAW,YAAY;AACvE,QAAI,QAAQ,IAAI,WAAW,KAAK,WAAW,UAAU;AACrD,QAAI,QAAQ,IAAI,WAAW,KAAK,WAAW,UAAU;AACrD,UAAM,IAAI,KAAK;AAAA,EACjB;AAUA,aAAW,gBAAgB,SAAS,OAAO,qBAAqB;AAC9D,QAAI,uBAAuB,KAAK,YAAY;AAC1C,aAAO;AAAA,IACX,OAAS;AACL,aAAO,KAAK,oBAAoB,KAAK;AAAA,IACzC;AAAA,EACA;AAUA,aAAW,iBAAiB,SAAS,OAAO,cAAc;AACxD,QAAI,KAAK,cAAc,cAAc;AACnC,aAAO;AAAA,IACX,OAAS;AACL,aAAO,KAAK,oBAAoB,KAAK;AAAA,IACzC;AAAA,EACA;AAQA,aAAW,sBAAsB,SAAS,OAAO;AAC/C,QAAI,KAAK,IAAI,WAAW,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AACxE,aAASA,KAAE,GAAGA,KAAE,MAAM,YAAYA,MAAG,MAAM,mBAAmB;AAC5D,eAAS,IAAEA,KAAE,MAAM,oBAAkB,GAAG,IAAEA,IAAG,IAAE,GAAG,KAAK,KAAK;AAC1D,YAAI,MAAM,GAAG,CAAC;AACd,WAAG,CAAC,IAAI,GAAG,CAAC;AACZ,WAAG,CAAC,IAAI;AAAA,MACd;AAAA,IACA;AACE,WAAO;AAAA,EACT;AAQA,aAAW,UAAU,kBAAkB;AAEvC,SAAO,oBAAoB,SAAS,UAAU;AAC1C,QAAI,MAAM,CAAA;AACV,aAASA,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK;AACxC,UAAIA,EAAC,IAAI,SAASA,EAAC;AAAA,IACzB;AACI,WAAO,OAAO,aAAa,MAAM,MAAM,GAAG;AAAA,EAC9C;AASA,aAAW,UAAU,aAAa,SAAS,QAAQ,UAAU;AAC3D,QAAI,YAAY,QAAQ,YAAY,SAAS;AAC3C,aAAO,OAAO,kBAAkB,MAAM,MAAM,CAAC,KAAK,cAAc,UAAU,OAAO,KAAK,aAAW,KAAK,WAAW,MAAM,CAAC,CAAC;AAAA,IAC7H,OAAS;AACL,aAAQ,IAAI,YAAY,QAAQ,EAAG,OAAO,KAAK,cAAc,MAAM,CAAC;AAAA,IACxE;AAAA,EACA;AASA,aAAW,UAAU,cAAc,SAAS,QAAQ;AAClD,QAAI,OAAO,KAAK,aAAW,KAAK;AAChC,QAAI,KAAK,IAAI,WAAW,KAAK,SAAS,KAAK,cAAc,KAAK,QAAQ;AACtE,QAAI,MAAM;AACV,QAAI,UAAU,MAAM;AAClB,YAAM,KAAK,IAAI,QAAQ,IAAI;AAAA,IAC/B;AACE,aAASA,KAAI,GAAGA,KAAI,OAAO,GAAGA,EAAC,MAAM,GAAGA,KAAI;AAC5C,QAAI,IAAI,OAAO,kBAAkB,MAAM,MAAM,CAAC,KAAK,cAAcA,EAAC,CAAC,CAAC;AACpE,QAAI,UAAU,MAAM;AAClB,WAAK,YAAY,MAAIA;AAAA,IACzB,WAAaA,MAAK,MAAM;AACpB,WAAK,YAAY;AAAA,IACrB;AACE,WAAO;AAAA,EACT;AAMA,MAAI,WAAW,KAAK,IAAI,GAAG,EAAE;AAE7B,aAAW,UAAU,YAAY,WAAY;AAC3C,WAAQ,KAAK,UAAS,IAAG,WAAU,KAAK,WAAU;AAAA,EACpD;AACA,aAAW,UAAU,aAAa,WAAY;AAC7C,WAAQ,KAAK,WAAU,IAAG,WAAU,KAAK,WAAU;AAAA,EACpD;AAEA,aAAW,UAAU,YAAY,WAAY;AAC3C,WAAQ,KAAK,WAAU,IAAG,WAAU,KAAK,WAAU;AAAA,EACrD;AAEA,aAAW,UAAU,aAAa,WAAY;AAC7C,YAAQ,KAAK,UAAS,KAAI,OAAK,KAAK,UAAS,KAAI,KAAG,KAAK,UAAS;AAAA,EACnE;AAEoC;AAClC,YAAA,aAAqB;AAAA,EACvB;AASA,aAAW,UAAU,OAAO,SAAS,UAAU;AAC7C,QAAI,OAAO,IAAI,KAAK,CAAC,KAAK,MAAM,CAAC;AACjC,QAAI,OAAO,OAAO,IAAI,iBAAiB;AACnC,UAAI,MAAM,OAAO,IAAI,gBAAgB,IAAI;AACzC,UAAI,IAAI,SAAS,cAAc,GAAG;AAElC,eAAS,KAAK,YAAY,CAAC;AAC3B,QAAE,aAAa,QAAQ,GAAG;AAC1B,QAAE,aAAa,YAAY,QAAQ;AAEnC,QAAE,aAAa,UAAU,OAAO;AAChC,QAAE,MAAK;AACP,aAAO,IAAI,gBAAgB,GAAG;AAAA,IACpC,OAAS;AACH,YAAM;AAAA,IACZ;AAAA,EACA;AAQA,aAAW,UAAU,eAAe;AACpC,SAAO;AAAA,IAAe,WAAW;AAAA,IAAW;AAAA,IAC1C;AAAA,MAAE,KAAK,WAAW;AACd,eAAO,KAAK;AAAA,MAClB;AAAA,MACI,KAAK,SAAS,GAAG;AACf,YAAI,CAAC,GAAG;AACN,eAAK,WAAU;AAAA,QACvB;AACM,aAAK,eAAe;AAAA,MAC1B;AAAA;EAAO;AAQP,aAAW,UAAU,QAAQ,SAAS,QAAQ;AAC5C,QAAI,MAAM,IAAI,YAAY,KAAK,cAAY,MAAM;AACjD,QAAI,MAAM,IAAI,WAAW,GAAG;AAC5B,QAAI,MAAM,IAAI,WAAW,KAAK,SAAS,QAAQ,IAAI,MAAM;AACzD,QAAI,IAAI,GAAG;AACX,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AAQA,aAAW,UAAU,kBAAkB,SAAS,KAAK,GAAG;AACtD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,cACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,cAAc,IAAI,QAAQ,CAAC;AAAA,IACpC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,WAAW,IAAIA,EAAC,GAAG,CAAC;AAAA,MAC/B;AAAA,IACA;AAAA,EACA;AAQA,aAAW,UAAU,kBAAkB,SAAS,KAAK,GAAG;AACtD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,cACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,cAAc,IAAI,QAAQ,CAAC;AAAA,IACpC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,WAAW,IAAIA,EAAC,GAAG,CAAC;AAAA,MAC/B;AAAA,IACA;AAAA,EACA;AAOA,aAAW,UAAU,iBAAiB,SAAS,KAAK;AAClD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,aACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,aAAa,IAAI,MAAM;AAAA,IAChC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,UAAU,IAAIA,EAAC,CAAC;AAAA,MAC3B;AAAA,IACA;AAAA,EACA;AAQA,aAAW,UAAU,mBAAmB,SAAS,KAAK,GAAG;AACvD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,eACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,eAAe,IAAI,QAAQ,CAAC;AAAA,IACrC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,YAAY,IAAIA,EAAC,GAAG,CAAC;AAAA,MAChC;AAAA,IACA;AAAA,EACA;AAQA,aAAW,UAAU,mBAAmB,SAAS,KAAK,GAAG;AACvD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,eACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,eAAe,IAAI,QAAQ,CAAC;AAAA,IACrC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,YAAY,IAAIA,EAAC,GAAG,CAAC;AAAA,MAChC;AAAA,IACA;AAAA,EACA;AAOA,aAAW,UAAU,kBAAkB,SAAS,KAAK;AACnD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,cACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,cAAc,IAAI,MAAM;AAAA,IACjC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,WAAW,IAAIA,EAAC,CAAC;AAAA,MAC5B;AAAA,IACA;AAAA,EACA;AAQA,aAAW,UAAU,oBAAoB,SAAS,KAAK,GAAG;AACxD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,gBACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,gBAAgB,IAAI,QAAQ,CAAC;AAAA,IACtC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,aAAa,IAAIA,EAAC,GAAG,CAAC;AAAA,MACjC;AAAA,IACA;AAAA,EACA;AAQA,aAAW,UAAU,oBAAoB,SAAS,KAAK,GAAG;AACxD,SAAK,SAAS,IAAI,SAAS,CAAC;AAC5B,QAAI,eAAe,gBACf,KAAK,aAAW,KAAK,WAAW,IAAI,sBAAsB,GAAG;AAC/D,iBAAW;AAAA,QAAO,KAAK;AAAA,QAAS,KAAK,aAAW,KAAK;AAAA,QACnC,IAAI;AAAA,QAAQ;AAAA,QACZ,IAAI;AAAA,MAAU;AAChC,WAAK,gBAAgB,IAAI,QAAQ,CAAC;AAAA,IACtC,OAAS;AACL,eAASA,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,aAAK,aAAa,IAAIA,EAAC,GAAG,CAAC;AAAA,MACjC;AAAA,IACA;AAAA,EACA;AASA,aAAW,UAAU,aAAa,SAAS,GAAG,GAAG;AAC/C,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,SAAS,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,aAAa,CAAC;AACzE,SAAK,YAAY;AAAA,EACnB;AAQA,aAAW,UAAU,aAAa,SAAS,GAAG,GAAG;AAC/C,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,SAAS,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,aAAa,CAAC;AACzE,SAAK,YAAY;AAAA,EACnB;AAOA,aAAW,UAAU,YAAY,SAAS,GAAG;AAC3C,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,QAAQ,KAAK,UAAU,CAAC;AACvC,SAAK,YAAY;AAAA,EACnB;AAQA,aAAW,UAAU,cAAc,SAAS,GAAG,GAAG;AAChD,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,UAAU,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,aAAa,CAAC;AAC1E,SAAK,YAAY;AAAA,EACnB;AAQA,aAAW,UAAU,cAAc,SAAS,GAAG,GAAG;AAChD,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,UAAU,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,aAAa,CAAC;AAC1E,SAAK,YAAY;AAAA,EACnB;AAOA,aAAW,UAAU,aAAa,SAAS,GAAG;AAC5C,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,SAAS,KAAK,UAAU,CAAC;AACxC,SAAK,YAAY;AAAA,EACnB;AAQA,aAAW,UAAU,eAAe,SAAS,GAAG,GAAG;AACjD,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,WAAW,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,aAAa,CAAC;AAC3E,SAAK,YAAY;AAAA,EACnB;AAQA,aAAW,UAAU,eAAe,SAAS,GAAG,GAAG;AACjD,SAAK,SAAS,CAAC;AACf,SAAK,UAAU,WAAW,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,aAAa,CAAC;AAC3E,SAAK,YAAY;AAAA,EACnB;AAYA,aAAW,UAAU,kBAAkB,SAAS,KAAK,YAAY,gBAAgB;AAC/E,QAAI,kBAAkB,MAAM;AAC1B,uBAAiB,IAAI;AAAA,IACzB;AACE,aAASA,KAAI,GAAGA,KAAI,IAAI,UAAUA,KAAI,gBAAgBA,MAAK;AACzD,WAAK,YAAY,IAAI,WAAWA,EAAC,GAAG,UAAU;AAAA,IAClD;AACE,WAAOA,KAAE,gBAAgBA,MAAK;AAC5B,WAAK,YAAY,CAAC;AAAA,IACtB;AAAA,EACA;AAUA,aAAW,UAAU,cAAc,SAAS,GAAG,UAAU,QAAQ;AAC/D,QAAIA,KAAI;AACR,QAAI,YAAY,QAAQ,YAAY,SAAS;AAC3C,UAAI,UAAU,MAAM;AAClB,YAAI,MAAM,KAAK,IAAI,EAAE,QAAQ,MAAM;AACnC,aAAKA,KAAE,GAAGA,KAAE,KAAKA,MAAK;AACpB,eAAK,WAAW,EAAE,WAAWA,EAAC,CAAC;AAAA,QACvC;AACM,eAAOA,KAAE,QAAQA,MAAK;AACpB,eAAK,WAAW,CAAC;AAAA,QACzB;AAAA,MACA,OAAW;AACL,aAAKA,KAAE,GAAGA,KAAE,EAAE,QAAQA,MAAK;AACzB,eAAK,WAAW,EAAE,WAAWA,EAAC,CAAC;AAAA,QACvC;AAAA,MACA;AAAA,IACA,OAAS;AACL,WAAK,gBAAiB,IAAI,YAAY,QAAQ,EAAG,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;AAAA,IACnF;AAAA,EACA;AAWA,aAAW,UAAU,eAAe,SAAS,GAAG,QAAQ;AACtD,QAAIA,KAAI;AACR,QAAI,UAAU,MAAM;AAClB,UAAI,MAAM,KAAK,IAAI,EAAE,QAAQ,MAAM;AACnC,WAAKA,KAAE,GAAGA,KAAE,KAAKA,MAAK;AACpB,aAAK,WAAW,EAAE,WAAWA,EAAC,CAAC;AAAA,MACrC;AACI,aAAOA,KAAE,QAAQA,MAAK;AACpB,aAAK,WAAW,CAAC;AAAA,MACvB;AAAA,IACA,OAAS;AACL,WAAKA,KAAE,GAAGA,KAAE,EAAE,QAAQA,MAAK;AACzB,aAAK,WAAW,EAAE,WAAWA,EAAC,CAAC;AAAA,MACrC;AACI,WAAK,WAAW,CAAC;AAAA,IACrB;AAAA,EACA;AAUA,aAAW,UAAU,cAAc,SAAS,kBAAkB,QAAQ;AACpE,aAASA,KAAI,GAAGA,KAAI,iBAAiB,QAAQA,MAAG,GAAG;AACjD,UAAI,IAAI,iBAAiBA,KAAE,CAAC;AAC5B,WAAK,UAAU,GAAG,OAAO,iBAAiBA,EAAC,CAAC,GAAG,MAAM;AAAA,IACzD;AAAA,EACA;AASA,aAAW,UAAU,YAAY,SAAS,GAAG,GAAG,QAAQ;AACtD,QAAI;AACJ,QAAI,OAAO,KAAK,YAAY;AAC1B,aAAO,EAAE,MAAM,CAAC;AAAA,IACpB,WAAa,OAAO,KAAK,YAAY,EAAE,aAAa,QAAQ;AACxD,aAAO,EAAE,IAAI,MAAM,GAAG,MAAM;AAAA,IAChC;AACE,QAAI,iBAAiB;AACrB,QAAI,UAAU;AACd,QAAI,MAAM,KAAK;AACf,QAAI,OAAO,KAAM,YAAY,IAAI,KAAK,CAAC,GAAG;AACxC,WAAK,EAAE,MAAM,GAAG;AAChB,UAAI,GAAG,CAAC;AACR,uBAAiB,SAAS,GAAG,CAAC,CAAC;AAAA,IACnC;AACE,QAAI,OAAO,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG;AACvC,WAAK,EAAE,MAAM,GAAG;AAChB,UAAI,GAAG,CAAC;AACR,gBAAU,SAAS,GAAG,CAAC,CAAC;AAAA,IAC5B;AAEE,YAAO,GAAC;AAAA,MACN,KAAK;AACH,aAAK,WAAW,CAAC;AACjB;AAAA,MACF,KAAK;AACH,aAAK,UAAU,CAAC;AAChB;AAAA,MAEF,KAAK;AACH,aAAK,YAAY,GAAG,KAAK,UAAU;AACnC;AAAA,MACF,KAAK;AACH,aAAK,WAAW,GAAG,KAAK,UAAU;AAClC;AAAA,MACF,KAAK;AACH,aAAK,YAAY,GAAG,KAAK,UAAU;AACnC;AAAA,MACF,KAAK;AACH,aAAK,WAAW,GAAG,KAAK,UAAU;AAClC;AAAA,MACF,KAAK;AACH,aAAK,aAAa,GAAG,KAAK,UAAU;AACpC;AAAA,MACF,KAAK;AACH,aAAK,aAAa,GAAG,KAAK,UAAU;AACpC;AAAA,MAEF,KAAK;AACH,aAAK,YAAY,GAAG,WAAW,UAAU;AACzC;AAAA,MACF,KAAK;AACH,aAAK,WAAW,GAAG,WAAW,UAAU;AACxC;AAAA,MACF,KAAK;AACH,aAAK,YAAY,GAAG,WAAW,UAAU;AACzC;AAAA,MACF,KAAK;AACH,aAAK,WAAW,GAAG,WAAW,UAAU;AACxC;AAAA,MACF,KAAK;AACH,aAAK,aAAa,GAAG,WAAW,UAAU;AAC1C;AAAA,MACF,KAAK;AACH,aAAK,aAAa,GAAG,WAAW,UAAU;AAC1C;AAAA,MAEF,KAAK;AACH,aAAK,YAAY,GAAG,WAAW,aAAa;AAC5C;AAAA,MACF,KAAK;AACH,aAAK,WAAW,GAAG,WAAW,aAAa;AAC3C;AAAA,MACF,KAAK;AACH,aAAK,YAAY,GAAG,WAAW,aAAa;AAC5C;AAAA,MACF,KAAK;AACH,aAAK,WAAW,GAAG,WAAW,aAAa;AAC3C;AAAA,MACF,KAAK;AACH,aAAK,aAAa,GAAG,WAAW,aAAa;AAC7C;AAAA,MACF,KAAK;AACH,aAAK,aAAa,GAAG,WAAW,aAAa;AAC7C;AAAA,MAEF,KAAK;AACH,aAAK,aAAa,GAAG,cAAc;AACnC;AAAA,MAEF,KAAK;AACH,aAAK,YAAY,GAAG,SAAS,cAAc;AAC3C;AAAA,MAEF,KAAK;AACH,aAAK,gBAAgB,GAAG,KAAK,YAAY,cAAc;AACvD;AAAA,MAEF,KAAK;AACH,aAAK,gBAAgB,GAAG,WAAW,eAAe,cAAc;AAChE;AAAA,MAEF,KAAK;AACH,aAAK,gBAAgB,GAAG,WAAW,YAAY,cAAc;AAC7D;AAAA,MAEF;AACE,YAAI,EAAE,UAAU,GAAG;AACjB,cAAI,KAAK,EAAE,CAAC;AACZ,mBAASA,KAAE,GAAGA,KAAE,EAAE,QAAQA,MAAK;AAC7B,iBAAK,UAAU,IAAI,EAAEA,EAAC,CAAC;AAAA,UACjC;AACQ;AAAA,QACR,OAAa;AACL,eAAK,YAAY,GAAG,CAAC;AACrB;AAAA,QACR;AAAA;AAEE,QAAI,kBAAkB,MAAM;AAC1B,WAAK,WAAW;AAChB,WAAK,SAAS,cAAc;AAC5B,WAAK,WAAW,MAAM;AAAA,IAC1B;AAAA,EACA;AAGA,aAAW,UAAU,cAAc,SAAU,GAAG;AAC/C,QAAI,IAAI,KAAK,MAAM,IAAI,QAAQ;AAC/B,SAAK,YAAY,CAAC;AAClB,SAAK,YAAY,IAAI,UAAU;AAAA,EAChC;AAEA,aAAW,UAAU,cAAc,SAAU,GAAG;AAC/C,SAAK,YAAY,IAAI,aAAa,EAAE;AACpC,SAAK,YAAY,IAAI,UAAa,CAAC;AACnC,SAAK,WAAY,IAAI,GAAU;AAAA,EAChC;AAEA,aAAW,UAAU,eAAe,SAAS,UAAU,OAAO;AAC7D,QAAI,MAAM,KAAK;AACf,SAAK,KAAK,QAAQ;AAClB,SAAK,YAAY,KAAK;AACtB,SAAK,KAAK,GAAG;AAAA,EACd;AAcA,aAAW,UAAU,gBAAgB,SAAS,QAAQ,GAAG;AACvD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,WAAW,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC5E,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAcA,aAAW,UAAU,gBAAgB,SAAS,QAAQ,GAAG;AACvD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,WAAW,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC5E,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAWA,aAAW,UAAU,eAAe,SAAS,QAAQ;AACnD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,UAAU,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC3E,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAcA,aAAW,UAAU,iBAAiB,SAAS,QAAQ,GAAG;AACxD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,YAAY,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC7E,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAcA,aAAW,UAAU,iBAAiB,SAAS,QAAQ,GAAG;AACxD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,YAAY,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC7E,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAcA,aAAW,UAAU,kBAAkB,SAAS,QAAQ,GAAG;AACzD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,aAAa,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC9E,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAcA,aAAW,UAAU,kBAAkB,SAAS,QAAQ,GAAG;AACzD,SAAK,SAAS,SAAS,CAAC;AACxB,QAAI,MAAM,IAAI,aAAa,KAAK,SAAS,KAAK,aAAW,KAAK,UAAU,MAAM;AAC9E,eAAW,cAAc,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC;AAC7D,SAAK,YAAY,SAAS;AAC1B,WAAO;AAAA,EACT;AAaA,MAAI,oBAAoB,SAAS,QAAQ;AAExC,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,QAAI,QAAQ;AACX,WAAK,aAAa,MAAM;AACxB,WAAK,cAAc;AAAA,IACrB;AAAA,EACA;AACA,oBAAkB,YAAY,IAAI,WAAW,IAAI,YAAW,GAAI,GAAG,WAAW,UAAU;AAMxF,oBAAkB,UAAU,cAAc,WAAW;AACpD,QAAI;AACJ,QAAI,KAAK,cAAc,IAAI;AAC1B,aAAO;AAAA,IACT,WAAY,KAAK,QAAQ,SAAS,GAAG;AACnC,oBAAc,KAAK,QAAQ,CAAC;AAC5B,UAAI,YAAY,cAAc,GAAG;AAChC,aAAK,SAAS;AACd,aAAK,cAAc;AACnB,YAAI,MAAM,qBAAqB,0BAA0B;AACzD,eAAO;AAAA,MACV,OAAS;AACN,YAAI,KAAK,qBAAqB,+CAA+C;AAC7E,aAAK,eAAc;AACnB,eAAO;AAAA,MACV;AAAA,IACA,OAAQ;AACN,UAAI,KAAK,qBAAqB,iCAAiC;AAC/D,WAAK,eAAc;AACnB,aAAO;AAAA,IACT;AAAA,EACA;AAQA,cAAY,SAAS,SAAS,SAAS,SAAS;AAC9C,QAAI,MAAM,eAAe,6CAA2C,QAAQ,aAAa,QAAQ,WAAW;AAC5G,QAAI,MAAM,IAAI,WAAW,QAAQ,aAAa,QAAQ,UAAU;AAChE,QAAI,IAAI,IAAI,WAAW,OAAO,GAAG,CAAC;AAClC,QAAI,IAAI,IAAI,WAAW,OAAO,GAAG,QAAQ,UAAU;AACnD,WAAO,IAAI;AAAA,EACb;AASA,oBAAkB,UAAU,eAAe,SAAS,QAAQ,QAAQ,WAAW;AAC9E,QAAI;AACJ,aAAS,IAAI,WAAW,SAAS;AACjC,WAAO,IAAI,IAAI,WAAW,QAAQ,QAAQ,SAAS,CAAC;AACpD,WAAO,OAAO,YAAY,OAAO,YAAU;AAC3C,WAAO,OAAO,YAAY;AAC1B,WAAO,OAAO;AAAA,EACf;AAQA,oBAAkB,UAAU,eAAe,SAAS,IAAI;AACvD,QAAI,SAAS;AAEb,aAASA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AAC7C,UAAI,IAAI,KAAK,QAAQA,EAAC;AACtB,UAAI,GAAG,aAAa,EAAE,WAAW;AAEhC,YAAI,GAAG,cAAc,EAAE,WAAW;AAEjC,cAAI,GAAG,aAAc,EAAE,YAAY;AAIlC,iBAAK,QAAQ,OAAOA,IAAG,CAAC;AACxB,YAAAA;AACA;AAAA,UACL,OAAW;AAEN,gBAAI,KAAK,qBAAqB,wBAAsB,GAAG,YAAU,gBAAc,GAAG,aAAW,8BAA8B;AAAA,UAChI;AAAA,QACA,OAAU;AAGN,cAAI,GAAG,YAAY,GAAG,cAAc,EAAE,UAAW;AAAA,eAE1C;AAEN,iBAAK,KAAK,aAAa,IAAI,GAAG,EAAE,YAAY,GAAG,SAAS;AAAA,UAC7D;AACI,cAAI,MAAM,qBAAqB,sCAAoC,GAAG,YAAU,gBAAc,GAAG,aAAW,GAAG;AAC/G,eAAK,QAAQ,OAAOA,IAAG,GAAG,EAAE;AAG5B,cAAIA,OAAM,GAAG;AACZ,iBAAK,SAAS;AAAA,UACnB;AAAA,QACA;AACG,iBAAS;AACT;AAAA,MACH,WAAa,GAAG,YAAY,EAAE,YAAY,EAAE,YAAY;AAErD,YAAI,SAAS,EAAE,YAAY,EAAE,aAAa,GAAG;AAC7C,YAAI,YAAY,GAAG,aAAa;AAChC,YAAI,YAAY,GAAG;AAElB,eAAK,KAAK,aAAa,IAAI,QAAQ,SAAS;AAAA,QAChD,OAAU;AAEN,mBAAS;AACT;AAAA,QACJ;AAAA,MACA;AAAA,IACA;AAEC,QAAI,QAAQ;AACX,UAAI,MAAM,qBAAqB,sCAAoC,GAAG,YAAU,gBAAc,GAAG,aAAW,GAAG;AAC/G,WAAK,QAAQ,KAAK,EAAE;AAGpB,UAAIA,OAAM,GAAG;AACZ,aAAK,SAAS;AAAA,MACjB;AAAA,IACA;AAAA,EACA;AAMA,oBAAkB,UAAU,iBAAiB,SAAS,MAAM;AAC3D,QAAIA;AACJ,QAAI;AACJ,QAAI,MAAM;AACV,QAAI,SAAS,CAAA;AACb,QAAI;AACJ,QAAI,iBAAiB;AACrB,WAAO;AACP,YAAQ;AACR,SAAKA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AACzC,eAAS,KAAK,QAAQA,EAAC;AACvB,UAAIA,OAAM,GAAG;AACZ,gBAAQ,CAAA;AACR,eAAO,KAAK,KAAK;AACjB,cAAM,QAAQ,OAAO;AACrB,cAAM,MAAM,OAAO,YAAU,OAAO;AACpC,0BAAkB,MAAI,MAAM,QAAM;AAAA,MACrC,WAAa,MAAM,QAAQ,OAAO,WAAW;AAC1C,cAAM,MAAM,OAAO,YAAU,OAAO;AAAA,MACvC,OAAS;AACN,gBAAQ,CAAA;AACR,cAAM,QAAQ,OAAO;AACrB,0BAAmB,OAAO,OAAO,SAAO,CAAC,EAAE,MAAI,IAAG,SAAO,MAAM,QAAM;AACrE,cAAM,MAAM,OAAO,YAAU,OAAO;AACpC,eAAO,KAAK,KAAK;AAAA,MACpB;AACE,cAAQ,OAAO;AACf,eAAS,OAAO;AAAA,IAClB;AACC,QAAI,OAAO,SAAS,GAAG;AACtB,wBAAmB,MAAM,MAAI,IAAG;AAAA,IAClC;AACC,QAAI,MAAO,OAAO,IAAI,OAAO,IAAI;AACjC,QAAI,KAAK,QAAQ,WAAW,GAAG;AAC9B,UAAI,qBAAqB,0BAA0B;AAAA,IACrD,OAAQ;AACN,UAAI,qBAAqB,KAAG,KAAK,QAAQ,SAAO,wBAAsB,OAAK,MAAI,QAAM,iCAA+B,cAAc;AAAA,IACpI;AAAA,EACA;AAEA,oBAAkB,UAAU,eAAe,WAAY;AACtD,QAAIA;AACJ,QAAI;AACJ,SAAKA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AACzC,eAAS,KAAK,QAAQA,EAAC;AACvB,UAAI,OAAO,cAAc,OAAO,YAAY;AAC3C,YAAI,MAAM,qBAAqB,sBAAoBA,EAAC;AACpD,aAAK,QAAQ,OAAOA,IAAG,CAAC;AACxB,QAAAA;AAAA,MACH;AAAA,IACA;AAAA,EACA;AAEA,oBAAkB,UAAU,kBAAkB,WAAW;AACxD,QAAI;AACJ,QAAI,KAAK,cAAY,IAAI,KAAK,QAAQ,QAAQ;AAC7C,oBAAc,KAAK,QAAQ,KAAK,cAAY,CAAC;AAC7C,UAAI,YAAY,cAAc,KAAK,OAAO,YAAY,KAAK,OAAO,YAAY;AAC7E,YAAI,YAAY,KAAK,OAAO;AAC5B,YAAI,eAAe,KAAK,OAAO;AAC/B,YAAI,eAAe,KAAK,OAAO;AAC/B,aAAK,QAAQ,KAAK,WAAW,IAAI,YAAY,OAAO,KAAK,QAAQ,WAAW;AAC5E,aAAK,SAAS,KAAK,QAAQ,KAAK,WAAW;AAC3C,aAAK,QAAQ,OAAO,KAAK,cAAY,GAAG,CAAC;AACzC,aAAK,OAAO,YAAY;AACxB,aAAK,OAAO,YAAY;AACxB,YAAI,MAAM,WAAW,mDAAiD,YAAU,OAAK,KAAK,OAAO,aAAW,GAAG;AAC/G,eAAO;AAAA,MACV,OAAS;AACN,eAAO;AAAA,MACV;AAAA,IACA,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAgBA,oBAAkB,UAAU,eAAe,SAAS,WAAW,cAAc,YAAY;AACxF,QAAIA;AACJ,QAAI,UAAU;AACd,QAAI,QAAQ;AAGZ,QAAI,cAAc,MAAM;AAEvB,MAAAA,KAAI;AAAA,IACN,OAAQ;AACN,MAAAA,KAAI,KAAK;AAAA,IACX;AAEC,WAAOA,KAAI,KAAK,QAAQ,QAAQ;AAC/B,gBAAU,KAAK,QAAQA,EAAC;AACxB,UAAI,QAAQ,aAAa,cAAc;AACtC,gBAAQA;AACR,YAAI,YAAY;AACf,cAAI,QAAQ,YAAY,QAAQ,cAAc,cAAc;AAC3D,oBAAQ,YAAY,QAAQ;AAAA,UACjC,OAAW;AACN,oBAAQ,YAAY,eAAe,QAAQ;AAAA,UAChD;AACI,eAAK,eAAc;AAAA,QACvB;AAAA,MACA,OAAS;AACN;AAAA,MACH;AACE,MAAAA;AAAA,IACF;AAEC,QAAI,UAAU,IAAI;AACjB,gBAAU,KAAK,QAAQ,KAAK;AAC5B,UAAI,QAAQ,YAAY,QAAQ,cAAc,cAAc;AAC3D,YAAI,MAAM,qBAAqB,wCAAsC,KAAK;AAC1E,eAAO;AAAA,MACV,OAAS;AACN,eAAO;AAAA,MACV;AAAA,IACA,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AASA,oBAAkB,UAAU,uBAAuB,SAAS,YAAY;AACvE,QAAIA;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,QAAS,eAAe,SAAY,aAAa,KAAK;AAC1D,iBAAa,KAAK,QAAQ,KAAK;AAE/B,QAAI,KAAK,QAAQ,SAAS,QAAM,GAAG;AAClC,WAAKA,KAAI,QAAM,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AAC/C,kBAAU,KAAK,QAAQA,EAAC;AACxB,YAAI,QAAQ,cAAc,WAAW,YAAY,WAAW,YAAY;AACvE,uBAAa;AAAA,QACjB,OAAU;AACN;AAAA,QACJ;AAAA,MACA;AAAA,IACA;AAEC,WAAO,WAAW,YAAY,WAAW;AAAA,EAC1C;AAQA,oBAAkB,UAAU,0BAA0B,SAAS,KAAK;AACnE,QAAI,QAAQ,KAAK,aAAa,MAAM,KAAK,KAAK;AAC9C,QAAI,UAAU,IAAI;AACjB,aAAO,KAAK,qBAAqB,KAAK;AAAA,IACxC,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAUA,oBAAkB,UAAU,eAAe,SAAS,SAAS;AAC5D,SAAK,OAAO,aAAa;AACzB,SAAK,eAAc;AAAA,EACpB;AAKA,oBAAkB,UAAU,kBAAkB,WAAW;AACxD,SAAK,OAAO,YAAY,KAAK,OAAO;AACpC,SAAK,eAAc;AAAA,EACpB;AAiBA,oBAAkB,UAAU,OAAO,SAAS,cAAc,WAAW,YAAY;AAChF,QAAI;AACJ,YAAQ,KAAK,aAAa,WAAW,cAAc,UAAU;AAC7D,QAAI,UAAU,IAAI;AACjB,WAAK,SAAS,KAAK,QAAQ,KAAK;AAChC,WAAK,cAAc;AACnB,WAAK,WAAW,eAAe,KAAK,OAAO;AAC3C,UAAI,MAAM,qBAAqB,8CAA4C,KAAK,QAAQ;AACxF,aAAO;AAAA,IACT,OAAQ;AACN,UAAI,MAAM,qBAAqB,cAAY,eAAa,6BAA6B;AACrF,aAAO;AAAA,IACT;AAAA,EACA;AAMA,oBAAkB,UAAU,cAAc,WAAW;AACpD,QAAI,KAAK,gBAAgB,MAAM,KAAK,QAAQ,KAAK,WAAW,MAAM,MAAM;AACvE,YAAM;AAAA,IACR;AACC,WAAO,KAAK,QAAQ,KAAK,WAAW,EAAE,YAAU,KAAK;AAAA,EACtD;AAMA,oBAAkB,UAAU,YAAY,WAAW;AAClD,WAAO,KAAK;AAAA,EACb;AAEA,oBAAkB,UAAU,iBAAiB,WAAW;AACvD,QAAI,KAAK,gBAAgB,MAAM,KAAK,QAAQ,KAAK,WAAW,MAAM,MAAM;AACvE,YAAM;AAAA,IACR;AACC,WAAO,KAAK,QAAQ,KAAK,WAAW,EAAE,YAAU,KAAK;AAAA,EACtD;AAEoC;AACnC,YAAA,oBAA4B;AAAA,EAC7B;AAKA,MAAI,wBAAwB,WAAY;AACvC,QAAI,cAAiB;AACrB,QAAI,wBAAyB;AAC7B,QAAI,qBAAuB;AAC3B,QAAI,mBAAqB;AAEzB,QAAI,gBAAgB,CAAA;AACpB,kBAAc,WAAW,IAAQ;AACjC,kBAAc,qBAAqB,IAAK;AACxC,kBAAc,kBAAkB,IAAM;AACtC,kBAAc,gBAAgB,IAAM;AAEpC,SAAK,oBAAoB,SAAS,KAAK;AACtC,aAAO,cAAc,GAAG;AAAA,IAC1B;AAEC,QAAI,OAAO;AACX,QAAI,UAAU,CAAA;AAEd,SAAK,qBAAqB,SAAU,QAAQ;AAE3C,UAAI,OAAO;AACX,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,YAAM,OAAO,UAAS;AAEtB,iBAAW,OAAO,UAAS;AAE3B,aAAO,WAAW,KAAM;AACvB,gBAAQ,QAAQ,MAAM,WAAW;AACjC,mBAAW,OAAO,UAAS;AAAA,MAE9B;AACE,cAAQ,QAAQ,MAAM,WAAW;AACjC,UAAI,MAAM,yBAAyB,YAAU,cAAc,GAAG,KAAK,gBAAc,OAAK,YAAU,OAAK,kBAAgB,OAAO,YAAW,CAAE;AACzI,UAAI,cAAc,GAAG,GAAG;AACvB,eAAO,IAAI,QAAQ,cAAc,GAAG,CAAC,EAAE,IAAI;AAAA,MAC9C,OAAS;AACN,eAAO,IAAI,QAAQ,WAAW,IAAI;AAAA,MACrC;AACE,WAAK,MAAM,MAAM;AACjB,aAAO;AAAA,IACT;AAEC,YAAQ,aAAa,SAAS,MAAM,OAAO;AAC1C,WAAK,MAAM;AACX,WAAK,OAAO;AACZ,WAAK,QAAQ,CAAA;AAAA,IACf;AAEC,YAAQ,WAAW,UAAU,QAAQ,SAAU,QAAQ;AACtD,WAAK,OAAO,OAAO,eAAe,KAAK,IAAI;AAAA,IAC7C;AAEC,YAAQ,WAAW,UAAU,iBAAiB,SAAU,KAAK;AAC5D,eAASA,KAAI,GAAGA,KAAI,KAAK,MAAM,QAAQA,MAAK;AAC3C,YAAI,KAAK,MAAMA,EAAC,EAAE,OAAO,KAAK;AAC7B,iBAAO,KAAK,MAAMA,EAAC;AAAA,QACvB;AAAA,MACA;AACE,aAAO;AAAA,IACT;AAEC,YAAQ,WAAW,UAAU,4BAA4B,SAAU,QAAQ;AAC1E,UAAI,QAAQ,OAAO;AACnB,aAAO,OAAO,WAAW,QAAM,KAAK,MAAM;AACzC,YAAI,OAAO,KAAK,mBAAmB,MAAM;AACzC,aAAK,MAAM,KAAK,IAAI;AAAA,MACvB;AAAA,IACA;AAEC,YAAQ,gBAAgB,SAAU,MAAM;AACvC,cAAQ,WAAW,KAAK,MAAM,aAAa,IAAI;AAAA,IACjD;AAEC,YAAQ,cAAc,YAAY,IAAI,QAAQ,WAAU;AAExD,YAAQ,cAAc,UAAU,QAAQ,SAAS,QAAQ;AACxD,WAAK,QAAQ,OAAO,WAAU;AAC9B,WAAK,QAAQ,OAAO,UAAS;AAC7B,WAAK,QAAQ;AACb,UAAI,KAAK,QAAQ,KAAM;AACtB,aAAK,kBAAkB,OAAO,WAAU;AACxC,aAAK,QAAQ;AAAA,MAChB,OAAS;AACN,aAAK,kBAAkB;AAAA,MAC1B;AACE,UAAI,KAAK,QAAQ,IAAM;AACtB,YAAI,IAAI,OAAO,UAAS;AACxB,aAAK,MAAM,OAAO,WAAW,CAAC;AAC9B,aAAK,QAAQ,IAAE;AAAA,MAClB,OAAS;AACN,aAAK,MAAM;AAAA,MACd;AACE,UAAI,KAAK,QAAQ,IAAM;AACtB,aAAK,YAAY,OAAO,WAAU;AAClC,aAAK,QAAQ;AAAA,MAChB,OAAS;AACN,aAAK,YAAY;AAAA,MACpB;AACE,WAAK,0BAA0B,MAAM;AAAA,IACvC;AAEC,YAAQ,cAAc,UAAU,SAAS,SAAS,QAAQ;AACzD,UAAI,MAAM,KAAK,eAAe,qBAAqB;AACnD,UAAI,KAAK;AACR,eAAO,IAAI;AAAA,MACd,OAAS;AACN,eAAO;AAAA,MACV;AAAA,IACA;AAEC,YAAQ,cAAc,UAAU,iBAAiB,SAAS,QAAQ;AACjE,UAAI,MAAM,KAAK,eAAe,qBAAqB;AACnD,UAAI,CAAC,IAAK,QAAO;AACjB,UAAI,MAAM,IAAI,eAAe,kBAAkB;AAC/C,UAAI,OAAO,IAAI,MAAM;AACpB,YAAI,mBAAmB,IAAI,KAAK,CAAC,IAAG,QAAS;AAC7C,YAAI,oBAAoB,MAAM,IAAI,KAAK,UAAU,GAAG;AACnD,4BAAkB,OAAO,IAAI,KAAK,CAAC,IAAI,MAAQ,OAAO,IAAI,KAAK,CAAC,IAAI,QAAS;AAAA,QACjF;AACG,eAAO;AAAA,MACV,OAAS;AACN,eAAO;AAAA,MACV;AAAA,IACA;AAEC,YAAQ,0BAA0B,SAAU,MAAM;AACjD,cAAQ,WAAW,KAAK,MAAM,uBAAuB,IAAI;AAAA,IAC3D;AACC,YAAQ,wBAAwB,YAAY,IAAI,QAAQ,WAAU;AAElE,YAAQ,wBAAwB,UAAU,QAAQ,SAAS,QAAQ;AAClE,WAAK,MAAM,OAAO,UAAS;AAC3B,WAAK,aAAa,OAAO,UAAS;AAClC,WAAK,YAAa,KAAK,cAAc,IAAK,OAAO;AACjD,WAAK,aAAa,KAAK,eAAe;AACtC,WAAK,aAAa,OAAO,WAAU;AACnC,WAAK,aAAa,OAAO,WAAU;AACnC,WAAK,aAAa,OAAO,WAAU;AACnC,WAAK,QAAQ;AACb,WAAK,0BAA0B,MAAM;AAAA,IACvC;AAEC,YAAQ,sBAAsB,SAAU,MAAM;AAC7C,cAAQ,WAAW,KAAK,MAAM,oBAAoB,IAAI;AAAA,IACxD;AACC,YAAQ,oBAAoB,YAAY,IAAI,QAAQ,WAAU;AAE9D,YAAQ,qBAAqB,SAAU,MAAM;AAC5C,cAAQ,WAAW,KAAK,MAAM,kBAAkB,IAAI;AAAA,IACtD;AACC,YAAQ,mBAAmB,YAAY,IAAI,QAAQ,WAAU;AAE7D,WAAO;AAAA,EACR;AAEoC;AACnC,YAAA,wBAAgC;AAAA,EACjC;AAMA,MAAI,YAAY;AAAA,IACf,kBAAmB;AAAA,IACnB,qBAAsB;AAAA,IACtB,IAAK;AAAA;AAAA,IAGL,aAAa;AAAA,MACZ,EAAC,MAAM,QAAQ,MAAM,eAAc;AAAA,MACnC,EAAC,MAAM,QAAQ,MAAM,cAAa;AAAA,MAClC,EAAC,MAAM,QAAQ,MAAM,eAAc;AAAA,MACnC,EAAC,MAAM,QAAQ,MAAM,eAAc;AAAA,MACnC,EAAC,MAAM,QAAQ,MAAM,iCAAgC;AAAA,MACrD,EAAC,MAAM,QAAQ,MAAM,cAAa;AAAA;IAEnC,YAAY;AAAA,MACX,EAAC,MAAM,QAAQ,MAAM,qBAAoB;AAAA,MACzC,EAAC,MAAM,QAAQ,MAAM,qBAAoB;AAAA,MACzC,EAAC,MAAM,QAAQ,MAAM,sBAAqB;AAAA,MAC1C,EAAC,MAAM,QAAQ,MAAM,SAAQ;AAAA,MAC7B,EAAC,MAAM,QAAQ,MAAM,eAAc;AAAA,MACnC,EAAC,MAAM,QAAQ,MAAM,oBAAmB;AAAA,MACxC,EAAC,MAAM,QAAQ,MAAM,qBAAoB;AAAA;IAE1C,iBAAiB;AAAA,MAChB,CAAC,EAAC,MAAM,QAAQ,MAAM,qBAAoB,GAAG,CAAC,QAAQ,MAAM,CAAC;AAAA,MAC7D,CAAC,EAAC,MAAM,QAAQ,MAAM,WAAU,CAAC;AAAA,MACjC,CAAC,EAAC,MAAM,QAAQ,MAAM,UAAS,CAAC;AAAA,MAChC,CAAC,EAAC,MAAM,QAAQ,MAAM,WAAU,CAAC;AAAA,MACjC,CAAC,EAAC,MAAM,QAAQ,MAAM,sBAAqB,CAAC;AAAA,MAC5C,CAAC,EAAC,MAAM,QAAQ,MAAM,qBAAoB,CAAC;AAAA,MAC3C,CAAC,EAAC,MAAM,QAAQ,MAAM,iBAAgB,GAAG,CAAC,QAAQ,MAAM,CAAC;AAAA,MACzD,CAAC,EAAC,MAAM,QAAQ,MAAM,kBAAiB,GAAG,CAAC,MAAM,CAAC;AAAA,MAClD,CAAC,EAAC,MAAM,QAAQ,MAAM,6BAA4B,GAAG,CAAC,MAAM,CAAC;AAAA,MAC7D,CAAC,EAAC,MAAM,QAAQ,MAAM,mBAAkB,GAAG,CAAC,QAAQ,QAAQ,MAAM,CAAC;AAAA,MACnE,CAAC,EAAC,MAAM,QAAQ,MAAM,YAAW,CAAC;AAAA,MAClC,CAAC,EAAC,MAAM,QAAQ,MAAM,oBAAmB,CAAC;AAAA,MAC1C,CAAC,EAAC,MAAM,QAAQ,MAAM,mBAAkB,CAAC;AAAA,MACzC,CAAC,EAAC,MAAM,QAAQ,MAAM,+BAA8B,GAAG,CAAC,MAAM,CAAC;AAAA,MAC/D,CAAC,EAAC,MAAM,QAAQ,MAAM,iCAAgC,CAAC;AAAA,MACvD,CAAC,EAAC,MAAM,QAAQ,MAAM,uBAAsB,CAAC;AAAA,MAC7C,CAAC,EAAC,MAAM,QAAQ,MAAM,oBAAmB,CAAC;AAAA,MAC1C,CAAC,EAAC,MAAM,QAAQ,MAAM,cAAa,CAAC;AAAA,MACpC,CAAC,EAAC,MAAM,QAAQ,MAAM,wBAAuB,CAAC;AAAA,MAC9C,CAAC,EAAC,MAAM,QAAQ,MAAM,0BAAyB,CAAC;AAAA,MAChD,CAAC,EAAC,MAAM,QAAQ,MAAM,0BAAyB,CAAC;AAAA,MAChD,CAAC,EAAC,MAAM,QAAQ,MAAM,uBAAsB,CAAC;AAAA,MAC7C,CAAC,EAAC,MAAM,QAAQ,MAAM,gBAAe,CAAC;AAAA,MACtC,CAAC,EAAC,MAAM,QAAQ,MAAM,cAAa,GAAG,CAAC,MAAM,CAAC;AAAA,MAC9C,CAAC,EAAC,MAAM,QAAQ,MAAM,oBAAmB,GAAG,CAAC,MAAM,CAAC;AAAA,MACpD,CAAC,EAAC,MAAM,QAAQ,MAAM,2BAA0B,CAAC;AAAA,MACjD,CAAC,EAAC,MAAM,QAAQ,MAAM,gBAAe,CAAC;AAAA,MACtC,CAAC,EAAC,MAAM,QAAQ,MAAM,mBAAkB,CAAC;AAAA,MACzC,CAAC,EAAC,MAAM,QAAQ,MAAM,kBAAiB,GAAG,CAAC,MAAM,CAAC;AAAA;;IAGnD,UAAW,CAAA;AAAA,IACX,cAAe,CAAA;AAAA,IACf,mBAAoB,CAAA;AAAA,IACpB,kBAAmB,CAAA;AAAA,IACnB,uBAAuB,CAAA;AAAA,IACvB,iBAAiB,CAAA;AAAA,IACjB,WAAW,CAAA;AAAA,IACX,OAAO,CAAA;AAAA,IACP,YAAY,WAAW;AACtB,gBAAU,QAAQ,YAAY,IAAI,UAAU,IAAG;AAC/C,gBAAU,aAAa,YAAY,IAAI,UAAU,IAAG;AACpD,gBAAU,YAAY,YAAY,IAAI,UAAU,IAAG;AACnD,gBAAU,kBAAkB,YAAY,IAAI,UAAU,QAAO;AAG7D,gBAAU,YAAY,QAAQ,SAASC,MAAK;AAC3C,kBAAU,cAAcA,KAAI,MAAMA,KAAI,IAAI;AAAA,MAC7C,CAAG;AACD,gBAAU,WAAW,QAAQ,SAASA,MAAK;AAC1C,kBAAU,kBAAkBA,KAAI,MAAMA,KAAI,IAAI;AAAA,MACjD,CAAG;AACD,gBAAU,gBAAgB,QAAQ,SAAS,OAAO;AACjD,kBAAU,uBAAuB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM,CAAC,CAAC;AAAA,MAChF,CAAG;AAAA,IACH;AAAA,IACC,KAAK,SAAS,OAAO,OAAO,OAAO,OAAO;AACzC,WAAK,OAAO;AACZ,WAAK,WAAW;AAChB,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACd;AAAA,IACC,SAAS,SAAS,MAAM,MAAM,MAAM,MAAM;AACzC,gBAAU,IAAI,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI;AAC/C,WAAK,QAAQ;AACb,WAAK,UAAU;AAAA,IACjB;AAAA,IACC,cAAc,SAAS,MAAM,MAAM,MAAM,MAAM;AAC9C,gBAAU,IAAI,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI;AAC/C,WAAK,QAAQ,CAAA;AAAA,IACf;AAAA,IACC,aAAa,SAAS,MAAM,MAAM,UAAU,OAAO;AAClD,gBAAU,aAAa,KAAK,MAAM,MAAM,IAAI;AAC5C,WAAK,WAAW;AAChB,WAAK,QAAQ;AAAA,IACf;AAAA,IACC,kBAAkB,SAAS,MAAM;AAChC,WAAK,gBAAgB;AAAA,IACvB;AAAA,IACC,mBAAmB,SAAS,MAAM,MAAM;AACvC,gBAAU,QAAQ,KAAK,MAAM,MAAM,IAAI;AAAA,IACzC;AAAA,IACC,eAAe,SAAS,MAAM,MAAM,aAAY;AAC/C,gBAAU,SAAS,KAAK,IAAI;AAC5B,gBAAU,OAAK,KAAK,IAAI,SAAS,MAAM;AACtC,kBAAU,IAAI,KAAK,MAAM,MAAM,MAAM,IAAI;AAAA,MAC5C;AACE,gBAAU,OAAK,KAAK,EAAE,YAAY,IAAI,UAAU,IAAG;AACnD,UAAI,YAAa,WAAU,OAAK,KAAK,EAAE,UAAU,QAAQ;AAAA,IAC3D;AAAA,IACC,mBAAmB,SAAS,MAAM,MAAM,aAAa;AAEpD,gBAAU,OAAK,KAAK,IAAI,SAAS,MAAM;AACtC,kBAAU,QAAQ,KAAK,MAAM,MAAM,MAAM,IAAI;AAAA,MAChD;AACE,gBAAU,OAAK,KAAK,EAAE,YAAY,IAAI,UAAU,QAAO;AACvD,gBAAU,OAAK,KAAK,EAAE,UAAU,QAAQ,SAAS,QAAQ;AACxD,aAAK,gBAAgB,MAAM;AAC3B,YAAI,aAAa;AAChB,sBAAY,KAAK,MAAM,MAAM;AAAA,QACjC;AAAA,MACA;AAAA,IACA;AAAA,IACC,iBAAiB,SAAS,aAAa;AACtC,UAAI,aAAa;AAChB,aAAK,cAAc;AACnB,YAAI,aAAa,YAAY;AAC7B,iBAAS,IAAI,GAAG,IAAE,YAAY,KAAK;AAClC,eAAK,YAAY,CAAC,IAAE,GAAG,IAAI,CAAA;AAAA,QAC/B;AAAA,MACA;AAAA,IACA;AAAA,IACC,wBAAwB,SAAS,MAAM,MAAM,aAAa,aAAa;AAEtE,gBAAU,OAAK,KAAK,IAAI,SAAS,MAAM;AACtC,kBAAU,aAAa,KAAK,MAAM,MAAM,MAAM,IAAI;AAClD,kBAAU,gBAAgB,KAAK,MAAM,WAAW;AAAA,MACnD;AACE,gBAAU,OAAK,KAAK,EAAE,YAAY,IAAI,UAAU,aAAY;AAC5D,UAAI,YAAa,WAAU,OAAK,KAAK,EAAE,UAAU,QAAQ;AAAA,IAC3D;AAAA,IACC,4BAA4B,SAAS,WAAW,aAAa,aAAa;AACzE,gBAAU,iBAAiB,SAAS,IAAI,CAAA;AACxC,gBAAU,YAAU,aAAa,IAAI,SAAS,MAAM,MAAM;AACzD,kBAAU,YAAY,KAAK,MAAM,MAAM,IAAI;AAC3C,kBAAU,gBAAgB,KAAK,MAAM,WAAW;AAAA,MACnD;AACE,gBAAU,YAAU,aAAa,EAAE,YAAY,IAAI,UAAU,YAAW;AACxE,UAAI,YAAa,WAAU,YAAU,aAAa,EAAE,UAAW,QAAQ;AAAA,IACzE;AAAA,IACC,uBAAuB,SAAS,WAAW,MAAM,aAAa,aAAa;AAC1E,gBAAU,iBAAiB,SAAS,EAAE,KAAK,IAAI;AAC/C,gBAAU,OAAK,aAAa,IAAI,SAAS,MAAM;AAC9C,kBAAU,YAAU,aAAa,EAAE,KAAK,MAAM,MAAM,IAAI;AACxD,kBAAU,gBAAgB,KAAK,MAAM,WAAW;AAAA,MACnD;AACE,gBAAU,OAAK,aAAa,EAAE,YAAY,IAAI,UAAU,YAAU,aAAa,EAAC;AAChF,UAAI,YAAa,WAAU,OAAK,aAAa,EAAE,UAAU,QAAQ;AAAA,IACnE;AAAA,IACC,gCAAgC,SAAS,WAAW,MAAM,aAAa;AACtE,gBAAU,sBAAsB,KAAK,MAAM,WAAW,MAAM,aAAa,CAAC,MAAM,CAAC;AAAA,IACnF;AAAA,IACC,uBAAuB,SAAS,MAAM,aAAa;AAElD,gBAAU,OAAK,kBAAkB,IAAI,SAAS,MAAM;AACnD,kBAAU,iBAAiB,KAAK,MAAM,MAAM,IAAI;AAAA,MACnD;AACE,gBAAU,OAAK,kBAAkB,EAAE,YAAY,IAAI,UAAU,iBAAgB;AAC7E,UAAI,YAAa,WAAU,OAAK,kBAAkB,EAAE,UAAU,QAAQ;AAAA,IACxE;AAAA,IACC,sBAAsB,SAAS,MAAM,aAAa;AAEjD,gBAAU,OAAK,mBAAmB,IAAI,SAAS,MAAM;AACpD,kBAAU,kBAAkB,KAAK,MAAM,MAAM,IAAI;AAAA,MACpD;AACE,gBAAU,OAAK,mBAAmB,EAAE,YAAY,IAAI,UAAU,kBAAiB;AAC/E,UAAI,YAAa,WAAU,OAAK,mBAAmB,EAAE,UAAU,QAAQ;AAAA,IACzE;AAAA,IACC,eAAe,SAAS,MAAM,MAAM,WAAW,gBAAgB,aAAa;AAC3E,gBAAU,MAAM,KAAK,IAAI;AACzB,gBAAU,UAAU,IAAI,IAAI,SAAS,MAAM;AAC1C,YAAI,WAAW;AACd,oBAAU,QAAQ,KAAK,MAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,QACzD,OAAU;AACN,cAAI,gBAAgB;AACnB,sBAAU,aAAa,KAAK,MAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,UAC/D,OAAW;AACN,sBAAU,IAAI,KAAK,MAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,UACtD;AAAA,QACA;AAAA,MACA;AACE,gBAAU,UAAU,IAAI,EAAE,YAAa,YAAY,IAAI,UAAU,QAAO,IAAM,iBAAiB,IAAI,UAAU,aAAY,IAAK,IAAI,UAAU,IAAG;AAC/I,UAAI,aAAa;AAChB,YAAI,WAAW;AACd,oBAAU,UAAU,IAAI,EAAE,UAAU,QAAQ,SAAS,QAAQ;AAC5D,iBAAK,gBAAgB,MAAM;AAC3B,gBAAI,aAAa;AAChB,0BAAY,KAAK,MAAM,MAAM;AAAA,YACnC;AAAA,UACA;AAAA,QACA,OAAU;AACN,oBAAU,UAAU,IAAI,EAAE,UAAU,QAAQ;AAAA,QAChD;AAAA,MACA;AAAA,IACA;AAAA;AAGA,YAAU,WAAU;AAEpB,YAAU,oBAAuB;AACjC,YAAU,qBAAuB;AACjC,YAAU,uBAAuB;AAEjC,YAAU,6BAA6B;AACvC,YAAU,wBAA0B;AACpC,YAAU,uBAAyB;AACnC,YAAU,wBAA0B;AACpC,YAAU,yBAA0B;AACpC,YAAU,sBAAwB;AAClC,YAAU,iCAAgC;AAE1C,YAAU,yBAAwB;AAClC,YAAU,wBAAwB;AAClC,YAAU,sBAAsB;AAChC,YAAU,kBAAmB;AAC7B,YAAU,mBAAoB;AAC9B,YAAU,wBAAwB;AAElC,YAAU,IAAI,UAAU,MAAM,SAAS,MAAM;AAC5C,WAAO,KAAK,OAAO,IAAI,UAAU,OAAK,KAAK,GAAG;AAAA,EAC/C;AAEA,YAAU,IAAI,UAAU,SAAS,SAASA,MAAK;AAC9C,SAAK,MAAM,KAAKA,IAAG;AACnB,QAAI,KAAKA,KAAI,OAAK,GAAG,GAAG;AACvB,WAAKA,KAAI,OAAK,GAAG,EAAE,KAAKA,IAAG;AAAA,IAC7B,OAAQ;AACN,WAAKA,KAAI,IAAI,IAAIA;AAAA,IACnB;AACC,WAAOA;AAAA,EACR;AAEA,YAAU,IAAI,UAAU,MAAM,SAAS,MAAM,OAAO;AACnD,SAAK,IAAI,IAAI;AACb,WAAO;AAAA,EACR;AAEA,YAAU,IAAI,UAAU,WAAW,SAAS,OAAO,OAAO;AACzD,QAAI,OAAO,SAAS;AACpB,QAAI,CAAC,KAAK,IAAI,GAAG;AAChB,WAAK,IAAI,IAAI,CAAA;AAAA,IACf;AACC,SAAK,IAAI,EAAE,KAAK,KAAK;AACrB,WAAO;AAAA,EACR;AAEoC;AACnC,YAAA,YAAoB;AAAA,EACrB;AAMA,YAAU,YAAY,SAAS,QAAQ;AACtC,WAAO,UAAU,WAAW,MAAM;AAAA,EACnC;AAEA,YAAU,aAAa,SAAS,QAAQ;AACvC,QAAI,QAAQ;AACZ,aAASD,KAAI,GAAGA,KAAG,IAAIA,MAAK;AAC3B,UAAI,MAAM,OAAO,UAAS,EAAG,SAAS,EAAE;AACxC,eAAU,IAAI,WAAW,IAAI,MAAI,MAAM;AAAA,IACzC;AACC,WAAO;AAAA,EACR;AAEA,YAAU,cAAc,SAAS,QAAQ,YAAY,YAAY;AAChE,QAAIC;AACJ,QAAI,QAAQ,OAAO,YAAW;AAC9B,QAAI,WAAW;AACf,QAAI;AACJ,QAAI;AACJ,QAAI,OAAO,mBAAmB,QAAQ,GAAG;AACxC,UAAI,MAAM,aAAa,iEAAiE;AACxF,aAAO,EAAE,MAAM,UAAU,oBAAmB;AAAA,IAC9C;AACC,QAAI,cAAc,aAAa,GAAG;AACjC,UAAI,MAAM,aAAa,4DAA4D;AACnF,aAAO,EAAE,MAAM,UAAU,oBAAmB;AAAA,IAC9C;AACC,QAAI,OAAO,OAAO,WAAU;AAC5B,QAAI,OAAO,OAAO,WAAW,CAAC;AAC9B,QAAI,WAAW;AACf,QAAI,MAAM,aAAa,wBAAsB,OAAK,gBAAc,OAAK,kBAAgB,KAAK;AAC1F,eAAW;AACX,QAAI,QAAQ,QAAQ;AACnB,UAAK,OAAO,eAAc,IAAK,OAAO,gBAAgB,MAAQ,aAAY,WAAW,IAAK;AACzF,eAAO,KAAK,KAAK;AACjB,YAAI,MAAM,aAAa,6DAA6D;AACpF,eAAO,EAAE,MAAM,UAAU,oBAAmB;AAAA,MAC/C;AACE,aAAO,UAAU,UAAU,MAAM;AACjC,kBAAY;AACZ,iBAAW;AAAA,IACb;AACC,QAAI,QAAQ,GAAG;AACd,UAAK,OAAO,eAAc,IAAK,OAAO,YAAW,IAAK,KAAO,cAAe,aAAa,WAAY,GAAI;AACxG,eAAO,KAAK,KAAK;AACjB,YAAI,KAAK,aAAa,kEAAiE,OAAK,OAAQ;AACpG,eAAO,EAAE,MAAM,UAAU,oBAAmB;AAAA,MAC/C;AACE,aAAO,OAAO,WAAU;AACxB,kBAAY;AAAA,IACd,WAAY,SAAS,GAAG;AAEtB,UAAI,YAAY;AACf,eAAO;AAAA,MACV,OAAS;AAEN,YAAI,SAAS,QAAQ;AACpB,cAAI,MAAM,aAAa,iDAA+C,OAAK,GAAG;AAC9E,UAAAA,OAAM,IAAI,UAAU,IAAI,MAAM,IAAI;AAClC,iBAAO,EAAE,MAAM,UAAU,IAAI,KAAKA,MAAK,MAAMA,KAAI,KAAI;AAAA,QACzD;AAAA,MACA;AAAA,IACA;AACC,QAAI,SAAS,KAAK,OAAO,UAAU;AAClC,UAAI,MAAM,aAAa,iBAAe,OAAK,0BAAwB,OAAK,0BAA0B;AAClG,aAAO,EAAE,MAAM,UAAU,qBAAqB,MAAY,MAAY,UAAoB,MAAY;AAAA,IACxG;AACC,QAAI,SAAS,KAAK,cAAc,OAAO,YAAY;AAClD,UAAI,MAAM,aAAa,kBAAgB,OAAK,kBAAgB,OAAK,sCAAoC,UAAU;AAC/G,aAAO,EAAE,MAAM,UAAU,qBAAqB,MAAY,MAAY,UAAoB,MAAY;AAAA,IACxG;AACC,QAAI,SAAS,KAAK,QAAQ,OAAO,OAAO,kBAAkB;AACzD,aAAO,KAAK,KAAK;AACjB,UAAI,KAAK,aAAa,oDAAkD,OAAK,OAAO;AACpF,aAAO,EAAE,MAAM,UAAU,qBAAqB,MAAY,MAAY,UAAoB,MAAY;AAAA,IACxG;AACC,QAAI,YAAY;AACf,aAAO,EAAE,MAAM,UAAU,IAAI,MAAY,MAAY,UAAoB,MAAY;AAAA,IACvF,OAAQ;AACN,UAAI,UAAU,OAAK,KAAK,GAAG;AAC1B,QAAAA,OAAM,IAAI,UAAU,OAAK,KAAK,EAAE,IAAI;AAAA,MACvC,OAAS;AACN,YAAI,SAAS,QAAQ;AACpB,cAAI,KAAK,aAAa,wBAAsB,OAAK,GAAG;AACpD,UAAAA,OAAM,IAAI,UAAU,IAAI,MAAM,IAAI;AAClC,UAAAA,KAAI,oBAAoB;AAAA,QAC5B,OAAU;AACN,cAAI,UAAU,UAAU,IAAI,GAAG;AAC9B,YAAAA,OAAM,IAAI,UAAU,UAAU,IAAI,EAAE,IAAI;AAAA,UAC7C,OAAW;AACN,gBAAI,KAAK,aAAa,yBAAuB,OAAK,GAAG;AACrD,YAAAA,OAAM,IAAI,UAAU,IAAI,MAAM,IAAI;AAClC,YAAAA,KAAI,OAAO;AACX,YAAAA,KAAI,oBAAoB;AAAA,UAC7B;AAAA,QACA;AAAA,MACA;AAAA,IACA;AACC,IAAAA,KAAI,WAAW;AAEf,IAAAA,KAAI,QAAQ;AACZ,QAAIA,KAAI,UAAU,UAAU,IAAI,UAAU,SAASA,KAAI,SAAS,QAAQ;AACvE,UAAI,KAAK,aAAa,MAAI,WAAS,oFAAoF;AACvH,MAAAA,KAAI,mBAAmB,MAAM;AAAA,IAC/B;AACC,IAAAA,KAAI,MAAM,MAAM;AAChB,WAAO,OAAO,YAAW,KAAMA,KAAI,QAAMA,KAAI;AAC7C,QAAI,OAAO,GAAG;AACb,UAAI,KAAK,aAAa,qBAAmB,WAAS,gEAA+D,CAAC,OAAM,0BAA0B;AAClJ,aAAO,KAAKA,KAAI,QAAMA,KAAI,IAAI;AAAA,IAChC,WAAY,OAAO,GAAG;AACpB,UAAI,MAAM,aAAa,qBAAmB,WAAS,YAAU,OAAK,iEAAiE;AACnI,UAAIA,KAAI,SAAS,EAAG,QAAO,KAAKA,KAAI,QAAMA,KAAI,IAAI;AAAA,IACpD;AACC,WAAO,EAAE,MAAM,UAAU,IAAI,KAAKA,MAAK,MAAMA,KAAI,KAAI;AAAA,EACtD;AAEA,YAAU,IAAI,UAAU,QAAQ,SAAS,QAAQ;AAChD,QAAI,KAAK,QAAQ,QAAQ;AACxB,WAAK,OAAO,OAAO,eAAe,KAAK,OAAK,KAAK,QAAQ;AAAA,IAC3D,OAAQ;AACN,UAAI,KAAK,SAAS,GAAG;AACpB,eAAO,KAAK,OAAO,gBAAgB;AAAA,MACtC,OAAS;AACN,eAAO,KAAK,KAAK,QAAM,KAAK,IAAI;AAAA,MACnC;AAAA,IACA;AAAA,EACA;AAIA,YAAU,IAAI,UAAU,qBAAqB,SAAS,QAAQ;AAC7D,SAAK,OAAO,OAAO,eAAe,KAAK,OAAK,KAAK,QAAQ;AAEzD,WAAO,YAAY,KAAK,OAAK,KAAK;AAAA,EACnC;AAEA,YAAU,QAAQ,UAAU,qBAAqB,SAAS,QAAQ;AACjE,SAAK,gBAAgB,MAAM;AAC3B,SAAK,OAAO,OAAO,eAAe,KAAK,OAAK,KAAK,QAAQ;AAEzD,SAAK,YAAY;AAEjB,WAAO,YAAY,KAAK,OAAK,KAAK;AAAA,EACnC;AAEA,YAAU,QAAQ,UAAU,kBAAkB,SAAU,QAAQ;AAC/D,SAAK,UAAU,OAAO,UAAS;AAC/B,SAAK,QAAQ,OAAO,WAAU;AAC9B,SAAK,YAAY;AAAA,EAClB;AAEA,YAAU,QAAQ,UAAU,QAAQ,SAAU,QAAQ;AACrD,SAAK,gBAAgB,MAAM;AAC3B,SAAK,OAAO,OAAO,eAAe,KAAK,OAAK,KAAK,QAAQ;AAAA,EAC1D;AAEA,YAAU,aAAa,UAAU,QAAQ,SAAS,QAAQ;AACzD,QAAIC;AACJ,QAAID;AACJ,WAAO,OAAO,YAAW,IAAK,KAAK,QAAM,KAAK,MAAM;AACnD,MAAAC,OAAM,UAAU,YAAY,QAAQ,OAAO,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AAC1F,UAAIA,KAAI,SAAS,UAAU,IAAI;AAC9B,QAAAD,OAAMC,KAAI;AAEV,aAAK,MAAM,KAAKD,IAAG;AACnB,YAAI,KAAK,eAAe,KAAK,YAAY,QAAQA,KAAI,IAAI,KAAK,IAAI;AACjE,eAAK,KAAK,YAAY,KAAK,YAAY,QAAQA,KAAI,IAAI,CAAC,IAAE,GAAG,EAAE,KAAKA,IAAG;AAAA,QAC3E,OAAU;AACN,cAAI,WAAWA,KAAI,SAAS,SAASA,KAAI,OAAOA,KAAI;AACpD,cAAI,KAAK,QAAQ,GAAG;AACnB,gBAAI,KAAK,iBAAe,WAAS,uCAAuC;AAAA,UAC7E,OAAW;AACN,iBAAK,QAAQ,IAAIA;AAAA,UACtB;AAAA,QACA;AAAA,MACA,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA;AAEA,YAAU,IAAI,UAAU,gBAAgB,SAAS,QAAQ;AACxD,SAAK,WAAW,OAAO,WAAU;AACjC,QAAI,QAAQ,CAAA;AACZ,UAAM,CAAC,IAAK,KAAK,YAAU,KAAI;AAC/B,UAAM,CAAC,IAAK,KAAK,YAAU,IAAG;AAC9B,UAAM,CAAC,IAAK,KAAK,WAAU;AAC3B,SAAK,iBAAiB,OAAO,aAAa,MAAM,CAAC,IAAE,IAAM,MAAM,CAAC,IAAE,IAAM,MAAM,CAAC,IAAE,EAAI;AAAA,EACtF;AAGA,YAAU,2BAA6B;AACvC,YAAU,0BAA4B;AACtC,YAAU,yBAA2B;AACrC,YAAU,6BAA8B;AACxC,YAAU,6BAA8B;AACxC,YAAU,2BAA6B;AACvC,YAAU,yBAA2B;AAErC,YAAU,YAAY,UAAU,cAAc,SAAS,QAAQ;AAC9D,WAAO,eAAe,CAAC;AACvB,SAAK,uBAAuB,OAAO,WAAU;AAC7C,SAAK,YAAY;AAAA,EAClB;AAEA,YAAU,YAAY,UAAU,QAAQ,SAAS,QAAQ;AACxD,SAAK,YAAY,MAAM;AACvB,SAAK,OAAO,OAAO,eAAe,KAAK,OAAO,KAAK,QAAQ;AAAA,EAC5D;AAEA,YAAU,YAAY,UAAU,qBAAqB,SAAS,QAAQ;AACrE,SAAK,YAAY,MAAM;AACvB,SAAK,OAAO,OAAO,eAAe,KAAK,OAAO,KAAK,QAAQ;AAE3D,SAAK,YAAY;AAEjB,WAAO,YAAY,KAAK,OAAK,KAAK;AAAA,EACnC;AAEA,YAAU,YAAY,UAAU,cAAc,SAAS,QAAQ;AAC9D,cAAU,aAAa,UAAU,MAAM,KAAK,MAAM,MAAM;AAAA,EACzD;AAGA,YAAU,2BAA2B,UAAU,sBAAsB;AACrE,YAAU,2BAA2B,UAAU,0BAA0B;AACzE,YAAU,2BAA2B,UAAU,0BAA0B;AACzE,YAAU,2BAA2B,UAAU,wBAAwB;AACvE,YAAU,2BAA2B,UAAU,sBAAsB;AAGrE,YAAU,2BAA2B,UAAU,0BAA0B,SAAS,QAAQ;AACzF,QAAI;AACJ,SAAK,YAAY,MAAM;AACvB,WAAO,WAAU;AACjB,WAAO,WAAU;AACjB,WAAO,gBAAgB,CAAC;AACxB,SAAK,QAAQ,OAAO,WAAU;AAC9B,SAAK,SAAS,OAAO,WAAU;AAC/B,SAAK,kBAAkB,OAAO,WAAU;AACxC,SAAK,iBAAiB,OAAO,WAAU;AACvC,WAAO,WAAU;AACjB,SAAK,cAAc,OAAO,WAAU;AACpC,4BAAwB,KAAK,IAAI,IAAI,OAAO,UAAS,CAAE;AACvD,SAAK,iBAAiB,OAAO,WAAW,qBAAqB;AAC7D,QAAI,wBAAwB,IAAI;AAC/B,aAAO,WAAW,KAAK,qBAAqB;AAAA,IAC9C;AACC,SAAK,QAAQ,OAAO,WAAU;AAC9B,WAAO,WAAU;AACjB,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAED,YAAU,2BAA2B,UAAU,yBAAyB,SAAS,QAAQ;AACxF,SAAK,YAAY,MAAM;AACvB,WAAO,gBAAgB,CAAC;AACxB,SAAK,gBAAgB,OAAO,WAAU;AACtC,SAAK,aAAa,OAAO,WAAU;AACnC,WAAO,WAAU;AACjB,WAAO,WAAU;AACjB,SAAK,aAAc,OAAO,WAAU,KAAI,KAAG;AAC3C,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAGD,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,0BAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAC1E,YAAU,sBAAsB,UAAU,yBAA0B,MAAM;AAG1E,YAAU,+BAA+B,UAAU,0BAA2B,MAAM;AACpF,YAAU,+BAA+B,UAAU,yBAA0B,MAAM;AACnF,YAAU,+BAA+B,UAAU,4BAA6B,MAAM;AACtF,YAAU,+BAA+B,UAAU,0BAA2B,MAAM;AACpF,YAAU,+BAA+B,UAAU,wBAA0B,MAAM;AACnF,YAAU,+BAA+B,UAAU,4BAA6B,MAAM;AAEtF,YAAU,cAAc,QAAQ,mCAAmC,SAAS,QAAQ;AACnF,QAAI,aAAa,OAAO,UAAS,IAAK;AACtC,QAAI,gBAAgB,aAAa,KAAK,KAAK;AAC3C,SAAK,aAAa,CAAA;AAClB,aAASD,KAAI,GAAGA,KAAI,GAAGA,MAAK;AAC3B,UAAI,eAAe,IAAI;AACtB,aAAK,WAAWA,EAAC,IAAI,OAAO,WAAU;AAAA,MACzC,OAAS;AACN,aAAK,WAAWA,EAAC,IAAI,OAAO,WAAU;AAAA,MACzC;AAAA,IACA;AAAA,EACA,CAAC;AACD,YAAU,cAAc,QAAQ,kCAAkC,SAAS,QAAQ;AAClF,SAAK,WAAW,OAAO,UAAS;AAAA,EACjC,CAAC;AACD,YAAU,kBAAkB,QAAQ,yBAAyB,SAAS,QAAQ;AAC7E,SAAK,WAAW,OAAO,YAAW;AAClC,QAAI,qBAAqB,KAAK,OAAO,KAAK,YAAY,KAAK,SAAS,SAAS;AAC7E,SAAK,cAAc,OAAO,eAAe,kBAAkB;AAAA,EAC5D,CAAC;AACD,YAAU,cAAc,QAAQ,4BAA4B,SAAS,QAAQ;AAG5E,QAAI,MAAM,OAAO,UAAS;AAC1B,SAAK,OAAO,IAAI,OAAS,GAAG;AAC3B,UAAI,MAAM,qBAAqB;AAC/B;AAAA,IACF;AACC,SAAK,UAAU,MAAM;AACrB,QAAI,KAAK,YAAY,GAAG;AACvB,UAAI,MAAM,kBAAgB,KAAK,UAAQ,gBAAgB;AACvD;AAAA,IACF;AACC,UAAM,OAAO,UAAS;AACtB,SAAK,cAAe,OAAO,IAAK;AAChC,SAAK,kBAAkB,MAAM;AAC7B,UAAM,OAAO,UAAS;AACtB,SAAK,aAAc,OAAO,IAAK;AAC/B,SAAK,gBAAiB,OAAO,IAAK;AAClC,SAAK,aAAc,OAAO,IAAK;AAC/B,SAAK,aAAc,OAAO,IAAK;AAC/B,SAAK,uBAAwB,OAAO,IAAK;AACzC,SAAK,uBAAwB,OAAO,IAAK;AACzC,SAAK,yBAA0B,MAAM;AACrC,UAAM,OAAO,UAAS;AACtB,SAAK,aAAc,OAAO,IAAK;AAC/B,QAAI,KAAK,eAAe,GAAG;AAC1B,UAAI,MAAM,iCAAiC;AAC3C;AAAA,IACF;AACC,SAAK,qCAAsC,OAAO,IAAK;AACvD,QAAI,KAAK,uCAAuC,GAAG;AAClD,WAAK,uCAAwC,MAAM;AAAA,IACrD,OAAQ;AACN,WAAK,aAAc,MAAM;AACzB,UAAI,KAAK,eAAe,GAAG;AAC1B,YAAI,MAAM,iCAAiC;AAC3C;AAAA,MACH;AAAA,IACA;AAEC,QAAI,oBAAoB,KAAK,OAAO,KAAK,WAAW;AACpD,SAAK,aAAa,OAAO,eAAe,iBAAiB;AAAA,EAC1D,CAAC;AAGD,WAAS,QAAQ,IAAI;AACpB,QAAI,MAAM;AACV,WAAO;AACP,WAAO;AAEP,aAASA,KAAE,GAAGA,KAAI,GAAG,QAAQA,MAAK;AACjC,UAAI,OAAO,GAAGA,EAAC;AACf,aAAO;AACP,aAAO,SAAO,KAAK,SAAO;AAC1B,aAAO;AACP,aAAO,KAAK,KAAK,OAAO,SAASG,MAAK,MAAM;AAC3C,eAAOA,OAAM,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,MACjD,GAAK,IAAI;AACP,aAAO;AAAA,IACT;AACC,WAAO;AACP,WAAO;AAAA,EACR;AAEA,YAAU,cAAc,QAAQ,uBAAuB,SAAS,QAAQ;AACvE,QAAIH;AACJ,QAAI;AACJ,SAAK,uBAAuB,OAAO,UAAS;AAC5C,SAAK,uBAAuB,OAAO,UAAS;AAC5C,SAAK,wBAAwB,OAAO,UAAS;AAC7C,SAAK,qBAAqB,OAAO,UAAS;AAC1C,SAAK,qBAAsB,OAAO,UAAS,IAAK;AAChD,SAAK,eAAgB,OAAO,UAAS,IAAK;AAC1C,cAAU,KAAK,OAAO,KAAK,WAAW;AACtC,SAAK,MAAM,CAAA;AACX,SAAK,IAAI,WAAW,WAAY;AAC/B,aAAO,QAAQ,IAAI;AAAA,IACrB;AACC,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AACvC,WAAK,IAAIA,EAAC,IAAI,CAAA;AACd,WAAK,IAAIA,EAAC,EAAE,SAAS,OAAO,WAAU;AACtC,WAAK,IAAIA,EAAC,EAAE,OAAO,OAAO,eAAe,KAAK,IAAIA,EAAC,EAAE,MAAM;AAC3D,iBAAW,IAAE,KAAK,IAAIA,EAAC,EAAE;AAAA,IAC3B;AACC,SAAK,eAAe,OAAO,UAAS;AACpC;AACA,SAAK,MAAM,CAAA;AACX,SAAK,IAAI,WAAW,WAAY;AAC/B,aAAO,QAAQ,IAAI;AAAA,IACrB;AACC,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AACvC,WAAK,IAAIA,EAAC,IAAI,CAAA;AACd,WAAK,IAAIA,EAAC,EAAE,SAAS,OAAO,WAAU;AACtC,WAAK,IAAIA,EAAC,EAAE,OAAO,OAAO,eAAe,KAAK,IAAIA,EAAC,EAAE,MAAM;AAC3D,iBAAW,IAAE,KAAK,IAAIA,EAAC,EAAE;AAAA,IAC3B;AACC,QAAI,UAAQ,GAAG;AACd,WAAK,MAAM,OAAO,eAAe,OAAO;AAAA,IAC1C;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,cAAc,SAAS,QAAQ;AAC9D,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,aAAa,OAAO,WAAU;AACnC,SAAK,aAAa,OAAO,WAAU;AAAA,EACpC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,wBAAwB,SAAS,QAAQ;AAC5E,QAAI,QAAQ,OAAO,UAAS;AAC5B,SAAK,sBAAuB,QAAQ,QAAS;AAC7C,SAAK,mBAAoB,QAAQ,OAAS;AAC1C,SAAK,mBAAoB,QAAQ,OAAS;AAC1C,WAAO,WAAU;AAAA,EAClB,CAAC;AAGD,YAAU,cAAc,QAAQ,0BAA0B,SAAS,QAAQ;AACvE,QAAIA;AACJ,SAAK,gBAAgB,OAAO,WAAU;AACtC,SAAK,kBAAkB,CAAA;AACvB,SAAK,gBAAgB,CAAA;AACrB,SAAK,uBAAuB,CAAA;AAC5B,SAAKA,KAAI,GAAGA,KAAI,KAAK,eAAeA,MAAK;AACrC,WAAK,gBAAgB,KAAK,OAAO,WAAU,CAAE;AAC7C,WAAK,cAAc,KAAK,OAAO,WAAU,CAAE;AAC3C,WAAK,qBAAqB,KAAK,OAAO,WAAU,CAAE;AAAA,IAC1D;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,oBAAoB,SAAS,QAAQ;AACpE,SAAK,sBAAsB,OAAO,WAAU;AAC5C,SAAK,sBAAsB,OAAO,WAAU;AAC5C,SAAK,uBAAuB,OAAO,WAAU;AAC7C,SAAK,uBAAuB,OAAO,WAAU;AAC7C,SAAK,YAAY,OAAO,WAAU;AAClC,SAAK,YAAY,OAAO,WAAU;AAClC,SAAK,WAAW,OAAO,WAAU;AACjC,SAAK,WAAW,OAAO,WAAU;AAAA,EAClC,CAAC;AACD,YAAU,cAAc,QAAQ,wBAAwB,SAAS,QAAQ;AACxE,SAAK,0BAA0B,OAAO,WAAU;AAC7C,SAAK,8BAA8B,OAAO,WAAU;AAAA,EACxD,CAAC;AAGD,YAAU,kBAAkB,QAAQ,iCAAiC,SAAS,QAAQ;AACrF,QAAI,KAAK,QAAQ,GAAK;AACrB,WAAK,QAAQ,OAAO,UAAS;AAAA,IAC/B;AACC,QAAI,KAAK,QAAQ,GAAK;AACrB,WAAK,QAAQ,OAAO,UAAS;AAAA,IAC/B;AACC,QAAI,KAAK,QAAQ,GAAK;AACrB,WAAK,QAAQ,OAAO,UAAS;AAAA,IAC/B;AACC,QAAI,KAAK,QAAQ,GAAK;AACrB,UAAI,KAAK,WAAW,GAAG;AACtB,YAAI,KAAK,QAAQ,IAAM;AACtB,eAAK,SAAS,OAAO,UAAS;AAC9B,eAAK,SAAS,OAAO,UAAS;AAC9B,eAAK,SAAS,OAAO,UAAS;AAAA,QAClC,OAAU;AACN,eAAK,SAAS,OAAO,UAAS;AAC9B,eAAK,SAAS,OAAO,UAAS;AAC9B,eAAK,SAAS,OAAO,UAAS;AAAA,QAClC;AAAA,MACA,WAAa,KAAK,WAAW,EAAG;AAAA,IAGhC;AACC,QAAI,KAAK,QAAQ,IAAM;AACtB,WAAK,KAAK,OAAO,WAAU;AAAA,IAC7B;AAAA,EACA,CAAC;AAED,YAAU,kBAAkB,QAAQ,iCAAiC,SAAS,QAAQ;AACrF,SAAK,iBAAiB,OAAO,UAAS;AACtC,SAAK,oBAAoB,OAAO,UAAS;AACzC,SAAK,oBAAoB,OAAO,UAAS;AACzC,QAAI,KAAK,QAAQ,GAAK;AACrB,WAAK,iBAAiB,OAAO,UAAS;AACtC,WAAK,cAAc,OAAO,UAAS;AAAA,IACrC;AAAA,EACA,CAAC;AACD,YAAU,cAAc,QAAQ,0BAA0B,SAAS,QAAQ;AAC1E,SAAK,kBAAkB,OAAO,WAAU;AACxC,SAAK,kBAAkB,CAAA;AACvB,SAAK,sBAAsB,CAAA;AAC3B,SAAK,IAAI,GAAG,IAAI,KAAK,iBAAiB,KAAK;AAC1C,UAAI,iBAAiB,OAAO,WAAU;AACtC,WAAK,gBAAgB,KAAK,cAAc;AACxC,UAAI,kBAAkB,OAAQ;AAC7B,aAAK,oBAAoB,KAAK,OAAO,YAAW,CAAE;AAAA,MACrD;AAAA,IACA;AAAA,EACA,CAAC;AACD,YAAU,kBAAkB,QAAQ,uBAAuB,SAAS,QAAQ;AAC3E,QAAII;AACJ,QAAIJ;AACJ,IAAAI,eAAc,OAAO,WAAU;AAC/B,SAAK,gBAAgB,CAAA;AACrB,QAAI,KAAK,YAAY,GAAG;AACvB,WAAIJ,KAAE,GAAGA,KAAEI,cAAaJ,MAAK;AAC5B,aAAK,cAAc,KAAK,OAAO,WAAU,CAAE;AAAA,MAC9C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,wBAAwB,SAAS,QAAQ;AAC5E,SAAK,SAAS,OAAO,WAAU;AAC5B,SAAK,UAAU,OAAO,WAAU;AAAA,EACpC,CAAC;AAGD,YAAU,cAAc,QAAQ,wBAAwB,SAAS,QAAQ;AACxE,SAAK,cAAc,OAAO,WAAW,CAAC;AACtC,QAAI,KAAK,gBAAgB,QAAQ;AAChC,WAAK,mBAAmB,OAAO,WAAU;AACzC,WAAK,2BAA2B,OAAO,WAAU;AACjD,WAAK,sBAAsB,OAAO,WAAU;AAC5C,UAAI,MAAM,OAAO,UAAS;AAC1B,WAAK,kBAAkB,OAAO;AAAA,IAChC,WAAY,KAAK,gBAAgB,QAAQ;AACvC,WAAK,cAAc,OAAO,eAAe,KAAK,OAAO,CAAC;AAAA,IACxD,WAAY,KAAK,gBAAgB,QAAQ;AACvC,WAAK,cAAc,OAAO,eAAe,KAAK,OAAO,CAAC;AAAA,IACxD;AAAA,EACA,CAAC;AACD,YAAU,kBAAkB,QAAQ,gBAAgB,SAAU,QAAQ;AACrE,SAAK,cAAc,MAAM;AACzB,SAAK,SAAS,OAAO,YAAW;AAAA,EACjC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,0BAA0B,SAAS,QAAQ;AAE9E,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,wBAAwB,OAAO;AACpC,WAAK,4BAA4B,OAAO;AACxC,WAAK,+BAA+B,OAAO;AAC3C,WAAK,uBAAuB,OAAO;AACnC,WAAK,qBAAqB,OAAO;IACnC;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,wBAAwB,SAAS,QAAQ;AAC5E,QAAII;AACJ,QAAIJ;AACJ,IAAAI,eAAc,OAAO,WAAU;AAC/B,SAAK,gBAAgB,CAAA;AACrB,SAAK,iBAAiB,CAAA;AACtB,QAAI,KAAK,YAAY,GAAG;AACvB,WAAIJ,KAAE,GAAGA,KAAEI,cAAaJ,MAAK;AAC5B,aAAK,cAAc,KAAK,OAAO,WAAU,CAAE;AAIxC,YAAI,QAAQ,OAAO,UAAS;AAC5B,YAAI,QAAQ,GAAG;AACb,cAAI,KAAK,aAAa,uDAAuD;AAAA,QACrF;AACG,aAAK,eAAe,KAAK,KAAK;AAAA,MACjC;AAAA,IACA,WAAY,KAAK,WAAW,GAAG;AAC7B,WAAIA,KAAE,GAAGA,KAAEI,cAAaJ,MAAK;AAC5B,aAAK,cAAc,KAAK,OAAO,WAAU,CAAE;AAC3C,aAAK,eAAe,KAAK,OAAO,UAAS,CAAE;AAAA,MAC9C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,kBAAkB,SAAS,QAAQ;AAClE,QAAI,YAAY,OAAO,UAAS;AAChC,QAAI,YAAY,OAAO,UAAS;AAChC,QAAI,YAAY,OAAO,UAAS;AAChC,SAAK,QAAQ,aAAa;AAC1B,SAAK,OAAU,aAAa,IAAK;AACjC,SAAK,SAAU,YAAY,MAAS,IAAO,aAAa,IAAK;AAC7D,SAAK,QAAU,aAAa,IAAK;AACjC,SAAK,QAAU,aAAa,IAAK;AACjC,SAAK,gBAAiB,YAAY,IAAS,aAAa,IAAK;AAAA,EAC9D,CAAC;AAGD,YAAU,cAAc,QAAQ,kBAAkB,SAAS,QAAQ;AAClE,QAAI,SAAS,OAAO,WAAU;AAC9B,SAAK,YAAY,UAAU;AAC3B,SAAK,cAAc,SAAS;AAC5B,SAAK,WAAW,CAAA;AAChB,aAASA,KAAI,GAAGA,KAAI,KAAK,cAAY,GAAGA,MAAK;AAC5C,UAAI,UAAU,CAAA;AACd,WAAK,SAAS,KAAK,OAAO;AAC1B,UAAI,YAAY,OAAO,UAAS;AAChC,UAAI,YAAY,OAAO,UAAS;AAChC,UAAI,YAAY,OAAO,UAAS;AAChC,cAAQ,QAAQ,aAAa;AAC7B,cAAQ,OAAU,aAAa,IAAK;AACpC,cAAQ,SAAU,YAAY,MAAQ,IAAO,aAAa,IAAK;AAC/D,cAAQ,QAAU,aAAa,IAAK;AACpC,cAAQ,QAAS,YAAY;AAC7B,cAAQ,cAAgB,aAAa,IAAK;AAC1C,UAAI,QAAQ,cAAc,GAAG;AAC5B,gBAAQ,YAAa,YAAY,MAAQ,IAAK,OAAO,UAAS;AAAA,MACjE;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mBAAmB,SAAS,QAAQ;AACpE,QAAI,iBAAiB;AACrB,QAAI,6BAA6B;AAEjC,QAAI,aAAa,CAAA;AACjB,QAAI,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACR;AAGI,OAAG;AACC,UAAI,cAAc,OAAO,UAAS;AAElC,UAAI,OAAO,KAAK;AAAA,QACX,cAAc;AAAA,QACd,gBAAgB,SAAS;AAAA,MACtC;AAIQ,UAAI,CAAE,MAAO;AAET,eAAO,eAAe,EAAE;AAGxB,aAAK,aAAc,OAAO,WAAU,KAAM;AAG1C,eAAO,eAAe,EAAE;AAAA,MACpC,OAAe;AAEH,eAAO,eAAe,OAAO,YAAY;AAAA,MACrD;AAEQ,iBAAW,KAAK,gBAAgB,IAAI,CAAC;AAErC,UAAI,CAAC,EAAE,cAAc,6BAA6B;AAC9C;AAAA,MACZ;AAAA,IACA,SAAa;AAET,SAAK,oBACD,WAAW,SAAS,OAAO,WAAW,KAAK,IAAI,IAAI;AAAA,EAC3D,CAAC;AAED,YAAU,cAAc,QAAQ,0BAA0B,SAAS,QAAQ;AAC1E,SAAK,YAAY,OAAO,WAAU;AAAA,EACnC,CAAC;AAGD,YAAU,cAAc,QAAQ,qBAAqB,SAAS,QAAQ;AACrE,SAAK,OAAO,OAAO,WAAU;AAAA,EAC9B,CAAC;AAGD,YAAU,cAAc,QAAQ,sBAAsB,SAAS,QAAQ;AACtE,SAAK,YAAY,OAAO,WAAU;AAAA,EACnC,CAAC;AAGD,YAAU,cAAc,QAAQ,mBAAmB,SAAS,QAAQ;AACnE,SAAK,UAAU,OAAO,UAAS;AAC/B,SAAK,qBAAqB,OAAO,UAAS;AAC1C,SAAK,UAAU,OAAO,WAAU;AAChC,SAAK,kBAAkB,OAAO,WAAU;AACxC,SAAK,aAAa,OAAO,UAAS;AAClC,SAAK,uBAAuB,OAAO,UAAS;AAC5C,QAAI,KAAK,yBAAyB,GAAG;AACpC,WAAK,cAAc,OAAO,UAAS;AACnC,WAAK,eAAe,OAAO,UAAS;AACpC,WAAK,iBAAiB,CAAA;AACtB,eAASA,KAAI,GAAGA,KAAI,KAAK,oBAAoBA,MAAK;AACjD,aAAK,eAAeA,EAAC,IAAI,OAAO,UAAS;AAAA,MAC5C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,oBAAoB,SAAS,QAAQ;AACxE,QAAIE;AACJ,QAAID;AACJ,SAAK,UAAU,CAAA;AACf,QAAIG,eAAc,OAAO,WAAU;AACnC,aAASJ,KAAI,GAAGA,KAAII,cAAaJ,MAAK;AACrC,MAAAE,OAAM,UAAU,YAAY,QAAQ,OAAO,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AAC1F,UAAIA,KAAI,SAAS,UAAU,IAAI;AAC9B,QAAAD,OAAMC,KAAI;AACV,aAAK,QAAQ,KAAKD,IAAG;AAAA,MACxB,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,yBAAyB,SAAS,QAAQ;AACzE,SAAK,YAAY,OAAO,WAAU;AAAA,EACnC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,uBAAuB,SAAS,QAAQ;AAC3E,SAAK,oBAAoB,OAAO,WAAW,KAAK,OAAK,KAAK,QAAQ;AAAA,EACnE,CAAC;AAGD,YAAU,kBAAkB,QAAQ,eAAe,SAAS,QAAQ;AACnE,SAAK,UAAU,CAAA;AACf,QAAIG,eAAc,OAAO,WAAU;AACnC,aAASJ,KAAI,GAAGA,KAAII,cAAaJ,MAAK;AACrC,UAAI,QAAQ,CAAA;AACZ,WAAK,QAAQ,KAAK,KAAK;AACvB,UAAI,KAAK,YAAY,GAAG;AACvB,cAAM,mBAAmB,OAAO,WAAU;AAC1C,cAAM,aAAa,OAAO,UAAS;AAAA,MACtC,OAAS;AACN,cAAM,mBAAmB,OAAO,WAAU;AAC1C,cAAM,aAAa,OAAO,UAAS;AAAA,MACtC;AACE,YAAM,qBAAqB,OAAO,UAAS;AAC3C,YAAM,sBAAsB,OAAO,UAAS;AAAA,IAC9C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mBAAmB,SAAS,QAAQ;AACvE,QAAI,KAAK,WAAW,GAAG;AACtB,WAAK,YAAiB,OAAO,WAAU;AACvC,WAAK,oBAAuB,OAAO,WAAU;AAC7C,WAAK,iBAAqB,OAAO,WAAU;AAC3C,WAAK,KAAW,OAAO,WAAU;AACjC,WAAK,gBAAoB,OAAO,YAAW;AAC3C,WAAK,QAAc,OAAO,YAAW;AAAA,IACvC,OAAQ;AACN,WAAK,gBAAoB,OAAO,YAAW;AAC3C,WAAK,QAAc,OAAO,YAAW;AACrC,WAAK,YAAiB,OAAO,WAAU;AACvC,WAAK,0BAA2B,OAAO,WAAU;AACjD,WAAK,iBAAqB,OAAO,WAAU;AAC3C,WAAK,KAAW,OAAO,WAAU;AAAA,IACnC;AACC,QAAI,eAAe,KAAK,OAAO,KAAK,YAAY,IAAE,KAAK,KAAK,cAAc,SAAO,MAAM,KAAK,MAAM,SAAO;AACzG,QAAI,KAAK,WAAW,GAAG;AACtB,sBAAgB;AAAA,IAClB;AACC,SAAK,eAAe,OAAO,eAAe,YAAY;AAAA,EACvD,CAAC;AAID,YAAU,0BAA0B,SAAS,MAAM,aAAa;AAC5D,cAAU,OAAK,KAAK,IAAI,SAAS,MAAM;AACnC,gBAAU,QAAQ,KAAK,MAAM,MAAM,IAAI;AAAA,IAC/C;AACI,cAAU,OAAK,KAAK,EAAE,YAAY,IAAI,UAAU,QAAO;AACvD,cAAU,OAAK,KAAK,EAAE,UAAU,QAAQ,SAAS,QAAQ;AACrD,WAAK,gBAAgB,MAAM;AAC3B,UAAI,aAAa;AACb,oBAAY,KAAK,MAAM,MAAM;AAAA,MACzC,OAAe;AACH,aAAK,WAAW,OAAO,WAAU;AACjC,aAAK,wBAAwB,OAAO,WAAU;AAC9C,aAAK,aAAa,CAAA;AAClB,aAAK,IAAI,GAAG,IAAI,KAAK,uBAAuB,KAAK;AAC7C,cAAI,YAAY,OAAO,WAAU;AACjC,eAAK,WAAW,KAAK,SAAS;AAAA,QAC9C;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAGA,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,MAAM;AAGxC,YAAU,wBAAwB,QAAQ,SAAS,QAAQ;AACvD,SAAK,WAAW,OAAO,WAAU;AACjC,SAAK,wBAAwB,OAAO,WAAU;AAC9C,SAAK,aAAa,CAAA;AAClB,aAASA,KAAI,GAAGA,KAAI,KAAK,uBAAuBA,MAAK;AACjD,UAAI,YAAY,OAAO,WAAU;AACjC,WAAK,WAAW,KAAK,SAAS;AAAA,IACtC;AAEI,SAAK,cAAc,OAAO,WAAU;AACpC,SAAK,cAAc,OAAO,WAAU;AACpC,SAAK,gBAAgB,CAAA;AACrB,SAAK,+BAA+B,CAAA;AACpC,SAAK,4BAA4B,CAAA;AACjC,SAAKA,KAAI,GAAGA,KAAI,KAAK,uBAAuBA,MAAK;AAC7C,WAAK,cAAcA,EAAC,IAAI,OAAO,WAAU;AACzC,WAAK,0BAA0BA,EAAC,IAAI,OAAO,WAAU;AACrD,WAAK,6BAA6BA,EAAC,IAAI,OAAO,WAAU;AAAA,IAChE;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,iCAAiC,SAAS,QAAQ;AACrF,QAAI,WAAW,OAAO,eAAe,KAAK,OAAK,KAAK,QAAQ;AAC5D,QAAI,OAAO,0BAA0B,aAAa;AACjD,UAAI,aAAa,IAAI,sBAAqB;AAC1C,WAAK,MAAM,WAAW,mBAAmB,IAAI,WAAW,SAAS,QAAQ,GAAG,WAAW,UAAU,CAAC;AAAA,IACpG;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,oBAAoB,SAAS,QAAQ;AACpE,SAAK,aAAa,OAAO,UAAS;AAClC,SAAK,gBAAgB,OAAO,UAAS;AAAA,EACtC,CAAC;AAGD,YAAU,cAAc,QAAQ,qBAAqB,SAAS,QAAQ;AACrE,SAAK,cAAc,OAAO,WAAW,CAAC;AAAA,EACvC,CAAC;AAGD,YAAU,cAAc,QAAQ,eAAe,SAAS,QAAQ;AAC/D,QAAI,UAAU,KAAK,OAAO,KAAK;AAC/B,SAAK,cAAc,OAAO,WAAW,CAAC;AACtC,SAAK,gBAAgB,OAAO,WAAU;AACtC,eAAW;AACX,SAAK,oBAAoB,CAAA;AACzB,QAAIA,KAAI;AACR,WAAO,WAAS,GAAG;AAClB,WAAK,kBAAkBA,EAAC,IAAI,OAAO,WAAW,CAAC;AAC/C,iBAAW;AACX,MAAAA;AAAA,IACF;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,cAAc,SAAS,QAAQ;AAClE,QAAI,KAAK,YAAY,GAAG;AACvB,aAAO,WAAU;AACjB,WAAK,UAAU,OAAO,WAAW,CAAC;AAClC,aAAO,gBAAgB,CAAC;AACxB,WAAK,OAAO,OAAO,WAAW,KAAK,OAAK,KAAK,WAAS,EAAE;AACxD,UAAI,KAAK,KAAK,KAAK,KAAK,SAAO,CAAC,MAAI,MAAM;AACzC,aAAK,OAAO,KAAK,KAAK,MAAM,GAAE,EAAE;AAAA,MACnC;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,wBAAwB,SAAS,QAAQ;AACxE,QAAIA,IAAG;AAEP,QAAI;AACJ,QAAI;AACJ,SAAK,uBAAuB,OAAO,UAAS;AAC5C,eAAW,OAAO,UAAS;AAC3B,SAAK,wBAAwB,YAAY;AACzC,SAAK,qBAAqB,WAAW,OAAS;AAC9C,SAAK,sBAAuB,WAAW;AACvC,SAAK,gCAAgC,OAAO,WAAU;AACtD,SAAK,+BAA+B,OAAO,eAAe,CAAC;AAC3D,SAAK,oBAAoB,OAAO,UAAS;AACzC,SAAK,+BAA+B,OAAO,WAAU,IAAK;AAC1D,SAAK,kBAAmB,OAAO,UAAS,IAAK;AAC7C,SAAK,oBAAqB,OAAO,UAAS,IAAK;AAC/C,SAAK,wBAAyB,OAAO,UAAS,IAAK;AACnD,SAAK,0BAA2B,OAAO,UAAS,IAAK;AACrD,SAAK,eAAe,OAAO,WAAU;AACrC,eAAW,OAAO,UAAS;AAC3B,SAAK,oBAAqB,YAAY;AACtC,SAAK,qBAAqB,WAAW,OAAQ;AAC7C,SAAK,oBAAoB,WAAW,MAAQ;AAC5C,SAAK,qBAAsB,WAAW;AAEtC,SAAK,cAAc,CAAA;AACnB,SAAK,YAAY,WAAW,WAAY;AACvC,UAAI,MAAM;AACV,aAAO;AACP,aAAO;AAEP,eAASA,KAAE,GAAGA,KAAE,KAAK,QAAQA,MAAK;AACjC,YAAIK,cAAa,KAAKL,EAAC;AACvB,eAAO;AACP,eAAO,kBAAgBK,YAAW,SAAO,OAAKA,YAAW,eAAa;AACtE,eAAO,kBAAgBA,YAAW,SAAO,OAAKA,YAAW,YAAU;AACnE,iBAASC,KAAE,GAAGA,KAAED,YAAW,QAAQC,MAAK;AACvC,cAAIC,QAAOF,YAAWC,EAAC;AACvB,cAAIA,OAAM,EAAG,QAAO;AACpB,iBAAO;AACP,iBAAOC,MAAK,KAAK,OAAO,SAASJ,MAAK,MAAM;AAC3C,mBAAOA,OAAM,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,UACnD,GAAO,IAAI;AACP,iBAAO;AAAA,QACX;AAAA,MACA;AACE,aAAO;AACP,aAAO;AAAA,IACT;AACC,QAAI,cAAc,OAAO,UAAS;AAClC,SAAKH,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACjC,UAAI,aAAa,CAAA;AACjB,WAAK,YAAY,KAAK,UAAU;AAChC,iBAAW,OAAO,UAAS;AAC3B,iBAAW,gBAAgB,WAAW,QAAS;AAC/C,iBAAW,YAAY,WAAW;AAClC,UAAI,WAAW,OAAO,WAAU;AAChC,WAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC9B,YAAI,OAAO,CAAA;AACX,mBAAW,KAAK,IAAI;AACpB,iBAAS,OAAO,WAAU;AAC1B,aAAK,OAAS,OAAO,eAAe,MAAM;AAAA,MAC7C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,eAAe,SAAS,QAAQ;AACnE,QAAIE;AACJ,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,cAAc,OAAO,WAAU;AAAA,IACtC,OAAQ;AACN,WAAK,cAAc,OAAO,WAAU;AAAA,IACtC;AACC,SAAK,aAAa,CAAA;AAClB,aAASF,KAAI,GAAGA,KAAI,KAAK,aAAaA,MAAK;AAC1C,MAAAE,OAAM,UAAU,YAAY,QAAQ,OAAO,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AAC1F,UAAIA,KAAI,SAAS,UAAU,IAAI;AAC9B,YAAIA,KAAI,IAAI,SAAS,QAAQ;AAC5B,cAAI,MAAM,aAAa,8BAA4BA,KAAI,IAAI,IAAI;AAAA,QACnE;AACG,aAAK,WAAWF,EAAC,IAAIE,KAAI;AAAA,MAC5B,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mBAAmB,SAAS,QAAQ;AACvE,QAAI;AACJ,WAAO,OAAO,UAAS;AACvB,SAAK,cAAe,QAAQ,IAAK;AACjC,SAAK,cAAc,OAAO;AAC1B,WAAO,OAAO,UAAS;AACvB,SAAK,mBAAoB,QAAQ,IAAK;AACtC,QAAI,KAAK,YAAY,KAAK,KAAK,YAAY,GAAG;AAC7C,WAAK,aAAa,OAAO;AAAA,IAC3B,OAAQ;AACN,WAAK,aAAa;AAAA,IAEpB;AACC,SAAK,QAAQ,CAAA;AACb,QAAI,aAAa;AACjB,QAAI,KAAK,UAAU,GAAG;AACrB,mBAAa,OAAO,WAAU;AAAA,IAChC,WAAY,KAAK,YAAY,GAAG;AAC9B,mBAAa,OAAO,WAAU;AAAA,IAChC,OAAQ;AACN,YAAM;AAAA,IACR;AACC,aAASF,KAAI,GAAGA,KAAI,YAAYA,MAAK;AACpC,UAAI,OAAO,CAAA;AACX,WAAK,MAAM,KAAK,IAAI;AACpB,UAAI,KAAK,UAAU,GAAG;AACrB,aAAK,UAAU,OAAO,WAAU;AAAA,MACnC,WAAa,KAAK,YAAY,GAAG;AAC9B,aAAK,UAAU,OAAO,WAAU;AAAA,MACnC,OAAS;AACN,cAAM;AAAA,MACT;AACE,UAAI,KAAK,YAAY,KAAK,KAAK,YAAY,GAAG;AAC7C,aAAK,sBAAuB,OAAO,WAAU,IAAK;AAAA,MACrD,OAAS;AACN,aAAK,sBAAsB;AAAA,MAC9B;AACE,WAAK,uBAAuB,OAAO,WAAU;AAC7C,cAAO,KAAK,kBAAgB;AAAA,QAC3B,KAAK;AACJ,eAAK,cAAc;AACnB;AAAA,QACD,KAAK;AACJ,eAAK,cAAc,OAAO,WAAU;AACpC;AAAA,QACD,KAAK;AACJ,eAAK,cAAc,OAAO,WAAU;AACpC;AAAA,QACD;AACC,gBAAM;AAAA;AAER,UAAI,eAAe,OAAO,WAAU;AACpC,WAAK,UAAU,CAAA;AACf,eAAS,IAAE,GAAG,IAAI,cAAc,KAAK;AACpC,YAAI,SAAS,CAAA;AACb,aAAK,QAAQ,KAAK,MAAM;AACxB,YAAI,KAAK,YAAY,KAAK,KAAK,YAAY,GAAG;AAC7C,kBAAO,KAAK,YAAU;AAAA,YACrB,KAAK;AACJ,qBAAO,eAAe;AACtB;AAAA,YACD,KAAK;AACJ,qBAAO,eAAe,OAAO,WAAU;AACvC;AAAA,YACD,KAAK;AACJ,qBAAO,eAAe,OAAO,WAAU;AACvC;AAAA,YACD;AACC,oBAAM;AAAA;QAEZ;AACG,gBAAO,KAAK,aAAW;AAAA,UACtB,KAAK;AACJ,mBAAO,gBAAgB;AACvB;AAAA,UACD,KAAK;AACJ,mBAAO,gBAAgB,OAAO,WAAU;AACxC;AAAA,UACD,KAAK;AACJ,mBAAO,gBAAgB,OAAO,WAAU;AACxC;AAAA,UACD;AACC,kBAAM;AAAA;AAER,gBAAO,KAAK,aAAW;AAAA,UACtB,KAAK;AACJ,mBAAO,gBAAgB;AACvB;AAAA,UACD,KAAK;AACJ,mBAAO,gBAAgB,OAAO,WAAU;AACxC;AAAA,UACD,KAAK;AACJ,mBAAO,gBAAgB,OAAO,WAAU;AACxC;AAAA,UACD;AACC,kBAAM;AAAA;MAEX;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,eAAe,SAAS,QAAQ;AAC/D,QAAI,MAAM,OAAO,UAAS;AAC1B,SAAK,WAAW,OAAO;AACvB,SAAK,OAAO,MAAM;AAAA,EACnB,CAAC;AACD,YAAU,kBAAkB,QAAQ,iBAAiB,SAAS,QAAQ;AACrE,QAAI,KAAK,YAAY,KAAK,KAAK,YAAY,GAAG;AAC7C,WAAK,UAAU,OAAO,WAAU;AAChC,WAAK,wBAAwB,OAAO,WAAU;AAC9C,WAAK,YAAY,OAAO,YAAW;AACnC,WAAK,eAAe,OAAO,YAAW;AACtC,WAAK,mBAAmB,OAAO,YAAW;AAAA,IAC5C;AACC,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,iBAAiB,OAAO,WAAW,CAAC;AACzC,UAAI,KAAK,aAAa,6BAA6B;AACnD,aAAO,KAAK,KAAK,QAAM,KAAK,IAAI;AAChC;AAAA,IACF;AACC,QAAI,KAAK,WAAW,GAAG;AACtB,UAAI,KAAK,YAAY,GAAG;AACvB,aAAK,UAAU,OAAO,WAAU;AAAA,MACnC,WAAa,KAAK,YAAY,GAAG;AAC9B,aAAK,UAAU,OAAO,WAAU;AAAA,MACnC;AACE,WAAK,wBAAwB,OAAO,WAAU;AAC9C,WAAK,YAAY,OAAO,WAAW,CAAC;AACpC,WAAK,YAAY,OAAO,YAAW;AACnC,UAAI,KAAK,cAAc,QAAQ;AAC9B,aAAK,eAAe,OAAO,YAAW;AACtC,aAAK,mBAAmB,OAAO,YAAW;AAAA,MAC7C,WAAa,KAAK,cAAc,QAAQ;AACrC,aAAK,gBAAgB,OAAO,YAAW;AAAA,MAC1C;AAAA,IACA;AAAA,EACA,CAAC;AAED,YAAU,kBAAkB,QAAQ,8BAA8B,SAAS,QAAQ;AAClF,QAAIA,IAAG;AACP,kBAAc,OAAO,WAAU;AAC/B,SAAK,eAAe,CAAA;AACpB,SAAIA,KAAE,GAAGA,KAAE,aAAaA,MAAK;AAC5B,UAAI,aAAa,CAAA;AACjB,WAAK,aAAa,KAAK,UAAU;AACjC,UAAI,KAAK,UAAU,GAAG;AACrB,mBAAW,KAAK,OAAO,WAAU;AAAA,MACpC,OAAS;AACN,mBAAW,KAAK,OAAO,WAAU;AAAA,MACpC;AACE,UAAI,oBAAoB,OAAO,UAAS;AACxC,iBAAW,QAAQ,CAAA;AACnB,WAAK,IAAI,GAAG,IAAI,mBAAmB,KAAK;AACvC,YAAI,MAAM,OAAO,UAAS;AAC1B,YAAI,IAAI,CAAA;AACR,mBAAW,MAAM,KAAK,CAAC;AACvB,UAAE,aAAc,MAAM,QAAS,MAAO;AACtC,YAAI,KAAK,QAAQ,GAAK;AACrB,YAAE,kBAAkB,MAAM,QAAS,IAAI,OAAO,UAAS;AAAA,QAC3D,OAAU;AACN,YAAE,iBAAkB,MAAM;AAAA,QAC9B;AAAA,MACA;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,oBAAoB,SAAS,QAAQ;AACxE,QAAIE;AAEJ,QAAID;AACJ,SAAK,aAAa,CAAA;AAElB,WAAO,OAAO,YAAW,IAAK,KAAK,QAAM,KAAK,MAAM;AACnD,MAAAC,OAAM,UAAU,YAAY,QAAQ,MAAM,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AACzF,UAAIA,KAAI,SAAS,UAAU,IAAI;AAC9B,YAAI,KAAK,YAAY,GAAG;AACvB,UAAAD,OAAM,IAAI,UAAU,2BAA2BC,KAAI,MAAMA,KAAI,MAAMA,KAAI,UAAUA,KAAI,KAAK;AAAA,QAC9F,OAAU;AACN,UAAAD,OAAM,IAAI,UAAU,gCAAgCC,KAAI,MAAMA,KAAI,MAAMA,KAAI,UAAUA,KAAI,KAAK;AAAA,QACnG;AACG,YAAID,KAAI,UAAU,UAAU,IAAI,UAAU,SAASA,KAAI,SAAS,QAAQ;AACvE,cAAI,KAAK,aAAaA,KAAI,OAAK,mFAAmF;AAClH,UAAAA,KAAI,mBAAmB,MAAM;AAAA,QACjC;AACG,QAAAA,KAAI,MAAM,MAAM;AAChB,aAAK,WAAW,KAAKA,IAAG;AAAA,MAC3B,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA,CAAC;AAED,YAAU,cAAc,QAAQ,iBAAiB,SAAS,QAAQ;AACjE,SAAK,QAAQ,OAAO,UAAS,IAAK;AAAA,EACnC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,+BAA+B,SAAS,QAAQ;AACnF,SAAK,cAAc,OAAO,WAAU;AACpC,SAAK,eAAe,OAAO,WAAU;AAAA,EACtC,CAAC;AACD,YAAU,kBAAkB,QAAQ,WAAW,SAAS,QAAQ;AAC/D,SAAK,YAAY,OAAO,YAAW;AACnC,SAAK,QAAQ,OAAO,YAAW;AAAA,EAChC,CAAC;AAED,YAAU,kBAAkB,QAAQ,sBAAsB,SAAS,QAAQ;AAC1E,QAAI,QAAQ,OAAO,UAAS;AAC5B,SAAK,SAAS,CAAA;AACd,aAASD,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,UAAI,QAAQ,CAAA;AACZ,WAAK,OAAOA,EAAC,IAAI;AACjB,YAAM,WAAW,OAAO,WAAU;AAClC,UAAI,WAAW,OAAO,UAAS;AAC/B,YAAM,eAAe,YAAY;AACjC,YAAM,kBAAkB,WAAW;AACnC,cAAQ,MAAM,iBAAe;AAAA,QAC5B,KAAK;AACJ,gBAAM,gBAAgB,OAAO,WAAW,CAAC;AACzC;AAAA,QACD,KAAK;AACJ,gBAAM,gBAAgB,OAAO,WAAW,CAAC;AACzC,gBAAM,0BAA0B,OAAO,WAAU;AACjD;AAAA,QACD,KAAK;AACJ;AAAA,QACD,KAAK;AACJ;AAAA,QACD,KAAK;AACJ,gBAAM,eAAe,OAAO,WAAU;AACtC;AAAA,QACD;AACC,cAAI,KAAK,aAAa,+BAA+B;AAAA;IAEzD;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,yBAAyB,SAAS,QAAQ;AACzE,QAAIA,IAAG;AACP,QAAI;AACJ,SAAK,uBAAuB,OAAO,UAAS;AAC5C,SAAK,+BAA+B,OAAO,WAAU,IAAK;AAC1D,SAAK,kBAAmB,OAAO,UAAS,IAAK;AAC7C,eAAW,OAAO,UAAS;AAC3B,SAAK,qBAAqB,WAAW,OAAQ;AAC7C,SAAK,oBAAoB,WAAW,MAAQ;AAC5C,SAAK,qBAAsB,WAAW;AAEtC,SAAK,cAAc,CAAA;AACnB,SAAK,YAAY,WAAW,WAAY;AACvC,UAAI,MAAM;AACV,aAAO;AACP,aAAO;AAEP,eAASA,KAAE,GAAGA,KAAE,KAAK,QAAQA,MAAK;AACjC,YAAIK,cAAa,KAAKL,EAAC;AACvB,eAAO;AACP,eAAO,kBAAgBK,YAAW,SAAO,OAAKA,YAAW,eAAa;AACtE,eAAO,kBAAgBA,YAAW,SAAO,OAAKA,YAAW,YAAU;AACnE,iBAASC,KAAE,GAAGA,KAAED,YAAW,QAAQC,MAAK;AACvC,cAAIC,QAAOF,YAAWC,EAAC;AACvB,cAAIA,OAAM,EAAG,QAAO;AACpB,iBAAO;AACP,iBAAOC,MAAK,KAAK,OAAO,SAASJ,MAAK,MAAM;AAC3C,mBAAOA,OAAM,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,UACnD,GAAO,IAAI;AACP,iBAAO;AAAA,QACX;AAAA,MACA;AACE,aAAO;AACP,aAAO;AAAA,IACT;AACC,QAAI,cAAc,OAAO,UAAS;AAClC,SAAKH,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACjC,UAAI,aAAa,CAAA;AACjB,WAAK,YAAY,KAAK,UAAU;AAChC,iBAAW,OAAO,UAAS;AAC3B,iBAAW,gBAAgB,WAAW,QAAS;AAC/C,iBAAW,YAAY,WAAW;AAClC,UAAI,WAAW,OAAO,WAAU;AAChC,WAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC9B,YAAI,OAAO,CAAA;AACX,mBAAW,KAAK,IAAI;AACpB,YAAI,SAAS,OAAO,WAAU;AAC9B,aAAK,OAAQ,OAAO,eAAe,MAAM;AAAA,MAC5C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,yBAAyB,SAAS,QAAQ;AACzE,SAAK,WAAW,OAAO,WAAU;AAAA,EAClC,CAAC;AACD,YAAU,cAAc,QAAQ,eAAe,SAAS,QAAQ;AAC/D,SAAK,SAAS,OAAO,WAAU;AAC/B,SAAK,QAAQ,OAAO,WAAU;AAAA,EAC/B,CAAC;AAGD,WAAS,WAAW,GAAG,GAAG;AACtB,SAAK,IAAI;AACT,SAAK,IAAI;AAAA,EACb;AAEA,aAAW,UAAU,WAAW,WAAW;AACvC,WAAO,MAAI,KAAK,IAAE,MAAI,KAAK,IAAE;AAAA,EACjC;AAEA,YAAU,cAAc,QAAQ,mCAAmC,SAAS,QAAQ;AAChF,SAAK,oBAAoB,CAAA;AACzB,SAAK,kBAAkB,CAAC,IAAI,IAAI,WAAW,OAAO,WAAU,GAAG,OAAO,YAAY;AAClF,SAAK,kBAAkB,CAAC,IAAI,IAAI,WAAW,OAAO,WAAU,GAAG,OAAO,YAAY;AAClF,SAAK,kBAAkB,CAAC,IAAI,IAAI,WAAW,OAAO,WAAU,GAAG,OAAO,YAAY;AAClF,SAAK,cAAc,IAAI,WAAW,OAAO,cAAa,OAAO,YAAY;AACzE,SAAK,kCAAkC,OAAO,WAAU;AACxD,SAAK,kCAAkC,OAAO,WAAU;AAAA,EAC5D,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kBAAkB,SAAS,QAAQ;AACtE,QAAI,KAAK,WAAW,GAAG;AACtB,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,oBAAoB,OAAO,WAAU;AAC1C,WAAK,YAAY,OAAO,WAAU;AAClC,WAAK,WAAW,OAAO,WAAU;AAAA,IACnC,OAAQ;AACN,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,oBAAoB,OAAO,WAAU;AAC1C,WAAK,YAAY,OAAO,WAAU;AAClC,WAAK,WAAW,OAAO,WAAU;AAAA,IACnC;AACC,SAAK,cAAc,MAAM;AACzB,WAAO,WAAU;AAAA,EAClB,CAAC;AAGD,YAAU,kBAAkB,QAAQ,yBAAyB,SAAS,QAAQ;AAC7E,QAAI,KAAK,QAAQ,GAAK;AACrB,UAAI,KAAK,aAAa,mEAAmE;AACzF,WAAK,UAAU;AAAA,IACjB;AACC,QAAI,KAAK,WAAW,GAAG;AACtB,WAAK,oBAAoB,OAAO,WAAU;AAAA,IAC5C,OAAQ;AACN,WAAK,oBAAoB,OAAO,WAAU;AAAA,IAC5C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,WAAW,SAAS,QAAQ;AAC/D,SAAK,QAAQ,CAAA;AACb,cAAU,aAAa,UAAU,MAAM,KAAK,MAAM,MAAM;AAAA,EACzD,CAAC;AAED,YAAU,kBAAkB,QAAQ,0BAA0B,SAAS,QAAQ;AAC9E,SAAK,kBAAkB,OAAO,WAAU;AAAA,EACzC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,sCAAsC,SAAS,QAAQ;AAC1F,SAAK,QAAQ,OAAO,WAAU;AAAA,EAC/B,CAAC;AAGD,YAAU,kBAAkB,QAAQ,6BAA6B,SAAS,QAAQ;AAC9E,SAAK,iBAAiB,OAAO,UAAS;AAAA,EAC1C,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kBAAkB,SAAS,QAAQ;AACtE,QAAI,KAAK,WAAW,GAAG;AACtB,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,oBAAoB,OAAO,WAAU;AAC1C,WAAK,YAAY,OAAO,WAAU;AAClC,WAAK,WAAW,OAAO,WAAU;AAAA,IACnC,OAAQ;AACN,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,oBAAoB,OAAO,WAAU;AAC1C,WAAK,YAAY,OAAO,WAAU;AAClC,WAAK,WAAW,OAAO,WAAU;AAAA,IACnC;AACC,SAAK,OAAO,OAAO,WAAU;AAC7B,SAAK,SAAS,OAAO,WAAU,KAAI;AACnC,WAAO,WAAU;AACjB,WAAO,gBAAgB,CAAC;AACxB,SAAK,SAAS,OAAO,gBAAgB,CAAC;AACtC,WAAO,gBAAgB,CAAC;AACxB,SAAK,gBAAgB,OAAO,WAAU;AAAA,EACvC,CAAC;AAED,YAAU,cAAc,QAAQ,mBAAmB,SAAS,QAAQ;AACnE,SAAK,cAAc,OAAO,WAAU;AAAA,EACrC,CAAC;AAGD,YAAU,cAAc,QAAQ,mBAAmB,SAAS,QAAQ;AACnE,SAAK,cAAc,OAAO,WAAU;AAAA,EACrC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kBAAkB,SAAS,QAAQ;AACtE,QAAI,eAAe,OAAO,WAAU;AACpC,SAAK,UAAU,CAAA;AACf,aAASA,KAAI,GAAGA,KAAI,KAAK,OAAO,eAAa,KAAG,CAAC,GAAGA,MAAK;AACxD,WAAK,UAAU,OAAO,UAAS;AAAA,IACjC;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,uBAAuB,SAAS,QAAQ;AACvE,SAAK,WAAW,OAAO,WAAU;AACjC,SAAK,WAAW,OAAO,WAAU;AAAA,EAClC,CAAC;AACD,YAAU,cAAc,QAAQ,iBAAiB,SAAS,QAAQ;AACjE,SAAK,OAAO,OAAO,WAAW,KAAK,OAAO,KAAK,QAAQ;AAAA,EACxD,CAAC;AAGD,YAAU,cAAc,QAAQ,iBAAiB,SAAS,QAAQ;AACjE,SAAK,YAAY,OAAO,WAAU;AAClC,QAAI,QAAQ,OAAO,UAAS;AAC5B,SAAK,gBAAgB,OAAO,WAAW,KAAK;AAAA,EAC7C,CAAC;AAGD,YAAU,kBAAkB,QAAQ,8BAA8B,SAAS,QAAQ;AAClF,QAAI,SAAS,KAAK,OAAO,KAAK,YAAU;AACxC,SAAK,OAAO,CAAA;AACZ,SAAK,gBAAgB,CAAA;AACrB,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,WAAK,KAAKA,EAAC,IAAI,OAAO,WAAU;AAChC,WAAK,cAAcA,EAAC,IAAI,OAAO,WAAU;AAAA,IAC3C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kBAAkB,SAAS,QAAQ;AACtE,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,UAAU,OAAO,WAAU;AAAA,IAClC,OAAQ;AACN,WAAK,UAAU,OAAO,WAAU;AAAA,IAClC;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,4BAA4B,SAAS,QAAQ;AAChF,QAAIA;AACJ,SAAK,eAAe,OAAO,UAAS;AACpC,SAAK,oBAAoB,CAAA;AACzB,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AACvC,WAAK,kBAAkBA,EAAC,IAAI,OAAO,UAAS;AAAA,IAC9C;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,qBAAqB,SAAS,QAAQ;AACrE,SAAK,QAAQ,OAAO,WAAU;AAAA,EAC/B,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kDAAkD,SAAS,QAAQ;AACtG,SAAK,aAAa,OAAO,WAAU;AACnC,SAAK,aAAa,CAAA;AAClB,QAAI,KAAK,QAAQ,GAAK;AACrB,eAASA,KAAI,GAAGA,KAAI,KAAK,YAAYA,MAAK;AACzC,aAAK,WAAWA,EAAC,IAAI,OAAO,WAAU;AAAA,MACzC;AAAA,IACA;AAAA,EACA,CAAC;AACD,YAAU,kBAAkB,QAAQ,4BAA4B,SAAS,QAAQ;AAChF,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,gBAAgB,OAAO,WAAU;AACtC,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,aAAa,OAAO,WAAU;AAAA,IACrC,OAAQ;AACN,WAAK,aAAa,OAAO,WAAU;AAAA,IACrC;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,qCAAqC,SAAS,QAAQ;AACzF,SAAK,YAAY,UAAU,WAAW,MAAM;AAC5C,QAAI,KAAK,UAAU,GAAG;AACrB,UAAI,QAAQ,OAAO,WAAU;AAC7B,WAAK,MAAM,CAAA;AACX,eAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,aAAK,IAAIA,EAAC,IAAI,UAAU,WAAW,MAAM;AAAA,MAC5C;AAAA,IACA;AACC,QAAI,WAAW,OAAO,WAAU;AAChC,QAAI,WAAW,GAAG;AACjB,WAAK,OAAO,OAAO,eAAe,QAAQ;AAAA,IAC5C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mCAAmC,SAAS,QAAQ;AACvF,SAAK,QAAQ,OAAO,WAAU;AAC9B,SAAK,SAAS,OAAO,WAAU;AAAA,EAChC,CAAC;AACD,YAAU,kBAAkB,QAAQ,mCAAmC,SAAS,QAAQ;AACvF,SAAK,QAAQ,OAAO,WAAU;AAC9B,SAAK,SAAS,OAAO,WAAU;AAAA,EAChC,CAAC;AACD,YAAU,kBAAkB,QAAQ,wCAAwC,SAAS,QAAQ;AAC5F,SAAK,QAAQ,OAAO,WAAU;AAC9B,SAAK,SAAS,OAAO,WAAU;AAAA,EAChC,CAAC;AACD,YAAU,uBAAuB,QAAQ,kCAAkC,MAAM,CAAE,QAAQ,QAAQ,MAAM,CAAC;AAC1G,YAAU,cAAc,QAAQ,2BAA2B,SAAS,QAAQ;AAC3E,SAAK,oBAAoB,OAAO,WAAW,CAAC;AAC5C,SAAK,UAAU,OAAO,WAAW,KAAK,OAAO,KAAK,WAAW,CAAC;AAAA,EAC/D,CAAC;AAGD,YAAU,kBAAkB,QAAQ,wCAAwC,SAAS,QAAQ;AAC5F,QAAI,KAAK,QAAQ,GAAK;AACrB,WAAK,gBAAgB,OAAO,WAAW,CAAC;AACxC,WAAK,0BAA0B,OAAO,WAAU;AAAA,IAClD;AACC,QAAI,QAAQ,OAAO,WAAU;AAC7B,SAAK,SAAS,CAAA;AACd,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,UAAI,KAAK,YAAY,GAAG;AACvB,aAAK,OAAOA,EAAC,IAAI,OAAO,WAAU;AAAA,MACrC,OAAS;AACN,aAAK,OAAOA,EAAC,IAAI,OAAO,WAAU;AAAA,MACrC;AAAA,IACA;AAAA,EACA,CAAC;AAED,YAAU,kBAAkB,QAAQ,sCAAsC,SAAS,QAAQ;AAC1F,QAAI,KAAK,QAAQ,GAAK;AACrB,WAAK,gBAAgB,OAAO,WAAW,CAAC;AACxC,WAAK,0BAA0B,OAAO,WAAU;AAAA,IAClD;AACC,SAAK,2BAA2B,OAAO,UAAS;AAChD,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,mBAAmB,CAAA;AACxB,QAAI,KAAK,6BAA6B,GAAG;AACxC,eAASA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AAC3C,aAAK,iBAAiBA,EAAC,IAAI,OAAO,UAAS;AAAA,MAC9C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,sBAAsB,UAAU,4BAA4B,QAAQ,SAAS,QAAQ;AAC9F,SAAK,YAAY,MAAM;AACvB,SAAK,mBAAmB,OAAO,YAAW;AAC1C,SAAK,cAAc,OAAO,YAAW;AACrC,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAGD,YAAU,sBAAsB,UAAU,4BAA4B,QAAQ,SAAS,QAAQ;AAC9F,SAAK,YAAY,MAAM;AACvB,SAAK,mBAAmB,OAAO,YAAW;AAC1C,SAAK,YAAY,OAAO,YAAW;AACnC,SAAK,kBAAkB,OAAO,YAAW;AACzC,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAGD,YAAU,sBAAsB,UAAU,4BAA4B,QAAQ,SAAS,QAAQ;AAC9F,SAAK,YAAY,MAAM;AACvB,SAAK,mBAAmB,OAAO,YAAW;AAC1C,SAAK,cAAc,OAAO,YAAW;AACrC,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAGD,YAAU,sBAAsB,UAAU,4BAA4B,QAAQ,SAAS,QAAQ;AAC9F,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,OAAO,YAAW;AACnC,SAAK,kBAAkB,OAAO,YAAW;AACzC,SAAK,uBAAuB,OAAO,YAAW;AAC9C,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAGD,YAAU,sBAAsB,UAAU,4BAA4B,QAAQ,SAAS,QAAQ;AAC9F,SAAK,YAAY,MAAM;AACvB,SAAK,mBAAmB,OAAO,YAAW;AAC1C,SAAK,cAAc,OAAO,YAAW;AACrC,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAGD,YAAU,sBAAsB,UAAU,4BAA4B,QAAQ,SAAS,QAAQ;AAC9F,SAAK,YAAY,MAAM;AACvB,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,2BAA2B,OAAO,SAAQ;AAC/C,SAAK,yBAAyB,OAAO,SAAQ;AAC7C,SAAK,gBAAgB,OAAO,eAAe,CAAC;AAC5C,SAAK,aAAa,OAAO,eAAe,CAAC;AACzC,SAAK,eAAe,OAAO,eAAe,EAAE;AAC5C,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAED,YAAU,sBAAsB,UAAU,4BAA4B,QAAQ,SAAS,QAAQ;AAC9F,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AAAA,EACxB,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAIA;AACJ,QAAI,aAAa,OAAO,WAAU;AAClC,SAAK,sBAAsB,OAAO,WAAU;AAC5C,SAAK,gBAAgB,CAAA;AACrB,SAAKA,KAAI,GAAGA,KAAI,YAAYA,MAAK;AAChC,WAAK,cAAcA,EAAC,IAAI,OAAO,WAAU;AAAA,IAC3C;AACC,QAAI,YAAY,KAAK,qBAAqB,IAAI,IAAE;AAChD,SAAK,qBAAqB,CAAA;AAC1B,SAAK,oBAAoB,CAAA;AACzB,SAAKA,KAAI,GAAGA,KAAI,YAAU,GAAGA,MAAK;AACjC,WAAK,mBAAmBA,EAAC,IAAI,OAAO,WAAU;AAC9C,WAAK,kBAAkBA,EAAC,IAAI,OAAO,WAAU;AAAA,IAC/C;AAAA,EACA,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,SAAK,cAAc,OAAO,UAAS;AACnC,SAAK,yBAAyB,OAAO,UAAS;AAC9C,SAAK,aAAa,OAAO,WAAU;AACnC,SAAK,eAAe,OAAO,WAAU;AAAA,EACtC,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,SAAK,wBAAwB,OAAO,WAAU;AAC9C,SAAK,cAAc,OAAO,UAAS;AACnC,QAAI,WAAW,OAAO,UAAS;AAC/B,SAAK,eAAe,YAAY;AAChC,SAAK,cAAe,YAAY,IAAK;AACrC,QAAI,KAAK,cAAc;AACtB,WAAK,WAAW,OAAO,WAAU;AAAA,IACnC;AACC,QAAI,KAAK,aAAa;AACrB,WAAK,yBAAyB,OAAO,UAAS;AAC9C,WAAK,aAAa,OAAO,WAAU;AACnC,WAAK,eAAe,OAAO,WAAU;AAAA,IACvC;AACC,SAAK,aAAa,CAAA;AAClB,QAAI,gBAAgB,OAAO,UAAS;AACpC,aAASA,KAAI,GAAGA,KAAI,eAAeA,MAAK;AACvC,UAAI,iBAAiB,CAAA;AACrB,WAAK,WAAW,KAAK,cAAc;AACnC,qBAAe,sBAAsB,OAAO,UAAS;AACrD,qBAAe,cAAc,OAAO,UAAS;AAC7C,qBAAe,wBAAwB,OAAO,WAAU;AAAA,IAC1D;AAAA,EACA,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,SAAK,gBAAgB,OAAO,UAAS;AAAA,EACtC,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,WAAW,OAAO,UAAS;AAC/B,SAAK,4BAA4B,YAAY;AAC7C,SAAK,sBAAsB,WAAW;AAAA,EACvC,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,SAAK,wBAAwB,OAAO,WAAU;AAC9C,QAAI,KAAK,uBAAuB,KAAG,KAAK,0BAA0B,IAAE,IAAE,KAAK,wBAAsB,KAAG,GAAG;AACtG,UAAI,KAAK,aAAa,iBAAe,KAAK,gBAAc,sBAAsB;AAC9E,WAAK,OAAQ,OAAO,eAAe,KAAK,qBAAmB,CAAC;AAAA,IAC9D,OAAQ;AACN,UAAI,KAAK,0BAA0B,GAAG;AACrC,aAAK,oBAAoB,OAAO,WAAU;AAAA,MAC7C,OAAS;AACN,aAAK,oBAAoB,CAAA;AACzB,aAAK,oBAAoB,CAAA;AACzB,iBAASA,KAAI,GAAGA,KAAI,KAAK,uBAAuBA,MAAK;AACpD,eAAK,kBAAkBA,EAAC,IAAI,OAAO,WAAU;AAC7C,eAAK,kBAAkBA,EAAC,IAAI,OAAO,WAAU;AAAA,QACjD;AAAA,MACA;AACE,WAAK,kBAAkB,OAAO,WAAU;AACxC,WAAK,kBAAkB,OAAO,WAAU;AACxC,WAAK,mBAAmB,OAAO,UAAS;AAAA,IAC1C;AAAA,EACA,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,SAAK,gBAAgB,OAAO,UAAS;AAAA,EACtC,CAAC;AAGD,YAAU,iBAAiB,UAAU,QAAQ,SAAS,QAAQ;AAC7D,QAAI,KAAK,aAAa,gCAA8B,KAAK,aAAa;AACtE,SAAK,OAAQ,OAAO,eAAe,KAAK,kBAAkB;AAAA,EAC3D;AAGA,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,SAAK,WAAW,OAAO,UAAS;AAChC,QAAI,MAAM,OAAO,UAAS;AAC1B,SAAK,mBAAmB,OAAO;AAC/B,SAAK,kBAAkB,MAAM;AAC7B,SAAK,cAAc,OAAO,UAAS;AACnC,SAAK,qBAAqB,OAAO,UAAS;AAC1C,SAAK,MAAM,UAAU,WAAW,MAAM;AACtC,SAAK,mBAAmB;AACxB,SAAK,cAAc;AACnB,QAAI,KAAK,gBAAgB,KAAK,KAAK,uBAAuB,GAAG;AAC5D,WAAK,mBAAmB,OAAO,UAAS;AACxC,WAAK,cAAc,OAAO,eAAe,KAAK,gBAAgB;AAAA,IAChE;AAAA,EACA,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,WAAW,OAAO,UAAS;AAC/B,SAAK,gBAAgB,WAAW;AAAA,EACjC,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,WAAW,OAAO,UAAS;AAC/B,SAAK,gCAAgC,YAAY;AAAA,EAClD,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,sBAAsB,QAAQ,SAAS,QAAQ;AACxD,QAAI,KAAK,aAAa,wBAAsB,KAAK,gBAAc,mBAAmB;AAAA,EACnF,CAAC;AAGD,YAAU,kBAAkB,QAAQ,oBAAoB,SAAS,QAAQ;AACxE,SAAK,gBAAgB,OAAO,WAAW,CAAC;AACxC,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,0BAA0B,OAAO,WAAU;AAAA,IAClD,OAAQ;AACN,WAAK,0BAA0B;AAAA,IACjC;AACC,SAAK,UAAU,CAAA;AACf,QAAII,eAAc,OAAO,WAAU;AACnC,aAASJ,KAAI,GAAGA,KAAII,cAAaJ,MAAK;AACrC,UAAI,QAAQ,CAAA;AACZ,WAAK,QAAQ,KAAK,KAAK;AACvB,YAAM,eAAe,OAAO,UAAS;AACrC,YAAM,0BAA0B,OAAO,UAAS;AAAA,IAClD;AAAA,EACA,CAAC;AAGD,WAAS,MAAM,KAAK,KAAK;AACxB,SAAK,gBAAgB;AACrB,SAAK,mBAAmB;AAAA,EACzB;AAEA,QAAM,UAAU,WAAW,SAAS,gBAAgB;AACnD,WAAO,WAAW,KAAK,gBAAgB,eAAe,KAAK,mBAAmB;AAAA,EAC/E;AAEA,YAAU,kBAAkB,QAAQ,yBAAyB,SAAS,QAAQ;AAC7E,QAAIA;AACJ,SAAK,kBAAkB,OAAO,WAAU;AACrC,SAAK,kBAAkB,CAAA;AACvB,SAAKA,KAAI,GAAGA,KAAI,KAAK,iBAAiBA,MAAK;AACvC,WAAK,gBAAgB,KAAK,OAAO,WAAU,CAAE;AAAA,IACrD;AACC,QAAI,QAAQ,OAAO,UAAS;AAC5B,SAAK,qBAAsB,QAAS,QAAQ;AAC5C,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,iBAAiB,OAAO,WAAU;AACvC,SAAK,WAAW,CAAA;AAChB,SAAK,cAAc,CAAA;AACnB,SAAK,aAAa,CAAA;AAClB,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AACvC,WAAK,SAAS,KAAK,OAAO,WAAU,CAAE;AAAA,IACxC;AACC,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AACvC,WAAK,YAAY,KAAK,OAAO,WAAU,CAAE;AAAA,IAC3C;AACC,SAAKA,KAAI,GAAGA,KAAI,KAAK,gBAAgBA,MAAK;AACzC,UAAI,MAAM,OAAO,WAAU;AAC3B,UAAI,MAAM,OAAO,WAAU;AAC3B,WAAK,WAAW,KAAK,IAAI,MAAM,KAAK,GAAG,CAAC;AAAA,IAC1C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,iBAAiB,SAAS,QAAQ;AACrE,SAAK,cAAc,OAAO,WAAW,CAAC;AACtC,SAAK,iBAAiB,OAAO,WAAU;AACvC,QAAI,KAAK,QAAQ,GAAU;AAC1B,WAAK,aAAa,OAAO,WAAW,KAAK,OAAO,KAAK,WAAW,CAAC;AAAA,IACnE;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,8BAA8B,SAAS,QAAQ;AAC9E,SAAK,UAAU,OAAO,WAAW,KAAK,OAAO,KAAK,QAAQ;AAAA,EAC3D,CAAC;AAGD,YAAU,kBAAkB,QAAQ,2BAA2B,SAAS,QAAQ;AAC/E,QAAI;AACJ,QAAI,QAAS,KAAK,OAAO,KAAK;AAC9B,SAAK,aAAa,CAAA;AAClB,SAAK,oBAAoB,CAAA;AACzB,SAAK,wBAAwB,CAAA;AAC7B,SAAK,wBAAwB,CAAA;AAC7B,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,iBAAW,OAAO,UAAS;AAC3B,WAAK,WAAWA,EAAC,IAAI,YAAY;AACjC,WAAK,kBAAkBA,EAAC,IAAK,YAAY,IAAK;AAC9C,WAAK,sBAAsBA,EAAC,IAAK,YAAY,IAAK;AAClD,WAAK,sBAAsBA,EAAC,IAAI,WAAW;AAAA,IAC7C;AAAA,EACA,CAAC;AAID,YAAU;AAAA,IAAkB;AAAA,IAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBpC;AAEA,YAAU,kBAAkB,QAAQ,6BAA6B,SAAS,QAAQ;AACjF,SAAK,gBAAgB,OAAO,WAAW,CAAC;AACxC,QAAI,MAAM,aAAa,iCAA+B,KAAK,aAAa;AACxE,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,iBAAiB,OAAO,WAAU;AAAA,IACzC,OAAQ;AACN,WAAK,iBAAiB;AAAA,IACxB;AACC,QAAI,KAAK,WAAW,GAAG;AACtB,WAAK,kCAAkC,OAAO,WAAU;AAAA,IAC1D;AACC,SAAK,UAAU,CAAA;AACf,QAAII,eAAc,OAAO,WAAU;AACnC,aAASJ,KAAI,GAAGA,KAAII,cAAaJ,MAAK;AACrC,UAAI;AACJ,UAAI,UAAU,KAAK,gBAAc,kBAAkB,GAAG;AACrD,gBAAQ,IAAI,UAAU,KAAK,gBAAc,kBAAkB,EAAE,KAAK,aAAa;AAAA,MAClF,OAAU;AACP,gBAAQ,IAAI,UAAU,iBAAiB,KAAK,aAAa;AAAA,MAC5D;AACE,WAAK,QAAQ,KAAK,KAAK;AACvB,UAAI,KAAK,YAAY,GAAG;AACvB,YAAI,KAAK,mBAAmB,GAAG;AAC9B,gBAAM,qBAAqB,OAAO,WAAU;AAAA,QAChD,OAAU;AACN,gBAAM,qBAAqB,KAAK;AAAA,QACpC;AAAA,MACA,OAAS;AACN,cAAM,qBAAqB,KAAK;AAAA,MACnC;AACE,UAAI,MAAM,UAAU,UAAU,iBAAiB,UAAU,OAAO;AAC/D,YAAI,KAAK,aAAa,0BAAwB,KAAK,gBAAc,+EAA+E;AAEhJ,cAAM,OAAO,OAAO,eAAe,MAAM,kBAAkB;AAE3D,eAAO,YAAY,MAAM;AAAA,MAC5B;AACE,YAAM,MAAM,MAAM;AAAA,IACpB;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,6BAA6B,SAAS,QAAQ;AACjF,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,YAAY,OAAO,WAAU;AAClC,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,6BAA6B,OAAO,WAAU;AACnD,WAAK,eAAe,OAAO,WAAU;AAAA,IACvC,OAAQ;AACN,WAAK,6BAA6B,OAAO,WAAU;AACnD,WAAK,eAAe,OAAO,WAAU;AAAA,IACvC;AACC,WAAO,WAAU;AACjB,SAAK,aAAa,CAAA;AAClB,QAAI,QAAQ,OAAO,WAAU;AAC7B,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,UAAI,MAAM,CAAA;AACV,WAAK,WAAW,KAAK,GAAG;AACxB,UAAI,SAAS,OAAO,WAAU;AAC9B,UAAI,iBAAkB,UAAU,KAAM;AACtC,UAAI,kBAAkB,SAAS;AAC/B,UAAI,sBAAsB,OAAO,WAAU;AAC3C,eAAS,OAAO,WAAU;AAC1B,UAAI,kBAAmB,UAAU,KAAM;AACvC,UAAI,WAAY,UAAU,KAAM;AAChC,UAAI,iBAAiB,SAAS;AAAA,IAChC;AAAA,EACA,CAAC;AAGD,YAAU,6BAA6B,SAAS,MAAM,MAAM,UAAU,OAAO;AAC5E,cAAU,IAAI,KAAK,MAAM,MAAM,IAAI;AACnC,SAAK,WAAW;AAChB,SAAK,QAAQ;AAAA,EACd;AACA,YAAU,2BAA2B,YAAY,IAAI,UAAU,IAAG;AAClE,YAAU,2BAA2B,UAAU,QAAQ,SAAS,QAAQ;AACvE,SAAK,eAAe,OAAO,WAAU;AACrC,QAAI,QAAS,OAAO,WAAU;AAC9B,SAAK,aAAa,CAAA;AAClB,aAAQA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC9B,WAAK,WAAWA,EAAC,IAAI,CAAA;AACrB,WAAK,WAAWA,EAAC,EAAE,aAAa,OAAO,WAAU;AAAA,IACnD;AAAA,EACA;AAGA,YAAU,kCAAkC,SAAS,MAAM,MAAM,UAAU,OAAO;AACjF,cAAU,IAAI,KAAK,MAAM,MAAM,IAAI;AACnC,SAAK,WAAW;AAChB,SAAK,QAAQ;AAAA,EACd;AACA,YAAU,gCAAgC,YAAY,IAAI,UAAU,IAAG;AACvE,YAAU,gCAAgC,UAAU,QAAQ,SAAS,QAAQ;AAC5E,SAAK,eAAe,OAAO,WAAU;AACrC,QAAI,QAAS,OAAO,WAAU;AAC9B,SAAK,aAAa,CAAA;AAClB,aAAQA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC9B,WAAK,WAAWA,EAAC,IAAI,CAAA;AACrB,WAAK,WAAWA,EAAC,EAAE,aAAa,OAAO,WAAU;AAAA,IACnD;AAAA,EACA;AAGA,YAAU,kBAAkB,QAAQ,wCAAwC,SAAS,QAAQ;AAC5F,SAAK,yBAAyB,OAAO,WAAU;AAC5C,SAAK,yBAAyB,OAAO,WAAU;AAC/C,SAAK,yBAAyB,OAAO,WAAU;AAC/C,SAAK,yBAAyB,OAAO,WAAU;AAC/C,SAAK,yBAAyB,OAAO,WAAU;AAC/C,SAAK,yBAAyB,OAAO,WAAU;AAC/C,SAAK,2BAA2B,OAAO,WAAU;AACjD,SAAK,2BAA2B,OAAO,WAAU;AACjD,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,eAAe,OAAO,WAAU;AAAA,EACzC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,uBAAuB,SAAS,QAAQ;AAC3E,SAAK,UAAU,OAAO,WAAU;AAChC,WAAO,WAAU;AAAA,EAClB,CAAC;AAGD,YAAU,kBAAkB,QAAQ,gCAAgC,SAAS,QAAQ;AACpF,SAAK,cAAc,CAAA;AACnB,QAAI,mBAAmB,OAAO,WAAU;AACxC,aAASA,KAAI,GAAGA,KAAI,kBAAkBA,MAAK;AAC1C,UAAI,aAAa,CAAA;AACjB,WAAK,YAAY,KAAK,UAAU;AAChC,iBAAW,SAAS,CAAA;AACpB,UAAI,cAAc,OAAO,WAAU;AACnC,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACrC,YAAI,QAAQ,CAAA;AACZ,mBAAW,OAAO,KAAK,KAAK;AAC5B,cAAM,QAAQ,OAAO,UAAS;AAC9B,cAAM,aAAa,OAAO,WAAU;AAAA,MACvC;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kBAAkB,SAAS,QAAQ;AACtE,QAAII;AACJ,IAAAA,eAAc,OAAO,WAAU;AAC/B,SAAK,gBAAgB,CAAA;AACrB,QAAI,KAAK,YAAY,GAAG;AACvB,eAASJ,KAAI,GAAGA,KAAII,cAAaJ,MAAK;AACrC,aAAK,cAAc,KAAK,OAAO,WAAU,CAAE;AAAA,MAC9C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,0BAA0B,SAAS,QAAQ;AAC9E,QAAI,SAAS,KAAK,OAAO,KAAK,YAAU;AACxC,SAAK,WAAW,CAAA;AAChB,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,WAAK,SAASA,EAAC,IAAI,OAAO,WAAU;AAAA,IACtC;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,wBAAwB;AAG5D,YAAU,kBAAkB,QAAQ,0BAA0B,SAAS,QAAQ;AAC9E,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,kBAAkB,OAAO,WAAU;AACxC,SAAK,eAAe,OAAO,WAAU;AACrC,QAAI,SAAS,KAAK,OAAO,KAAK,WAAW,KAAG;AAC5C,SAAK,iBAAiB,CAAA;AACtB,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,WAAK,eAAeA,EAAC,IAAI,OAAO,WAAU;AAAA,IAC5C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,oBAAoB,SAAS,QAAQ;AACxE,QAAII;AACJ,QAAIJ;AACJ,IAAAI,eAAc,OAAO,WAAU;AAC/B,SAAK,cAAc,CAAA;AACnB,SAAK,oBAAoB,CAAA;AACzB,SAAK,2BAA2B,CAAA;AAChC,QAAI,KAAK,YAAY,GAAG;AACvB,WAAIJ,KAAE,GAAGA,KAAEI,cAAaJ,MAAK;AAC5B,aAAK,YAAY,KAAK,OAAO,WAAU,CAAE;AACzC,aAAK,kBAAkB,KAAK,OAAO,WAAU,CAAE;AAC/C,aAAK,yBAAyB,KAAK,OAAO,WAAU,CAAE;AAAA,MACzD;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,wBAAwB,SAAS,QAAQ;AAC5E,QAAIA;AACJ,QAAIE;AACJ,QAAI;AACJ,QAAID;AACJ,SAAK,UAAU,CAAA;AACf,iBAAa,OAAO,WAAU;AAC9B,SAAKD,KAAI,GAAGA,MAAK,YAAYA,MAAK;AACjC,MAAAE,OAAM,UAAU,YAAY,QAAQ,MAAM,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AACzF,UAAIA,KAAI,SAAS,UAAU,IAAI;AAC9B,YAAI,UAAUA,KAAI,OAAK,aAAa,GAAG;AACtC,UAAAD,OAAM,IAAI,UAAUC,KAAI,OAAK,aAAa,EAAEA,KAAI,IAAI;AACpD,UAAAD,KAAI,WAAWC,KAAI;AACnB,UAAAD,KAAI,QAAQC,KAAI;AAAA,QACpB,OAAU;AACN,cAAI,KAAK,aAAa,gCAA8BA,KAAI,IAAI;AAC5D,UAAAD,OAAM,IAAI,UAAU,YAAYC,KAAI,MAAMA,KAAI,MAAMA,KAAI,UAAUA,KAAI,KAAK;AAAA,QAC/E;AACG,YAAID,KAAI,UAAU,UAAU,YAAY,UAAU,OAAO;AACxD,cAAI,KAAK,aAAa,iBAAeA,KAAI,OAAK,mFAAmF;AACjI,UAAAA,KAAI,mBAAmB,MAAM;AAAA,QACjC;AACG,QAAAA,KAAI,MAAM,MAAM;AAChB,aAAK,QAAQ,KAAKA,IAAG;AAAA,MACxB,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,0BAA0B,SAAS,QAAQ;AAC9E,SAAK,gBAAgB,OAAO,WAAU;AACtC,QAAI,QAAQ,OAAO,WAAU;AAC7B,SAAK,0BAA0B,CAAA;AAC/B,aAASD,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,WAAK,wBAAwBA,EAAC,IAAI,OAAO,WAAU;AAAA,IACrD;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,uBAAuB,SAAS,QAAQ;AAC3E,QAAII;AACJ,QAAIJ;AACJ,IAAAI,eAAc,OAAO,WAAU;AAC/B,SAAK,0BAA0B,CAAA;AAC/B,SAAK,sBAAsB,CAAA;AAC3B,QAAI,KAAK,YAAY,GAAG;AACvB,WAAIJ,KAAE,GAAGA,KAAEI,cAAaJ,MAAK;AAC5B,aAAK,wBAAwB,KAAK,OAAO,WAAU,CAAE;AACrD,aAAK,oBAAoB,KAAK,OAAO,WAAU,CAAE;AAAA,MACpD;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,iBAAiB,SAAS,QAAQ;AACrE,QAAIA;AACJ,QAAII;AACJ,IAAAA,eAAc,OAAO,WAAU;AAC/B,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,iBAAiB,CAAA;AACtB,WAAIJ,KAAE,GAAGA,KAAEI,cAAaJ,MAAK;AAC5B,aAAK,eAAe,KAAK,OAAO,WAAU,CAAE;AAAA,MAC/C;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,iBAAiB,SAAS,QAAQ;AACrE,QAAIA;AACJ,SAAK,eAAe,CAAA;AACpB,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,cAAc,OAAO,WAAU;AACpC,WAAK,eAAe,OAAO,WAAU;AACrC,WAAKA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AACvC,YAAI,KAAK,gBAAgB,GAAG;AAC3B,eAAK,aAAa,KAAK,OAAO,WAAU,CAAE;AAAA,QAC9C,OAAU;AACN,eAAK,aAAaA,EAAC,IAAI,KAAK;AAAA,QAChC;AAAA,MACA;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mBAAmB,SAAS,QAAQ;AACvE,QAAII;AACJ,QAAIJ;AACJ,QAAI;AACJ,IAAAI,eAAc,OAAO,WAAU;AAC/B,SAAK,gBAAgB,CAAA;AACrB,SAAK,gBAAgB,CAAA;AACrB,QAAI,KAAK,YAAY,GAAG;AACvB,WAAIJ,KAAE,GAAGA,KAAEI,cAAaJ,MAAK;AAC5B,aAAK,cAAc,KAAK,OAAO,WAAU,CAAE;AAC3C,gBAAQ,OAAO,UAAS;AACxB,YAAI,QAAQ,GAAG;AACd,cAAI,KAAK,aAAa,gFAAgF;AACtG,kBAAQ;AAAA,QACZ;AACG,aAAK,cAAc,KAAK,KAAK;AAAA,MAChC;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kBAAkB,SAAS,QAAQ;AACtE,QAAI,QAAQ,OAAO,WAAU;AAC7B,SAAK,sBAAsB,QAAQ;AACnC,SAAK,gBAAgB,OAAO,WAAU;AACtC,QAAI,SAAS,OAAO,WAAU;AAC9B,SAAK,yBAAyB,OAAO,WAAW,MAAM;AACtD,QAAIE;AACJ,QAAID;AACJ,SAAK,QAAQ,CAAA;AACb,WAAO,OAAO,YAAW,IAAK,KAAK,QAAM,KAAK,MAAM;AACnD,MAAAC,OAAM,UAAU,YAAY,QAAQ,OAAO,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AAC1F,UAAIA,KAAI,SAAS,UAAU,IAAI;AAC9B,QAAAD,OAAMC,KAAI;AACV,aAAK,MAAM,KAAKD,IAAG;AACnB,aAAKA,KAAI,IAAI,IAAIA;AAAA,MACpB,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,QAAQ,kBAAkB,SAAS,QAAQ;AAClE,cAAU,QAAQ,UAAU,MAAM,KAAK,MAAM,MAAM;AAAA,EACpD,CAAC;AAGD,YAAU,kBAAkB,QAAQ,wBAAwB,SAAS,QAAQ;AAC5E,QAAID;AAEJ,QAAI;AACJ,SAAK,eAAe,CAAA;AACpB,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,WAAW,OAAO,WAAU;AACjC,WAAK,aAAa,OAAO,UAAS;AAClC,qBAAe,OAAO,WAAU;AAChC,UAAI,KAAK,eAAe,GAAG;AAC1B,aAAKA,KAAI,GAAGA,KAAI,cAAcA,MAAG,GAAG;AACnC,cAAI,MAAM,OAAO,UAAS;AAC1B,eAAK,aAAaA,EAAC,IAAK,OAAO,IAAK;AACpC,eAAK,aAAaA,KAAE,CAAC,IAAI,MAAM;AAAA,QACnC;AAAA,MACA,WAAa,KAAK,eAAe,GAAG;AACjC,aAAKA,KAAI,GAAGA,KAAI,cAAcA,MAAK;AAClC,eAAK,aAAaA,EAAC,IAAI,OAAO,UAAS;AAAA,QAC3C;AAAA,MACA,WAAa,KAAK,eAAe,IAAI;AAClC,aAAKA,KAAI,GAAGA,KAAI,cAAcA,MAAK;AAClC,eAAK,aAAaA,EAAC,IAAI,OAAO,WAAU;AAAA,QAC5C;AAAA,MACA,OAAS;AACN,YAAI,MAAM,aAAa,mCAAmC;AAAA,MAC7D;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,2BAA2B,SAAS,QAAQ;AAC/E,QAAIA,IAAE;AACN,QAAII;AACJ,QAAI;AACJ,IAAAA,eAAc,OAAO,WAAU;AAC/B,SAAK,UAAU,CAAA;AACf,SAAKJ,KAAI,GAAGA,KAAII,cAAaJ,MAAK;AACjC,UAAI,aAAa,CAAA;AACjB,WAAK,QAAQA,EAAC,IAAI;AAClB,iBAAW,eAAe,OAAO,WAAU;AAC3C,iBAAW,aAAa,CAAA;AACxB,wBAAkB,OAAO,WAAU;AACnC,UAAI,kBAAgB,GAAG;AACtB,aAAK,IAAI,GAAG,IAAI,iBAAiB,KAAK;AACrC,cAAI,YAAY,CAAA;AAChB,qBAAW,WAAW,KAAK,SAAS;AACpC,cAAI,KAAK,WAAW,GAAG;AACtB,sBAAU,OAAO,OAAO,WAAU;AAAA,UACvC,OAAW;AACN,sBAAU,OAAO,OAAO,WAAU;AAAA,UACvC;AACI,oBAAU,WAAW,OAAO,UAAS;AACrC,oBAAU,cAAc,OAAO,UAAS;AACxC,oBAAU,4BAA4B,OAAO,WAAU;AAAA,QAC3D;AAAA,MACA;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,sBAAsB,SAAS,QAAQ;AAC1E,WAAO,UAAS;AAChB,QAAI,KAAK,YAAY,GAAG;AACvB,aAAO,UAAS;AAAA,IAClB,OAAQ;AACN,UAAI,MAAM,OAAO,UAAS;AAC1B,WAAK,2BAA4B,OAAO,IAAK;AAC7C,WAAK,0BAA0B,MAAM;AAAA,IACvC;AACC,SAAK,sBAAsB,OAAO,UAAS;AAC3C,SAAK,6BAA6B,OAAO,UAAS;AAClD,SAAK,cAAc,UAAU,WAAW,MAAM;AAC9C,QAAI,KAAK,wBAAwB,KAAK,KAAK,+BAA+B,GAAG;AAC5E,WAAK,2BAA2B,OAAO,UAAS;AAChD,WAAK,sBAAsB,OAAO,eAAe,KAAK,wBAAwB;AAAA,IAChF;AAAA,EACA,CAAC;AACD,YAAU,kBAAkB,QAAQ,uCAAuC,SAAS,QAAQ;AAC3F,QAAI,KAAK,WAAW,GAAG;AACtB,WAAK,sBAAsB,OAAO,WAAU;AAAA,IAC9C,OAAQ;AACN,WAAK,sBAAsB,OAAO,WAAU;AAAA,IAC9C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,0BAA0B,SAAS,QAAQ;AAC9E,QAAI,YAAY;AAChB,SAAK,WAAW,OAAO,WAAU;AACjC,QAAI,KAAK,OAAO,KAAK,WAAW,aAAc,KAAK,QAAQ,UAAU,4BAA6B;AACjG,WAAK,mBAAmB,OAAO,WAAU;AACzC,mBAAa;AAAA,IACf,OAAQ;AACN,WAAK,mBAAmB;AAAA,IAC1B;AACC,QAAI,KAAK,OAAO,KAAK,WAAW,aAAc,KAAK,QAAQ,UAAU,uBAAwB;AAC5F,WAAK,mCAAmC,OAAO,WAAU;AACzD,mBAAa;AAAA,IACf,OAAQ;AACN,WAAK,mCAAmC;AAAA,IAC1C;AACC,QAAI,KAAK,OAAO,KAAK,WAAW,aAAc,KAAK,QAAQ,UAAU,sBAAuB;AAC3F,WAAK,0BAA0B,OAAO,WAAU;AAChD,mBAAa;AAAA,IACf,OAAQ;AACN,WAAK,0BAA0B;AAAA,IACjC;AACC,QAAI,KAAK,OAAO,KAAK,WAAW,aAAc,KAAK,QAAQ,UAAU,uBAAwB;AAC5F,WAAK,sBAAsB,OAAO,WAAU;AAC5C,mBAAa;AAAA,IACf,OAAQ;AACN,WAAK,sBAAsB;AAAA,IAC7B;AACC,QAAI,KAAK,OAAO,KAAK,WAAW,aAAc,KAAK,QAAQ,UAAU,wBAAyB;AAC7F,WAAK,uBAAuB,OAAO,WAAU;AAC7C,mBAAa;AAAA,IACf,OAAQ;AACN,WAAK,uBAAuB;AAAA,IAC9B;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,gCAAgC,SAAS,QAAQ;AACpF,SAAK,WAAW,OAAO,WAAU;AACjC,WAAO,WAAU;AACjB,QAAI,WAAW,OAAO,UAAS;AAC/B,SAAK,0BAA2B,YAAY,IAAK;AACjD,SAAK,0BAA2B,YAAY,IAAK;AACjD,SAAK,4BAA6B,WAAY;AAC9C,SAAK,UAAU,CAAA;AACf,QAAI,oBAAoB,OAAO,WAAU;AACzC,aAASA,KAAI,GAAGA,KAAI,mBAAmBA,MAAK;AAC3C,UAAI,KAAK,YAAY,GAAG;AACvB,aAAK,OAAO,OAAO,WAAU;AAC7B,aAAK,cAAc,OAAO,WAAU;AAAA,MACvC,OAAS;AACN,aAAK,OAAO,OAAO,WAAU;AAC7B,aAAK,cAAc,OAAO,WAAU;AAAA,MACvC;AACE,WAAK,cAAc,OAAO,aAAY,KAAG,KAAK,0BAAwB,EAAG,EAAC;AAC1E,WAAK,cAAc,OAAO,aAAY,KAAG,KAAK,0BAAwB,EAAG,EAAC;AAC1E,WAAK,gBAAgB,OAAO,aAAY,KAAG,KAAK,4BAA0B,EAAG,EAAC;AAAA,IAChF;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,kBAAkB,SAAS,QAAQ;AACtE,QAAI,KAAK,WAAW,GAAG;AACtB,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,oBAAoB,OAAO,WAAU;AAC1C,WAAK,WAAW,OAAO,WAAU;AACjC,aAAO,WAAU;AACjB,WAAK,WAAW,OAAO,WAAU;AAAA,IACnC,OAAQ;AACN,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,oBAAoB,OAAO,WAAU;AAC1C,WAAK,WAAW,OAAO,WAAU;AACjC,aAAO,WAAU;AACjB,WAAK,WAAW,OAAO,WAAU;AAAA,IACnC;AACC,WAAO,gBAAgB,CAAC;AACxB,SAAK,QAAQ,OAAO,UAAS;AAC7B,SAAK,kBAAkB,OAAO,UAAS;AACvC,SAAK,SAAS,OAAO,UAAS,KAAI;AAClC,WAAO,WAAU;AACjB,SAAK,SAAS,OAAO,eAAe,CAAC;AACrC,SAAK,QAAQ,OAAO,WAAU;AAC9B,SAAK,SAAS,OAAO,WAAU;AAAA,EAChC,CAAC;AAGD,YAAU,cAAc,QAAQ,uBAAuB,SAAS,QAAQ;AACvE,SAAK,OAAO,OAAO,WAAU;AAAA,EAC9B,CAAC;AAGD,YAAU,cAAc,QAAQ,uBAAuB,SAAS,QAAQ;AACvE,SAAK,OAAO,OAAO,WAAU;AAAA,EAC9B,CAAC;AAGD,YAAU,cAAc,QAAQ,iBAAiB,SAAS,QAAQ;AACjE,SAAK,YAAY,OAAO,WAAU;AAAA,EACnC,CAAC;AAGD,YAAU,cAAc,QAAQ,iBAAiB,SAAS,QAAQ;AACjE,SAAK,YAAY,OAAO,WAAU;AAAA,EACnC,CAAC;AAGD,YAAU,cAAc,QAAQ,iBAAiB,SAAS,QAAQ;AACjE,SAAK,YAAY,OAAO,WAAU;AAAA,EACnC,CAAC;AAGD,YAAU,kBAAkB,UAAU,QAAQ,SAAS,QAAQ;AAC9D,SAAK,gBAAgB,MAAM;AAC3B,SAAK,iBAAiB,OAAO,WAAU;AAAA,EACxC;AAGA,YAAU,qBAAqB,MAAM;AACrC,YAAU,wBAAwB,SAAS,MAAM,MAAM,UAAU,OAAO;AACvE,cAAU,IAAI,KAAK,MAAM,MAAM,IAAI;AACnC,SAAK,WAAW;AAChB,SAAK,QAAQ;AAAA,EACd;AACA,YAAU,sBAAsB,YAAY,IAAI,UAAU,IAAG;AAC7D,YAAU,sBAAsB,UAAU,QAAQ,SAAS,QAAQ;AAClE,SAAK,YAAY,OAAO,iBAAiB,KAAK,OAAK,KAAK,YAAU,CAAC;AAAA,EACpE;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIE;AACJ,QAAID;AACJ,WAAO,OAAO,YAAW,IAAK,KAAK,QAAM,KAAK,MAAM;AACnD,MAAAC,OAAM,UAAU,YAAY,QAAQ,MAAM,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AACzF,UAAIA,KAAI,SAAS,UAAU,IAAI;AAC9B,QAAAD,OAAM,IAAI,UAAU,sBAAsBC,KAAI,MAAMA,KAAI,MAAMA,KAAI,UAAUA,KAAI,KAAK;AACrF,YAAID,KAAI,UAAU,UAAU,IAAI,UAAU,SAASA,KAAI,SAAS,QAAQ;AACvE,cAAI,KAAK,aAAa,oBAAkBA,KAAI,OAAK,mFAAmF;AACpI,UAAAA,KAAI,mBAAmB,MAAM;AAAA,QACjC;AACG,QAAAA,KAAI,MAAM,MAAM;AAChB,aAAK,MAAM,KAAKA,IAAG;AAAA,MACtB,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA;AAGA,YAAU,kBAAkB,QAAQ,+BAA+B,SAAS,QAAQ;AACnF,SAAK,WAAW,OAAO,WAAU;AACjC,SAAK,QAAQ,CAAA;AACb,WAAO,OAAO,YAAW,IAAK,KAAK,QAAM,KAAK,MAAM;AACnD,YAAM,UAAU,YAAY,QAAQ,OAAO,KAAK,QAAQ,OAAO,YAAW,IAAK,KAAK,MAAM;AAC1F,UAAI,IAAI,SAAS,UAAU,IAAI;AAC9B,cAAM,IAAI;AACV,aAAK,MAAM,KAAK,GAAG;AAAA,MACtB,OAAS;AACN;AAAA,MACH;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mBAAmB,SAAS,QAAQ;AACvE,SAAK,WAAW,OAAO,WAAU;AACjC,SAAK,mCAAmC,OAAO,WAAU;AACzD,SAAK,0BAA0B,OAAO,WAAU;AAChD,SAAK,sBAAsB,OAAO,WAAU;AAC5C,SAAK,uBAAuB,OAAO,WAAU;AAAA,EAC9C,CAAC;AAGD,YAAU,cAAc,QAAQ,iBAAiB,SAAS,QAAQ;AACjE,SAAK,YAAY,OAAO,WAAU;AAAA,EACnC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,eAAe,SAAS,QAAQ;AACnE,QAAI,YAAY;AAChB,SAAK,eAAe,OAAO,WAAU;AACrC,iBAAY;AACZ,QAAI,KAAK,OAAO,KAAK,WAAW,aAAc,KAAK,QAAQ,UAAU,wBAA0B;AAC9F,WAAK,cAAc,OAAO;AAC1B,mBAAa;AAAA,IACf,OAAQ;AACN,WAAK,cAAc;AAAA,IACrB;AACC,QAAI,KAAK,OAAO,KAAK,WAAW,aAAc,KAAK,QAAQ,UAAU,uBAAyB;AAC7F,WAAK,qBAAqB,OAAO,WAAU;AAC3C,mBAAa;AAAA,IACf,OAAQ;AACN,WAAK,qBAAqB;AAAA,IAC5B;AACC,SAAK,kBAAkB,CAAA;AACvB,SAAK,cAAc,CAAA;AACnB,SAAK,eAAe,CAAA;AACpB,SAAK,iCAAiC,CAAA;AACtC,QAAI,KAAK,OAAO,KAAK,WAAW,WAAW;AAC1C,eAASD,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AAC3C,YAAI,KAAK,QAAQ,UAAU,qBAAqB;AAC/C,eAAK,gBAAgBA,EAAC,IAAI,OAAO,WAAU;AAAA,QAC/C;AACG,YAAI,KAAK,QAAQ,UAAU,iBAAiB;AAC3C,eAAK,YAAYA,EAAC,IAAI,OAAO,WAAU;AAAA,QAC3C;AACG,YAAI,KAAK,QAAQ,UAAU,kBAAkB;AAC5C,eAAK,aAAaA,EAAC,IAAI,OAAO,WAAU;AAAA,QAC5C;AACG,YAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,cAAI,KAAK,YAAY,GAAG;AACvB,iBAAK,+BAA+BA,EAAC,IAAI,OAAO,WAAU;AAAA,UAC/D,OAAW;AACN,iBAAK,+BAA+BA,EAAC,IAAI,OAAO,UAAS;AAAA,UAC9D;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,qBAAqB,SAAS,QAAQ;AACzE,SAAK,eAAe,OAAO,WAAU;AACrC,QAAI,SAAS,KAAK,OAAO,KAAK,WAAW,KAAG;AAC5C,SAAK,iBAAiB,CAAA;AACtB,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,WAAK,eAAeA,EAAC,IAAI,OAAO,WAAU;AAAA,IAC5C;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,iBAAiB,SAAS,QAAQ;AACrE,SAAK,SAAS,OAAO,YAAW;AAAA,EACjC,CAAC;AAGD,YAAU,cAAc,QAAQ,sBAAsB,SAAS,QAAQ;AACtE,QAAI,SAAS,KAAK,OAAO,KAAK,YAAY;AAC1C,SAAK,oBAAoB,CAAA;AACzB,aAASA,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC/B,WAAK,kBAAkBA,EAAC,IAAI,OAAO,WAAW,CAAC;AAAA,IACjD;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,2BAA2B,SAAS,QAAQ;AAC/E,SAAK,OAAO,OAAO,YAAW;AAC9B,SAAK,OAAO,OAAO,YAAW;AAC9B,SAAK,cAAc,OAAO,YAAW;AACrC,SAAK,OAAO,OAAO,YAAW;AAAA,EAC/B,CAAC;AAGD,YAAU,kBAAkB,QAAQ,8BAA8B,SAAS,QAAQ;AAC/E,QAAIA;AACJ,SAAK,UAAU,OAAO,WAAW,CAAC;AAClC,QAAI,KAAK,WAAW,EAAG;AAAA,aAEZ,KAAK,WAAW,GAAG;AAC1B,WAAK,kBAAkB,OAAO,WAAU;AACxC,WAAK,kBAAkB,CAAA;AACvB,WAAK,gCAAgC,CAAA;AACrC,WAAK,mBAAmB,CAAA;AACxB,WAAK,uBAAuB,CAAA;AAC5B,WAAKA,KAAI,GAAGA,KAAI,KAAK,iBAAiBA,MAAK;AACvC,aAAK,gBAAgB,KAAK,OAAO,WAAU,CAAE;AAC7C,aAAK,8BAA8B,KAAK,OAAO,UAAS,CAAE;AAC1D,aAAK,iBAAiB,KAAK,OAAO,UAAS,CAAE;AAC7C,aAAK,qBAAqB,KAAK,OAAO,UAAS,CAAE;AAAA,MAC7D;AACQ,WAAK,gBAAgB,OAAO,UAAS;AACrC,WAAK,kBAAkB,OAAO,UAAS;AACvC,WAAK,aAAa,OAAO,UAAS;AAClC,UAAI,QAAQ,OAAO,UAAS;AAC5B,WAAK,0BAA2B,SAAS,IAAK;AAC9C,WAAK,gBAAiB,SAAS,IAAK;AACpC,WAAK,sBAAuB,SAAS,IAAK;AAC1C,WAAK,iBAAkB,SAAS,IAAK;AACrC,WAAK,cAAe,SAAS,IAAK;AAClC,WAAK,aAAa,OAAO,WAAU;AACnC,WAAK,iBAAiB,OAAO,WAAU;AACvC,WAAK,kBAAkB,OAAO,WAAU;AACxC,WAAK,0BAA0B,OAAO,WAAU;AAChD,WAAK,0BAA0B,OAAO,WAAU;AAAA,IACxD;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mBAAmB,SAAS,QAAQ;AACvE,QAAI,KAAK,UAAU,GAAU;AAC5B,WAAK,WAAW,OAAO,YAAW;AAAA,IACpC;AAAA,EACA,CAAC;AAGD,YAAU,kBAAkB,QAAQ,mBAAmB,SAAS,QAAQ;AACvE,SAAK,OAAO,OAAO,YAAW;AAC9B,QAAI,KAAK,OAAO,KAAK,WAAW,KAAK,KAAK,SAAS,IAAI,GAAG;AACzD,WAAK,WAAW,OAAO,YAAW;AAAA,IACpC;AAAA,EACA,CAAC;AAGD,YAAU,cAAc,oCAAoC,yBAAyB,MAAM,OAAO,SAAS,QAAQ;AAC/G,SAAK,qBAAqB,OAAO,WAAW,KAAK,OAAO,KAAK,QAAQ,EAChE,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,QAAQ;AAAA,EAC/B,CAAC;AACD,YAAU,cAAc,oCAAoC,yCAAyC,MAAM,OAAO,SAAS,QAAQ;AAClI,SAAK,YAAY,UAAU,WAAW,MAAM;AAC5C,QAAI,WAAW,OAAO,WAAU;AAChC,QAAI,WAAW,GAAG;AACjB,WAAK,OAAO,OAAO,eAAe,QAAQ;AAAA,IAC5C;AAAA,EACA,CAAC;AAGD,YAAU;AAAA,IAAc;AAAA,IAAoC;AAAA,IAA2B;AAAA,IAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuB7F;AAEA,YAAU,cAAc,oCAAoC,0BAA0B,MAAM,OAAO,SAAS,QAAQ;AACnH,SAAK,sBAAsB,OAAO,WAAU;AAC5C,SAAK,kBAAkB,OAAO,UAAS;AACvC,SAAK,cAAc,UAAU,WAAW,MAAM;AAAA,EAC/C,CAAC;AACD,YAAU,cAAc,oCAAoC,WAAW,MAAM,OAAO,SAAS,QAAQ;AACjG,SAAK,iBAAiB,OAAO,UAAS;AACtC,SAAK,UAAU,CAAA;AAEf,aAASA,KAAI,GAAGA,KAAI,KAAK,gBAAgBA,MAAK;AAC1C,UAAI,QAAQ,CAAA;AACZ,UAAI,gBAAgB;AACpB,UAAI,oBAAoB;AAExB,UAAI,KAAK,YAAY,GAAG;AACpB,wBAAgB,OAAO,WAAU;AACjC,4BAAoB,OAAO,WAAU;AAAA,MACjD,OAAe;AACH,wBAAgB,OAAO,WAAU;AACjC,4BAAoB,OAAO,WAAU;AAAA,MACjD;AAEQ,YAAM,gBAAgB;AACtB,YAAM,oBAAoB;AAE1B,WAAK,QAAQ,KAAK,KAAK;AAAA,IAC/B;AAAA,EACA,CAAC;AACD,YAAU,cAAc,oCAAoC,WAAW,MAAM,OAAO,SAAS,QAAQ;AACjG,QAAI,KAAK,YAAY,GAAG;AACrB,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,WAAW,OAAO,WAAU;AAAA,IACxC,OAAW;AACJ,WAAK,gBAAgB,OAAO,WAAU;AACtC,WAAK,WAAW,OAAO,WAAU;AAAA,IACxC;AAAA,EACA,CAAC;AACD,YAAU,kBAAkB,QAAQ,uBAAuB,SAAS,QAAQ;AAC3E,SAAK,eAAe,OAAO,WAAU;AACrC,SAAK,UAAU,OAAO,gBAAgB,CAAC;AAAA,EACxC,CAAC;AAGD,YAAU,kBAAkB,QAAQ,8BAA8B,SAAU,QAAQ;AACnF,QAAI;AACJ,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,UAAU,OAAO,UAAS;AAC/B,WAAK,QAAQ,OAAO,UAAS;AAC7B,YAAM,OAAO,UAAS;AACtB,WAAK,WAAW,OAAO;AACvB,WAAK,oBAAqB,OAAO,IAAK;AACtC,WAAK,qBAAqB,MAAM;AAChC,WAAK,kBAAkB,OAAO,UAAS;AACvC,WAAK,0BAA0B,OAAO,UAAS;AAC/C,WAAK,qBAAqB,OAAO,UAAS;AAC1C,WAAK,6BAA6B,OAAO,WAAU;AACnD,WAAK,yBAAyB,OAAO,eAAe,KAAK,0BAA0B;AAAA,IACrF,OAAQ;AACN,WAAK,UAAU,OAAO,UAAS;AAC/B,WAAK,QAAQ,OAAO,UAAS;AAC7B,YAAM,OAAO,UAAS;AACtB,WAAK,WAAY,OAAO,IAAK;AAC7B,WAAK,aAAa,MAAM;AACxB,YAAM,OAAO,UAAS;AACtB,WAAK,oBAAqB,OAAO,IAAK;AACtC,WAAK,mBAAoB,OAAO,IAAK;AACrC,WAAK,qBAAqB,MAAM;AAChC,WAAK,6BAA6B,OAAO,WAAU;AACnD,WAAK,yBAAyB,OAAO,eAAe,KAAK,0BAA0B;AAAA,IACrF;AAAA,EACA,CAAC;AACD,YAAU,cAAc,QAAQ,0BAA0B,SAAS,QAAQ;AAC1E,SAAK,OAAO,OAAO,WAAW,KAAK,OAAO,KAAK,QAAQ;AAAA,EACxD,CAAC;AAGD,YAAU,kBAAkB,QAAQ,uBAAuB,SAAU,QAAQ;AAC3E,QAAIA,IAAG;AAGP,QAAI,YAAY;AAAA,MACd,WAAW;AAAA,MACX,eAAe;AAAA,MAEf,qBAAqB,SAAUQ,OAAM;AACnC,aAAK,YAAYA,MAAK,UAAS;AAC/B,aAAK,gBAAgB,IAAI;AAAA,MAC/B;AAAA,MACI,qBAAqB,SAAUA,OAAM;AACnC,aAAK,YAAYA,MAAK,WAAU;AAChC,aAAK,gBAAgB,IAAI;AAAA,MAC/B;AAAA,MAEI,cAAc,SAAU,UAAU;AAChC,YAAIN,OAAO,KAAK,aAAc,KAAK,gBAAgB,YAAe,KAAK,YAAY;AACnF,aAAK,iBAAiB;AACtB,eAAOA;AAAA,MACb;AAAA,IACA;AAGE,cAAU,oBAAoB,MAAM;AACpC,cAAU,aAAa,CAAC;AACxB,SAAK,qBAAqB,UAAU,aAAa,CAAC;AAClD,SAAK,mBAAmB,UAAU,aAAa,CAAC;AAEhD,QAAI,KAAK,kBAAkB;AACzB,gBAAU,oBAAoB,MAAM;AACpC,WAAK,UAAU,UAAU,aAAa,CAAC;AACvC,WAAK,gBAAgB,UAAU,aAAa,CAAC;AAC7C,WAAK,sBAAsB,UAAU,aAAa,CAAC;AACnD,WAAK,oBAAoB,UAAU,aAAa,CAAC;AAEjD,gBAAU,oBAAoB,MAAM;AACpC,WAAK,mBAAmB,UAAU,aAAa,CAAC;AAChD,gBAAU,aAAa,CAAC;AAGxB;AACE,kBAAU,oBAAoB,MAAM;AACpC,kBAAU,aAAa,CAAC;AACxB,aAAK,4BAA4B,UAAU,aAAa,CAAC;AACzD,aAAK,sBAAsB,UAAU,aAAa,CAAC;AACnD,aAAK,oBAAoB,UAAU,aAAa,CAAC;AAEjD,aAAK,oBAAoB,OAAO,UAAS;AAEzC,kBAAU,oBAAoB,MAAM;AACpC,aAAK,iCAAiC,UAAU,aAAa,CAAC;AAC9D,aAAK,8BAA8B,UAAU,aAAa,CAAC;AAE3D,aAAK,0BAA0B,IAAI,WAAW,KAAK,yBAAyB;AAC5E,YAAI,KAAK,2BAA2B;AAClC,eAAKF,KAAI,GAAGA,KAAI,KAAK,4BAA4B,GAAGA,MAAK;AACvD,gBAAI,SAAS,UAAU,aAAa,CAAC;AACrC,sBAAU,oBAAoB,MAAM;AACpC,gBAAI,SAAS,UAAU,aAAa,CAAC;AAErC,iBAAK,wBAAwBA,EAAC,IAAM,UAAU,IAAK;AAAA,UAC7D;AACQ,eAAK,wBAAwB,KAAK,4BAA4B,CAAC,IAAI,UAAU,aAAa,CAAC;AAAA,QACnG,OAAa;AAEL,oBAAU,aAAa,CAAC;AAAA,QAChC;AAEM,YAAI,KAAK,gBAAgB,GAAG;AAC1B,oBAAU,oBAAoB,MAAM;AACpC,eAAK,4BAA4B;AACjC,eAAK,IAAI,KAAK,gBAAgB,GAAG,KAAK,GAAG,EAAE,GAAG;AAC5C,gBAAI,MAAM,UAAU,aAAa,CAAC;AAClC,iBAAK,6BAA6B,OAAO;AAAA,UACnD;AACQ,eAAK,IAAI,KAAK,eAAe,KAAK,KAAK,KAAK,gBAAgB,GAAG,EAAE,GAAG;AAClE,sBAAU,aAAa,CAAC;AAAA,UAClC;AAEQ,eAAK,qBAAqB,CAAA;AAC1B,eAAK,IAAI,KAAK,gBAAgB,GAAG,KAAK,GAAG,EAAE,GAAG;AAC5C,gBAAI,KAAK,4BAA6B,KAAK,GAAI;AAC7C,mBAAK,mBAAmB,CAAC,IAAI,OAAO,UAAS;AAAA,YACzD;AAAA,UACA;AAAA,QACA;AAEM,aAAK,uBAAuB,OAAO,UAAS;AAC5C,aAAK,0BAA0B,CAAA;AAC/B,YAAI,KAAK,sBAAsB;AAC7B,eAAKA,KAAI,GAAGA,KAAI,KAAK,sBAAsBA,MAAK;AAC9C,iBAAK,wBAAwB,KAAK,OAAO,WAAU,CAAE;AAAA,UAC/D;AAAA,QACA;AAAA,MACA;AAEI,WAAK,oBAAoB,OAAO,WAAU;AAC1C,WAAK,qBAAqB,OAAO,WAAU;AAC3C,WAAK,iBAAiB,OAAO,WAAU;AAAA,IAC3C;AAEE,QAAI,eAAe;AACnB,QAAI,qBAAqB;AAEzB,SAAK,cAAc,CAAA;AACnB,QAAI,gBAAgB,OAAO,UAAS;AACpC,SAAKA,KAAI,GAAGA,KAAI,eAAeA,MAAK;AAClC,UAAI,aAAa,CAAA;AACjB,WAAK,YAAY,KAAK,UAAU;AAEhC,gBAAU,oBAAoB,MAAM;AACpC,iBAAW,eAAe,UAAU,aAAa,CAAC;AAClD,gBAAU,aAAa,CAAC;AACxB,iBAAW,YAAY,UAAU,aAAa,CAAC;AAE/C,UAAI,WAAW;AACf,UAAI,WAAW,aAAa,sBAAsB,WAAW,aAAa,cAAc;AACtF,mBAAW,OAAO,WAAU;AAAA,MAClC;AAEI,WAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC7B,YAAI,MAAM,OAAO,WAAU;AAC3B,mBAAW,KAAK;AAAA,UACd,MAAM,OAAO,eAAe,GAAG;AAAA,UAC/B,QAAQ;AAAA,QAChB,CAAO;AAAA,MACP;AAAA,IACA;AAAA,EACA,CAAC;AAED,YAAU,kBAAkB,QAAQ,oBAAoB,SAAU,QAAQ;AAExE,QAAI,MAAM,KAAK,UAAS;AACxB,SAAK,qBAAsB,MAAM;AAAA,EACnC,CAAC;AAED,YAAU,YAAY,UAAU,UAAU,WAAW;AACpD,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,UAAU,WAAW;AACpD,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,aAAa,WAAW;AACvD,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,aAAa,WAAW;AACvD,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,SAAS,WAAW;AACnD,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,WAAW,WAAW;AACrD,WAAO,KAAK,KAAK,QAAQ,KAAI,EAAE;AAAA,EAChC;AAEA,YAAU,YAAY,UAAU,WAAW,WAAW;AACrD,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,YAAY,WAAW;AACtD,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,kBAAkB,WAAW;AAC5D,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,gBAAgB,WAAW;AAC1D,WAAO;AAAA,EACR;AAEA,YAAU,YAAY,UAAU,gBAAgB,WAAW;AAC1D,WAAO;AAAA,EACR;AAEA,YAAU,kBAAkB,UAAU,UAAU,WAAW;AAC1D,WAAO;AAAA,EACR;AAEA,YAAU,kBAAkB,UAAU,WAAW,WAAW;AAC3D,WAAO,KAAK;AAAA,EACb;AAEA,YAAU,kBAAkB,UAAU,YAAY,WAAW;AAC5D,WAAO,KAAK;AAAA,EACb;AAEA,YAAU,iBAAiB,UAAU,UAAU,WAAW;AACzD,WAAO;AAAA,EACR;AAEA,YAAU,iBAAiB,UAAU,kBAAkB,WAAW;AACjE,WAAO,KAAK;AAAA,EACb;AAEA,YAAU,iBAAiB,UAAU,gBAAgB,WAAW;AAC/D,WAAO,KAAK;AAAA,EACb;AAEA,YAAU,iBAAiB,UAAU,gBAAgB,WAAW;AAC/D,WAAO,KAAK;AAAA,EACb;AAEA,YAAU,oBAAoB,UAAU,aAAa,WAAW;AAC/D,WAAO;AAAA,EACR;AAEA,YAAU,oBAAoB,UAAU,aAAa,WAAW;AAC/D,WAAO;AAAA,EACR;AAGA,YAAU,eAAe,SAAS,GAAG,SAAS;AAC7C,QAAI,MAAM,OAAO,CAAC,EAAE,SAAS,EAAE;AAC/B,cAAU,OAAQ,YAAa,eAAe,YAAY,OAAO,UAAU,IAAI;AAC/E,WAAO,IAAI,SAAS,SAAS;AAC5B,YAAM,MAAM;AAAA,IACd;AACC,WAAO;AAAA,EACR;AAEA,YAAU,gBAAgB,UAAU,WACpC,UAAU,gBAAgB,UAAU,WACpC,UAAU,gBAAgB,UAAU,WACpC,UAAU,gBAAgB,UAAU,WAAW,WAAW;AACzD,QAAI,YAAY,UAAU,YAAY,UAAU,SAAS,KAAK,IAAI;AAClE,QAAI,KAAK,MAAM;AACd,aAAO,YAAU,MAAI,UAAU,aAAa,KAAK,KAAK,oBAAoB,IACjE,UAAU,aAAa,KAAK,KAAK,qBAAqB,IACtD,UAAU,aAAa,KAAK,KAAK,kBAAkB;AAAA,IAC9D,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAEA,YAAU,gBAAgB,UAAU,WACpC,UAAU,gBAAgB,UAAU,WAAW,WAAW;AACzD,QAAIA;AACJ,QAAI,YAAY,UAAU,YAAY,UAAU,SAAS,KAAK,IAAI;AAClE,QAAI,KAAK,MAAM;AACd,mBAAa;AACb,cAAQ,KAAK,KAAK,uBAAqB;AAAA,QACtC,KAAK;AACJ,uBAAa;AACb;AAAA,QACD,KAAK;AACJ,uBAAa;AACb;AAAA,QACD,KAAK;AACJ,uBAAa;AACb;AAAA,QACD,KAAK;AACJ,uBAAa;AACb;AAAA;AAEF,mBAAa,KAAK,KAAK;AACvB,mBAAa;AACb,UAAI,MAAM,KAAK,KAAK;AACpB,UAAI,WAAW;AACf,WAAKA,KAAE,GAAGA,KAAE,IAAIA,MAAK;AACpB,oBAAY,MAAM;AAClB,YAAIA,MAAG,GAAI;AACX,qBAAa;AACb,gBAAO;AAAA,MACV;AACE,mBAAa,UAAU,aAAa,UAAU,CAAC;AAC/C,mBAAa;AACb,UAAI,KAAK,KAAK,sBAAsB,GAAG;AACtC,qBAAa;AAAA,MAChB,OAAS;AACN,qBAAa;AAAA,MAChB;AACE,mBAAa,KAAK,KAAK;AACvB,UAAI,UAAU;AACd,UAAI,oBAAoB;AACxB,WAAKA,KAAI,GAAGA,MAAK,GAAGA,MAAK;AACxB,YAAI,KAAK,KAAK,6BAA6BA,EAAC,KAAK,SAAS;AACzD,8BAAoB,MAAI,UAAU,aAAa,KAAK,KAAK,6BAA6BA,EAAC,GAAG,CAAC,IAAE;AAC7F,oBAAU;AAAA,QACd;AAAA,MACA;AACE,mBAAa;AAAA,IACf;AACC,WAAO;AAAA,EACR;AAEA,YAAU,gBAAgB,UAAU,WACpC,UAAU,gBAAgB,UAAU,WAAW,WAAY;AAC1D,QAAIA;AACJ,QAAI,YAAY,UAAU,YAAY,UAAU,SAAS,KAAK,IAAI;AAClE,QAAI,KAAK,MAAM;AACd,mBAAa,MAAM,KAAK,KAAK;AAC7B,UAAI,KAAK,KAAK,mBAAmB;AAChC,qBAAa;AAAA,MAChB,OAAS;AACN,qBAAa;AAAA,MAChB;AACE,mBAAa,KAAK,KAAK;AAEvB,UAAI,oBAAoB;AACxB,UAAI,KAAK,KAAK,yBAAyB;AACtC,YAAI,QAAQ,CAAA;AACZ,YAAI,OAAO;AACX,gBAAQ,KAAK,KAAK,6BAA6B;AAC/C,gBAAQ,KAAK,KAAK,0BAA0B;AAC5C,YAAI;AACJ,aAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,wBAAwB,QAAQ,EAAEA,IAAG;AAC9D,kBAAS,KAAK,KAAK,wBAAwBA,EAAC,KAAK,IAAK;AACtD,gBAAM,KAAK,IAAI;AACf,cAAI,MAAM;AACT,2BAAeA;AAAA,UACpB;AAEI,iBAAQ,KAAK,KAAK,wBAAwBA,EAAC,KAAK,IAAK;AAAA,QACzD;AAEG,YAAI,iBAAiB,QAAW;AAC/B,8BAAoB;AAAA,QACxB,OACQ;AACJ,8BAAoB;AACpB,cAAI,eAAe;AACnB,cAAI,YAAY;AAChB,cAAI,gBAAgB;AACpB,eAAKA,KAAI,GAAGA,MAAK,cAAc,EAAEA,IAAG;AACnC,wBAAa,aAAa,IAAK,MAAMA,EAAC;AACtC,6BAAiB;AAEjB,mBAAO,iBAAiB,GAAG;AAC1B,kBAAI,MAAO,aAAc,gBAAgB,IAAM;AAC/C,mCAAqB,aAAa,GAAG;AAErC,+BAAiB;AACjB,4BAAc,KAAK,iBAAiB;AAAA,YAC1C;AAAA,UACA;AACI,cAAI,eAAe;AAClB,0BAAe,IAAI;AACnB,iCAAqB,aAAa,YAAY,EAAI;AAAA,UACvD;AAAA,QACA;AAAA,MACA;AACE,mBAAa;AAAA,IACf;AACC,WAAO;AAAA,EACR;AAEA,YAAU,gBAAgB,UAAU,WAAW,WAAW;AACzD,QAAI,YAAY,UAAU,YAAY,UAAU,SAAS,KAAK,IAAI;AAClE,QAAI,KAAK,QAAQ,KAAK,KAAK,KAAK;AAC/B,UAAI,MAAM,KAAK,KAAK,IAAI,OAAM;AAC9B,UAAI,MAAM,KAAK,KAAK,IAAI,eAAc;AACtC,aAAO,YAAU,MAAI,UAAU,aAAa,GAAG,KAAG,MAAM,MAAI,MAAK;AAAA,IACnE,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAEA,YAAU,gBAAgB,UAAU,WAAW,WAAW;AACzD,QAAI,YAAY,UAAU,YAAY,UAAU,SAAS,KAAK,IAAI;AAClE,QAAG,KAAK,aAAa;AACpB,aAAO,YAAY,MAAM,KAAK;AAAA,IAChC,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAEA,YAAU,gBAAgB,UAAU,WACpC,UAAU,gBAAgB,UAAU,WAAW,WAAW;AACzD,QAAI,YAAY,UAAU,YAAY,UAAU,SAAS,KAAK,IAAI;AAClE,QAAI,QAAQ,KAAK,KAAK;AACtB,QAAI,SAAS,GAAG;AACf,cAAQ;AAAA,IACV;AACC,QAAI,WAAW,KAAK,KAAK;AACzB,QAAI,YAAY,GAAG;AAClB,iBAAW;AAAA,IACb;AACC,WAAO,YAAY,OAAO,KAAK,KAAK,UAAU,MAAM,QAAQ,MAAM;AAAA,EACnE;AAEA,YAAU,gBAAgB,UAAU,WAAW,WAAW;AACzD,QAAI,YAAY,UAAU,YAAY,UAAU,SAAS,KAAK,IAAI;AAClE,QAAI,QAAQ,KAAK,KAAK;AACtB,QAAI,QAAQ,IAAI;AACf,cAAQ,MAAM;AAAA,IAChB;AACC,QAAI;AACJ,QAAI,KAAK,KAAK,gBAAgB,KAAK,KAAK,KAAK,kBAAkB,GAAG;AACjE,iBAAY,KAAK,KAAK,eAAe,IAAK,OAAO;AAAA,IACnD,WAAa,KAAK,KAAK,eAAe,GAAI;AACxC,iBAAY,KAAK,KAAK,kBAAkB,IAAK,OAAO;AAAA,IACtD;AAEC,WAAO,YAAU,MAAI,KAAK,KAAK,cAAY,MAAI,SAAO,KAAK,KAAK,aAAW,MAAI,OAAK,MAAI;AAAA,EACzF;AAMA,YAAU,IAAI,UAAU,cAAc,SAAS,QAAQ,KAAK;AAC3D,SAAK,QAAQ;AACb,QAAI,KAAK,OAAO,UAAU;AACzB,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,SAAS,QAAQ;AACzB,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,MAAM,aAAa,iBAAe,KAAK,OAAK,eAAa,KAAK,OAAK,kBAAgB,OAAO,YAAW,KAAI,OAAO,GAAG;AACvH,QAAI,KAAK,OAAO,UAAU;AACzB,aAAO,YAAY,CAAC;AAAA,IACtB,OAAQ;AACN,WAAK,eAAe,OAAO,YAAW;AACtC,aAAO,YAAY,KAAK,IAAI;AAAA,IAC9B;AACC,WAAO,YAAY,KAAK,MAAM,MAAM,CAAC;AACrC,QAAI,KAAK,SAAS,QAAQ;AACzB,aAAO,gBAAgB,KAAK,IAAI;AAAA,IAClC;AACC,QAAI,KAAK,OAAO,UAAU;AACzB,aAAO,YAAY,KAAK,IAAI;AAAA,IAC9B;AAAA,EACA;AAEA,YAAU,QAAQ,UAAU,cAAc,SAAS,QAAQ;AAC1D,SAAK,QAAQ;AACb,cAAU,IAAI,UAAU,YAAY,KAAK,MAAM,QAAQ,QAAM,KAAK,UAAQ,QAAM,KAAK,KAAK;AAC1F,WAAO,WAAW,KAAK,OAAO;AAC9B,WAAO,YAAY,KAAK,KAAK;AAAA,EAC9B;AAEA,YAAU,IAAI,UAAU,QAAQ,SAAS,QAAQ;AAChD,QAAI,KAAK,SAAS,QAAQ;AAEzB,UAAI,KAAK,MAAM;AACd,aAAK,OAAO,KAAK,KAAK;AACtB,aAAK,YAAY,MAAM;AACvB,eAAO,gBAAgB,KAAK,IAAI;AAAA,MACnC;AAAA,IACA,OAAQ;AACN,WAAK,OAAQ,KAAK,OAAO,KAAK,KAAK,SAAS;AAC5C,WAAK,YAAY,MAAM;AACvB,UAAI,KAAK,MAAM;AACd,eAAO,gBAAgB,KAAK,IAAI;AAAA,MACnC;AAAA,IACA;AAAA,EACA;AAEA,YAAU,aAAa,UAAU,QAAQ,SAAS,QAAQ;AACzD,SAAK,OAAO;AACZ,SAAK,YAAY,MAAM;AACvB,aAASA,KAAE,GAAGA,KAAE,KAAK,MAAM,QAAQA,MAAK;AACvC,UAAI,KAAK,MAAMA,EAAC,GAAG;AAClB,aAAK,MAAMA,EAAC,EAAE,MAAM,MAAM;AAC1B,aAAK,QAAQ,KAAK,MAAMA,EAAC,EAAE;AAAA,MAC9B;AAAA,IACA;AAEC,QAAI,MAAM,aAAa,mBAAiB,KAAK,OAAK,oBAAkB,KAAK,IAAI;AAC7E,WAAO,aAAa,KAAK,cAAc,KAAK,IAAI;AAAA,EACjD;AAEA,YAAU,sBAAsB,UAAU,QAAQ,SAAS,QAAQ;AAClE,SAAK,OAAO,KAAK,UAAU,SAAO;AAClC,SAAK,YAAY,MAAM;AACvB,WAAO,iBAAiB,KAAK,SAAS;AAAA,EACvC;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,SAAK,OAAO;AACZ,SAAKA,KAAI,GAAGA,KAAI,KAAK,IAAI,QAAQA,MAAK;AACrC,WAAK,QAAQ,IAAE,KAAK,IAAIA,EAAC,EAAE;AAAA,IAC7B;AACC,SAAKA,KAAI,GAAGA,KAAI,KAAK,IAAI,QAAQA,MAAK;AACrC,WAAK,QAAQ,IAAE,KAAK,IAAIA,EAAC,EAAE;AAAA,IAC7B;AACC,QAAI,KAAK,KAAK;AACb,WAAK,QAAQ,KAAK,IAAI;AAAA,IACxB;AACC,SAAK,YAAY,MAAM;AACvB,WAAO,WAAW,KAAK,oBAAoB;AAC3C,WAAO,WAAW,KAAK,oBAAoB;AAC3C,WAAO,WAAW,KAAK,qBAAqB;AAC5C,WAAO,WAAW,KAAK,kBAAkB;AACzC,WAAO,WAAW,KAAK,sBAAsB,MAAI,EAAE;AACnD,WAAO,WAAW,KAAK,IAAI,UAAU,KAAG,EAAE;AAC1C,SAAKA,KAAI,GAAGA,KAAI,KAAK,IAAI,QAAQA,MAAK;AACrC,aAAO,YAAY,KAAK,IAAIA,EAAC,EAAE,MAAM;AACrC,aAAO,gBAAgB,KAAK,IAAIA,EAAC,EAAE,IAAI;AAAA,IACzC;AACC,WAAO,WAAW,KAAK,IAAI,MAAM;AACjC,SAAKA,KAAI,GAAGA,KAAI,KAAK,IAAI,QAAQA,MAAK;AACrC,aAAO,YAAY,KAAK,IAAIA,EAAC,EAAE,MAAM;AACrC,aAAO,gBAAgB,KAAK,IAAIA,EAAC,EAAE,IAAI;AAAA,IACzC;AACC,QAAI,KAAK,KAAK;AACb,aAAO,gBAAgB,KAAK,GAAG;AAAA,IACjC;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,KAAK,cAAc;AACnC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,cAAc,MAAM;AAC5C,SAAIA,KAAE,GAAGA,KAAE,KAAK,cAAc,QAAQA,MAAK;AAC1C,aAAO,YAAY,KAAK,cAAcA,EAAC,CAAC;AAAA,IAC1C;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AAEpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE;AACd,SAAK,YAAY,MAAM;AACvB,WAAO,WAAW,KAAK,qBAAqB;AAC5C,WAAO,WAAW,KAAK,yBAAyB;AAChD,WAAO,WAAW,KAAK,4BAA4B;AACnD,WAAO,WAAW,KAAK,oBAAoB;AAC3C,WAAO,WAAW,KAAK,kBAAkB;AAAA,EAC1C;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,KAAK,cAAc;AACnC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,cAAc,MAAM;AAC5C,SAAIA,KAAE,GAAGA,KAAE,KAAK,cAAc,QAAQA,MAAK;AAC1C,aAAO,YAAY,KAAK,cAAcA,EAAC,CAAC;AACxC,UAAI,KAAK,YAAY,GAAG;AACvB,eAAO,WAAW,KAAK,eAAeA,EAAC,CAAC;AAAA,MAC3C,OAAS;AACN,eAAO,YAAY,KAAK,eAAeA,EAAC,CAAC;AAAA,MAC5C;AAAA,IACA;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,QAAQ,MAAM;AACtC,aAASA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AAC7C,WAAK,QAAQA,EAAC,EAAE,MAAM,MAAM;AAC5B,WAAK,QAAQ,KAAK,QAAQA,EAAC,EAAE;AAAA,IAC/B;AAEC,QAAI,MAAM,aAAa,mBAAiB,KAAK,OAAK,oBAAkB,KAAK,IAAI;AAC7E,WAAO,aAAa,KAAK,cAAc,KAAK,IAAI;AAAA,EACjD;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,KAAK,kBAAkB;AACnC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,iBAAiB;AAAA,EAC1C;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,KAAG,KAAK,QAAQ;AAC9B,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,QAAQ,MAAM;AACtC,aAASA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AAC7C,UAAI,QAAQ,KAAK,QAAQA,EAAC;AAC1B,aAAO,YAAY,MAAM,gBAAgB;AACzC,aAAO,WAAW,MAAM,UAAU;AAClC,aAAO,WAAW,MAAM,kBAAkB;AAC1C,aAAO,WAAW,MAAM,mBAAmB;AAAA,IAC7C;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,KAAK,aAAa,UAAQ,KAAK,cAAc,SAAO,MAAI,KAAK,MAAM,SAAO;AAC1F,SAAK,YAAY,MAAM;AACvB,WAAO,aAAa,KAAK,aAAa;AACtC,WAAO,aAAa,KAAK,KAAK;AAC9B,WAAO,YAAY,KAAK,SAAS;AACjC,WAAO,YAAY,KAAK,uBAAuB;AAC/C,WAAO,YAAY,KAAK,cAAc;AACtC,WAAO,YAAY,KAAK,EAAE;AAC1B,WAAO,gBAAgB,KAAK,YAAY;AAAA,EACzC;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,OAAO,IAAE,IAAE,KAAK,kBAAkB;AACvC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,aAAa,MAAM,CAAC;AAC5C,WAAO,YAAY,KAAK,aAAa;AACrC,aAASA,KAAI,GAAGA,KAAI,KAAK,kBAAkB,QAAQA,MAAK;AACvD,aAAO,YAAY,KAAK,kBAAkBA,EAAC,GAAG,MAAM,CAAC;AAAA,IACvD;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,OAAO,IAAE,IAAE,KAAK,KAAK,SAAO;AACjC,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,SAAS,MAAM,CAAC;AACxC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,aAAa,KAAK,IAAI;AAAA,EAC9B;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACjD,QAAIA,IAAE;AACN,SAAK,OAAO;AAEZ,SAAKA,KAAI,GAAGA,KAAI,KAAK,YAAY,QAAQA,MAAK;AAC5C,WAAK,QAAQ;AACb,WAAK,IAAI,GAAG,IAAI,KAAK,YAAYA,EAAC,EAAE,QAAQ,KAAK;AAC/C,aAAK,QAAQ,IAAI,KAAK,YAAYA,EAAC,EAAE,CAAC,EAAE,KAAK;AAAA,MACrD;AAAA,IACA;AAEI,SAAK,YAAY,MAAM;AAEvB,WAAO,WAAW,KAAK,oBAAoB;AAC3C,WAAO,YAAY,KAAK,yBAAyB,MAC9B,KAAK,qBAAqB,KAC3B,KAAK,mBAAmB;AAC1C,WAAO,YAAY,KAAK,6BAA6B;AACrD,WAAO,gBAAgB,KAAK,4BAA4B;AACxD,WAAO,WAAW,KAAK,iBAAiB;AACxC,WAAO,YAAY,KAAK,gCAAgC,MAAI,GAAG;AAC/D,WAAO,WAAW,KAAK,mBAAmB,MAAI,EAAE;AAChD,WAAO,WAAW,KAAK,qBAAqB,MAAI,EAAE;AAClD,WAAO,WAAW,KAAK,yBAAyB,MAAI,EAAE;AACtD,WAAO,WAAW,KAAK,2BAA2B,MAAI,EAAE;AACxD,WAAO,YAAY,KAAK,YAAY;AACpC,WAAO,YAAY,KAAK,qBAAmB,MAC3B,KAAK,qBAAmB,MACxB,KAAK,oBAAkB,KACxB,KAAK,kBAAkB;AACtC,WAAO,WAAW,KAAK,YAAY,MAAM;AACzC,SAAKA,KAAI,GAAGA,KAAI,KAAK,YAAY,QAAQA,MAAK;AAE5C,aAAO,YAAY,KAAK,YAAYA,EAAC,EAAE,gBAAc,KAClC,KAAK,YAAYA,EAAC,EAAE,SAAS;AAChD,aAAO,YAAY,KAAK,YAAYA,EAAC,EAAE,MAAM;AAC7C,WAAK,IAAI,GAAG,IAAI,KAAK,YAAYA,EAAC,EAAE,QAAQ,KAAK;AAC/C,eAAO,YAAY,KAAK,YAAYA,EAAC,EAAE,CAAC,EAAE,KAAK,MAAM;AACrD,eAAO,gBAAgB,KAAK,YAAYA,EAAC,EAAE,CAAC,EAAE,IAAI;AAAA,MAC1D;AAAA,IACA;AAAA,EACA;AAEA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAQ,KAAK,UAAU,SAAO,KAAI,KAAK,MAAM,SAAO;AACzD,SAAK,YAAY,MAAM;AACvB,WAAO,aAAa,KAAK,SAAS;AAClC,WAAO,aAAa,KAAK,KAAK;AAAA,EAC/B;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,OAAO,IAAE,IAAE,IAAE;AAClB,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,aAAa;AACrC,WAAO,YAAY,KAAK,iBAAiB;AACzC,WAAO,YAAY,KAAK,SAAS;AACjC,WAAO,YAAY,KAAK,QAAQ;AAChC,WAAO,YAAY,KAAK,QAAQ;AAChC,WAAO,YAAY,CAAC;AAAA,EACrB;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,iBAAiB;AAAA,EAC1C;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,eAAe;AAAA,EACxC;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,KAAG,IAAE,IAAE;AACnB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,aAAa;AACrC,WAAO,YAAY,KAAK,iBAAiB;AACzC,WAAO,YAAY,KAAK,SAAS;AACjC,WAAO,YAAY,KAAK,QAAQ;AAChC,WAAO,YAAY,KAAK,IAAI;AAC5B,WAAO,YAAY,KAAK,UAAQ,CAAC;AACjC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,iBAAiB,KAAK,MAAM;AACnC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,aAAa;AAAA,EACtC;AAGA,YAAU,YAAY,UAAU,cAAc,SAAS,QAAQ;AAC9D,SAAK,OAAO;AACZ,cAAU,IAAI,UAAU,YAAY,KAAK,MAAM,MAAM;AACrD,WAAO,WAAW,CAAC;AACnB,WAAO,WAAW,CAAC;AACnB,WAAO,WAAW,CAAC;AACnB,WAAO,WAAW,CAAC;AACnB,WAAO,WAAW,CAAC;AACnB,WAAO,WAAW,CAAC;AACnB,WAAO,YAAY,KAAK,oBAAoB;AAAA,EAC7C;AAEA,YAAU,YAAY,UAAU,cAAc,SAAS,QAAQ;AAC9D,aAASA,KAAE,GAAGA,KAAE,KAAK,MAAM,QAAQA,MAAK;AACvC,WAAK,MAAMA,EAAC,EAAE,MAAM,MAAM;AAC1B,WAAK,QAAQ,KAAK,MAAMA,EAAC,EAAE;AAAA,IAC7B;AACC,QAAI,MAAM,aAAa,mBAAiB,KAAK,OAAK,oBAAkB,KAAK,IAAI;AAC7E,WAAO,aAAa,KAAK,cAAc,KAAK,IAAI;AAAA,EACjD;AAEA,YAAU,YAAY,UAAU,QAAQ,SAAS,QAAQ;AACxD,SAAK,YAAY,MAAM;AACvB,WAAO,gBAAgB,KAAK,IAAI;AAChC,SAAK,QAAQ,KAAK,KAAK;AACvB,QAAI,MAAM,aAAa,mBAAiB,KAAK,OAAK,oBAAkB,KAAK,IAAI;AAC7E,WAAO,aAAa,KAAK,cAAc,KAAK,IAAI;AAAA,EACjD;AAEA,YAAU,kBAAkB,UAAU,QAAQ,SAAS,QAAQ;AAC9D,SAAK,YAAY,MAAM;AACvB,SAAK,QAAQ,IAAE,IAAE,IAAE,IAAE;AACrB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,KAAK;AAC7B,WAAO,YAAY,KAAK,MAAM;AAC9B,WAAO,YAAY,KAAK,eAAe;AACvC,WAAO,YAAY,KAAK,cAAc;AACtC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,WAAW;AACnC,WAAO,WAAW,KAAK,IAAI,IAAI,KAAK,eAAe,MAAM,CAAC;AAC1D,WAAO,YAAY,KAAK,gBAAgB,MAAM,EAAE;AAChD,WAAO,YAAY,KAAK,KAAK;AAC7B,WAAO,WAAW,EAAE;AACpB,SAAK,YAAY,MAAM;AAAA,EACxB;AAEA,YAAU,iBAAiB,UAAU,QAAQ,SAAS,QAAQ;AAC7D,SAAK,YAAY,MAAM;AACvB,SAAK,QAAQ,IAAE,IAAE,IAAE;AACnB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,aAAa;AACrC,WAAO,YAAY,KAAK,UAAU;AAClC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,cAAY,EAAE;AACtC,SAAK,YAAY,MAAM;AAAA,EACxB;AAEA,YAAU,gBAAgB,UAAU,QAAQ,SAAS,QAAQ;AAC5D,SAAK,YAAY,MAAM;AACvB,SAAK,QAAQ,KAAK,UAAU,SAAO,IAC/B,KAAK,gBAAgB,SAAO,IAC5B,KAAK,qBAAqB,SAAO;AACrC,WAAO,aAAa,KAAK,SAAS;AAClC,WAAO,aAAa,KAAK,eAAe;AACxC,WAAO,aAAa,KAAK,oBAAoB;AAC7C,SAAK,YAAY,MAAM;AAAA,EACxB;AAGA,YAAU,iBAAiB,UAAU,QAAQ,SAAS,QAAQ;AAC7D,WAAO,gBAAgB,KAAK,IAAI;AAAA,EACjC;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,KAAG,IAAE,KAAK,QAAQ;AAC9B,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,eAAe,MAAM,CAAC;AAC9C,WAAO,YAAY,KAAK,uBAAuB;AAC/C,WAAO,YAAY,KAAK,QAAQ,MAAM;AACtC,aAASA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AAC7C,UAAI,QAAQ,KAAK,QAAQA,EAAC;AAC1B,aAAO,WAAW,MAAM,YAAY;AACpC,aAAO,WAAW,MAAM,uBAAuB;AAAA,IACjD;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,QAAI;AAGJ,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAKA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AACzC,cAAQ,KAAK,QAAQA,EAAC;AACtB,UAAI,KAAK,YAAY,GAAG;AACvB,YAAI,KAAK,mBAAmB,GAAG;AAC9B,eAAK,QAAQ;AAAA,QACjB;AACG,aAAK,QAAQ,MAAM,KAAK;AAAA,MAC3B;AAAA,IACA;AACC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,eAAe,MAAM,CAAC;AAC9C,QAAI,KAAK,YAAY,GAAG;AACvB,aAAO,YAAY,KAAK,cAAc;AAAA,IACxC;AACC,QAAI,KAAK,WAAW,GAAG;AACtB,aAAO,YAAY,KAAK,gCAAgC;AAAA,IAC1D;AACC,WAAO,YAAY,KAAK,QAAQ,MAAM;AACtC,SAAKA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AACzC,cAAQ,KAAK,QAAQA,EAAC;AACtB,UAAI,KAAK,YAAY,GAAG;AACvB,YAAI,KAAK,mBAAmB,GAAG;AAC9B,iBAAO,YAAY,MAAM,kBAAkB;AAAA,QAC/C;AAAA,MACA;AACE,YAAM,MAAM,MAAM;AAAA,IACpB;AAAA,EACA;AAIA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,IAAE,IAAE,KAAG,KAAK,WAAW;AACvC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,YAAY;AACpC,WAAO,YAAY,KAAK,SAAS;AACjC,WAAO,YAAY,KAAK,0BAA0B;AAClD,WAAO,YAAY,KAAK,YAAY;AACpC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,WAAW,MAAM;AACzC,aAASA,KAAI,GAAGA,KAAI,KAAK,WAAW,QAAQA,MAAK;AAChD,UAAI,MAAM,KAAK,WAAWA,EAAC;AAC3B,aAAO,YAAY,IAAI,kBAAkB,KAAK,IAAI,eAAe;AACjE,aAAO,YAAY,IAAI,mBAAmB;AAC1C,aAAO,YAAY,IAAI,mBAAmB,KAAK,IAAI,YAAY,KAAK,IAAI,cAAc;AAAA,IACxF;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AAEnD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,OAAO;AAC/B,WAAO,YAAY,CAAC;AAAA,EACtB;AAEA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,KAAK,cAAc;AACnC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,cAAc,MAAM;AAC5C,WAAO,iBAAiB,KAAK,aAAa;AAAA,EAC3C;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,KAAG,KAAK,YAAY;AAClC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,YAAY,MAAM;AAC1C,SAAIA,KAAE,GAAGA,KAAE,KAAK,YAAY,QAAQA,MAAK;AACxC,aAAO,YAAY,KAAK,YAAYA,EAAC,CAAC;AACtC,aAAO,YAAY,KAAK,kBAAkBA,EAAC,CAAC;AAC5C,aAAO,YAAY,KAAK,yBAAyBA,EAAC,CAAC;AAAA,IACrD;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,QAAQ,MAAM;AACtC,SAAK,QAAQ;AACb,SAAKA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AACzC,WAAK,QAAQA,EAAC,EAAE,MAAM,MAAM;AAC5B,WAAK,QAAQ,KAAK,QAAQA,EAAC,EAAE;AAAA,IAC/B;AAEC,QAAI,MAAM,aAAa,mBAAiB,KAAK,OAAK,oBAAkB,KAAK,IAAI;AAC7E,WAAO,aAAa,KAAK,cAAc,KAAK,IAAI;AAAA,EACjD;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,KAAK,wBAAwB;AAC7C,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,wBAAwB,MAAM;AACtD,SAAIA,KAAE,GAAGA,KAAE,KAAK,wBAAwB,QAAQA,MAAK;AACpD,aAAO,YAAY,KAAK,wBAAwBA,EAAC,CAAC;AAClD,aAAO,YAAY,KAAK,oBAAoBA,EAAC,CAAC;AAAA,IAChD;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,KAAK,eAAe;AACpC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,eAAe,MAAM;AAC7C,WAAO,iBAAiB,KAAK,cAAc;AAAA,EAC5C;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,QAAI,WAAW;AACf,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,QAAI,KAAK,aAAa,SAAS,GAAG;AACjC,MAAAA,KAAI;AACJ,aAAOA,KAAE,IAAI,KAAK,aAAa,QAAQ;AACtC,YAAI,KAAK,aAAaA,KAAE,CAAC,MAAO,KAAK,aAAa,CAAC,GAAG;AACrD,qBAAW;AACX;AAAA,QACJ,OAAU;AACN,UAAAA;AAAA,QACJ;AAAA,MACA;AAAA,IACA,OAAQ;AACN,iBAAW;AAAA,IACb;AACC,SAAK,OAAO;AACZ,QAAI,CAAC,UAAU;AACd,WAAK,QAAQ,IAAE,KAAK,aAAa;AAAA,IACnC;AACC,SAAK,YAAY,MAAM;AACvB,QAAI,CAAC,UAAU;AACd,aAAO,YAAY,CAAC;AAAA,IACtB,OAAQ;AACN,aAAO,YAAY,KAAK,aAAa,CAAC,CAAC;AAAA,IACzC;AACC,WAAO,YAAY,KAAK,aAAa,MAAM;AAC3C,QAAI,CAAC,UAAU;AACd,aAAO,iBAAiB,KAAK,YAAY;AAAA,IAC3C;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAIA;AACJ,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE,IAAE,KAAK,cAAc;AACnC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,cAAc,MAAM;AAC5C,SAAIA,KAAE,GAAGA,KAAE,KAAK,cAAc,QAAQA,MAAK;AAC1C,aAAO,YAAY,KAAK,cAAcA,EAAC,CAAC;AACxC,aAAO,YAAY,KAAK,cAAcA,EAAC,CAAC;AAAA,IAC1C;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,QAAI,aAAa,KAAK,IAAI,GAAG,EAAE,IAAI;AAEnC,SAAK,UAAU,KAAK,sBAAsB,aAAa,IAAI;AAC3D,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,QAAI,KAAK,YAAY,GAAG;AACvB,WAAK,QAAQ;AAAA,IACf;AACC,SAAK,YAAY,MAAM;AACvB,QAAI,KAAK,YAAY,GAAG;AACvB,aAAO,YAAY,KAAK,mBAAmB;AAAA,IAC7C,OAAQ;AACN,aAAO,YAAY,KAAK,mBAAmB;AAAA,IAC7C;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,QAAI,KAAK,QAAQ,UAAU,4BAA4B;AACtD,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,QAAQ,UAAU,sBAAsB;AAChD,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,QAAQ,UAAU,wBAAwB;AAClD,WAAK,QAAQ;AAAA,IACf;AACC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,QAAQ;AAChC,QAAI,KAAK,QAAQ,UAAU,4BAA4B;AACtD,aAAO,YAAY,KAAK,gBAAgB;AAAA,IAC1C;AACC,QAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,aAAO,YAAY,KAAK,gCAAgC;AAAA,IAC1D;AACC,QAAI,KAAK,QAAQ,UAAU,sBAAsB;AAChD,aAAO,YAAY,KAAK,uBAAuB;AAAA,IACjD;AACC,QAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,aAAO,YAAY,KAAK,mBAAmB;AAAA,IAC7C;AACC,QAAI,KAAK,QAAQ,UAAU,wBAAwB;AAClD,aAAO,YAAY,KAAK,oBAAoB;AAAA,IAC9C;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AAEf,SAAK,OAAO,IAAE,KAAG,IAAE;AACnB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,aAAa;AACrC,WAAO,YAAY,KAAK,iBAAiB;AACzC,WAAO,YAAY,KAAK,QAAQ;AAChC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,KAAK,QAAQ;AAChC,WAAO,YAAY,CAAC;AACpB,WAAO,YAAY,CAAC;AACpB,WAAO,WAAW,KAAK,KAAK;AAC5B,WAAO,WAAW,KAAK,eAAe;AACtC,WAAO,WAAW,KAAK,UAAQ,CAAC;AAChC,WAAO,YAAY,CAAC;AACpB,WAAO,gBAAgB,KAAK,MAAM;AAClC,WAAO,YAAY,KAAK,KAAK;AAC7B,WAAO,YAAY,KAAK,MAAM;AAAA,EAC/B;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,IAAE;AACd,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,QAAQ;AAChC,WAAO,YAAY,KAAK,gCAAgC;AACxD,WAAO,YAAY,KAAK,uBAAuB;AAC/C,WAAO,YAAY,KAAK,mBAAmB;AAC3C,WAAO,YAAY,KAAK,oBAAoB;AAAA,EAC7C;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,QAAI,KAAK,QAAQ,UAAU,wBAAwB;AAClD,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,QAAQ,UAAU,qBAAqB;AAC/C,WAAK,QAAQ,IAAE,KAAK,gBAAgB;AAAA,IACtC;AACC,QAAI,KAAK,QAAQ,UAAU,iBAAiB;AAC3C,WAAK,QAAQ,IAAE,KAAK,YAAY;AAAA,IAClC;AACC,QAAI,KAAK,QAAQ,UAAU,kBAAkB;AAC5C,WAAK,QAAQ,IAAE,KAAK,aAAa;AAAA,IACnC;AACC,QAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,WAAK,QAAQ,IAAE,KAAK,+BAA+B;AAAA,IACrD;AACC,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,YAAY;AACpC,QAAI,KAAK,QAAQ,UAAU,wBAAwB;AAClD,WAAK,uBAAuB,OAAO,YAAW;AAC9C,aAAO,WAAW,KAAK,WAAW;AAAA,IACpC;AACC,QAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,aAAO,YAAY,KAAK,kBAAkB;AAAA,IAC5C;AACC,aAASA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AAC3C,UAAI,KAAK,QAAQ,UAAU,qBAAqB;AAC/C,eAAO,YAAY,KAAK,gBAAgBA,EAAC,CAAC;AAAA,MAC7C;AACE,UAAI,KAAK,QAAQ,UAAU,iBAAiB;AAC3C,eAAO,YAAY,KAAK,YAAYA,EAAC,CAAC;AAAA,MACzC;AACE,UAAI,KAAK,QAAQ,UAAU,kBAAkB;AAC5C,eAAO,YAAY,KAAK,aAAaA,EAAC,CAAC;AAAA,MAC1C;AACE,UAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,YAAI,KAAK,YAAY,GAAG;AACvB,iBAAO,YAAY,KAAK,+BAA+BA,EAAC,CAAC;AAAA,QAC7D,OAAU;AACN,iBAAO,WAAW,KAAK,+BAA+BA,EAAC,CAAC;AAAA,QAC5D;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAGA,YAAU,SAAS,EAAE,UAAU,QAAQ,SAAS,QAAQ;AACvD,SAAK,UAAU;AACf,QAAI,KAAK,UAAU;AAClB,WAAK,QAAQ;AACb,WAAK,OAAO,KAAK,SAAS,SAAO;AAAA,IACnC,OAAQ;AACN,WAAK,QAAQ;AACb,WAAK,OAAO;AAAA,IACd;AACC,SAAK,YAAY,MAAM;AACvB,QAAI,KAAK,UAAU;AAClB,aAAO,aAAa,KAAK,QAAQ;AAAA,IACnC;AAAA,EACA;AAGA,YAAU,SAAS,EAAE,UAAU,QAAQ,SAAS,QAAQ;AACvD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO,KAAK,KAAK,SAAO,KAAG,KAAK,WAAW,KAAK,SAAS,SAAO,IAAI;AACzE,SAAK,YAAY,MAAM;AACvB,WAAO,aAAa,KAAK,IAAI;AAC7B,QAAI,KAAK,UAAU;AAClB,aAAO,aAAa,KAAK,QAAQ;AAAA,IACnC;AAAA,EACA;AAGA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AAEpD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,KAAK,YAAY;AACpC,WAAO,iBAAiB,KAAK,OAAO;AAAA,EACrC;AAOA,YAAU,QAAQ,UAAU,SAAS,SAAS,SAAS;AACtD,QAAIA,IAAG,GAAG;AACV,QAAI;AACJ,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAc,QAAQA,MAAK;AAC/C,WAAK,IAAI,GAAG,IAAI,KAAK,cAAcA,EAAC,GAAG,KAAK;AAC3C,gBAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM,KAAK,eAAeA,EAAC;AACvD;AAAA,MACH;AAAA,IACA;AAAA,EACA;AAEA,YAAU,QAAQ,UAAU,SAAS,SAAS,SAAS;AACtD,QAAIA,IAAG,GAAG;AACV,QAAI;AACJ,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAc,QAAQA,MAAK;AAC/C,WAAK,IAAI,GAAG,IAAI,KAAK,cAAcA,EAAC,GAAG,KAAK;AAC3C,YAAI,MAAM,GAAG;AACZ,kBAAQ,CAAC,EAAE,MAAM;AAAA,QACrB,OAAU;AACN,kBAAQ,CAAC,EAAE,MAAM,QAAQ,IAAE,CAAC,EAAE,MAAM,KAAK,cAAcA,EAAC;AAAA,QAC5D;AACG;AAAA,MACH;AAAA,IACA;AAAA,EACA;AAEA,YAAU,QAAQ,UAAU,SAAS,SAAS,SAAS;AACtD,QAAIA;AACJ,SAAKA,KAAI,GAAGA,KAAI,KAAK,cAAc,QAAQA,MAAK;AAC/C,cAAQA,EAAC,EAAE,SAAS,KAAK,cAAcA,EAAC;AAAA,IAC1C;AAAA,EACA;AAEA,YAAU,QAAQ,UAAU,SAAS,SAAS,SAAS;AACtD,QAAIA,IAAG,GAAG,GAAG,GAAG;AAChB,QAAI;AACJ,QAAI;AACJ,SAAKA,KAAI,GAAGA,KAAI,KAAK,YAAY,QAAQA,MAAK;AAC7C,WAAK,IAAI,GAAG,KAAKA,KAAE,IAAI,KAAK,YAAY,SAAS,KAAK,YAAYA,KAAE,CAAC,IAAI,WAAW,KAAK;AACxF;AACA,aAAK,IAAI,GAAG,IAAI,KAAK,kBAAkBA,EAAC,GAAG,KAAK;AAC/C,cAAI,QAAQ,CAAC,GAAG;AACf,oBAAQ,CAAC,EAAE,oBAAoB,KAAK,yBAAyBA,EAAC;AAC9D,oBAAQ,CAAC,EAAE,cAAc;AAAA,UAC9B,OAAW;AACN;AAAA,UACL;AACI;AAAA,QACJ;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAEA,YAAU,QAAQ,UAAU,SAAS,SAAS,SAAS;AACtD,QAAIA;AACJ,SAAKA,KAAI,GAAGA,KAAI,KAAK,aAAa,QAAQA,MAAK;AAC9C,cAAQA,EAAC,EAAE,OAAO,KAAK,aAAaA,EAAC;AAAA,IACvC;AAAA,EACA;AAGA,YAAU,wBAAwB;AAAA,IAAE;AAAA,IAAS;AAAA,IAAW;AAAA,IAAc;AAAA,IAC9D;AAAA,IAAS;AAAA,IAAc;AAAA,IAAW;AAAA,IAClC;AAAA,IAAe;AAAA,IAAU;AAAA,IAAa;AAAA,IACtC;AAAA,IAAO;AAAA,EAAQ;AAEvB,YAAU,kCAAkC;AAAA,IAAE;AAAA,IAAqB;AAAA,IAAU;AAAA,IAAW;AAAA,IAAiB;AAAA,IACzG;AAAA,IAAe;AAAA,IAAqB;AAAA,IAAgB;AAAA,IAAiB;AAAA,IAAkB;AAAA,IAA4B;AAAA,EAAiB;AAEpI,YAAU,iBAAiB,SAAS,OAAO,OAAO;AACjD,QAAI,SAAS,CAAC,MAAO,QAAO;AAC5B,QAAI;AACJ,SAAK,QAAQ,OAAO;AACnB,UAAI,UAAU,sBAAsB,QAAQ,IAAI,IAAI,IAAI;AACvD;AAAA,MAGH,WAAa,MAAM,IAAI,aAAa,UAAU,OAAO,MAAM,IAAI,aAAa,UAAU,KAAK;AACxF;AAAA,MACH,WAAa,OAAO,MAAM,IAAI,MAAM,eAAe,OAAO,MAAM,IAAI,MAAM,aAAa;AACpF;AAAA,MACH,WAAa,OAAO,MAAM,IAAI,MAAM,cAAc,OAAO,MAAM,IAAI,MAAM,YAAY;AAClF;AAAA,MACH,WACI,MAAM,eAAe,MAAM,YAAY,QAAQ,KAAK,MAAM,GAAE,CAAC,CAAC,IAAI,MAClE,MAAM,eAAe,MAAM,YAAY,QAAQ,KAAK,MAAM,GAAE,CAAC,CAAC,IAAI,IAAM;AACzE;AAAA,MACH,OAAS;AACN,YAAI,SAAS,UAAU,SAAS,WAAW,SAAS,UAAU,SAAS,mBAAmB,SAAS,qBAAqB;AACvH;AAAA,QACJ,WAAc,UAAU,gCAAgC,QAAQ,IAAI,IAAI,IAAI;AACxE;AAAA,QACJ,OAAU;AACN,cAAI,MAAM,IAAI,MAAM,MAAM,IAAI,GAAG;AAChC,mBAAO;AAAA,UACZ;AAAA,QACA;AAAA,MACA;AAAA,IACA;AACC,WAAO;AAAA,EACR;AAEA,YAAU,WAAW,SAAS,OAAO,OAAO;AAC3C,QAAI,CAAC,UAAU,eAAe,OAAO,KAAK,GAAG;AAC5C,aAAO;AAAA,IACT;AACC,aAAS,IAAI,GAAG,IAAI,UAAU,sBAAsB,QAAQ,KAAK;AAChE,UAAI,OAAO,UAAU,sBAAsB,CAAC;AAC5C,UAAI,MAAM,IAAI,KAAK,MAAM,IAAI,GAAG;AAC/B,YAAI,CAAC,UAAU,SAAS,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG;AAClD,iBAAO;AAAA,QACX;AAAA,MACA;AAAA,IACA;AACC,WAAO;AAAA,EACR;AAMA,MAAI,eAAe,WAAW;AAAA,EAC9B;AAEA,eAAa,UAAU,cAAc,SAAS,MAAM;AACnD,QAAI,MAAM;AACV,QAAI,SAAS,IAAI,aAAa,KAAK,MAAM;AACzC,WAAO,CAAA;AACP,WAAO,CAAC,OAAO,SAAS;AACvB,YAAM,UAAU,YAAY,QAAQ,KAAK;AACzC,UAAI,IAAI,SAAS,UAAU,MAAM,IAAI,IAAI,SAAS,QAAQ;AACzD,aAAK,KAAK,IAAI,GAAG;AAAA,MACpB;AAAA,IACA;AACC,WAAO;AAAA,EACR;AAEA,eAAa,UAAU,UAAU,SAAU,WAAW,SAAS,MAAM;AACpE,aAAS,IAAI,GAAG,OAAO,GAAG;AACxB,UAAI,KAAK;AACT,UAAI,IAAI;AACR,aAAO,EAAE,UAAU,QAAQ,IAAI,IAAI,MAAM,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI;AAAA,IAC5E;AACC,aAAS,eAAe,OAAO;AAC9B,UAAI,IAAI,KAAK,MAAM,QAAM,IAAI;AAC7B,UAAI,IAAI,KAAK,OAAO,QAAQ,IAAE,QAAM,EAAE;AACtC,UAAI,IAAI,KAAK,MAAM,QAAQ,IAAE,OAAO,IAAE,EAAE;AACxC,UAAI,KAAK,KAAK,OAAO,QAAQ,IAAE,OAAO,IAAE,KAAK,KAAG,GAAI;AACpD,aAAO,KAAG,IAAI,GAAG,CAAC,IAAE,MAAI,IAAI,GAAE,CAAC,IAAE,MAAI,IAAI,GAAG,CAAC,IAAE,MAAI,IAAI,IAAI,CAAC;AAAA,IAC9D;AACC,QAAI,OAAO,KAAK,YAAY,IAAI;AAChC,QAAI,SAAS;AACb,aAASA,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AACrC,UAAI,SAAS,KAAKA,EAAC;AACnB,gBAAU,eAAe,SAAS,IAAE,UAAQ,eAAe,OAAO,IAAE;AACpE,gBAAU,OAAO,KAAK;AAAA,IACxB;AACC,WAAO;AAAA,EACR;AAEA,MAAI,uBAAuB,WAAW;AAAA,EACtC;AAEA,uBAAqB,UAAU,cAAc,SAAS,QAAQ;AAC7D,QAAI,MAAM,CAAA;AACV,QAAIA;AACJ,QAAI,YAAY,CAAA;AAChB,QAAI,SAAS,IAAI,aAAa,OAAO,KAAK,MAAM;AAChD,QAAI,CAAC,OAAO,cAAc,OAAO,WAAW,WAAW,GAAG;AACzD,UAAI,iBAAiB,OAAO,WAAW,OAAO,KAAK,MAAM;AAAA,IAC3D,OAAQ;AACN,UAAI,iBAAiB,OAAO,WAAW,OAAO,WAAW,CAAC,EAAE,IAAI;AAChE,UAAI,OAAO,WAAW,SAAS,GAAG;AACjC,aAAKA,KAAI,GAAGA,KAAI,OAAO,WAAW,QAAQA,MAAK;AAC9C,cAAI,UAAUA,EAAC,IAAI,OAAO,eAAe,OAAO,WAAWA,EAAC,EAAE,IAAI;AAAA,QACtE;AAAA,MACA;AAAA,IACA;AACC,QAAI,OAAQ,cAAe,aAAa;AACvC,UAAI,WAAY,IAAI,UAAS,EAAI,gBAAgB,IAAI,gBAAgB,iBAAiB;AAAA,IACxF;AACC,WAAO;AAAA,EACR;AAEA,MAAI,gBAAgB,WAAW;AAAA,EAC/B;AAEA,gBAAc,UAAU,cAAc,SAAS,QAAQ;AACtD,QAAI;AACJ,QAAI,SAAS,IAAI,aAAa,OAAO,KAAK,MAAM;AAChD,iBAAa,OAAO,WAAW,OAAO,KAAK,MAAM;AACjD,WAAO;AAAA,EACR;AAEA,gBAAc,UAAU,cAAc,SAAS,MAAM;AACpD,QAAI;AACJ,QAAI,SAAS,IAAI,aAAa,KAAK,MAAM;AACzC,WAAO,WAAU;AACjB,iBAAa,OAAO,YAAW;AAC/B,WAAO;AAAA,EACR;AAEoC;AACnC,YAAA,eAAuB;AACvB,YAAA,uBAA+B;AAC/B,YAAA,gBAAwB;AAAA,EACzB;AAMA,MAAI,UAAU,SAAU,QAAQ;AAE/B,SAAK,SAAS,UAAU,IAAI,kBAAiB;AAE7C,SAAK,QAAQ,CAAA;AAEb,SAAK,QAAQ,CAAA;AAEb,SAAK,QAAQ,CAAA;AAEb,SAAK,gBAAgB;AAErB,SAAK,iBAAiB;AAEtB,SAAK,cAAc;AAEnB,SAAK,gBAAgB;AAErB,SAAK,UAAU;AAEf,SAAK,YAAY;AAEjB,SAAK,YAAY;AAEjB,SAAK,YAAY;AAEjB,SAAK,UAAU;AAEf,SAAK,kBAAkB;AAEvB,SAAK,mBAAmB,CAAA;AAExB,SAAK,kBAAkB,CAAA;AAEvB,SAAK,6BAA6B;AAElC,SAAK,0BAA0B;AAE/B,SAAK,iBAAiB;AAEtB,SAAK,gBAAgB;AAErB,SAAK,QAAQ,CAAA;AAEb,SAAK,gBAAgB,CAAA;AAErB,SAAK,SAAS;AAEd,SAAK,WAAW;AAAA,EACjB;AAEA,UAAQ,UAAU,oBAAoB,SAAS,IAAI,MAAM,SAAS;AACjE,QAAI,OAAO,KAAK,aAAa,EAAE;AAC/B,QAAI,MAAM;AACT,UAAI,YAAY,CAAA;AAChB,WAAK,iBAAiB,KAAK,SAAS;AACpC,gBAAU,KAAK;AACf,gBAAU,OAAO;AACjB,gBAAU,OAAO;AACjB,WAAK,aAAa;AAClB,gBAAU,gBAAgB;AAC1B,gBAAU,aAAa;AACvB,gBAAU,gBAAgB;AAC1B,UAAI,SAAS;AACZ,YAAI,QAAQ,UAAW,WAAU,aAAa,QAAQ;AACtD,YAAI,QAAQ,cAAe,WAAU,gBAAgB,QAAQ;AAAA,MAChE;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,sBAAsB,SAAS,IAAI;AACpD,QAAI,QAAQ;AACZ,aAASA,KAAI,GAAGA,KAAI,KAAK,iBAAiB,QAAQA,MAAK;AACtD,UAAI,YAAY,KAAK,iBAAiBA,EAAC;AACvC,UAAI,UAAU,MAAM,IAAI;AACvB,gBAAQA;AAAA,MACX;AAAA,IACA;AACC,QAAI,QAAQ,IAAI;AACf,WAAK,iBAAiB,OAAO,OAAO,CAAC;AAAA,IACvC;AAAA,EACA;AAEA,UAAQ,UAAU,uBAAuB,SAAS,IAAI,MAAM,SAAS;AACpE,QAAI,OAAO,KAAK,aAAa,EAAE;AAC/B,QAAI,MAAM;AACT,UAAI,eAAe,CAAA;AACnB,WAAK,gBAAgB,KAAK,YAAY;AACtC,mBAAa,KAAK;AAClB,mBAAa,OAAO;AACpB,mBAAa,OAAO;AACpB,WAAK,aAAa;AAClB,mBAAa,aAAa;AAC1B,mBAAa,UAAU,CAAA;AACvB,UAAI,SAAS;AACZ,YAAI,QAAQ,UAAW,cAAa,aAAa,QAAQ;AAAA,MAC5D;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,yBAAyB,SAAS,IAAI;AACvD,QAAI,QAAQ;AACZ,aAASA,KAAI,GAAGA,KAAI,KAAK,gBAAgB,QAAQA,MAAK;AACrD,UAAI,eAAe,KAAK,gBAAgBA,EAAC;AACzC,UAAI,aAAa,MAAM,IAAI;AAC1B,gBAAQA;AAAA,MACX;AAAA,IACA;AACC,QAAI,QAAQ,IAAI;AACf,WAAK,gBAAgB,OAAO,OAAO,CAAC;AAAA,IACtC;AAAA,EACA;AAEA,UAAQ,UAAU,QAAQ,WAAW;AAEpC,QAAIE;AACJ,QAAID;AACJ,QAAI,sBAAsB;AAE1B,QAAI,KAAK,sBAAsB;AAC9B,UAAI,CAAC,KAAK,wBAAwB;AACjC;AAAA,MACH;AAAA,IACA;AAEC,WAAO,MAAM;AAEZ,UAAI,KAAK,qBAAqB,KAAK,kBAAiB,GAAI;AACvD,YAAI,KAAK,yBAAyB;AACjC;AAAA,QACJ,OAAU;AACN;AAAA,QACJ;AAAA,MACA,OAAS;AACN,YAAI,KAAK,mBAAmB;AAC3B,eAAK,kBAAiB;AAAA,QAC1B;AACG,QAAAC,OAAM,UAAU,YAAY,KAAK,QAAQ,mBAAmB;AAC5D,YAAIA,KAAI,SAAS,UAAU,qBAAqB;AAC/C,cAAI,KAAK,sBAAsB;AAC9B,gBAAI,KAAK,qBAAqBA,IAAG,GAAG;AACnC;AAAA,YACN,OAAY;AACN;AAAA,YACN;AAAA,UACA,OAAW;AACN;AAAA,UACL;AAAA,QACA,OAAU;AACN,cAAI;AAEJ,UAAAD,OAAMC,KAAI;AACV,qBAAYD,KAAI,SAAS,SAASA,KAAI,OAAOA,KAAI;AAEjD,eAAK,MAAM,KAAKA,IAAG;AAEnB,kBAAQ,UAAQ;AAAA,YACf,KAAK;AACJ,mBAAK,MAAM,KAAKA,IAAG;AACnB;AAAA,YACD,KAAK;AACJ,mBAAK,MAAM,KAAKA,IAAG;AACnB;AAAA,YACD,KAAK;AACJ,mBAAK,iBAAiB;AACtB,kBAAI,KAAK,MAAM,WAAW,GAAG;AAC5B,qBAAK,gBAAgB;AAAA,cAC5B;AAAA,YAGK;AACC,kBAAI,KAAK,QAAQ,MAAM,QAAW;AACjC,oBAAI,KAAK,WAAW,4BAA0B,WAAS,kCAAkC;AAAA,cAChG;AACM,mBAAK,QAAQ,IAAIA;AACjB;AAAA;AAEF,cAAI,KAAK,iBAAiB;AACzB,iBAAK,gBAAgBA,MAAKC,IAAG;AAAA,UAClC;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,cAAc,SAAU,IAAI;AAC7C,QAAI,OAAO,QAAQ,OAAO,QAAW;AACpC,YAAM;AAAA,IACR;AACC,QAAI,GAAG,cAAc,QAAW;AAC/B,YAAM;AAAA,IACR;AACC,QAAI,GAAG,eAAe,GAAG;AACxB,UAAI,KAAK,WAAW,uCAAqC,GAAG,YAAU,GAAG;AACzE,WAAK,OAAO,eAAc;AAC1B,aAAO;AAAA,IACT;AACC,QAAI,KAAK,WAAW,mCAAiC,GAAG,YAAU,GAAG;AAGrE,OAAG,YAAY;AACf,SAAK,OAAO,aAAa,EAAE;AAC3B,SAAK,OAAO,eAAc;AAE1B,QAAI,CAAC,KAAK,OAAO,eAAe;AAC/B,UAAI,KAAK,WAAW,4BAA4B;AAChD,aAAO;AAAA,IACT;AACC,WAAO;AAAA,EACR;AAIA,UAAQ,UAAU,eAAe,SAAS,IAAI,MAAM;AACnD,QAAI;AACJ,QAAI,CAAC,KAAK,YAAY,EAAE,GAAG;AAC1B;AAAA,IACF;AAGC,SAAK,MAAK;AAGV,QAAI,KAAK,kBAAkB,CAAC,KAAK,eAAe;AAC/C,WAAK,gBAAgB;AACrB,UAAI,KAAK,YAAa,MAAK,YAAW;AAAA,IACxC;AAEC,QAAI,KAAK,MAAM;AAId,UAAI,CAAC,KAAK,iBAAiB;AAC1B,aAAK,iBAAgB;AACrB,aAAK,kBAAkB;AAAA,MAC1B;AAGE,WAAK,kBAAiB;AAItB,UAAI,KAAK,WAAW,CAAC,KAAK,WAAW;AACpC,aAAK,YAAY;AACjB,aAAK,QAAQ,KAAK,SAAS;AAAA,MAC9B;AAGE,WAAK,eAAe,IAAI;AAGxB,UAAI,KAAK,kBAAkB;AAC1B,wBAAgB,KAAK;AACrB,aAAK,mBAAmB;AAAA,MAC3B,OAAS;AACN,wBAAgB,KAAK;AAAA,MACxB;AACE,UAAI,KAAK,OAAO,yBAAyB;AACxC,wBAAgB,KAAK,OAAO,wBAAwB,aAAa;AAAA,MACpE;AAAA,IACA,OAAQ;AACN,UAAI,KAAK,mBAAmB;AAG3B,wBAAgB,KAAK;AAAA,MACxB,OAAS;AAEN,wBAAgB;AAAA,MACnB;AAAA,IACA;AACC,QAAI,KAAK,MAAM;AACd,UAAI,KAAK,UAAU,CAAC,KAAK,UAAU;AAClC,aAAK,OAAO,KAAK,IAAI;AACrB,aAAK,WAAW;AAAA,MACnB;AAAA,IACA;AACC,QAAI,KAAK,MAAM;AACd,UAAI,KAAK,mBAAmB,CAAC,KAAK,eAAe;AAChD,aAAK,gBAAe;AACpB,aAAK,gBAAgB;AAAA,MACxB;AACE,UAAI,KAAK,cAAc;AACtB,aAAK,aAAa,KAAK,MAAM;AAAA,MAChC;AAAA,IACA;AAEC,QAAI,KAAK,OAAO,cAAc;AAC7B,UAAI,KAAK,WAAW,wCAAsC,GAAG,YAAU,kEAAgE,aAAa;AACpJ,WAAK,OAAO,eAAc;AAC1B,WAAK,OAAO,aAAY;AACxB,WAAK,OAAO,eAAe,IAAI;AAC/B,UAAI,KAAK,WAAW,iCAA+B,KAAK,2BAA0B,CAAE;AAAA,IACtF;AACC,WAAO;AAAA,EACR;AAEA,UAAQ,UAAU,UAAU,WAAW;AACtC,QAAIF,IAAG;AACP,QAAI,QAAQ,CAAA;AACZ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,SAAS,oBAAI,KAAK,sBAAsB,GAAE,QAAO;AAErD,QAAI,KAAK,MAAM;AACd,YAAM,UAAU;AAChB,YAAM,WAAW,KAAK,KAAK,KAAK;AAChC,YAAM,YAAY,KAAK,KAAK,KAAK;AACjC,YAAM,eAAgB,KAAK,KAAK,QAAQ;AACxC,UAAI,MAAM,gBAAgB,KAAK,KAAK,KAAK,MAAM;AAC9C,cAAM,oBAAoB,KAAK,KAAK,KAAK,KAAK;AAAA,MACjD;AACE,YAAM,gBAAgB,KAAK;AAC3B,YAAM,SAAU,KAAK,KAAK,QAAQ;AAClC,YAAM,SAAS,CAAA;AACf,YAAM,OAAO,KAAK,KAAK,KAAK,WAAW;AACvC,YAAM,SAAS,MAAM,OAAO,OAAO,KAAK,KAAK,iBAAiB;AAC9D,YAAM,UAAU,IAAI,KAAK,QAAM,KAAK,KAAK,KAAK,gBAAc,GAAI;AAChE,YAAM,WAAW,IAAI,KAAK,QAAM,KAAK,KAAK,KAAK,oBAAkB,GAAI;AACrE,YAAM,SAAS,CAAA;AACf,YAAM,cAAc,CAAA;AACpB,YAAM,cAAc,CAAA;AACpB,YAAM,iBAAiB,CAAA;AACvB,YAAM,iBAAiB,CAAA;AACvB,YAAM,aAAa,CAAA;AACnB,YAAM,cAAc,CAAA;AACpB,WAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,MAAM,QAAQA,MAAK;AAC5C,eAAO,KAAK,KAAK,MAAMA,EAAC;AACxB,sBAAc,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,CAAC;AAChD,gBAAQ,CAAA;AACR,cAAM,OAAO,KAAK,KAAK;AACvB,cAAM,KAAK,KAAK,KAAK;AACrB,cAAM,OAAO,KAAK,KAAK,KAAK;AAC5B,cAAM,aAAa,CAAA;AACnB,YAAI,KAAK,MAAM;AACd,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK,MAAM,QAAQ,KAAK;AAC5C,kBAAM,CAAA;AACN,kBAAM,WAAW,KAAK,GAAG;AACzB,gBAAI,OAAO,KAAK,KAAK,MAAM,CAAC,EAAE;AAC9B,gBAAI,YAAY,KAAK,KAAK,MAAM,CAAC,EAAE;AAAA,UACxC;AAAA,QACA;AACG,YAAI,KAAK,MAAM;AACd,gBAAM,QAAQ,KAAK,KAAK,KAAK;AAAA,QACjC;AACG,cAAM,UAAU,IAAI,KAAK,QAAM,KAAK,KAAK,gBAAc,GAAI;AAC3D,cAAM,WAAW,IAAI,KAAK,QAAM,KAAK,KAAK,oBAAkB,GAAI;AAChE,cAAM,iBAAiB,KAAK,KAAK;AACjC,cAAM,kBAAkB,MAAM;AAC9B,cAAM,QAAQ,KAAK,KAAK;AACxB,cAAM,kBAAkB,KAAK,KAAK;AAClC,cAAM,SAAS,KAAK,KAAK;AACzB,cAAM,SAAS,KAAK,KAAK;AACzB,cAAM,cAAc,KAAK,KAAK,SAAO,KAAG;AACxC,cAAM,eAAe,KAAK,KAAK,UAAQ,KAAG;AAC1C,cAAM,YAAY,KAAK,KAAK,KAAK;AACjC,cAAM,YAAY,KAAK,KAAK,KAAK,KAAK;AACtC,cAAM,WAAW,KAAK,KAAK,KAAK;AAChC,cAAM,mBAAmB,KAAK;AAC9B,cAAM,QAAQ,YAAY,SAAQ;AAClC,cAAM,OAAQ,KAAK,QAAQ,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,OAAO,GAAE;AACnG,cAAM,WAAY,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,oBAAoB,KAAK,KAAK,KAAK;AACrF,cAAM,aAAa,KAAK,QAAQ;AAChC,cAAM,OAAO,KAAK;AAClB,cAAM,UAAW,MAAM,OAAK,IAAE,MAAM,YAAW,MAAM;AACrD,YAAI,YAAY,WAAW;AAC1B,gBAAM,OAAO;AACb,gBAAM,YAAY,KAAK,KAAK;AAC5B,gBAAM,QAAQ,CAAA;AACd,gBAAM,MAAM,cAAc,YAAY,cAAa;AACnD,gBAAM,MAAM,gBAAgB,YAAY,gBAAe;AACvD,gBAAM,MAAM,cAAc,YAAY,cAAa;AAAA,QACvD,WAAc,YAAY,WAAW;AACjC,gBAAM,OAAO;AACb,gBAAM,YAAY,KAAK,KAAK;AAC5B,gBAAM,QAAQ,CAAA;AACd,gBAAM,MAAM,QAAQ,YAAY,SAAQ;AACxC,gBAAM,MAAM,SAAS,YAAY,UAAS;AAAA,QAC9C,WAAc,YAAY,cAAc;AACpC,gBAAM,OAAO;AACb,gBAAM,eAAe,KAAK,KAAK;AAAA,QACnC,WAAc,YAAY,UAAU;AAChC,gBAAM,OAAO;AACb,gBAAM,WAAW,KAAK,KAAK;AAAA,QAC/B,WAAc,YAAY,cAAc;AACpC,gBAAM,OAAO;AACb,gBAAM,eAAe,KAAK,KAAK;AAAA,QACnC,OAAU;AACN,gBAAM,OAAO;AACb,gBAAM,YAAY,KAAK,KAAK;AAAA,QAChC;AAAA,MACA;AAAA,IACA,OAAQ;AACN,YAAM,UAAU;AAAA,IAClB;AACC,UAAM,OAAO;AACb,QAAI,MAAM,WAAW,MAAM,QAAQ;AAClC,UAAI,MAAM,eAAe,MAAM,YAAY,SAAS,GAAG;AACtD,cAAM,QAAQ;AAAA,MACjB,WAAa,MAAM,eAAe,MAAM,YAAY,SAAS,GAAG;AAC7D,cAAM,QAAQ;AAAA,MACjB,OAAS;AACN,cAAM,QAAQ;AAAA,MACjB;AACE,WAAKA,KAAI,GAAGA,KAAI,MAAM,OAAO,QAAQA,MAAK;AACzC,YAAIA,OAAM,EAAG,OAAM,QAAQ;AAC3B,cAAM,QAAO,MAAM,OAAOA,EAAC,EAAE;AAAA,MAChC;AACE,YAAM,QAAQ;AACd,YAAM,QAAQ,KAAK,KAAK,kBAAkB,KAAI;AAC9C,YAAM,QAAQ;AAAA,IAChB;AACC,WAAO;AAAA,EACR;AAEA,UAAQ,UAAU,gCAAgC,SAAU,QAAQ;AACnE,QAAI,CAAC,QAAQ;AACZ;AAAA,IACF;AACC,QAAI,KAAK,kBAAkB;AAC1B,WAAK,mBAAmB,KAAK,IAAI,OAAO,SAAO,OAAO,aAAY,KAAK,gBAAgB;AAAA,IACzF,OAAQ;AACN,WAAK,mBAAmB,OAAO,SAAO,OAAO;AAAA,IAC/C;AAAA,EACA;AAEA,UAAQ,UAAU,iBAAiB,SAAS,MAAM;AACjD,QAAIA;AACJ,QAAI;AACJ,QAAI,CAAC,KAAK,wBAAyB;AAKnC,QAAI,KAAK,8BAA8B,KAAK,cAAc,MAAM;AAC/D,WAAKA,KAAI,GAAGA,KAAI,KAAK,iBAAiB,QAAQA,MAAK;AAClD,YAAI,WAAW,KAAK,iBAAiBA,EAAC;AACtC,eAAO,SAAS;AAChB,eAAO,KAAK,aAAa,KAAK,QAAQ,UAAU,KAAK,yBAAyB;AAG7E,cAAI,MAAM,WAAW,uCAAqC,SAAS,KAAI,iBAAe,KAAK,UAAU;AACrG,cAAI,SAAS,KAAK,eAAe,SAAS,IAAI,KAAK,YAAY,SAAS,aAAa;AACrF,cAAI,QAAQ;AACX,qBAAS,gBAAgB;AACzB,iBAAK;AAAA,UACV,OAAW;AAEN;AAAA,UACL;AAGI,cAAI,KAAK,aAAa,SAAS,eAAe,MAAM,QAAQ,KAAK,cAAc,KAAK,QAAQ,SAAS;AACpG,gBAAI,KAAK,WAAW,uCAAqC,SAAS,KAAG,mBAAiB,KAAK,IAAI,GAAE,KAAK,aAAW,SAAS,UAAU,IAAE,OAAK,KAAK,aAAW,KAAG,GAAG;AACjK,gBAAI,KAAK,WAAW,iCAA+B,KAAK,2BAA0B,CAAE;AACpF,gBAAI,KAAK,WAAW;AACnB,mBAAK,UAAU,SAAS,IAAI,SAAS,MAAM,SAAS,cAAc,QAAQ,KAAK,YAAa,QAAQ,KAAK,cAAc,KAAK,QAAQ,MAAM;AAAA,YAChJ;AAEK,qBAAS,gBAAgB;AACzB,gBAAI,aAAa,KAAK,iBAAiBA,EAAC,GAAG;AAE1C;AAAA,YACN;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAEC,QAAI,KAAK,cAAc,MAAM;AAG5B,WAAKA,KAAI,GAAGA,KAAI,KAAK,gBAAgB,QAAQA,MAAK;AACjD,YAAI,cAAc,KAAK,gBAAgBA,EAAC;AACxC,eAAO,YAAY;AACnB,eAAO,KAAK,aAAa,KAAK,QAAQ,UAAU,KAAK,yBAAyB;AAC7E,cAAI,MAAM,WAAW,yBAAuB,YAAY,KAAI,cAAY,KAAK,UAAU;AACvF,cAAI,SAAS,KAAK,UAAU,MAAM,KAAK,UAAU;AACjD,cAAI,QAAQ;AACX,iBAAK;AACL,wBAAY,QAAQ,KAAK,MAAM;AAAA,UACpC,OAAW;AACN,iBAAK,8BAA8B,KAAK,QAAQ,KAAK,UAAU,CAAC;AAChE;AAAA,UACL;AACI,cAAI,KAAK,aAAa,YAAY,eAAe,KAAK,KAAK,cAAc,KAAK,QAAQ,QAAQ;AAC7F,gBAAI,MAAM,WAAW,+BAA6B,YAAY,KAAG,iBAAe,KAAK,UAAU;AAC/F,gBAAI,KAAK,WAAW;AACnB,mBAAK,UAAU,YAAY,IAAI,YAAY,MAAM,YAAY,OAAO;AAAA,YAC1E;AACK,wBAAY,UAAU,CAAA;AACtB,gBAAI,gBAAgB,KAAK,gBAAgBA,EAAC,GAAG;AAE5C;AAAA,YACN;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAGA,UAAQ,UAAU,SAAS,SAAS,MAAM;AACxC,QAAI,SAAS,KAAK,SAAS,MAAM,IAAI;AACrC,WAAQ,OAAO,SAAS,OAAO,CAAC,IAAI;AAAA,EACtC;AAEA,UAAQ,UAAU,WAAW,SAAS,MAAM,aAAa;AACvD,QAAI,SAAS,CAAA;AACb,YAAQ,OAAO,KAAK,MAAM,MAAM,QAAQ,WAAW;AACnD,WAAO;AAAA,EACT;AAEA,UAAQ,SAAS,SAAS,MAAM,QAAQ,aAAa;AACnD,QAAI,KAAK,QAAQ,KAAK,QAAQ,KAAM,QAAO,KAAK,IAAI;AACpD,aAASC,QAAO,KAAK,OAAO;AAC1B,UAAI,OAAO,UAAU,YAAa;AAClC,cAAQ,OAAO,KAAK,KAAK,MAAMA,IAAG,GAAG,MAAM,QAAQ,WAAW;AAAA,IAClE;AAAA,EACA;AAEA,UAAQ,UAAU,sBAAsB,SAAS,UAAU;AAC1D,QAAI,QAAQ,KAAK,aAAa,QAAQ;AACtC,QAAI,OAAO;AACV,aAAO,MAAM;AAAA,IACf,OAAQ;AACN;AAAA,IACF;AAAA,EACA;AAEA,UAAQ,UAAU,iBAAiB,SAAS,UAAU,QAAQ;AAC7D,QAAI,QAAQ,KAAK,aAAa,QAAQ;AACtC,QAAI,SAAS,KAAK,UAAU,OAAO,MAAM;AACzC,WAAO;AAAA,EACR;AAGA,UAAQ,UAAU,qBAAqB,SAAU,IAAI,WAAW;AAC/D,QAAI,OAAO;AACX,QAAI,OAAO,KAAK,aAAa,EAAE;AAC/B,QAAI,CAAC,KAAK,gBAAiB,MAAK,kBAAkB;AAClD,aAASD,KAAI,KAAK,iBAAiBA,KAAI,WAAWA,MAAK;AACtD,cAAM,KAAK,cAAc,MAAMA,EAAC;AAAA,IAClC;AACC,QAAI,KAAK,WAAW,YAAU,KAAG,6BAA2B,YAAU,sBAAoB,OAAK,kBAAgB,KAAK,kBAAgB,GAAG;AACvI,SAAK,kBAAkB;AAAA,EACxB;AAEA,UAAQ,UAAU,QAAQ,WAAW;AACpC,SAAK,0BAA0B;AAC/B,SAAK,eAAe,KAAK;AAAA,EAC1B;AAEA,UAAQ,UAAU,OAAO,WAAW;AACnC,SAAK,0BAA0B;AAAA,EAChC;AAGA,UAAQ,UAAU,QAAQ,WAAW;AACpC,QAAI,KAAK,WAAW,4BAA4B;AAChD,SAAK,kBAAiB;AACtB,SAAK,eAAe,IAAI;AACxB,SAAK,OAAO,aAAY;AACxB,SAAK,OAAO,eAAe,IAAI;AAAA,EAChC;AAIA,UAAQ,UAAU,YAAY,SAAS,MAAM,QAAQ,MAAM;AAC1D,QAAI;AACJ,QAAI;AACJ,QAAI,cAAc;AAClB,QAAI,sBAAsB;AAC1B,QAAI,kBAAkB;AACtB,QAAI;AAEJ,QAAI,KAAK,QAAQ,WAAW,GAAG;AAC9B,UAAI,KAAK,WAAW,iDAA+C,IAAI,kBAAkB,GAAG,CAAC,IAAG,gBAAiB;AACjH,aAAO,EAAE,QAAQ,GAAG,MAAM,EAAC;AAAA,IAC7B;AAEC,SAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AACzC,eAAS,KAAK,QAAQ,CAAC;AACvB,UAAI,MAAM,GAAG;AACZ,0BAAkB;AAClB,oBAAY,OAAO;AAAA,MACtB,WAAa,OAAO,MAAM,OAAO,OAAO,WAAW;AAChD,0BAAkB,IAAE;AACpB;AAAA,MACH;AACE,UAAI,UAAU,OAAO,SAAS;AAC7B,8BAAsB;AAAA,MACzB;AAAA,IACA;AACC,QAAI,QAAQ;AACX,wBAAkB;AAAA,IACpB;AACC,WAAO,KAAK,QAAQ,eAAe,EAAE;AACrC,SAAK,aAAa;AAClB,WAAO,KAAK,QAAQ,eAAe,EAAE,gBAAgB,KAAK,QAAQ,eAAe,EAAE,MAAM;AAExF,UAAI,CAAC,KAAK,QAAQ,kBAAkB,CAAC,GAAG;AACvC;AAAA,MACH;AACE;AAAA,IACF;AACC,kBAAc,KAAK,QAAQ,eAAe,EAAE,SAAO,KAAK,QAAQ,eAAe,EAAE;AACjF,QAAI,KAAK,WAAW,iBAAe,SAAS,QAAO,MAAI,cAAY,KAAK,aAAW,eAAa,KAAK,KAAK,WAAS,YAAU,IAAI,kBAAkB,MAAM,SAAS,IAAG,kBAAgB,WAAW;AAChM,WAAO,EAAE,QAAQ,aAAa,MAAM,OAAK,UAAS;AAAA,EACnD;AAEA,UAAQ,UAAU,mBAAmB,SAAU,MAAM;AACpD,QAAI;AAEJ,QAAI,CAAC,KAAK,SAAS;AAClB,aAAO;AAAA,IACT;AACC,aAAS,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC;AAC7C,YAAQ,OAAO,MAAM,OAAO,YAAY,OAAO;AAAA,EAChD;AAGA,UAAQ,UAAU,OAAO,SAAS,MAAM,QAAQ;AAC/C,QAAI,OAAO,KAAK;AAChB,QAAI;AACJ,QAAI;AACJ,QAAIA;AACJ,QAAI,YAAY,EAAE,QAAQ,UAAU,MAAM,SAAQ;AAClD,QAAI,CAAC,KAAK,MAAM;AACf,YAAM;AAAA,IACR,OAAQ;AACN,WAAKA,KAAI,GAAGA,KAAE,KAAK,MAAM,QAAQA,MAAK;AACrC,eAAO,KAAK,MAAMA,EAAC;AACnB,YAAI,OAAO,KAAK,iBAAiB,IAAI,GAAG;AACvC;AAAA,QACJ;AACG,yBAAiB,KAAK,UAAU,MAAM,QAAQ,IAAI;AAClD,YAAI,eAAe,SAAS,UAAU,QAAQ;AAC7C,oBAAU,SAAS,eAAe;AAAA,QACtC;AACG,YAAI,eAAe,OAAO,UAAU,MAAM;AACzC,oBAAU,OAAO,eAAe;AAAA,QACpC;AAAA,MACA;AACE,UAAI,KAAK,WAAW,qBAAmB,IAAI,kBAAkB,UAAU,MAAM,CAAC,IAAE,kDAAgD,UAAU,MAAM;AAChJ,UAAI,UAAU,WAAW,UAAU;AAElC,oBAAY,EAAE,QAAQ,KAAK,mBAAmB,MAAM,EAAC;AAAA,MACxD,OAAS;AAIN,kBAAU,SAAS,KAAK,OAAO,wBAAwB,UAAU,MAAM;AAAA,MAC1E;AACE,UAAI,KAAK,WAAW,qEAAmE,UAAU,MAAM;AACvG,aAAO;AAAA,IACT;AAAA,EACA;AAEA,UAAQ,UAAU,QAAQ,SAAS,GAAG;AACrC,QAAI,YAAY;AAChB,WAAO,YAAY,KAAK,MAAM,UAAU,YAAY,EAAE,MAAM,QAAQ;AACnE,UAAI,QAAQ,KAAK,MAAM,SAAS;AAChC,UAAI,QAAQ,EAAE,MAAM,SAAS;AAC7B,UAAI,CAAC,UAAU,SAAS,OAAO,KAAK,GAAG;AACtC,eAAO;AAAA,MACV;AACE;AAAA,IACF;AACC,WAAO;AAAA,EACR;AAEoC;AACnC,YAAA,UAAkB;AAAA,EACnB;AAGA,UAAQ,UAAU,uBAAuB;AAEzC,UAAQ,UAAU,cAAc;AAMhC,UAAQ,UAAU,oBAAoB;AAEtC,UAAQ,UAAU,kBAAkB;AAEpC,UAAQ,UAAU,uBAAuB,SAASE,MAAK;AACtD,QAAID;AACJ,QAAI;AACJ,QAAI;AAGJ,QAAIC,KAAI,SAAS,QAAQ;AAKxB,MAAAD,OAAM,IAAI,UAAUC,KAAI,OAAK,KAAK,EAAEA,KAAI,IAAI;AAC5C,WAAK,cAAcD;AACnB,WAAK,MAAM,KAAKA,IAAG;AACnB,WAAK,MAAM,KAAKA,IAAG;AACnB,MAAAA,KAAI,QAAQC,KAAI;AAChB,MAAAD,KAAI,WAAWC,KAAI;AACnB,WAAK,OAAO,aAAaD,KAAI,QAAQ;AAGrC,WAAK,uBAAuBA,KAAI,QAAQA,KAAI;AAE5C,cAAQ,KAAK,OAAO,KAAKA,KAAI,QAAQA,KAAI,MAAM,OAAO,KAAK,eAAe;AAC1E,UAAI,OAAO;AAEV,aAAK,cAAc;AAEnB,eAAO;AAAA,MACV,OAAS;AAGN,YAAI,CAAC,KAAK,gBAAgB;AAIzB,eAAK,oBAAoBA,KAAI,QAAQA,KAAI;AAAA,QAC7C,OAAU;AAGN,eAAK,oBAAoB,KAAK,OAAO,qBAAoB;AAAA,QAC7D;AAEG,eAAO;AAAA,MACV;AAAA,IACA,OAAQ;AAEN,UAAIC,KAAI,SAAS,QAAQ;AAExB,aAAK,iBAAiB;AACtB,YAAI,KAAK,MAAM,WAAW,GAAG;AAC5B,eAAK,gBAAgB;AAAA,QACzB;AAAA,MACA;AAKE,eAAU,KAAK,OAAO,kBAAkB,KAAK,OAAO,gBAAe,IAAK;AACxE,UAAI,QAAQ;AAIX,aAAK,oBAAoB,KAAK,OAAO,eAAc;AACnD,eAAO;AAAA,MACV,OAAS;AAGN,YAAI,CAACA,KAAI,MAAM;AAGd,eAAK,oBAAoB,KAAK,OAAO,eAAc;AAAA,QACvD,OAAU;AAIN,cAAI,KAAK,gBAAgB;AACxB,iBAAK,oBAAoB,KAAK,OAAO,eAAc;AAAA,UACxD,OAAW;AACN,iBAAK,oBAAoB,KAAK,OAAO,YAAW,IAAKA,KAAI;AAAA,UAC9D;AAAA,QACA;AACG,eAAO;AAAA,MACV;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,oBAAoB,WAAY;AACjD,WAAQ,KAAK,gBAAgB;AAAA,EAC9B;AAEA,UAAQ,UAAU,wBAAwB,WAAY;AACrD,QAAID;AACJ,QAAI;AAGJ,IAAAA,OAAM,KAAK;AAEX,YAAQ,KAAK,OAAO,KAAKA,KAAI,QAAQA,KAAI,MAAM,OAAO,KAAK,eAAe;AAC1E,QAAI,OAAO;AACV,UAAI,MAAM,WAAW,mCAAmC;AAExD,WAAK,cAAc;AAEnB,aAAO;AAAA,IACT,OAAQ;AAIN,WAAK,oBAAoB,KAAK,OAAO,qBAAoB;AACzD,aAAO;AAAA,IACT;AAAA,EACA;AAEA,UAAQ,UAAU,uBAAuB,WAAW;AAEnD,WAAO,KAAK,OAAO,KAAK,KAAK,sBAAsB,MAAM,KAAK,eAAe;AAAA,EAC9E;AAEA,UAAQ,UAAU,oBAAoB,WAAW;AAEhD,SAAK,uBAAuB,KAAK,OAAO,YAAW;AAAA,EACpD;AAEA,UAAQ,UAAU,kBAAkB,SAASA,MAAKC,MAAK;AACtD,QAAI,KAAK,OAAO,cAAc;AAC7B,UAAID,KAAI,SAAS,QAAQ;AAExB,aAAK,OAAO,aAAaA,KAAI,QAAQ;AACrC,YAAI,KAAK,iBAAiB;AACzB,eAAK,OAAO,aAAaA,KAAI,OAAKA,KAAI,QAAQ;AAAA,QAClD;AAAA,MACA,OAAS;AAEN,aAAK,OAAO,aAAaA,KAAI,IAAI;AAAA,MACpC;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,MAAM,UAAU,IAAI,UAAU;AAChD,UAAQ,UAAU,SAAS,UAAU,IAAI,UAAU;AAEnD,UAAQ,UAAU,OAAO,SAAU,UAAU;AAC5C,QAAI,UAAU,YAAY;AACf,SAAK,IAAI,MAAM,EAAE,IAAI,eAAgB,QAAQ,UAAU,QAAQ,OAAO,CAAC,KAAM,MAAM,EACpF,IAAI,iBAAiB,CAAC,EACtB,IAAI,qBAAqB,QAAQ,UAAU,CAAC,MAAM,CAAC;AAC7D,QAAI,OAAO,KAAK,IAAI,MAAM;AAC1B,SAAK,IAAI,MAAM,EAAE,IAAI,aAAa,QAAQ,aAAa,GAAG,EACrD,IAAI,QAAQ,QAAQ,QAAQ,KAAG,EAAE,EACjC,IAAI,iBAAiB,CAAC,EACtB,IAAI,qBAAqB,CAAC,EAC1B,IAAI,YAAY,QAAQ,YAAY,CAAC,EACrC,IAAI,UAAW,QAAQ,QAAS,IAAI,GAAM,EAC1C,IAAI,UAAU,CAAE,KAAG,IAAI,GAAG,GAAG,GAAG,KAAG,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,EAC3D,IAAI,iBAAiB,CAAC;AAC3B,SAAK,IAAI,MAAM;AACf,WAAO;AAAA,EACR;AAEA,UAAQ,UAAU,WAAW,SAAU,UAAU;AAChD,QAAI,CAAC,KAAK,MAAM;AACf,WAAK,KAAK,QAAQ;AAAA,IACpB;AAEC,QAAI,UAAU,YAAY;AAC1B,YAAQ,QAAQ,QAAQ,SAAS;AACjC,YAAQ,SAAS,QAAQ,UAAU;AACnC,YAAQ,KAAK,QAAQ,MAAM,KAAK,KAAK,KAAK;AAC1C,YAAQ,OAAO,QAAQ,QAAQ;AAE/B,QAAI,OAAO,KAAK,KAAK,IAAI,MAAM;AAC/B,SAAK,KAAK,KAAK,gBAAgB,QAAQ,KAAG;AAC1C,SAAK,IAAI,MAAM,EAAE,IAAI,SAAQ,UAAU,oBAC/B,UAAU,qBACV,UAAU,oBAAoB,EACjC,IAAI,iBAAgB,CAAC,EACrB,IAAI,qBAAqB,CAAC,EAC1B,IAAI,YAAY,QAAQ,EAAE,EAC1B,IAAI,YAAY,QAAQ,YAAY,CAAC,EACrC,IAAI,SAAS,QAAQ,SAAS,CAAC,EAC/B,IAAI,mBAAmB,CAAC,EACxB,IAAI,UAAU,CAAC,EACf,IAAI,UAAU,CAAE,KAAG,IAAI,GAAG,GAAG,GAAG,KAAG,IAAI,GAAG,GAAG,GAAG,UAAU,CAAE,EAC5D,IAAI,SAAS,QAAQ,SAAS,EAAE,EAChC,IAAI,UAAU,QAAQ,UAAU,EAAE;AAEvC,QAAI,OAAO,KAAK,IAAI,MAAM;AAC1B,SAAK,IAAI,MAAM,EAAE,IAAI,iBAAiB,CAAC,EAClC,IAAI,qBAAqB,CAAC,EAC1B,IAAI,aAAa,QAAQ,aAAa,CAAC,EACvC,IAAI,YAAY,QAAQ,kBAAkB,CAAC,EAC3C,IAAI,YAAY,QAAQ,YAAY,KAAK;AAE9C,SAAK,IAAI,MAAM,EAAE,IAAI,WAAW,QAAQ,QAAQ,MAAM,EACjD,IAAI,QAAQ,QAAQ,QAAQ,8BAA8B;AAE/D,SAAK,IAAI,MAAM,EAAE,IAAI,qBAAqB,QAAQ,YAAY,OAAO;AAErE,QAAI,OAAO,KAAK,IAAI,MAAM;AAC1B,QAAI,UAAU,QAAQ,OAAK,aAAa,MAAM,OAAW;AACzD,QAAI,2BAA2B,IAAI,UAAU,QAAQ,OAAK,aAAa,EAAC;AACxE,6BAAyB,uBAAuB;AAChD,QAAI,aAAa;AACjB,aAAS,aAAa,UAAU,kBAAkB;AACjD,UAAI,QAAQ,UAAU,iBAAiB,SAAS;AAChD,eAASD,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACtC,YAAI,MAAM,QAAQ,QAAQ,IAAI,IAAI,IAAI;AACrC,uBAAa;AACb;AAAA,QACJ;AAAA,MACA;AAAA,IACA;AACC,YAAO,YAAU;AAAA,MAChB,KAAK;AACJ,aAAK,IAAI,MAAM,EAAE,IAAI,gBAAe,CAAC,EAAE,IAAI,WAAW,CAAE,GAAG,GAAG,CAAC,CAAE;AACjE,iCAAyB,IAAI,SAAS,QAAQ,KAAK,EAC/C,IAAI,UAAU,QAAQ,MAAM,EAC5B,IAAI,mBAAmB,MAAM,EAAE,EAC/B,IAAI,kBAAkB,MAAM,EAAE,EAC9B,IAAI,eAAe,CAAC,EACpB,IAAI,kBAAkB,QAAQ,OAAK,aAAa,EAChD,IAAI,SAAS,EAAI;AACrB,YAAI,QAAQ,wBAAwB;AACnC,cAAI,OAAO,IAAI,UAAU,QAAO;AAChC,eAAK,MAAM,IAAI,aAAa,QAAQ,sBAAsB,CAAC;AAC3D,mCAAyB,OAAO,IAAI;AAAA,QACxC,WAAc,QAAQ,yBAAyB;AAC3C,cAAI,OAAO,IAAI,UAAU,QAAO;AAChC,eAAK,MAAM,IAAI,aAAa,QAAQ,uBAAuB,CAAC;AAC5D,mCAAyB,OAAO,IAAI;AAAA,QACxC;AACG;AAAA,MACD,KAAK;AACJ,aAAK,IAAI,MAAM,EAAE,IAAI,WAAW,QAAQ,WAAW,CAAC;AACpD,iCAAyB,IAAI,iBAAiB,QAAQ,iBAAiB,CAAC,EACpE,IAAI,cAAc,QAAQ,cAAc,EAAE,EAC1C,IAAI,cAAc,QAAQ,cAAc,KAAG,EAAE;AACjD;AAAA,MACD,KAAK;AACJ,aAAK,IAAI,MAAM;AACf;AAAA,MACD,KAAK;AACJ,aAAK,IAAI,MAAM;AACf,gBAAQ,QAAQ,MAAI;AAAA,UACnB,KAAK;AACJ,qCAAyB,IAAI,aAAa,QAAQ,aAAa,aAAa,EACxE,IAAI,mBAAmB,QAAQ,mBAAmB,EAAE,EACpD,IAAI,wBAAwB,QAAQ,wBAAwB,EAAE;AAClE;AAAA;AAEF;AAAA,MACD,KAAK;AACJ,aAAK,IAAI,MAAM;AACf;AAAA,MACD,KAAK;AACJ,aAAK,IAAI,MAAM;AACf;AAAA,MACD;AACC,aAAK,IAAI,MAAM;AACf;AAAA;AAEF,QAAI,QAAQ,aAAa;AACxB,+BAAyB,OAAO,QAAQ,WAAW;AAAA,IACrD;AACC,QAAI,QAAQ,mBAAmB;AAC9B,cAAQ,kBAAkB,QAAQ,SAAU,GAAG;AAC9C,iCAAyB,OAAO,CAAC;AAAA,MACpC,CAAG;AAAA,IACH;AACC,SAAK,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,SAAU,IAAI,UAAU,SAAS,EAAC,EAAI,IAAI,SAAS,CAAG,CAAC;AACpF,QAAI,OAAO,KAAK,IAAI,MAAM;AAC1B,SAAK,IAAI,MAAM,EAAE,SAAS,wBAAwB;AAClD,SAAK,IAAI,MAAM,EAAE,IAAI,iBAAiB,CAAA,CAAE,EACnC,IAAI,iBAAiB,EAAE;AAC5B,SAAK,IAAI,MAAM,EAAE,IAAI,eAAe,CAAA,CAAE,EACjC,IAAI,qBAAqB,CAAA,CAAE,EAC3B,IAAI,4BAA4B,EAAE;AACvC,SAAK,IAAI,MAAM,EAAE,IAAI,iBAAiB,CAAA,CAAE;AACxC,SAAK,IAAI,MAAM,EAAE,IAAI,gBAAgB,CAAA,CAAE;AAEvC,SAAK,KAAK,KAAK,IAAI,MAAM,EAAE,IAAI,YAAY,QAAQ,EAAE,EAC5C,IAAI,oCAAoC,QAAQ,oCAAoC,CAAC,EACrF,IAAI,2BAA2B,QAAQ,2BAA2B,CAAC,EACnE,IAAI,uBAAuB,QAAQ,uBAAuB,CAAC,EAC3D,IAAI,wBAAwB,QAAQ,wBAAwB,CAAC;AACtE,SAAK,qBAAqB,IAAI;AAC9B,WAAO,QAAQ;AAAA,EAChB;AAEA,YAAU,IAAI,UAAU,cAAc,SAAS,SAAS;AACvD,QAAI,SAAS,WAAW,IAAI,WAAU;AACtC,WAAO,aAAa,WAAW;AAC/B,SAAK,MAAM,MAAM;AAAA,EAClB;AAEA,UAAQ,UAAU,YAAY,SAAU,UAAU,MAAM,UAAU;AACjE,QAAI,UAAU,YAAY,CAAA;AAC1B,QAAI,SAAS,CAAA;AACb,QAAI,OAAO,KAAK,aAAa,QAAQ;AACrC,QAAI,SAAS,KAAM;AAChB,WAAO,SAAS,KAAK,QAAQ;AAChC,WAAO,WAAW,KAAK,KAAK;AAC5B,WAAO,YAAY,KAAK,KAAK,KAAK;AAClC,WAAO,oBAAqB,QAAQ,2BAA2B,QAAQ,2BAA2B,IAAG;AACrG,WAAO,cAAc,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,OAAO,iBAAiB;AAC9E,WAAO,OAAO;AACd,WAAO,OAAO,KAAK;AACnB,WAAO,cAAc,OAAO;AAC5B,WAAO,WAAW,QAAQ,YAAY;AACtC,WAAO,MAAM,QAAQ,OAAO;AAC5B,WAAO,MAAM,QAAQ,OAAO;AAC5B,WAAO,UAAU,QAAQ,WAAW;AACpC,WAAO,aAAa,QAAQ,cAAc;AAC1C,WAAO,aAAa,QAAQ,cAAc;AAC1C,WAAO,iBAAiB,QAAQ,kBAAkB;AAClD,WAAO,iBAAiB,QAAQ,kBAAkB;AAClD,WAAO,uBAAuB,QAAQ,wBAAwB;AAC9D,WAAO,SAAS;AAChB,WAAO,aAAa,QAAQ;AAC5B,SAAK,QAAQ,KAAK,MAAM;AACxB,SAAK,gBAAgB,OAAO;AAC5B,SAAK,oBAAoB,OAAO;AAChC,QAAI,KAAK,cAAc,QAAW;AACjC,WAAK,YAAY,QAAQ;AAAA,IAC3B;AAEC,SAAK,eAAc;AAEnB,QAAI,OAAO,KAAK,uBAAuB,MAAM;AAC7C,SAAK,OAAO,IAAI;AAChB,SAAK,YAAW;AAEhB,SAAK,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,OAAK;AAC/C,SAAK,IAAI,MAAM,EAAE,OAAO,IAAI,WAAW,IAAI;AAC3C,WAAO;AAAA,EACR;AAEA,UAAQ,UAAU,yBAAyB,SAAS,QAAQ;AAC3D,QAAI,eAAe;AACnB,QAAI,OAAO;AACV,qBAAgB,KAAK;AAAA;AAErB,qBAAgB,KAAK;AAEtB,QAAI,OAAO,IAAI,UAAU,QAAO;AAChC,SAAK,IAAI,MAAM,EAAE,IAAI,mBAAmB,KAAK,cAAc;AAC3D,SAAK;AACL,QAAI,OAAO,KAAK,IAAI,MAAM;AAC1B,QAAI,OAAO,KAAK,aAAa,OAAO,QAAQ;AAC5C,SAAK,IAAI,MAAM,EAAE,IAAI,YAAY,OAAO,QAAQ,EAC3C,IAAI,SAAS,UAAU,8BAA8B;AAC1D,SAAK,IAAI,MAAM,EAAE,IAAI,uBAAwB,OAAO,OAAO,KAAK,aAAa,EAAE;AAC/E,SAAK,IAAI,MAAM,EAAE,IAAI,SAAS,UAAU,yBAAyB,UAAU,sBACjE,UAAU,kBAAkB,UAAU,mBACtC,UAAU,qBAAqB,EACpC,IAAI,eAAc,CAAC,EACnB,IAAI,sBAAqB,CAAC,EAC1B,IAAI,gBAAe,CAAC,EACpB,IAAI,mBAAkB,CAAC,OAAO,QAAQ,CAAC,EACvC,IAAI,eAAc,CAAC,OAAO,IAAI,CAAC,EAC/B,IAAI,gBAAe,CAAC,YAAY,CAAC,EACjC,IAAI,kCAAkC,CAAC,OAAO,MAAM,OAAO,GAAG,CAAC;AACpE,WAAO;AAAA,EACR;AAIA,UAAQ,UAAU,gBAAgB;AAGlC,UAAQ,UAAU,kBAAkB;AAGpC,UAAQ,UAAU,cAAc,WAAY;AAC3C,QAAIA;AACJ,QAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AACxC,SAAK,mBAAmB,KAAK,KAAK,KAAK;AACvC,SAAK,KAAK,KAAK,WAAW;AAC1B,SAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,MAAM,QAAQA,MAAK;AAC5C,aAAO,KAAK,KAAK,MAAMA,EAAC;AACxB,WAAK,KAAK,WAAW;AACrB,WAAK,KAAK,KAAK,WAAW;AAC1B,aAAO,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK;AACvD,WAAK,gBAAgB,CAAA;AACrB,aAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAK,cAAc,CAAA;AACnB,WAAK,oBAAoB,CAAA;AACzB,WAAK,2BAA2B,CAAA;AAChC,aAAO,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK;AACvD,WAAK,eAAe,CAAA;AACpB,aAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAK,gBAAgB,CAAA;AACrB,WAAK,gBAAgB,CAAA;AACrB,aAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,UAAI,MAAM;AACT,aAAK,gBAAgB,CAAA;AACrB,aAAK,iBAAiB,CAAA;AAAA,MACzB;AACE,aAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,UAAI,IAAI,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ,IAAI;AAC9C,UAAI,KAAK,GAAI,MAAK,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI;AAAA,IAC9C;AAAA,EACA;AAEA,UAAQ,mBAAmB,SAAS,MAAM,MAAM,OAAO,YAAY,YAAY;AAC9E,QAAI;AACJ,QAAI;AAEJ,QAAI;AACJ,QAAI;AACJ,aAAS,gBAAgB,OAAO,YAAY,OAAO;AAClD,WAAK,gBAAgB;AACrB,WAAK,0BAA0B;AAC/B,WAAK,OAAO;AACZ,WAAK,qBAAqB;AAC1B,WAAK,cAAc;AAAA,IACrB;AACC,QAAI,MAAM;AACT,WAAK,qBAAqB,CAAA;AAAA,IAC5B;AACC,QAAI,CAAC,KAAK,oBAAoB;AAC7B,WAAK,qBAAqB,CAAA;AAAA,IAC5B;AACC,SAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAClC,yBAAmB,MAAM,CAAC,EAAE,gBAAe,MAAK,MAAM,CAAC,EAAE;AACzD,0BAAoB,IAAI,gBAAgB,MAAM,CAAC,EAAE,eAAe,MAAM,CAAC,EAAE,yBAAyB,MAAM,CAAC,CAAC;AAC1G,UAAI,MAAM;AACT,aAAK,mBAAmB,gBAAgB,IAAI;AAAA,MAC/C;AACE,UAAI,CAAC,KAAK,mBAAmB,gBAAgB,GAAG;AAC/C,aAAK,mBAAmB,gBAAgB,IAAI;AAAA,MAC/C;AACE,WAAK,IAAE,GAAG,IAAG,WAAW,QAAQ,KAAK;AACpC,YAAI,WAAW,CAAC,EAAE,kBAAkB,MAAM,CAAC,EAAE,eAAe;AAC3D,4BAAkB,cAAc,WAAW,CAAC;AAC5C,4BAAkB,YAAY,OAAO;AAAA,QACzC;AAAA,MACA;AACE,UAAI,YAAY;AACf,aAAK,IAAE,GAAG,IAAG,WAAW,QAAQ,KAAK;AACpC,cAAI,WAAW,CAAC,EAAE,kBAAkB,MAAM,CAAC,EAAE,eAAe;AAC3D,8BAAkB,uBAAuB,WAAW,CAAC;AACrD,8BAAkB,qBAAqB,OAAO;AAC9C,8BAAkB,cAAc;AAAA,UACrC;AAAA,QACA;AAAA,MACA;AAAA,IACA;AACC,QAAI,CAAC,MAAM;AACV,WAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACvC,YAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,WAAW,CAAC,EAAE,WAAW,GAAG;AACtD,6BAAmB,WAAW,CAAC,EAAE,gBAAe;AAChD,8BAAoB,IAAI,gBAAgB,WAAW,CAAC,EAAE,eAAe,CAAC;AACtE,cAAI,CAAC,KAAK,mBAAmB,gBAAgB,GAAG;AAC/C,iBAAK,mBAAmB,gBAAgB,IAAI;AAAA,UACjD;AAAA,QACA;AAAA,MACA;AAAA,IACA,OAAQ;AACN,UAAI,YAAY;AACf,aAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACvC,cAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,WAAW,CAAC,EAAE,WAAW,GAAG;AACtD,+BAAmB,WAAW,CAAC,EAAE,gBAAe;AAChD,gCAAoB,IAAI,gBAAgB,WAAW,CAAC,EAAE,eAAe,CAAC;AACtE,8BAAkB,cAAc;AAChC,gBAAI,CAAC,KAAK,mBAAmB,gBAAgB,GAAG;AAC/C,mBAAK,mBAAmB,gBAAgB,IAAI;AAAA,YAClD;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,2BAA2B,SAAS,MAAM,QAAQ,eAAe,oBAAoB;AAC5F,QAAI;AACJ,QAAI;AACJ,WAAO,gBAAgB,CAAA;AACvB,SAAK,KAAK,oBAAoB;AAC7B,aAAO,cAAc,CAAC,IAAI,CAAA;AAC1B,aAAO,cAAc,CAAC,EAAE,gBAAgB,mBAAmB,CAAC,EAAE;AAC9D,aAAO,cAAc,CAAC,EAAE,0BAA0B,mBAAmB,CAAC,EAAE;AACxE,UAAI,iBAAiB,mBAAmB,CAAC,EAAE,oBAAoB;AAC9D,YAAI,mBAAmB,CAAC,EAAE,qBAAqB,GAAG;AACjD,6BAAmB,CAAC,EAAE,qBAAqB;AAAA,QAC/C;AACG,2BAAmB,CAAC,EAAE;AACtB,YAAI,mBAAmB,CAAC,EAAE,eAAe,mBAAmB,CAAC,EAAE,KAAK,QAAQ,SAAS,GAAG;AACvF,6BAAmB,CAAC,EAAE,sBAAsB,mBAAmB,CAAC,EAAE,KAAK,QAAQ,mBAAmB,CAAC,EAAE,WAAW,EAAE;AAAA,QACtH;AAAA,MACA;AACE,UAAI,mBAAmB,CAAC,EAAE,eAAe,mBAAmB,CAAC,EAAE,KAAK,QAAQ,SAAS,GAAG;AACvF,eAAO,cAAc,CAAC,EAAE,0BAA0B,mBAAmB,CAAC,EAAE,KAAK,QAAQ,mBAAmB,CAAC,EAAE,WAAW,EAAE;AAAA,MAC3H,OAAS;AACN,eAAO,cAAc,CAAC,EAAE,0BAA0B;AAAA,MACrD;AACE,UAAI,OAAO,cAAc,CAAC,EAAE,4BAA4B,GAAG;AAC1D,YAAI;AACJ,YAAI,mBAAmB,CAAC,EAAE,sBAAsB;AAC/C,wBAAc,mBAAmB,CAAC,EAAE;AAAA,QACxC,OAAU;AACN,wBAAc,mBAAmB,CAAC,EAAE;AAAA,QACxC;AACG,YAAI,OAAO,cAAc,CAAC,EAAE,0BAA0B,GAAG;AACxD,cAAI,OAAO,cAAc,CAAC,EAAE,0BAA0B,OAAO;AAC5D,qBAAS,OAAO,cAAc,CAAC,EAAE,2BAA2B,MAAI;AAAA,UACrE,OAAW;AACN,oBAAQ,OAAO,cAAc,CAAC,EAAE,0BAAwB;AAAA,UAC7D;AACI,cAAI,eAAe,SAAS,GAAG;AAC9B,mBAAO,cAAc,CAAC,EAAE,cAAc,YAAY,QAAQ,KAAK;AAAA,UACpE;AAAA,QACA,OAAU;AACN,cAAI,eAAe,YAAY,WAAW,GAAG;AAC5C,gBAAI,YAAY,kCAAkC,GAAG;AACpD,qBAAO,cAAc,CAAC,EAAE,cAAc,YAAY,QAAQ,YAAY,kCAAgC,CAAC;AAAA,YAC7G;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,eAAe,SAAU,MAAM,QAAQ,QAAQ;AACtD,QAAI,CAAC,QAAQ;AACZ;AAAA,IACF;AACC,QAAI,MAAM;AACT,aAAO,aAAa,KAAK,WAAW,MAAM;AAC1C,aAAO,aAAa,KAAK,kBAAkB,MAAM;AACjD,aAAO,iBAAiB,KAAK,sBAAsB,MAAM;AACzD,aAAO,iBAAiB,KAAK,sBAAsB,MAAM;AAAA,IAC3D,OAAQ;AACN,aAAO,aAAa;AACpB,aAAO,aAAa;AACpB,aAAO,iBAAiB;AACxB,aAAO,iBAAiB;AAAA,IAC1B;AAAA,EACA;AAGA,UAAQ,UAAU,mBAAmB,WAAW;AAC/C,QAAIA;AACJ,QAAI;AACJ,SAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,MAAM,QAAQA,MAAK;AAC5C,aAAO,KAAK,KAAK,MAAMA,EAAC;AACxB,WAAK,qBAAqB,IAAI;AAAA,IAChC;AAAA,EACA;AAEA,UAAQ,UAAU,uBAAuB,SAAS,MAAM;AACvD,QAAI;AACJ,QAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO;AAClE,QAAI,iBAAiB,aAAa,mBAAmB,iBAAiB;QAClE,yBAAyB,gBAAgB,yBAAyB,gBAAgB,iBAAkC,kBAAkB;AAE1I,SAAK,UAAU,CAAA;AACf,SAAK,mBAAmB;AACxB,SAAK,eAAe;AACpB,WAAO,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK;AACvD,WAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAO,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK;AACvD,WAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,WAAO,KAAK,KAAK,KAAK,KAAK;AAC3B,YAAQ,KAAK,KAAK,KAAK,KAAK;AAC5B,YAAQ,KAAK,KAAK,KAAK,KAAK;AAE5B,8BAA0B;AAC1B,qBAAiB;AACjB,8BAA0B;AAC1B,qBAAiB;AACjB,sBAAkB;AAClB,uBAAmB;AACnB,6BAAyB;AAEzB,YAAQ,iBAAiB,MAAM,MAAM,OAAO,KAAK;AAEjD,QAAI,OAAO,SAAS,aAAa;AAChC;AAAA,IACF;AAGC,SAAK,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,KAAK;AAC9C,UAAI,SAAS,CAAA;AACb,aAAO,SAAS;AAChB,aAAO,WAAW,KAAK,KAAK;AAC5B,aAAO,YAAY,KAAK,KAAK,KAAK;AAClC,aAAO,cAAc;AACrB,WAAK,QAAQ,CAAC,IAAI;AAElB,aAAO,OAAO,KAAK,aAAa,CAAC;AACjC,WAAK,gBAAgB,OAAO;AAE5B,UAAI,MAAM,GAAG;AACZ,sBAAc;AACd,0BAAkB;AAClB,eAAO,cAAc;AACrB,eAAO,kBAAkB;AACzB,+BAAuB,KAAK,kBAAkB,eAAe;AAC7D,0BAAkB;AAGlB,YAAI,kBAAkB,IAAI,KAAK,YAAY,QAAQ;AAElD,8BAAoB,KAAK,YAAY,kBAAgB,CAAC,IAAE;AAAA,QAC5D,OAAU;AAEN,8BAAoB;AAAA,QACxB;AAAA,MACA,OAAS;AACN,YAAI,IAAI,sBAAsB;AAE7B,iBAAO,cAAc;AACrB,iBAAO,kBAAkB;AAAA,QAC7B,OAAU;AAEN;AACA,iBAAO,cAAc;AAErB,4BAAkB;AAClB,cAAI,eAAe,kBAAmB;AAAA,eAG/B;AACN;AAEA,gBAAI,kBAAkB,IAAI,KAAK,YAAY,QAAQ;AAElD,kCAAoB,KAAK,YAAY,kBAAgB,CAAC,IAAE;AAAA,YAC9D,OAAY;AAEN,kCAAoB;AAAA,YAC1B;AAAA,UAEA;AACI,iBAAO,kBAAkB;AACzB,kCAAwB,KAAK,kBAAkB,eAAe;AAAA,QAClE;AAAA,MACA;AAEE,aAAO,oBAAoB,KAAK,yBAAyB,OAAO,eAAe,IAAE;AACjF,aAAO,cAAc,KAAK,QAAQ,OAAO,iBAAiB;AAC1D,aAAO,SAAS,KAAK,cAAc,OAAO,cAAY,CAAC,IAAI;AAC3D,yBAAmB,OAAO;AAG1B,UAAI,IAAI,yBAAyB;AAChC;AACA,YAAI,0BAA0B,GAAG;AAChC,oCAA0B;AAAA,QAC9B;AACG,mCAA2B,KAAK,cAAc,cAAc;AAAA,MAC/D;AACE,UAAI,IAAI,GAAG;AACV,aAAK,QAAQ,IAAE,CAAC,EAAE,WAAW,KAAK,cAAc,cAAc;AAC9D,aAAK,oBAAoB,KAAK,QAAQ,IAAE,CAAC,EAAE;AAC3C,eAAO,MAAM,KAAK,QAAQ,IAAE,CAAC,EAAE,MAAM,KAAK,QAAQ,IAAE,CAAC,EAAE;AAAA,MAC1D,OAAS;AACN,eAAO,MAAM;AAAA,MAChB;AACE,UAAI,MAAM;AACT,YAAI,KAAK,yBAAyB;AACjC;AACA,cAAI,0BAA0B,GAAG;AAChC,sCAA0B;AAAA,UAC/B;AACI,qCAA2B,KAAK,cAAc,cAAc;AAAA,QAChE;AACG,eAAO,MAAM,KAAK,QAAQ,CAAC,EAAE,MAAM,KAAK,eAAe,cAAc;AAAA,MACxE,OAAS;AACN,eAAO,MAAM,OAAO;AAAA,MACvB;AACE,UAAI,MAAM;AACT,YAAI,KAAK,KAAK,eAAe,eAAe,IAAI,GAAG;AAClD,iBAAO,UAAU;AACjB;AAAA,QACJ,OAAU;AACN,iBAAO,UAAU;AACjB,iBAAO,uBAAuB;AAAA,QAClC;AACG,YAAI,MAAM;AACT,cAAI,KAAK,QAAQ,gBAAgB,EAAE,eAAe,0BAA0B,IAAE,GAAG;AAChF,mBAAO,aAAa,KAAK,QAAQ,gBAAgB,EAAE;AACnD,sCAA0B,KAAK,QAAQ,gBAAgB,EAAE;AACzD;AAAA,UACL;AAAA,QACA;AAAA,MACA,OAAS;AACN,eAAO,UAAU;AAAA,MACpB;AACE,cAAQ,aAAa,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ,OAAO,MAAM;AACpE,UAAI,MAAM;AACT,eAAO,uBAAuB,KAAK,SAAS,CAAC;AAAA,MAChD,OAAS;AACN,eAAO,uBAAuB;AAAA,MACjC;AACE,UAAI,MAAM;AACT,YAAI,KAAK,QAAQ,gBAAgB,EAAE,eAAe,0BAA0B,GAAG;AAC9E,iBAAO,aAAa,KAAK,QAAQ,gBAAgB,EAAE;AACnD,oCAA0B,KAAK,QAAQ,gBAAgB,EAAE;AAAA,QAC7D;AAAA,MACA;AACE,UAAI,MAAM,SAAS,KAAK,MAAM,SAAS,GAAG;AACzC,gBAAQ,yBAAyB,MAAM,QAAQ,GAAG,KAAK,kBAAkB;AAAA,MAC5E;AAAA,IACA;AACC,QAAI,IAAE,GAAG;AACR,WAAK,QAAQ,IAAE,CAAC,EAAE,WAAW,KAAK,IAAI,KAAK,KAAK,KAAK,WAAW,KAAK,QAAQ,IAAE,CAAC,EAAE,KAAK,CAAC;AACxF,WAAK,oBAAoB,KAAK,QAAQ,IAAE,CAAC,EAAE;AAAA,IAC7C;AAAA,EACA;AAGA,UAAQ,UAAU,oBAAoB,WAAW;AAChD,QAAIA,IAAG,GAAG;AACV,QAAI,kCAAkC,yBAAyB,qBAAqB;AACpF,QAAI;AACJ,QAAIC,MAAK,MAAM,MAAM,MAAM;AAC3B,QAAI;AACJ,QAAI;AAEJ,QAAI,KAAK,SAAS,QAAW;AAC5B;AAAA,IACF;AAEC,WAAO,KAAK,gBAAgB,KAAK,MAAM,QAAQ;AAC9C,MAAAA,OAAM,KAAK,MAAM,KAAK,aAAa;AACnC,WAAK;AACL,UAAIA,KAAI,QAAQ,QAAQ;AACvB,eAAOA;AACP,aAAKD,KAAI,GAAGA,KAAI,KAAK,MAAM,QAAQA,MAAK;AACvC,iBAAO,KAAK,MAAMA,EAAC;AACnB,iBAAO,KAAK,aAAa,KAAK,KAAK,QAAQ;AAC3C,iBAAO,KAAK,YAAY,KAAK,KAAK,QAAQ;AAC1C,cAAI,KAAK,KAAK,QAAQ,UAAU,uBAAuB;AACtD,+CAAmC,KAAK,KAAK;AAAA,UAClD,OAAW;AACN,+CAAoC,OAAO,KAAK,mCAAkC;AAAA,UACvF;AACI,cAAI,KAAK,KAAK,QAAQ,UAAU,sBAAsB;AACrD,sCAA0B,KAAK,KAAK;AAAA,UACzC,OAAW;AACN,sCAA2B,OAAO,KAAK,0BAA0B;AAAA,UACtE;AACI,cAAI,KAAK,KAAK,QAAQ,UAAU,uBAAuB;AACtD,kCAAsB,KAAK,KAAK;AAAA,UACrC,OAAW;AACN,kCAAuB,OAAO,KAAK,sBAAsB;AAAA,UAC9D;AACI,cAAI,KAAK,KAAK,QAAQ,UAAU,wBAAwB;AACvD,mCAAuB,KAAK,KAAK;AAAA,UACtC,OAAW;AACN,mCAAwB,OAAO,KAAK,uBAAuB;AAAA,UAChE;AACI,eAAK,gBAAgB;AAErB,cAAI,KAAK,MAAM,SAAS,GAAG;AAC1B,oBAAQ,iBAAiB,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK;AAAA,UAC3F;AACI,eAAK,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACvC,gBAAI,OAAO,KAAK,MAAM,CAAC;AACvB,iBAAK,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACvC,uBAAS,CAAA;AACT,qBAAO,cAAc,KAAK;AAC1B,qBAAO,iBAAiB,KAAK;AAC7B,mBAAK;AACI,qBAAO,SAAS,KAAK,QAAQ;AACtC,mBAAK,qBAAqB,KAAK,QAAQ;AACvC,mBAAK,QAAQ,KAAK,MAAM;AACxB,qBAAO,WAAW,KAAK,KAAK;AAC5B,qBAAO,YAAY,KAAK,KAAK,KAAK;AAClC,qBAAO,oBAAoB,mCAAiC;AAC5D,qBAAO,cAAc,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,OAAO,iBAAiB;AAC9E,qBAAO,OAAO;AACd,kBAAI,KAAK,QAAQ,UAAU,iBAAiB;AAC3C,uBAAO,OAAO,KAAK,YAAY,CAAC;AAAA,cACvC;AACM,mBAAK,gBAAgB,OAAO;AAC5B,qBAAO,WAAW;AAClB,kBAAI,KAAK,QAAQ,UAAU,qBAAqB;AAC/C,uBAAO,WAAW,KAAK,gBAAgB,CAAC;AAAA,cAC/C;AACM,mBAAK,oBAAoB,OAAO;AAChC,kBAAI,KAAK,qBAAqB,IAAI,GAAG;AACpC,uBAAO,MAAM,KAAK,QAAQ,KAAK,QAAQ,SAAO,CAAC,EAAE,MAAI,KAAK,QAAQ,KAAK,QAAQ,SAAO,CAAC,EAAE;AAAA,cAChG,OAAa;AACN,oBAAI,KAAK,MAAM;AACd,yBAAO,MAAM,KAAK,KAAK;AAAA,gBAC/B,OAAc;AACN,yBAAO,MAAM;AAAA,gBACrB;AACO,qBAAK,oBAAoB;AAAA,cAChC;AACM,qBAAO,MAAM,OAAO;AACpB,kBAAI,KAAK,QAAQ,UAAU,uBAAuB;AACjD,uBAAO,MAAM,OAAO,MAAM,KAAK,+BAA+B,CAAC;AAAA,cACtE;AACM,6BAAe;AACf,kBAAI,KAAK,QAAQ,UAAU,kBAAkB;AAC5C,+BAAe,KAAK,aAAa,CAAC;AAAA,cACzC,WAAiB,MAAM,KAAM,KAAK,QAAQ,UAAU,uBAAwB;AACrE,+BAAe,KAAK;AAAA,cAC3B;AACM,qBAAO,UAAY,gBAAgB,KAAK,IAAO,QAAQ;AACvD,qBAAO,aAAc,gBAAgB,KAAK;AAC1C,qBAAO,aAAc,gBAAgB,KAAK;AAC1C,qBAAO,iBAAkB,gBAAgB,KAAK;AAC9C,qBAAO,iBAAkB,gBAAgB,KAAK;AAC9C,qBAAO,uBAAwB,eAAe;AAE9C,kBAAI,OAAQ,KAAK,KAAK,QAAQ,UAAU,6BAA8B,OAAO;AAC7E,kBAAI,OAAQ,KAAK,KAAK,QAAQ,UAAU,iCAAkC,OAAO;AACjF,kBAAI,MAAO,KAAK,QAAQ,UAAU,yBAA0B,OAAO;AACnE,kBAAI,MAAM;AACV,kBAAI,CAAC,MAAM;AACV,oBAAI,CAAC,MAAM;AACV,sBAAI,MAAM,GAAG;AACZ,0BAAM,KAAK;AAAA,kBACpB,OAAe;AACN,0BAAM;AAAA,kBACf;AAAA,gBACA,OAAc;AACN,wBAAM,KAAK;AAAA,gBACnB;AAAA,cACA,OAAa;AACN,sBAAM,KAAK,KAAK;AAAA,cACvB;AACM,kBAAI,MAAM,KAAK,MAAM,GAAG;AACvB,oBAAI,KAAK;AACR,yBAAO,SAAS,MAAM,KAAK;AAAA,gBACnC,OAAc;AACN,yBAAO,SAAS;AAAA,gBACxB;AAAA,cACA,OAAa;AACN,uBAAO,SAAS;AAAA,cACvB;AACM,kCAAoB,OAAO,SAAS,OAAO;AAC3C,kBAAI,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAChD,KAAK,KAAK,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,SAAS,GAAG;AAC9E,wBAAQ,yBAAyB,MAAM,QAAQ,OAAO,gBAAgB,KAAK,kBAAkB;AAAA,cACpG;AAAA,YACA;AAAA,UACA;AACI,cAAI,KAAK,MAAM;AACd,iBAAK,0BAA0B;AAC/B,gBAAI,eAAe,KAAK;AACxB,iBAAK,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,QAAQ,KAAK;AAC9C,8BAAgB,KAAK,KAAK,QAAQ,CAAC,EAAE;AACrC,uBAAS,KAAK,QAAQ,eAAa,CAAC;AACpC,qBAAO,aAAa,KAAK,KAAK,QAAQ,CAAC,EAAE;AAAA,YAC/C;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAMA,UAAQ,UAAU,YAAY,SAAS,MAAM,WAAW;AACvD,QAAI;AACJ,QAAI,SAAS,KAAK,QAAQ,SAAS;AAEnC,QAAI,CAAC,KAAK,MAAM;AACf,aAAO;AAAA,IACT;AAEC,QAAI,CAAC,OAAO,MAAM;AAEjB,aAAO,OAAO,IAAI,WAAW,OAAO,IAAI;AACxC,aAAO,cAAc;AACrB,WAAK,mBAAmB,OAAO;AAC/B,UAAI,MAAM,WAAW,wBAAsB,YAAU,gBAAc,KAAK,KAAK,WAAS,cAAY,OAAO,OAAK,cAAY,KAAK,kBAAgB,GAAG;AAAA,IACpJ,WAAY,OAAO,eAAe,OAAO,MAAM;AAE7C,aAAO;AAAA,IACT;AAGC,WAAM,MAAM;AACX,UAAI,QAAQ,KAAK,OAAO,aAAa,MAAM,OAAO,SAAS,OAAO,aAAa,KAAK;AACpF,UAAI,QAAQ,IAAI;AACf,iBAAS,KAAK,OAAO,QAAQ,KAAK;AAClC,YAAI,mBAAmB,OAAO,cAAc,OAAO,SAAS,OAAO,cAAc,OAAO;AACxF,YAAI,OAAO,OAAO,OAAO,eAAe,kBAAkB;AAGzD,cAAI,MAAM,WAAU,qBAAmB,YAAU,yBAAuB,OAAO,cAAY,eACzF,OAAO,SAAO,OAAO,cAAc,OAAO,aAAW,kBAAgB,OAAO,OAAO,OAAO,eAAa,iBAAe,OAAO,OAAK,GAAG;AAEvI,qBAAW;AAAA,YAAO,OAAO,KAAK;AAAA,YAAQ,OAAO;AAAA,YAC3B;AAAA,YAAQ,OAAO,SAAO,OAAO,cAAc,OAAO;AAAA,YAAW,OAAO,OAAO,OAAO;AAAA,UAAW;AAG/G,iBAAO,aAAa,OAAO,OAAO,OAAO;AACzC,eAAK,OAAO,eAAc;AAE1B,iBAAO,cAAc,OAAO;AAE5B,iBAAO;AAAA,QACX,OAAU;AAGN,cAAI,qBAAqB,EAAG,QAAO;AAEnC,cAAI,MAAM,WAAU,qBAAmB,YAAU,iCAA+B,OAAO,cAAY,eACjG,OAAO,SAAO,OAAO,cAAc,OAAO,aAAW,iBAAe,mBAAiB,iBAAe,OAAO,OAAK,GAAG;AAErH,qBAAW;AAAA,YAAO,OAAO,KAAK;AAAA,YAAQ,OAAO;AAAA,YAC3B;AAAA,YAAQ,OAAO,SAAO,OAAO,cAAc,OAAO;AAAA,YAAW;AAAA,UAAgB;AAC/F,iBAAO,eAAe;AAGtB,iBAAO,aAAa;AACpB,eAAK,OAAO,eAAc;AAAA,QAG9B;AAAA,MACA,OAAS;AACN,eAAO;AAAA,MACV;AAAA,IACA;AAAA,EACA;AAGA,UAAQ,UAAU,gBAAgB,SAAS,MAAM,WAAW;AAC3D,QAAI,SAAS,KAAK,QAAQ,SAAS;AACnC,QAAI,OAAO,MAAM;AAChB,WAAK,mBAAmB,OAAO;AAC/B,aAAO,OAAO;AACd,aAAO,cAAc;AACrB,aAAO,OAAO;AAAA,IAChB,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAEA,UAAQ,UAAU,6BAA6B,WAAW;AACzD,WAAO,KAAK;AAAA,EACb;AAGA,UAAQ,UAAU,YAAY,WAAW;AACxC,QAAIA;AACJ,QAAI,SAAS;AACb,SAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,MAAM,QAAQA,MAAK;AAC5C,UAAI,OAAO,KAAK,KAAK,MAAMA,EAAC;AAC5B,UAAIA,KAAE,GAAG;AACR,kBAAQ;AAAA,MACX;AACE,gBAAU,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,CAAC,EAAE;IAChD;AACC,WAAO;AAAA,EACR;AAGA,UAAQ,UAAU,cAAc,SAAS,IAAI;AAC5C,QAAIA;AACJ,QAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,KAAK,KAAM,QAAO;AAC1C,SAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,KAAK,MAAM,QAAQA,MAAK;AACjD,UAAI,OAAO,KAAK,KAAK,KAAK,MAAMA,EAAC;AACjC,UAAI,KAAK,YAAY,GAAI,QAAO;AAAA,IAClC;AACC,WAAO;AAAA,EACR;AAGA,UAAQ,UAAU,eAAe,SAAS,IAAI;AAC7C,QAAI,KAAK,SAAS,QAAW;AAC5B,aAAO;AAAA,IACT;AACC,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,MAAM,QAAQ,KAAK;AAChD,UAAI,OAAO,KAAK,KAAK,MAAM,CAAC;AAC5B,UAAI,KAAK,KAAK,YAAY,GAAI,QAAO;AAAA,IACvC;AACC,WAAO;AAAA,EACR;AAGA,UAAQ,UAAU,gBAAgB;AAElC,UAAQ,UAAU,kBAAkB,WAAW;AAC9C,QAAI,QAAQ,KAAK;AACjB,QAAI,gBAAgB,KAAK;AACzB,QAAIA,IAAG;AACP,QAAI;AACJ,QAAI,OAAO,KAAK;AAChB,QAAI,SAAS,QAAQ,SAAS,OAAW;AACzC,QAAI,KAAK,SAAS,OAAW;AAC7B,QAAI,KAAK,SAAS,OAAW;AAC7B,SAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,WAAW,QAAQA,MAAK;AACjD,aAAO,CAAA;AACP,WAAK,KAAK,KAAK,KAAK,WAAWA,EAAC,EAAE;AAClC,YAAM,KAAK,EAAE,IAAI;AACjB,WAAK,SAAS,CAAA;AACd,WAAK,OAAO,KAAK,KAAK,WAAWA,EAAC,EAAE;AACpC,UAAI,KAAK,KAAK,WAAWA,EAAC,EAAE,mBAAmB,GAAG;AACjD,aAAK,aAAa,KAAK,KAAK,YAAY,KAAK,KAAK,WAAWA,EAAC,EAAE,mBAAiB,CAAC;AAAA,MACrF;AACE,UAAI,KAAK,KAAK,WAAWA,EAAC,EAAE,WAAW;AACtC,aAAK,OAAO,KAAK,KAAK,WAAWA,EAAC,EAAE;AAAA,MACvC,OAAS;AACN,aAAK,OAAO;AAAA,MACf;AACE,WAAK,eAAe,KAAK,KAAK,WAAWA,EAAC,EAAE;AAC5C,WAAK,mBAAmB,KAAK,KAAK,WAAWA,EAAC,EAAE;AAChD,WAAK,gBAAgB,KAAK,KAAK,WAAWA,EAAC,EAAE;AAAA,IAC/C;AACC,QAAI,KAAK,MAAM;AACd,WAAKA,KAAI,GAAGA,KAAI,KAAK,KAAK,MAAM,QAAQA,MAAK;AAC5C,uBAAe,CAAA;AACf,qBAAa,KAAK,KAAK,KAAK,MAAMA,EAAC,EAAE;AACrC,qBAAa,aAAa,KAAK,KAAK,MAAMA,EAAC,EAAE;AAC7C,qBAAa,OAAO,KAAK,KAAK,MAAMA,EAAC,EAAE;AACvC,sBAAc,aAAa,EAAE,IAAI;AAAA,MACpC;AAAA,IACA;AACC,QAAI,KAAK,MAAM;AACd,WAAIA,KAAI,GAAGA,KAAI,KAAK,KAAK,MAAM,QAAQA,MAAK;AAE3C,YAAI,UAAU,KAAK,KAAK,MAAMA,EAAC;AAC/B,eAAO,MAAM,QAAQ,OAAO;AAC5B,YAAI,QAAQ,yBAAyB,GAAG;AACvC,cAAI,KAAK,2DAA2D;AACpE,eAAK,SAAS,KAAK,KAAK,MAAM,QAAQ,uBAAqB,CAAC;AAAA,QAChE;AACG,gBAAO,QAAQ,qBAAmB;AAAA,UACjC,KAAK;AACL;AAAA,UACA,KAAK;AACL;AAAA,UACA,KAAK;AACL,gBAAI,KAAK,uDAAuD;AAChE;AAAA;AAED,aAAK,UAAU,CAAA;AACf,aAAK,OAAO;AACZ,aAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,QAAQ,KAAK;AAC5C,eAAK,QAAQ,CAAC,IAAI,CAAA;AAClB,eAAK,QAAQ,CAAC,EAAE,SAAS,QAAQ,QAAQ,CAAC,EAAE,gBAAgB,QAAQ;AACpE,cAAI,QAAQ,uBAAuB,GAAG;AACrC,iBAAK,QAAQ,CAAC,EAAE,UAAU,KAAK,KAAK,QAAQ,KAAK,KAAK;AAAA,UAC3D;AACI,eAAK,QAAQ,CAAC,EAAE,SAAS,QAAQ,QAAQ,CAAC,EAAE;AAC5C,eAAK,QAAQ,CAAC,EAAE,cAAc;AAC9B,eAAK,QAAQ,KAAK,QAAQ,CAAC,EAAE;AAAA,QACjC;AAAA,MACA;AAAA,IACA;AACC,QAAI,KAAK,MAAM;AACd,YAAM,KAAK,KAAK,OAAO,EAAE,UAAU;AAAA,IACrC;AACC,QAAI,KAAK,MAAM;AACd,WAAKA,KAAE,GAAGA,KAAG,KAAK,KAAK,WAAW,QAAQA,MAAK;AAC9C,YAAI,MAAM,KAAK,KAAK,WAAWA,EAAC;AAChC,aAAK,IAAE,GAAG,IAAE,IAAI,WAAW,QAAQ,KAAK;AACvC,gBAAM,IAAI,YAAY,EAAE,OAAO,KAAK,EAAC,MAAM,IAAI,MAAM,IAAI,IAAI,WAAW,CAAC,EAAC,CAAC;AAAA,QAC/E;AAAA,MACA;AAAA,IACA;AACC,QAAI,KAAK,MAAM;AACd,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,MAAM,QAAQ,KAAK;AAChD,YAAI,OAAO,KAAK,KAAK,MAAM,CAAC;AAC5B,aAAKA,KAAI,GAAGA,KAAI,KAAK,aAAa,QAAQA,MAAK;AAC9C,cAAI,cAAc,KAAK,aAAaA,EAAC;AACrC,iBAAO,MAAM,YAAY,EAAE;AAC3B,cAAI,CAAC,MAAM;AACV,mBAAO,cAAc,YAAY,EAAE;AAAA,UACxC;AACI,cAAI,MAAM;AACT,gBAAI,KAAK,eAAe,QAAW;AAClC,mBAAK,aAAa,CAAA;AAClB,mBAAK,WAAW,QAAQ,CAAA;AAAA,YAC9B;AACK,iBAAK,IAAI,GAAG,IAAI,YAAY,MAAM,QAAQ,KAAK;AAC9C,kBAAI,YAAY,YAAY,MAAM,CAAC;AACnC,kBAAI,UAAU,iBAAiB,KAAK,UAAU,iBAAe,IAAI,KAAK,KAAK,KAAK,MAAM,QAAQ;AAC7F,oBAAI,UAAU,KAAK,KAAK,KAAK,MAAM,UAAU,iBAAe,CAAC;AAC7D,qBAAK,WAAW,QAAQ,IAAI,IAAI;AAChC,qBAAK,WAAW,MAAM,KAAK,OAAO;AAAA,cACzC;AAAA,YACA;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,UAAU,SAAS,SAAS;AAC7C,QAAI;AACJ,QAAI;AAEJ,QAAI,CAAC,KAAK,MAAM;AACf,aAAO;AAAA,IACT;AAEE,WAAO,KAAK,MAAM,OAAO;AAC1B,QAAI,CAAC,KAAK,QAAQ,KAAK,MAAM;AAE5B,WAAK,OAAO,IAAI,WAAW,KAAK,IAAI;AACpC,WAAK,cAAc;AACnB,WAAK,iBAAiB,KAAK;AAC3B,UAAI,MAAM,WAAW,sBAAoB,UAAQ,cAAY,KAAK,OAAK,cAAY,KAAK,gBAAc,GAAG;AAAA,IAC3G,WAAY,KAAK,gBAAgB,KAAK,MAAM;AAE1C,aAAO;AAAA,IACT;AAIC,aAASA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AAC7C,UAAI,SAAS,KAAK,QAAQA,EAAC;AAC3B,UAAI,OAAO,gBAAgB,OAAO,QAAQ;AACzC;AAAA,MACH,OAAS;AACN,YAAI,QAAQ,KAAK,OAAO,aAAa,MAAM,OAAO,SAAS,OAAO,aAAa,KAAK;AACpF,YAAI,QAAQ,IAAI;AACf,mBAAS,KAAK,OAAO,QAAQ,KAAK;AAClC,cAAI,mBAAmB,OAAO,cAAc,OAAO,SAAS,OAAO,cAAc,OAAO;AACxF,cAAI,OAAO,SAAS,OAAO,eAAe,kBAAkB;AAG3D,gBAAI,MAAM,WAAU,mBAAiB,UAAQ,cAAYA,KAAE,yBAAuB,OAAO,cACxF,eAAa,OAAO,SAAO,OAAO,cAAc,OAAO,aAAW,kBAAgB,OAAO,SAAS,OAAO,eACzG,wBAAsB,OAAO,SAAO,sBAAoB,KAAK,OAAK,GAAG;AAEtE,uBAAW;AAAA,cAAO,KAAK,KAAK;AAAA,cAAQ,KAAK;AAAA,cACvB;AAAA,cAAQ,OAAO,SAAO,OAAO,cAAc,OAAO;AAAA,cAAW,OAAO,SAAS,OAAO;AAAA,YAAW;AAGjH,mBAAO,aAAa,OAAO,SAAS,OAAO;AAC3C,iBAAK,OAAO,eAAc;AAE1B,iBAAK,eAAgB,OAAO,SAAS,OAAO;AAC5C,mBAAO,cAAc,OAAO;AAAA,UACjC,OAAW;AAGN,gBAAI,MAAM,WAAU,mBAAiB,UAAQ,cAAYA,KAAE,iCAA+B,OAAO,cAAY,eAC3G,OAAO,SAAO,OAAO,cAAc,OAAO,aAAW,iBAAe,mBACrE,wBAAsB,OAAO,SAAO,sBAAoB,KAAK,OAAK,GAAG;AAEtE,uBAAW;AAAA,cAAO,KAAK,KAAK;AAAA,cAAQ,KAAK;AAAA,cACvB;AAAA,cAAQ,OAAO,SAAO,OAAO,cAAc,OAAO;AAAA,cAAW;AAAA,YAAgB;AAC/F,mBAAO,eAAe;AACtB,iBAAK,eAAe;AAGpB,mBAAO,aAAa;AACpB,iBAAK,OAAO,eAAc;AAC1B,mBAAO;AAAA,UACZ;AAAA,QACA,OAAU;AACN,iBAAO;AAAA,QACX;AAAA,MACA;AAAA,IACA;AACC,QAAI,KAAK,gBAAgB,KAAK,MAAM;AAEnC,aAAO;AAAA,IACT,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAGA,UAAQ,UAAU,cAAc,SAAS,SAAS;AACjD,QAAI,OAAO,KAAK,MAAM,OAAO;AAC7B,QAAI,KAAK,MAAM;AACd,WAAK,iBAAiB,KAAK;AAC3B,WAAK,OAAO;AACZ,WAAK,cAAc;AACnB,eAASA,KAAI,GAAGA,KAAI,KAAK,QAAQ,QAAQA,MAAK;AAC7C,YAAI,SAAS,KAAK,QAAQA,EAAC;AAC3B,eAAO,cAAc;AAAA,MACxB;AACE,aAAO,KAAK;AAAA,IACd,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAGA,UAAQ,UAAU,eAAe,SAAS,UAAU;AACnD,aAAQA,MAAK,KAAK,OAAO;AACxB,UAAI,OAAO,KAAK,MAAMA,EAAC;AACvB,WAAK,QAAQ,KAAK,EAAE;AACpB,UAAI,YAAY,CAAC,KAAK,MAAM;AAC3B,iBAAS,IAAI;AACb,aAAK,OAAO;AACZ,aAAK,OAAO;AAAA,MACf;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,UAAU,SAAS,MAAM;AAC1C,aAAQA,MAAK,KAAK,OAAO;AACxB,UAAI,OAAO,KAAK,MAAMA,EAAC;AACvB,UAAI,KAAK,SAAS,MAAM;AACvB,eAAO,KAAK;AAAA,MACf;AAAA,IACA;AACC,WAAO;AAAA,EACR;AAEA,UAAQ,UAAU,iBAAiB,WAAW;AAC7C,QAAI,CAAC,KAAK,MAAM;AACf,aAAO;AAAA,IACT,OAAQ;AACN,aAAO,KAAK,KAAK,KAAK;AAAA,IACxB;AAAA,EACA;AAEA,UAAQ,UAAU,iBAAiB,WAAW;AAC7C,QAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,KAAK,MAAM;AAClC,aAAO;AAAA,IACT,OAAQ;AACN,aAAO,KAAK,QAAQ,KAAK,KAAK,KAAK,OAAO;AAAA,IAC5C;AAAA,EACA;AAEA,UAAQ,UAAU,4BAA4B,SAAS,UAAU;AAChE,QAAI,UAAU,YAAY,CAAA;AAC1B,QAAI,OAAO;AACX,QAAI,QAAQ,QAAQ;AACnB,aAAO,KAAK,QAAQ,QAAQ,MAAM;AAAA,IACpC,OAAQ;AACN,aAAO,KAAK,eAAc;AAAA,IAC5B;AACC,QAAI,QAAQ,KAAM,QAAO;AAEzB,QAAI,OAAO,IAAI,QAAO;AACtB,SAAK,kBAAkB;AAEvB,QAAI,eAAe,EAAE,MAAM,KAAK,MAAM,mBAAmB,KAAK,WAAW,MAAK;AAC9E,QAAI,KAAK,WAAW,MAAM;AACzB,mBAAa,QAAQ,KAAK,WAAW,KAAK;AAC1C,mBAAa,SAAS,KAAK,WAAW,KAAK;AAAA,IAC7C;AACC,QAAI,UAAU,KAAK,SAAS,YAAY;AACxC,QAAI,SAAS;AACZ,WAAK,UAAU,SAAS,KAAK,IAAI;AACjC,aAAO;AAAA,IACT,OAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACA;AAIA,UAAQ,UAAU,QAAQ,SAAS,WAAW;AAC7C,aAASA,KAAE,GAAGA,KAAE,KAAK,MAAM,QAAQA,MAAK;AACvC,WAAK,MAAMA,EAAC,EAAE,MAAM,SAAS;AAAA,IAC/B;AAAA,EACA;AAEA,UAAQ,UAAU,iBAAiB,SAAS,UAAU,cAAc,SAAS;AAC5E,QAAI,OAAO,KAAK,aAAa,QAAQ;AACrC,QAAI,SAAS,KAAK,UAAU,MAAM,YAAY;AAC9C,QAAI,UAAU,MAAM;AACnB,WAAK,8BAA8B,KAAK,QAAQ,YAAY,CAAC;AAC7D,aAAO;AAAA,IACT;AAEC,QAAI,SAAS,WAAW,IAAI,WAAU;AACtC,WAAO,aAAa,WAAW;AAE/B,QAAI,OAAO,KAAK,uBAAuB,MAAM;AAC7C,SAAK,MAAM,MAAM;AAGjB,SAAK,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,OAAK;AAC/C,QAAI,MAAM,UAAU,0CAAwC,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW;AAC9F,WAAO,aAAa,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,sBAAsB,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW;AAEnG,QAAI,OAAO,IAAI,UAAU,QAAO;AAChC,SAAK,OAAO,OAAO;AACnB,SAAK,MAAM,MAAM;AACjB,WAAO;AAAA,EACR;AAGA,UAAQ,6BAA6B,SAAS,MAAM,MAAM,gBAAgB,iBAAiB;AAC1F,QAAIA;AAKJ,QAAI,MAAM,WAAW,mCAAmC;AAExD,QAAI,SAAS,IAAI,WAAU;AAC3B,WAAO,aAAa,WAAW;AAC/B,SAAK,MAAM,MAAM;AAGjB,QAAI,OAAO,KAAK,IAAI,MAAM;AAC1B,QAAI,gBAAgB;AACnB,WAAK,IAAI,MAAM,EAAE,IAAI,qBAAqB,cAAc;AAAA,IAC1D;AACC,SAAKA,KAAI,GAAGA,KAAI,KAAK,MAAM,QAAQA,MAAK;AACvC,WAAK,IAAI,MAAM,EAAE,IAAI,YAAY,KAAK,MAAMA,EAAC,EAAE,KAAK,QAAQ,EACvD,IAAI,oCAAoC,CAAC,EACzC,IAAI,2BAA2B,eAAe,EAC9C,IAAI,uBAAuB,CAAC,EAC5B,IAAI,wBAAwB,KAAG,EAAE;AAAA,IACxC;AACC,SAAK,MAAM,MAAM;AAEjB,WAAO,OAAO;AAAA,EAEf;AAEA,UAAQ,UAAU,OAAO,SAAS,MAAM;AACvC,QAAI,SAAS,IAAI,WAAU;AAC3B,WAAO,aAAa,WAAW;AAC/B,SAAK,MAAM,MAAM;AACjB,WAAO,KAAK,IAAI;AAAA,EACjB;AAEA,UAAQ,UAAU,YAAY,WAAW;AACxC,QAAI,SAAS,IAAI,WAAU;AAC3B,WAAO,aAAa,WAAW;AAC/B,SAAK,MAAM,MAAM;AACjB,WAAO,OAAO;AAAA,EACf;AAEA,UAAQ,UAAU,yBAAyB,WAAW;AACrD,QAAIA;AAGJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,KAAK,cAAc,MAAM;AAC5B,UAAI,KAAK,UAAU,+BAA+B;AAAA,IACpD;AACC,QAAI,CAAC,KAAK,4BAA4B;AACrC,WAAK,6BAA6B;AAClC,WAAK,iBAAiB;AACtB,WAAK,YAAW;AAAA,IAClB;AACC,eAAW,CAAA;AACX,SAAKA,KAAI,GAAGA,KAAI,KAAK,iBAAiB,QAAQA,MAAK;AAClD,UAAI,OAAO,IAAI,UAAU,QAAO;AAChC,WAAK,OAAO,KAAK,KAAK;AACnB,WAAK,MAAM,KAAK,KAAK,IAAI;AAC5B,aAAO,KAAK,aAAa,KAAK,iBAAiBA,EAAC,EAAE,EAAE;AACpD,WAAK,MAAM,KAAK,IAAI;AACpB,WAAK,MAAM,KAAK,IAAI;AACpB,YAAM,CAAA;AACN,UAAI,KAAK,KAAK,KAAK;AACnB,UAAI,OAAO,KAAK,iBAAiBA,EAAC,EAAE;AACpC,UAAI,SAAS,QAAQ,2BAA2B,KAAK,MAAM,MAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,KAAK,oBAAmB,QAAa,KAAK,KAAK,MAAMA,EAAC,EAAE,QAAQ,SAAO,IAAI,KAAK,KAAK,MAAMA,EAAC,EAAE,QAAQ,CAAC,EAAE,WAAU,CAAC;AAC7O,eAAS,KAAK,GAAG;AAAA,IACnB;AACC,WAAO;AAAA,EACR;AAOA,YAAU,IAAI,UAAU,cAAc,SAAS,QAAQ;AACtD,SAAK,QAAQ;AACb,QAAI,KAAK,OAAO,UAAU;AACzB,WAAK,QAAQ;AAAA,IACf;AACC,QAAI,KAAK,SAAS,QAAQ;AACzB,WAAK,QAAQ;AAAA,IACf;AACC,WAAO,IAAI,OAAO,SAAO,UAAQ,KAAK,IAAI;AAC1C,WAAO,IAAI,OAAO,SAAO,UAAQ,KAAK,IAAI;AAAA,EAC3C;AAEA,YAAU,QAAQ,UAAU,cAAc,SAAS,QAAQ;AAC1D,SAAK,QAAQ;AACb,cAAU,IAAI,UAAU,YAAY,KAAK,MAAM,MAAM;AACrD,WAAO,IAAI,OAAO,SAAO,aAAW,KAAK,OAAO;AAChD,WAAO,IAAI,OAAO,SAAO,WAAS,KAAK,KAAK;AAAA,EAC7C;AAEA,YAAU,IAAI,UAAU,QAAQ,SAAS,QAAQ;AAChD,SAAK,YAAY,MAAM;AAAA,EACxB;AAEA,YAAU,aAAa,UAAU,QAAQ,SAAS,QAAQ;AACzD,SAAK,YAAY,MAAM;AACvB,aAASA,KAAE,GAAGA,KAAE,KAAK,MAAM,QAAQA,MAAK;AACvC,UAAI,KAAK,MAAMA,EAAC,GAAG;AAClB,YAAI,cAAc,OAAO;AACzB,eAAO,UAAU;AACjB,aAAK,MAAMA,EAAC,EAAE,MAAM,MAAM;AAC1B,eAAO,SAAS;AAAA,MACnB;AAAA,IACA;AAAA,EACA;AAEA,UAAQ,UAAU,QAAQ,SAAS,QAAQ;AAC1C,WAAO,SAAS;AAChB,aAASA,KAAE,GAAGA,KAAE,KAAK,MAAM,QAAQA,MAAK;AACvC,UAAI,KAAK,MAAMA,EAAC,GAAG;AAClB,aAAK,MAAMA,EAAC,EAAE,MAAM,MAAM;AAAA,MAC7B;AAAA,IACA;AAAA,EACA;AAEA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,cAAU,QAAQ,UAAU,YAAY,KAAK,MAAM,MAAM;AACzD,WAAO,IAAI,OAAO,SAAO,oBAAkB,KAAK,aAAa;AAC7D,WAAO,IAAI,OAAO,SAAO,wBAAsB,KAAK,iBAAiB;AACrE,WAAO,IAAI,OAAO,SAAO,gBAAc,KAAK,SAAS;AACrD,WAAO,IAAI,OAAO,SAAO,eAAa,KAAK,QAAQ;AACnD,WAAO,IAAI,OAAO,SAAO,WAAS,KAAK,IAAI;AAC3C,WAAO,IAAI,OAAO,SAAO,cAAY,KAAK,UAAQ,EAAE;AACpD,WAAO,IAAI,OAAO,SAAO,aAAW,KAAK,OAAO,KAAK,IAAI,CAAC;AAC1D,WAAO,IAAI,OAAO,SAAO,oBAAkB,KAAK,aAAa;AAAA,EAC9D;AAEA,YAAU,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AACpD,cAAU,QAAQ,UAAU,YAAY,KAAK,MAAM,MAAM;AACzD,WAAO,IAAI,OAAO,SAAO,oBAAkB,KAAK,aAAa;AAC7D,WAAO,IAAI,OAAO,SAAO,wBAAsB,KAAK,iBAAiB;AACrE,WAAO,IAAI,OAAO,SAAO,eAAa,KAAK,QAAQ;AACnD,WAAO,IAAI,OAAO,SAAO,eAAa,KAAK,QAAQ;AACnD,WAAO,IAAI,OAAO,SAAO,cAAY,KAAK,UAAQ,EAAE;AACpD,WAAO,IAAI,OAAO,SAAO,aAAW,KAAK,OAAO,KAAK,IAAI,CAAC;AAC1D,WAAO,IAAI,OAAO,SAAO,YAAU,KAAK,KAAK;AAC7C,WAAO,IAAI,OAAO,SAAO,sBAAoB,KAAK,eAAe;AACjE,WAAO,IAAI,OAAO,SAAO,YAAU,KAAK,KAAK;AAC7C,WAAO,IAAI,OAAO,SAAO,aAAW,KAAK,MAAM;AAAA,EAChD;AAKA,MAAI,SAAS,CAAA;AAEb,SAAO,aAAa,SAAU,eAAe,SAAS;AAErD,QAAI,eAAgB,kBAAkB,SAAY,gBAAgB;AAClE,QAAI,OAAO,IAAI,QAAQ,OAAO;AAC9B,SAAK,kBAAmB,eAAe,QAAQ;AAC/C,WAAO;AAAA,EACR;AAEoC;AACnC,YAAA,aAAqB,OAAO;AAAA,EAC7B;;ACxiRO,MAAM,oBAAoB;AAAA,EACvB,8BAAc,IAAA;AAAA;AAAA;AAAA;AAAA,EAatB,cAAc,OAAe,aAAqB,YAAoB,GAAS;AAC7E,UAAM,WAAW,eAAe;AAChC,SAAK,QAAQ,IAAI,OAAO;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,KAAK,IAAA;AAAA,IAAI,CACtB;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,cAQE;AACA,UAAM,MAAM,KAAK,IAAA;AACjB,UAAM,WAAgC,CAAA;AAEtC,eAAW,CAAC,OAAO,OAAO,KAAK,KAAK,SAAS;AAC3C,eAAS,KAAK,IAAI;AAAA,QAChB,GAAG;AAAA,QACH,KAAK,MAAM,QAAQ;AAAA,MAAA;AAAA,IAEvB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,kBAA2B;AACzB,eAAW,WAAW,KAAK,QAAQ,OAAA,GAAU;AAC3C,UAAI,QAAQ,UAAU;AACpB,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,iBAA2B;AACzB,UAAM,cAAwB,CAAA;AAC9B,eAAW,CAAC,OAAO,OAAO,KAAK,KAAK,SAAS;AAC3C,UAAI,QAAQ,UAAU;AACpB,oBAAY,KAAK,KAAK;AAAA,MACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,QAAQ,MAAA;AAAA,EACf;AACF;AC5EO,MAAM,WAAW;AAAA,EACd;AAAA,EACR,6BAAa,IAAA;AAAA,EACb,UAAU;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,uBAAsC;AAAA,EACtC,uBAAsC;AAAA,EAE9C,YAAY,SAAiD,IAAI;AAC/D,SAAK,aAAaS,sBAAO;AACzB,SAAK,sBAAsB,IAAI,oBAAA;AAC/B,SAAK,kBAAkB,OAAO;AAG9B,UAAM,0BAA0B;AAChC,SAAK,qBAAqB,OAAO,iBAAiB;AAElD,SAAK,cAAA;AAAA,EACP;AAAA,EAEA,aAAa,QAA2B;AACtC,SAAK,qBAAqB,OAAO,iBAAiB,KAAK;AAAA,EACzD;AAAA,EAEQ,gBAAsB;AAC5B,SAAK,WAAW,UAAU,CAAC,UAAkB;AAC3C,cAAQ,MAAM,iBAAiB,KAAK;AACpC,WAAK,iBAAiB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC5C,WAAK,iBAAiB,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IAC9C;AAEA,SAAK,WAAW,UAAU,CAAC,SAAc;AACvC,WAAK,cAAc,KAAK,MAAM;AAC9B,WAAK,UAAU;AAGf,UAAI,KAAK,iBAAiB;AACxB,aAAK,gBAAA;AAAA,MACP;AAKA,WAAK,WAAW,MAAA;AAAA,IAClB;AAEA,SAAK,WAAW,YAAY,CAAC,SAAiB,OAAY,YAAmB;AAC3E,WAAK,eAAe,SAAS,OAAO;AAAA,IACtC;AAAA,EACF;AAAA,EAEQ,cAAc,QAAqB;AACzC,eAAW,SAAS,QAAQ;AAC1B,YAAM,YAAuB;AAAA,QAC3B,IAAI,MAAM;AAAA,QACV,MAAM,MAAM,SAAS,UAAU,UAAU;AAAA,QACzC,OAAO,MAAM;AAAA,QACb,WAAW,MAAM;AAAA,MAAA;AAGnB,UAAI,MAAM,SAAS,SAAS;AAC1B,kBAAU,QAAQ,MAAM,OAAO;AAC/B,kBAAU,SAAS,MAAM,OAAO;AAChC,kBAAU,cAAc,KAAK,oBAAoB,KAAK;AAAA,MACxD,WAAW,MAAM,SAAS,SAAS;AACjC,kBAAU,aAAa,MAAM,OAAO;AACpC,kBAAU,mBAAmB,MAAM,OAAO;AAC1C,kBAAU,cAAc,KAAK,oBAAoB,KAAK;AAAA,MACxD;AAEA,WAAK,OAAO,IAAI,MAAM,IAAI,SAAS;AAGnC,WAAK,WAAW,qBAAqB,MAAM,IAAI,OAAO;AAAA,QACpD,WAAW;AAAA;AAAA,MAAA,CACZ;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,eAAe,SAAiB,SAAsB;AAC5D,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,CAAC,MAAO;AAEZ,UAAM,YAAY,MAAM,aAAa;AACrC,eAAW,UAAU,SAAS;AAC5B,YAAM,eAAgB,OAAO,MAAM,MAAW;AAC9C,YAAM,WAAY,OAAO,WAAW,MAAW;AAE/C,UAAI,MAAM,SAAS,SAAS;AAC1B,YAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAQ,MAAM,mEAAmE;AAEjF;AAAA,QACF;AAGA,YAAI,KAAK,yBAAyB,MAAM;AACtC,eAAK,uBAAuB;AAAA,QAC9B;AACA,cAAM,YAAY,eAAe,KAAK;AAEtC,cAAM,QAAQ,IAAI,kBAAkB;AAAA,UAClC,MAAM,OAAO,UAAU,QAAQ;AAAA,UAC/B;AAAA,UACA;AAAA,UACA,MAAM,OAAO;AAAA,QAAA,CACd;AACD,aAAK,gBAAgB,QAAQ,KAAK;AAAA,MACpC,WAAW,MAAM,SAAS,WAAW,KAAK,iBAAiB;AAEzD,YAAI,KAAK,yBAAyB,MAAM;AACtC,eAAK,uBAAuB;AAAA,QAC9B;AACA,cAAM,YAAY,eAAe,KAAK;AAEtC,cAAM,QAAQ,IAAI,kBAAkB;AAAA,UAClC,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,MAAM,OAAO;AAAA,QAAA,CACd;AACD,aAAK,gBAAgB,QAAQ,KAAK;AAAA,MACpC;AAAA,IACF;AAEA,UAAM,OAAO,QAAQ,QAAQ,SAAS,CAAC,EAAE;AAEzC,SAAK,WAAW,mBAAmB,SAAS,OAAO,CAAC;AAAA,EACtD;AAAA,EAEQ,oBAAoB,OAAqC;AAC/D,QAAI;AACF,YAAM,YAAY,KAAK,WAAW,aAAa,MAAM,EAAE;AACvD,iBAAW,SAAS,UAAU,KAAK,KAAK,KAAK,KAAK,SAAS;AACzD,cAAMR,OAAM,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAC5D,YAAIA,MAAK;AACP,gBAAM,SAAS,IAAKS,WAAAA;AAAAA,YAClB;AAAA,YACA;AAAA,YACCA,sBAA0B;AAAA;AAAA,UAAA;AAE7B,UAAAT,KAAI,MAAM,MAAM;AAChB,iBAAO,IAAI,WAAW,OAAO,OAAO,MAAM,CAAC,CAAC,EAAE;AAAA,QAChD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,oCAAoC,KAAK;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,oBAAoB,OAAqC;AAC/D,QAAI;AACF,YAAM,YAAY,KAAK,WAAW,aAAa,MAAM,EAAE;AACvD,iBAAW,SAAS,UAAU,KAAK,KAAK,KAAK,KAAK,SAAS;AACzD,YAAI,MAAM,QAAQ,MAAM,MAAM;AAC5B,gBAAM,SAAS,IAAKS,sBAAe;AACnC,WAAC,MAAM,QAAQ,MAAM,MAAM,MAAM,MAAM;AACvC,iBAAO,IAAI,WAAW,OAAO,OAAO,MAAM,CAAC,CAAC,EAAE;AAAA,QAChD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,oCAAoC,KAAK;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoE;AAElE,WAAO,IAAI;AAAA,MACT;AAAA,QACE,OAAO,CAAC,eAAe;AACrB,eAAK,kBAAkB;AAAA,QACzB;AAAA,QACA,WAAW,CAAC,OAAO,eAAe;AAGhC,gBAAM,cAAc,WAAW,eAAe,KAAK;AACnD,eAAK,oBAAoB,cAAc,eAAe,WAAW;AAGjE,gBAAM,YAAY,IAAI,WAAW,KAAK;AACtC,eAAK,aAAa,SAAS;AAG3B,eAAK,WAAW,MAAA;AAAA,QAClB;AAAA,QACA,OAAO,YAAY;AAEjB,eAAK,WAAW,MAAA;AAIhB,gBAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,QACzD;AAAA,MAAA;AAAA;AAAA,MAGF;AAAA,QACE,eAAe,KAAK;AAAA,QACpB,MAAM,MAAM;AAAA;AAAA,MAAA;AAAA,IACd;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,oBAA2E;AACzE,UAAM,WAAW,MAAM,KAAK,KAAK,OAAO,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO;AAChF,QAAI,CAAC,SAAU,QAAO;AAEtB,WAAO,IAAI;AAAA,MACT;AAAA,QACE,OAAO,CAAC,eAAe;AACrB,eAAK,kBAAkB;AAAA,QACzB;AAAA,QACA,WAAW,CAAC,OAAO,eAAe;AAGhC,gBAAM,cAAc,WAAW,eAAe,KAAK;AACnD,eAAK,oBAAoB,cAAc,eAAe,WAAW;AAGjE,gBAAM,YAAY,IAAI,WAAW,KAAK;AACtC,eAAK,aAAa,SAAS;AAG3B,eAAK,WAAW,MAAA;AAAA,QAClB;AAAA,QACA,OAAO,MAAM;AACX,eAAK,WAAW,MAAA;AAAA,QAClB;AAAA,MAAA;AAAA;AAAA,MAGF;AAAA,QACE,eAAe,KAAK;AAAA,QACpB,MAAM,MAAM;AAAA,MAAA;AAAA,IACd;AAAA,EAEJ;AAAA,EAEA,aAAa,OAAyB;AACpC,UAAM,SAAS,MAAM;AACrB,WAAO,YAAY,KAAK;AACxB,SAAK,WAAW,aAAa,MAAM;AACnC,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,iBAAwC;AAC1C,WAAO,MAAM,KAAK,KAAK,OAAO,OAAA,CAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,SAAS,OAAO;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,iBAAwC;AAC1C,WAAO,MAAM,KAAK,KAAK,OAAO,OAAA,CAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,SAAS,OAAO;AAAA,EAChF;AAAA,EAEA,UAAgB;AACd,SAAK,YAAY,KAAA;AACjB,SAAK,aAAa;AAClB,SAAK,OAAO,MAAA;AACZ,SAAK,oBAAoB,MAAA;AACzB,SAAK,UAAU;AACf,SAAK,uBAAuB;AAC5B,SAAK,uBAAuB;AAAA,EAC9B;AACF;ACpSA,MAAM,gBAA0C;AAAA,EAC9C,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EAC3E,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EAC5E,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EAC/E,OAAO,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EACvE,OAAO,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EACvE,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAC9E;AAEA,MAAM,oBAA8C;AAAA,EAClD,GAAG,CAAC,OAAO,MAAO,IAAK;AAAA,EACvB,GAAG,CAAC,OAAO,MAAO,IAAK;AAAA,EACvB,KAAK,CAAC,OAAO,MAAO,GAAI;AAC1B;AAqBO,MAAM,eAAe;AAAA,EAClB,SAAS,IAAI,WAAW,CAAC;AAAA,EACzB,SAA2B;AAAA,EAC3B,cAAc;AAAA,EAEtB,KAAK,OAAgC;AACnC,SAAK,eAAe,KAAK;AACzB,SAAK,eAAA;AAEL,UAAM,SAAqB,CAAA;AAC3B,QAAI;AAEJ,QAAI,SAAS;AACb,WAAO,UAAU,KAAK,OAAO,SAAS,GAAG;AACvC,YAAM,SAAS,KAAK,YAAY,KAAK,QAAQ,MAAM;AACnD,UAAI,CAAC,QAAQ;AACX,kBAAU;AACV;AAAA,MACF;AAEA,UAAI,SAAS,OAAO,YAAY,KAAK,OAAO,QAAQ;AAClD;AAAA,MACF;AAEA,YAAM,aAAa,KAAK,OAAO,MAAM,QAAQ,SAAS,OAAO,SAAS;AACtE,YAAM,aAAa,KAAK,MAAO,OAAO,kBAAkB,MAAa,OAAO,UAAU;AAEtF,UAAI,CAAC,KAAK,QAAQ;AAChB,aAAK,SAAS;AAAA,UACZ,OAAO;AAAA,UACP,YAAY,OAAO;AAAA,UACnB,UAAU,OAAO;AAAA,UACjB,aAAa,OAAO;AAAA,UACpB,iBAAiB,OAAO;AAAA,QAAA;AAE1B,wBAAgB,KAAK;AAAA,MACvB;AAEA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,aAAa,KAAK;AAAA,QAClB;AAAA,MAAA,CACD;AAED,WAAK,eAAe;AACpB,gBAAU,OAAO;AAAA,IACnB;AAEA,QAAI,SAAS,GAAG;AACd,WAAK,SAAS,KAAK,OAAO,MAAM,MAAM;AAAA,IACxC;AAEA,WAAO,EAAE,QAAQ,QAAQ,cAAA;AAAA,EAC3B;AAAA,EAEA,QAAoB;AAClB,UAAM,EAAE,WAAW,KAAK,KAAK,IAAI,WAAW,CAAC,CAAC;AAC9C,UAAM,YAAY,KAAK;AACvB,SAAK,SAAS,IAAI,WAAW,CAAC;AAC9B,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,8CAA8C,UAAU,MAAM;AAAA,IAC7E;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,OAAyB;AAC9C,QAAI,MAAM,WAAW,GAAG;AACtB;AAAA,IACF;AACA,UAAM,WAAW,IAAI,WAAW,KAAK,OAAO,SAAS,MAAM,MAAM;AACjE,aAAS,IAAI,KAAK,QAAQ,CAAC;AAC3B,aAAS,IAAI,OAAO,KAAK,OAAO,MAAM;AACtC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEQ,iBAAuB;AAC7B,QAAI,SAAS;AACb,WAAO,KAAK,OAAO,SAAS,UAAU,IAAI;AACxC,UACE,KAAK,OAAO,MAAM,MAAM,MACxB,KAAK,OAAO,SAAS,CAAC,MAAM,MAC5B,KAAK,OAAO,SAAS,CAAC,MAAM,IAC5B;AACA,cAAM,OAAO,KAAK,qBAAqB,KAAK,OAAO,SAAS,SAAS,GAAG,SAAS,EAAE,CAAC;AACpF,cAAM,QAAQ,OAAO;AACrB,YAAI,SAAS,SAAS,KAAK,OAAO,QAAQ;AACxC,oBAAU;AACV;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AACA,QAAI,SAAS,GAAG;AACd,WAAK,SAAS,KAAK,OAAO,MAAM,MAAM;AAAA,IACxC;AAAA,EACF;AAAA,EAEQ,YACN,QACA,QAOO;AACP,QAAI,SAAS,KAAK,OAAO,QAAQ;AAC/B,aAAO;AAAA,IACT;AACA,QAAI,OAAO,MAAM,MAAM,SAAU,OAAO,SAAS,CAAC,KAAK,KAAK,SAAU,KAAM;AAC1E,aAAO;AAAA,IACT;AAEA,UAAM,eAAgB,OAAO,SAAS,CAAC,KAAK,MAAM,IAAK;AACvD,UAAM,aAAc,OAAO,SAAS,CAAC,KAAK,MAAM,IAAK;AACrD,UAAM,gBAAiB,OAAO,SAAS,CAAC,KAAK,MAAM,IAAK;AACxD,UAAM,mBAAoB,OAAO,SAAS,CAAC,KAAK,MAAM,IAAK;AAC3D,UAAM,cAAe,OAAO,SAAS,CAAC,KAAK,MAAM,IAAK;AACtD,UAAM,eAAgB,OAAO,SAAS,CAAC,KAAK,MAAM,IAAK;AAEvD,UAAM,UAAU,KAAK,WAAW,WAAW;AAC3C,UAAM,QAAQ,KAAK,SAAS,SAAS;AACrC,QAAI,CAAC,WAAW,CAAC,OAAO;AACtB,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,kBAAkB,OAAO,IAAI,eAAe,KAAK;AACpE,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,GAAG,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK;AACpD,UAAM,cAAc,cAAc,UAAU,IAAI,YAAY,KAAK;AACjE,QAAI,gBAAgB,MAAM;AACxB,aAAO;AAAA,IACT;AAEA,UAAM,kBAAkB,KAAK,mBAAmB,SAAS,KAAK;AAC9D,UAAM,YAAY,KAAK,mBAAmB,OAAO,aAAa,YAAY,UAAU;AACpF,QAAI,CAAC,aAAa,YAAY,IAAI;AAChC,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,gBAAgB,IAAI,IAAI;AAEzC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,eAAe;AAAA,MAC5B;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEQ,WAAW,MAAkC;AACnD,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAAA,EAEQ,SAAS,MAAgC;AAC/C,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAAA,EAEQ,mBAAmB,SAAsB,OAA0B;AACzE,QAAI,UAAU,GAAG;AACf,aAAO;AAAA,IACT;AACA,QAAI,UAAU,GAAG;AACf,aAAO;AAAA,IACT;AACA,WAAO,YAAY,IAAI,OAAO;AAAA,EAChC;AAAA,EAEQ,mBACN,OACA,aACA,YACA,SACQ;AACR,QAAI,eAAe,GAAG;AACpB,aAAO;AAAA,IACT;AAEA,QAAI,UAAU,GAAG;AACf,cAAS,KAAK,cAAc,MAAQ,aAAa,WAAW;AAAA,IAC9D;AAEA,WAAO,KAAK,MAAO,MAAM,cAAc,MAAQ,aAAa,OAAO;AAAA,EACrE;AAAA,EAEQ,qBAAqB,OAA2B;AACtD,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO;AAAA,IACT;AACA,aACK,MAAM,CAAC,KAAK,KAAK,QAAS,OAC1B,MAAM,CAAC,KAAK,KAAK,QAAS,OAC1B,MAAM,CAAC,KAAK,KAAK,QAAS,KAC3B,MAAM,CAAC,KAAK,KAAK;AAAA,EAEvB;AACF;AC5OO,MAAM,iBAAiB;AAAA,EACpB;AAAA,EACA,UAA6B;AAAA,EAC7B,cAAqE;AAAA,EACrE,YAAmC;AAAA,EACnC,gBAAsC;AAAA;AAAA,EAGtC,cAAkC;AAAA,EAE1C,cAAc;AAEZ,SAAK,UAAU,IAAI,cAAc,MAAa;AAAA,MAC5C,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV;AAED,SAAK,cAAA;AAAA,EACP;AAAA,EAEQ,gBAAsB;AAE5B,SAAK,QAAQ,gBAAgB,aAAa,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAEzE,SAAK,QAAQ,gBAAgB,WAAkB,KAAK,cAAc,KAAK,IAAI,CAAC;AAE5E,SAAK,QAAQ,gBAAgB,aAAa,KAAK,eAAe,KAAK,IAAI,CAAC;AACxE,SAAK,QAAQ,gBAAgB,kBAAkB,SAAS,KAAK,cAAc,KAAK,IAAI,CAAC;AAGrF,SAAK,QAAQ,cAAc,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAAc,SAIM;AAChC,SAAK,cAAc,QAAQ;AAE3B,WAAO,EAAE,SAAS,KAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,gBAAgB,SAGoB;AAChD,UAAM,EAAE,QAAQ,UAAU,MAAA,IAAU;AAEpC,QAAI;AACF,UAAI,SAAS;AAEX,aAAK,QAAQ,QAAQ,YAAY;AAGjC,cAAM,SAAS,OAAO,aAAa,KAAK,aAAa,MAAM;AAE3D,YAAI,WAAW,OAAO;AACpB,eAAK,YAAY,IAAI,eAAA;AACrB,eAAK,SAAS,QAAA;AACd,eAAK,UAAU;AACf,eAAK,cAAc;AACnB,eAAK,gBAAgB;AAErB,gBAAM,WAAW,EAAE,IAAI,GAAG,MAAM,SAAS,OAAO,MAAA;AAChD,eAAK,QAAQ,OAAO,cAAc;AAAA,YAChC,QAAQ,CAAC,QAAQ;AAAA,YACjB;AAAA,YACA,OAAO;AAAA,UAAA,CACR;AAED,iBAAO,EAAE,SAAS,MAAM,QAAQ,CAAC,QAAQ,EAAA;AAAA,QAC3C,WAAW,WAAW,SAAS,WAAW,OAAO;AAC/C,cAAI,KAAK,SAAS;AAChB,iBAAK,QAAQ,QAAA;AAAA,UACf;AAEA,eAAK,UAAU,IAAI,WAAW;AAAA,YAC5B,GAAG;AAAA,YACH,WAAW;AAAA;AAAA,UAAA,CACZ;AACD,eAAK,cAAc,KAAK,QAAQ,kBAAA;AAChC,eAAK,YAAY;AACjB,eAAK,gBAAgB;AAAA,QACvB,OAAO;AACL,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,SAAS,6BAA6B,MAAM;AAAA,UAAA;AAAA,QAEhD;AAEA,YAAI,CAAC,KAAK,aAAa;AACrB,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,SAAS;AAAA,UAAA;AAAA,QAEb;AAEA,cAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ;AAGtD,aAAK,QAAQ,OAAO,cAAc;AAAA,UAChC;AAAA,UACA;AAAA,UACA,OAAO,OAAO,CAAC,GAAG;AAAA,QAAA,CACnB;AAED,eAAO,EAAE,SAAS,MAAM,OAAA;AAAA,MAC1B,OAAO;AAEL,YAAI,CAAC,KAAK,SAAS;AACjB,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,SAAS;AAAA,UAAA;AAAA,QAEb;AAKA,eAAO,EAAE,SAAS,KAAA;AAAA,MACpB;AAAA,IACF,SAAS,OAAY;AACnB,YAAM;AAAA,QACJ,MAAM,MAAM,QAAQ;AAAA,QACpB,SAAS,MAAM;AAAA,MAAA;AAAA,IAEnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,QAA6B;AAEhD,QAAI,OAAO,OAAO,SAAS,KAAK,EAAG,QAAO;AAC1C,QAAI,OAAO,OAAO,SAAS,KAAK,EAAG,QAAO;AAC1C,QAAI,OAAO,OAAO,SAAS,MAAM,EAAG,QAAO;AAE3C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBACZ,QACA,UACe;AAEf,QAAI,KAAK,kBAAkB,SAAS,CAAC,KAAK,WAAW;AACnD,WAAK,YAAY,IAAI,eAAA;AAAA,IACvB;AAEA,QAAI,KAAK,kBAAkB,UAAU,CAAC,KAAK,WAAW,CAAC,KAAK,cAAc;AACxE,YAAM,KAAK,gBAAgB;AAAA,QACzB,QAAQ,EAAE,WAAW,OAAO,eAAe,GAAA;AAAA,QAC3C,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAEA,QAAI,CAAC,KAAK,aAAa;AACrB,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AAGA,UAAM,iBAAiB,IAAI,cAAc,KAAK,aAAa;AAAA,MACzD,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV;AAED,QAAI,KAAK,kBAAkB,OAAO;AAChC,YAAM,KAAK,cAAc,QAAQ,gBAAgB,QAAQ;AAAA,IAC3D,WAAW,KAAK,WAAW,KAAK,aAAa;AAC3C,YAAM,cAAc,OAAO,YAAY,KAAK,WAAW;AACvD,YAAM,YAAY,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,EAAE,CAAC;AAE5D,YAAM,eAAe,WAAW,aAAa;AAAA,QAC3C,YAAY;AAAA,QACZ,QAAQ,UAAU,UAAU;AAAA,QAC5B,SAAS,UAAU,WAAW;AAAA,QAC9B,OAAO,WAAW,SAAS;AAAA,QAC3B,YAAY,WAAW,cAAc;AAAA,QACrC,kBAAkB,WAAW,oBAAoB;AAAA,QACjD,aAAa,WAAW;AAAA,MAAA,CACzB;AAED,WAAK,QAAQ,OAAO,kBAAkB;AAAA,QACpC,iBAAiB,KAAK,SAAS,OAAO,QAAQ;AAAA,MAAA,CAC/C;AAAA,IACH,OAAO;AACL,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAc,cACZ,QACA,gBACA,UACe;AACf,QAAI,CAAC,KAAK,WAAW;AACnB,WAAK,YAAY,IAAI,eAAA;AAAA,IACvB;AAEA,UAAM,SAAS,OAAO,UAAA;AACtB,QAAI,gBAAkC;AACtC,QAAI,aAAa;AACjB,UAAM,iBAA6B,CAAA;AACnC,QAAI,SAAgE;AAEpE,UAAM,eAAe,YAAqE;AACxF,UAAI,CAAC,QAAQ;AACX,cAAM,MAAM;AACZ,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AACA,cAAM,YAAY,IAAI,gBAAA;AACtB,iBAAS,UAAU,SAAS,UAAA;AAC5B,cAAM,eAAe,WAAW,UAAU,UAAU;AAAA,UAClD,YAAY;AAAA,UACZ,QAAQ,UAAU,UAAU;AAAA,UAC5B,SAAS,UAAU,WAAW;AAAA,UAC9B,OAAO;AAAA,UACP,YAAY,IAAI;AAAA,UAChB,kBAAkB,IAAI;AAAA,UACtB,aAAa;AAAA,QAAA,CACd;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAEA,QAAI;AACF,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAA,IAAU,MAAM,OAAO,KAAA;AACrC,YAAI,MAAM;AACR;AAAA,QACF;AAEA,YAAI,CAAC,OAAO;AACV;AAAA,QACF;AAEA,cAAM,EAAE,QAAQ,OAAA,IAAW,KAAK,UAAU,KAAK,KAAK;AAEpD,YAAI,QAAQ;AACV,0BAAgB;AAAA,QAClB;AAEA,YAAI,UAAU,CAAC,YAAY;AACzB,gBAAM,eAAe,KAAK,aAAoB;AAAA,YAC5C,YAAY;AAAA,YACZ,QAAQ,UAAU,UAAU;AAAA,YAC5B,OAAO;AAAA,YACP,YAAY,OAAO;AAAA,YACnB,kBAAkB,OAAO;AAAA,YACzB,aAAa;AAAA,UAAA,CACd;AACD,eAAK,QAAQ,OAAO,oBAAoB;AAAA,YACtC,QAAQ,UAAU,UAAU;AAAA,YAC5B,OAAO;AAAA,YACP,YAAY,OAAO;AAAA,YACnB,kBAAkB,OAAO;AAAA,UAAA,CAC1B;AACD,uBAAa;AAAA,QACf;AAEA,YAAI,QAAQ;AACV,eAAK,gBAAgB;AAAA,QACvB;AAEA,YAAI,CAAC,YAAY;AACf,yBAAe,KAAK,GAAG,MAAM;AAC7B;AAAA,QACF;AAEA,cAAM,eAAe,MAAM,aAAA;AAC3B,cAAM,cAAc,eAAe,OAAO,GAAG,eAAe,MAAM;AAClE,oBAAY,KAAK,GAAG,MAAM;AAC1B,mBAAW,SAAS,aAAa;AAC/B,gBAAM,QAAQ,IAAI,kBAAkB;AAAA,YAClC,MAAM;AAAA,YACN,WAAW,MAAM;AAAA,YACjB,UAAU,MAAM;AAAA,YAChB,MAAM,MAAM,KAAK,OAAO;AAAA,cACtB,MAAM,KAAK;AAAA,cACX,MAAM,KAAK,aAAa,MAAM,KAAK;AAAA,YAAA;AAAA,UACrC,CACD;AACD,gBAAM,aAAa,MAAM,KAAK;AAAA,QAChC;AAAA,MACF;AAEA,YAAM,YAAY,KAAK,UAAU,MAAA;AACjC,UAAI,UAAU,QAAQ;AACpB,YAAI,CAAC,YAAY;AACf,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AACA,cAAM,eAAe,MAAM,aAAA;AAC3B,mBAAW,SAAS,WAAW;AAC7B,gBAAM,QAAQ,IAAI,kBAAkB;AAAA,YAClC,MAAM;AAAA,YACN,WAAW,MAAM;AAAA,YACjB,UAAU,MAAM;AAAA,YAChB,MAAM,MAAM,KAAK,OAAO;AAAA,cACtB,MAAM,KAAK;AAAA,cACX,MAAM,KAAK,aAAa,MAAM,KAAK;AAAA,YAAA;AAAA,UACrC,CACD;AACD,gBAAM,aAAa,MAAM,KAAK;AAAA,QAChC;AAAA,MACF;AAEA,UAAI,QAAQ;AACV,cAAO,OAA0D,MAAA;AAAA,MACnE;AAEA,WAAK,QAAQ,OAAO,kBAAkB;AAAA,QACpC,iBAAiB;AAAA,MAAA,CAClB;AAAA,IACH,UAAA;AACE,aAAO,YAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAKX;AACD,QAAI,KAAK,kBAAkB,OAAO;AAChC,aAAO;AAAA,QACL,YAAY,KAAK,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,SAAS,OAAO,MAAA,CAAO,IAAI,CAAA;AAAA,QACxE,QAAQ;AAAA,QACR,OAAO,KAAK,QAAQ;AAAA,MAAA;AAAA,IAExB;AAEA,QAAI,KAAK,SAAS;AAChB,aAAO;AAAA,QACL,YAAY,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ;AAAA,QACnD,QAAQ;AAAA,QACR,OAAO,KAAK,QAAQ;AAAA,MAAA;AAAA,IAExB;AAEA,WAAO,EAAE,OAAO,KAAK,QAAQ,MAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAA+C;AAC3D,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,QAAA;AAAA,IACf;AACA,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,YAAY;AACjB,SAAK,gBAAgB;AAErB,SAAK,aAAa,MAAA;AAClB,SAAK,cAAc;AAEnB,SAAK,QAAQ,QAAQ,YAAY;AAEjC,WAAO,EAAE,SAAS,KAAA;AAAA,EACpB;AACF;AAGA,MAAM,SAAS,IAAI,iBAAA;AAGnB,KAAK,iBAAiB,gBAAgB,MAAM;AAC1C,SAAO,eAAe,EAAA;AACxB,CAAC;","x_google_ignoreList":[4]}