mediabunny 1.0.2 → 1.0.4

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 (188) hide show
  1. package/README.md +4 -4
  2. package/dist/mediabunny.d.ts +4 -2
  3. package/dist/modules/codec-data.d.ts +95 -0
  4. package/dist/modules/codec-data.d.ts.map +1 -0
  5. package/dist/modules/codec-data.js +1103 -0
  6. package/dist/modules/codec.d.ts +250 -0
  7. package/dist/modules/codec.d.ts.map +1 -0
  8. package/dist/modules/codec.js +1100 -0
  9. package/dist/modules/conversion.d.ts +158 -0
  10. package/dist/modules/conversion.d.ts.map +1 -0
  11. package/dist/modules/conversion.js +866 -0
  12. package/dist/modules/custom-coder.d.ts +119 -0
  13. package/dist/modules/custom-coder.d.ts.map +1 -0
  14. package/dist/modules/custom-coder.js +91 -0
  15. package/dist/modules/demuxer.d.ts +17 -0
  16. package/dist/modules/demuxer.d.ts.map +1 -0
  17. package/dist/modules/demuxer.js +12 -0
  18. package/dist/modules/index.d.ts +25 -0
  19. package/dist/modules/index.d.ts.map +1 -0
  20. package/dist/modules/index.js +24 -0
  21. package/dist/modules/input-format.d.ts +121 -0
  22. package/dist/modules/input-format.d.ts.map +1 -0
  23. package/dist/modules/input-format.js +333 -0
  24. package/dist/modules/input-track.d.ts +138 -0
  25. package/dist/modules/input-track.d.ts.map +1 -0
  26. package/dist/modules/input-track.js +230 -0
  27. package/dist/modules/input.d.ts +55 -0
  28. package/dist/modules/input.d.ts.map +1 -0
  29. package/dist/modules/input.js +104 -0
  30. package/dist/modules/isobmff/isobmff-boxes.d.ts +202 -0
  31. package/dist/modules/isobmff/isobmff-boxes.d.ts.map +1 -0
  32. package/dist/modules/isobmff/isobmff-boxes.js +1111 -0
  33. package/dist/modules/isobmff/isobmff-demuxer.d.ts +163 -0
  34. package/dist/modules/isobmff/isobmff-demuxer.d.ts.map +1 -0
  35. package/dist/modules/isobmff/isobmff-demuxer.js +2080 -0
  36. package/dist/modules/isobmff/isobmff-misc.d.ts +14 -0
  37. package/dist/modules/isobmff/isobmff-misc.d.ts.map +1 -0
  38. package/dist/modules/isobmff/isobmff-misc.js +20 -0
  39. package/dist/modules/isobmff/isobmff-muxer.d.ts +142 -0
  40. package/dist/modules/isobmff/isobmff-muxer.d.ts.map +1 -0
  41. package/dist/modules/isobmff/isobmff-muxer.js +858 -0
  42. package/dist/modules/isobmff/isobmff-reader.d.ts +36 -0
  43. package/dist/modules/isobmff/isobmff-reader.d.ts.map +1 -0
  44. package/dist/modules/isobmff/isobmff-reader.js +105 -0
  45. package/dist/modules/matroska/ebml.d.ts +156 -0
  46. package/dist/modules/matroska/ebml.d.ts.map +1 -0
  47. package/dist/modules/matroska/ebml.js +529 -0
  48. package/dist/modules/matroska/matroska-demuxer.d.ts +119 -0
  49. package/dist/modules/matroska/matroska-demuxer.d.ts.map +1 -0
  50. package/dist/modules/matroska/matroska-demuxer.js +1330 -0
  51. package/dist/modules/matroska/matroska-misc.d.ts +14 -0
  52. package/dist/modules/matroska/matroska-misc.d.ts.map +1 -0
  53. package/dist/modules/matroska/matroska-misc.js +20 -0
  54. package/dist/modules/matroska/matroska-muxer.d.ts +71 -0
  55. package/dist/modules/matroska/matroska-muxer.d.ts.map +1 -0
  56. package/dist/modules/matroska/matroska-muxer.js +729 -0
  57. package/dist/modules/media-sink.d.ts +272 -0
  58. package/dist/modules/media-sink.d.ts.map +1 -0
  59. package/dist/modules/media-sink.js +1264 -0
  60. package/dist/modules/media-source.d.ts +230 -0
  61. package/dist/modules/media-source.d.ts.map +1 -0
  62. package/dist/modules/media-source.js +1095 -0
  63. package/dist/modules/misc.d.ts +127 -0
  64. package/dist/modules/misc.d.ts.map +1 -0
  65. package/dist/modules/misc.js +462 -0
  66. package/dist/modules/mp3/mp3-demuxer.d.ts +32 -0
  67. package/dist/modules/mp3/mp3-demuxer.d.ts.map +1 -0
  68. package/dist/modules/mp3/mp3-demuxer.js +160 -0
  69. package/dist/modules/mp3/mp3-misc.d.ts +37 -0
  70. package/dist/modules/mp3/mp3-misc.d.ts.map +1 -0
  71. package/dist/modules/mp3/mp3-misc.js +122 -0
  72. package/dist/modules/mp3/mp3-muxer.d.ts +27 -0
  73. package/dist/modules/mp3/mp3-muxer.d.ts.map +1 -0
  74. package/dist/modules/mp3/mp3-muxer.js +112 -0
  75. package/dist/modules/mp3/mp3-reader.d.ts +25 -0
  76. package/dist/modules/mp3/mp3-reader.d.ts.map +1 -0
  77. package/dist/modules/mp3/mp3-reader.js +73 -0
  78. package/dist/modules/mp3/mp3-writer.d.ts +30 -0
  79. package/dist/modules/mp3/mp3-writer.d.ts.map +1 -0
  80. package/dist/modules/mp3/mp3-writer.js +72 -0
  81. package/dist/modules/muxer.d.ts +32 -0
  82. package/dist/modules/muxer.d.ts.map +1 -0
  83. package/dist/modules/muxer.js +50 -0
  84. package/dist/modules/ogg/ogg-demuxer.d.ts +53 -0
  85. package/dist/modules/ogg/ogg-demuxer.d.ts.map +1 -0
  86. package/dist/modules/ogg/ogg-demuxer.js +701 -0
  87. package/dist/modules/ogg/ogg-misc.d.ts +27 -0
  88. package/dist/modules/ogg/ogg-misc.d.ts.map +1 -0
  89. package/dist/modules/ogg/ogg-misc.js +78 -0
  90. package/dist/modules/ogg/ogg-muxer.d.ts +58 -0
  91. package/dist/modules/ogg/ogg-muxer.d.ts.map +1 -0
  92. package/dist/modules/ogg/ogg-muxer.js +345 -0
  93. package/dist/modules/ogg/ogg-reader.d.ts +37 -0
  94. package/dist/modules/ogg/ogg-reader.d.ts.map +1 -0
  95. package/dist/modules/ogg/ogg-reader.js +104 -0
  96. package/dist/modules/output-format.d.ts +285 -0
  97. package/dist/modules/output-format.d.ts.map +1 -0
  98. package/dist/modules/output-format.js +385 -0
  99. package/dist/modules/output.d.ts +134 -0
  100. package/dist/modules/output.d.ts.map +1 -0
  101. package/dist/modules/output.js +269 -0
  102. package/dist/modules/packet.d.ts +86 -0
  103. package/dist/modules/packet.d.ts.map +1 -0
  104. package/dist/modules/packet.js +133 -0
  105. package/dist/modules/pcm.d.ts +12 -0
  106. package/dist/modules/pcm.d.ts.map +1 -0
  107. package/dist/modules/pcm.js +85 -0
  108. package/dist/modules/reader.d.ts +40 -0
  109. package/dist/modules/reader.d.ts.map +1 -0
  110. package/dist/modules/reader.js +153 -0
  111. package/dist/modules/sample.d.ts +186 -0
  112. package/dist/modules/sample.d.ts.map +1 -0
  113. package/dist/modules/sample.js +798 -0
  114. package/dist/modules/source.d.ts +76 -0
  115. package/dist/modules/source.d.ts.map +1 -0
  116. package/dist/modules/source.js +183 -0
  117. package/dist/modules/subtitles.d.ts +37 -0
  118. package/dist/modules/subtitles.d.ts.map +1 -0
  119. package/dist/modules/subtitles.js +89 -0
  120. package/dist/modules/target.d.ts +58 -0
  121. package/dist/modules/target.d.ts.map +1 -0
  122. package/dist/modules/target.js +63 -0
  123. package/dist/modules/wave/riff-reader.d.ts +19 -0
  124. package/dist/modules/wave/riff-reader.d.ts.map +1 -0
  125. package/dist/modules/wave/riff-reader.js +38 -0
  126. package/dist/modules/wave/riff-writer.d.ts +18 -0
  127. package/dist/modules/wave/riff-writer.d.ts.map +1 -0
  128. package/dist/modules/wave/riff-writer.js +25 -0
  129. package/dist/modules/wave/wave-demuxer.d.ts +42 -0
  130. package/dist/modules/wave/wave-demuxer.d.ts.map +1 -0
  131. package/dist/modules/wave/wave-demuxer.js +239 -0
  132. package/dist/modules/wave/wave-muxer.d.ts +27 -0
  133. package/dist/modules/wave/wave-muxer.d.ts.map +1 -0
  134. package/dist/modules/wave/wave-muxer.js +108 -0
  135. package/dist/modules/writer.d.ts +85 -0
  136. package/dist/modules/writer.d.ts.map +1 -0
  137. package/dist/modules/writer.js +347 -0
  138. package/package.json +14 -10
  139. package/src/codec-data.ts +1394 -0
  140. package/src/codec.ts +1392 -0
  141. package/src/conversion.ts +1199 -0
  142. package/src/custom-coder.ts +162 -0
  143. package/src/demuxer.ts +22 -0
  144. package/src/index.ts +148 -0
  145. package/src/input-format.ts +386 -0
  146. package/src/input-track.ts +341 -0
  147. package/src/input.ts +138 -0
  148. package/src/isobmff/isobmff-boxes.ts +1365 -0
  149. package/src/isobmff/isobmff-demuxer.ts +2646 -0
  150. package/src/isobmff/isobmff-misc.ts +29 -0
  151. package/src/isobmff/isobmff-muxer.ts +1210 -0
  152. package/src/isobmff/isobmff-reader.ts +137 -0
  153. package/src/matroska/ebml.ts +595 -0
  154. package/src/matroska/matroska-demuxer.ts +1677 -0
  155. package/src/matroska/matroska-misc.ts +29 -0
  156. package/src/matroska/matroska-muxer.ts +999 -0
  157. package/src/media-sink.ts +1577 -0
  158. package/src/media-source.ts +1406 -0
  159. package/src/misc.ts +584 -0
  160. package/src/mp3/mp3-demuxer.ts +228 -0
  161. package/src/mp3/mp3-misc.ts +154 -0
  162. package/src/mp3/mp3-muxer.ts +153 -0
  163. package/src/mp3/mp3-reader.ts +93 -0
  164. package/src/mp3/mp3-writer.ts +112 -0
  165. package/src/muxer.ts +88 -0
  166. package/src/ogg/ogg-demuxer.ts +985 -0
  167. package/src/ogg/ogg-misc.ts +116 -0
  168. package/src/ogg/ogg-muxer.ts +480 -0
  169. package/src/ogg/ogg-reader.ts +143 -0
  170. package/src/output-format.ts +689 -0
  171. package/src/output.ts +427 -0
  172. package/src/packet.ts +180 -0
  173. package/src/pcm.ts +112 -0
  174. package/src/reader.ts +205 -0
  175. package/src/sample.ts +1029 -0
  176. package/src/source.ts +279 -0
  177. package/src/subtitles.ts +131 -0
  178. package/src/target.ts +106 -0
  179. package/src/tsconfig.json +13 -0
  180. package/src/wave/riff-reader.ts +48 -0
  181. package/src/wave/riff-writer.ts +30 -0
  182. package/src/wave/wave-demuxer.ts +317 -0
  183. package/src/wave/wave-muxer.ts +145 -0
  184. package/src/writer.ts +461 -0
  185. /package/dist/{mediabunny.js → bundles/mediabunny.cjs} +0 -0
  186. /package/dist/{mediabunny.min.js → bundles/mediabunny.min.cjs} +0 -0
  187. /package/dist/{mediabunny.min.mjs → bundles/mediabunny.min.mjs} +0 -0
  188. /package/dist/{mediabunny.mjs → bundles/mediabunny.mjs} +0 -0
@@ -0,0 +1,158 @@
1
+ /*!
2
+ * Copyright (c) 2025-present, Vanilagy and contributors
3
+ *
4
+ * This Source Code Form is subject to the terms of the Mozilla Public
5
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
6
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
7
+ */
8
+ import { AudioCodec, VideoCodec } from './codec';
9
+ import { Input } from './input';
10
+ import { InputTrack } from './input-track';
11
+ import { AudioEncodingConfig, VideoEncodingConfig } from './media-source';
12
+ import { Rotation } from './misc';
13
+ import { Output } from './output';
14
+ import { AudioSample } from './sample';
15
+ /**
16
+ * The options for media file conversion.
17
+ * @public
18
+ */
19
+ export type ConversionOptions = {
20
+ /** The input file. */
21
+ input: Input;
22
+ /** The output file. */
23
+ output: Output;
24
+ /** Video-specific options. */
25
+ video?: {
26
+ /** If true, all video tracks will be discarded and will not be present in the output. */
27
+ discard?: boolean;
28
+ /**
29
+ * The desired width of the output video in pixels, defaulting to the video's natural display width. If height
30
+ * is not set, it will be deduced automatically based on aspect ratio.
31
+ */
32
+ width?: number;
33
+ /**
34
+ * The desired height of the output video in pixels, defaulting to the video's natural display height. If width
35
+ * is not set, it will be deduced automatically based on aspect ratio.
36
+ */
37
+ height?: number;
38
+ /**
39
+ * The fitting algorithm in case both width and height are set.
40
+ *
41
+ * - 'fill' will stretch the image to fill the entire box, potentially altering aspect ratio.
42
+ * - 'contain' will contain the entire image within the box while preserving aspect ratio. This may lead to
43
+ * letterboxing.
44
+ * - 'cover' will scale the image until the entire box is filled, while preserving aspect ratio.
45
+ */
46
+ fit?: 'fill' | 'contain' | 'cover';
47
+ /**
48
+ * The angle in degrees to rotate the input video by, clockwise. Rotation is applied before resizing. This
49
+ * rotation is _in addition to_ the natural rotation of the input video as specified in input file's metadata.
50
+ */
51
+ rotate?: Rotation;
52
+ /** The desired output video codec. */
53
+ codec?: VideoCodec;
54
+ /** The desired bitrate of the output video. */
55
+ bitrate?: VideoEncodingConfig['bitrate'];
56
+ /** When true, video will always be re-encoded instead of directly copying over the encoded samples. */
57
+ forceTranscode?: boolean;
58
+ };
59
+ /** Audio-specific options. */
60
+ audio?: {
61
+ /** If true, all audio tracks will be discarded and will not be present in the output. */
62
+ discard?: boolean;
63
+ /** The desired channel count of the output audio. */
64
+ numberOfChannels?: number;
65
+ /** The desired sample rate of the output audio, in hertz. */
66
+ sampleRate?: number;
67
+ /** The desired output audio codec. */
68
+ codec?: AudioCodec;
69
+ /** The desired bitrate of the output audio. */
70
+ bitrate?: AudioEncodingConfig['bitrate'];
71
+ /** When true, audio will always be re-encoded instead of directly copying over the encoded samples. */
72
+ forceTranscode?: boolean;
73
+ };
74
+ /** Options to trim the input file. */
75
+ trim?: {
76
+ /** The time in the input file in seconds at which the output file should start. Must be less than `end`. */
77
+ start: number;
78
+ /** The time in the input file in seconds at which the output file should end. Must be greater than `start`. */
79
+ end: number;
80
+ };
81
+ };
82
+ /**
83
+ * Represents a media file conversion process, used to convert one media file into another. In addition to conversion,
84
+ * this class can be used to resize and rotate video, resample audio, drop tracks, or trim to a specific time range.
85
+ * @public
86
+ */
87
+ export declare class Conversion {
88
+ /** The input file. */
89
+ readonly input: Input;
90
+ /** The output file. */
91
+ readonly output: Output;
92
+ /**
93
+ * A callback that is fired whenever the conversion progresses. Returns a number between 0 and 1, indicating the
94
+ * completion of the conversion. Note that a progress of 1 doesn't necessarily mean the conversion is complete;
95
+ * the conversion is complete once `execute` resolves.
96
+ *
97
+ * In order for progress to be computed, this property must be set before `execute` is called.
98
+ */
99
+ onProgress?: (progress: number) => unknown;
100
+ /** The list of tracks that are included in the output file. */
101
+ readonly utilizedTracks: InputTrack[];
102
+ /** The list of tracks from the input file that have been discarded, alongside the discard reason. */
103
+ readonly discardedTracks: {
104
+ /** The track that was discarded. */
105
+ track: InputTrack;
106
+ /** The reason for discarding the track. */
107
+ reason: 'discarded_by_user' | 'max_track_count_reached' | 'max_track_count_of_type_reached' | 'unknown_source_codec' | 'undecodable_source_codec' | 'no_encodable_target_codec';
108
+ }[];
109
+ /** Initializes a new conversion process without starting the conversion. */
110
+ static init(options: ConversionOptions): Promise<Conversion>;
111
+ private constructor();
112
+ /** Executes the conversion process. Resolves once conversion is complete. */
113
+ execute(): Promise<void>;
114
+ /** Cancels the conversion process. Does nothing if the conversion is already complete. */
115
+ cancel(): Promise<void>;
116
+ }
117
+ /**
118
+ * Utility class to handle audio resampling, handling both sample rate resampling as well as channel up/downmixing.
119
+ * The advantage over doing this manually rather than using OfflineAudioContext to do it for us is the artifact-free
120
+ * handling of putting multiple resampled audio samples back to back, which produces flaky results using
121
+ * OfflineAudioContext.
122
+ */
123
+ export declare class AudioResampler {
124
+ sourceSampleRate: number;
125
+ targetSampleRate: number;
126
+ sourceNumberOfChannels: number;
127
+ targetNumberOfChannels: number;
128
+ startTime: number;
129
+ endTime: number;
130
+ onSample: (sample: AudioSample) => Promise<void>;
131
+ bufferSizeInFrames: number;
132
+ bufferSizeInSamples: number;
133
+ outputBuffer: Float32Array;
134
+ /** Start frame of current buffer */
135
+ bufferStartFrame: number;
136
+ /** The highest index written to in the current buffer */
137
+ maxWrittenFrame: number;
138
+ channelMixer: (sourceData: Float32Array, sourceFrameIndex: number, targetChannelIndex: number) => number;
139
+ tempSourceBuffer: Float32Array;
140
+ constructor(options: {
141
+ sourceSampleRate: number;
142
+ targetSampleRate: number;
143
+ sourceNumberOfChannels: number;
144
+ targetNumberOfChannels: number;
145
+ startTime: number;
146
+ endTime: number;
147
+ onSample: (sample: AudioSample) => Promise<void>;
148
+ });
149
+ /**
150
+ * Sets up the channel mixer to handle up/downmixing in the case where input and output channel counts don't match.
151
+ */
152
+ setupChannelMixer(): void;
153
+ ensureTempBufferSize(requiredSamples: number): void;
154
+ add(audioSample: AudioSample): Promise<void>;
155
+ finalizeCurrentBuffer(): Promise<void>;
156
+ finalize(): Promise<void>;
157
+ }
158
+ //# sourceMappingURL=conversion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../src/conversion.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAEN,UAAU,EAOV,UAAU,EACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAmB,UAAU,EAAmB,MAAM,eAAe,CAAC;AAO7E,OAAO,EACN,mBAAmB,EAInB,mBAAmB,EAInB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA0D,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAa,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAe,MAAM,UAAU,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,sBAAsB;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,KAAK,CAAC,EAAE;QACP,yFAAyF;QACzF,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;;;;;WAOG;QACH,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;QACnC;;;WAGG;QACH,MAAM,CAAC,EAAE,QAAQ,CAAC;QAClB,sCAAsC;QACtC,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,+CAA+C;QAC/C,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACzC,uGAAuG;QACvG,cAAc,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAEF,8BAA8B;IAC9B,KAAK,CAAC,EAAE;QACP,yFAAyF;QACzF,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,qDAAqD;QACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,6DAA6D;QAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,sCAAsC;QACtC,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,+CAA+C;QAC/C,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACzC,uGAAuG;QACvG,cAAc,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAEF,sCAAsC;IACtC,IAAI,CAAC,EAAE;QACN,6GAA6G;QAC7G,KAAK,EAAE,MAAM,CAAC;QACd,+GAA+G;QAC/G,GAAG,EAAE,MAAM,CAAC;KACZ,CAAC;CACF,CAAC;AAKF;;;;GAIG;AACH,qBAAa,UAAU;IACtB,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAwCxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAa;IAMvD,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,UAAU,EAAE,CAAM;IAC3C,qGAAqG;IACrG,QAAQ,CAAC,eAAe,EAAE;QACzB,oCAAoC;QACpC,KAAK,EAAE,UAAU,CAAC;QAClB,2CAA2C;QAC3C,MAAM,EACH,mBAAmB,GACnB,yBAAyB,GACzB,iCAAiC,GACjC,sBAAsB,GACtB,0BAA0B,GAC1B,2BAA2B,CAAC;KAC/B,EAAE,CAAM;IAET,4EAA4E;WAC/D,IAAI,CAAC,OAAO,EAAE,iBAAiB;IAO5C,OAAO;IA+KP,6EAA6E;IACvE,OAAO;IAyCb,0FAA0F;IACpF,MAAM;CA6bZ;AA6DD;;;;;GAKG;AACH,qBAAa,cAAc;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAG,CAAC,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1G,gBAAgB,EAAE,YAAY,CAAC;gBAEnB,OAAO,EAAE;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACjD;IAsBD;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAuGzB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;IAc7C,GAAG,CAAC,WAAW,EAAE,WAAW;IAsE5B,qBAAqB;IAyB3B,QAAQ;CAGR"}