multi_embed_player 3.0.1 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CLAUDE.md ADDED
@@ -0,0 +1,92 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Development Commands
6
+
7
+ ```bash
8
+ # Install dependencies
9
+ npm install
10
+
11
+ # Build TypeScript files to dist/
12
+ npm run build
13
+
14
+ # Development mode with file watching
15
+ npm run dev
16
+
17
+ # Lint TypeScript files
18
+ npm run lint
19
+
20
+ # Fix linting issues automatically
21
+ npm run lint:fix
22
+ ```
23
+
24
+ ## Architecture
25
+
26
+ This is a TypeScript multi-service video player library that supports:
27
+ - YouTube
28
+ - Bilibili
29
+ - SoundCloud
30
+ - Niconico
31
+
32
+ ### Key Files Structure
33
+
34
+ - `multi_embed_player.ts` - Main player class and core functionality
35
+ - `types.ts` - Shared TypeScript type definitions
36
+ - `iframe_api/` - Service-specific iframe API implementations
37
+ - `youtube.ts`, `bilibili.ts`, `soundcloud.ts`, `niconico.ts`
38
+ - `index.ts` - Exports all player classes and types
39
+ - `dist/` - Compiled JavaScript output directory
40
+ - `player_api_gate/` - API gateway services (Cloudflare Workers)
41
+ - `browserExtention/` - Browser extension implementations
42
+
43
+ ### Build System
44
+
45
+ - TypeScript compilation outputs to `dist/` directory
46
+ - Main entry point: `dist/multi_embed_player.js`
47
+ - Type definitions: `dist/multi_embed_player.d.ts`
48
+ - Source maps and declaration maps are generated
49
+ - Module system: ES2020 with Node.js resolution
50
+
51
+ ### Development Workflow
52
+
53
+ Always run `npm run build` after TypeScript changes to update the compiled output. The library is published with the compiled JavaScript files, not the TypeScript source.
54
+
55
+ ## TypeScript コンパイル時のクラス名保持について
56
+
57
+ TypeScript コンパイル時に `multi_embed_player.iframe_api_class[this.service]` が `_a.iframe_api_class[this.service]` になる問題への対処法:
58
+
59
+ ### 問題
60
+ - `tsconfig.json` で `"module": "none"` 設定の場合、TypeScript コンパイラがクラス名を最小化
61
+ - `multi_embed_player` が `_a` に変換され、実行時にクラス参照が失われる
62
+
63
+ ### 解決方法
64
+ 1. グローバル変数へのクラス参照保存:
65
+ ```typescript
66
+ // ファイル末尾に追加
67
+ (window as any).multi_embed_player = multi_embed_player;
68
+ ```
69
+
70
+ 2. コード内でのグローバル参照使用:
71
+ ```typescript
72
+ // 修正前
73
+ this.player = new multi_embed_player.iframe_api_class[this.service](...);
74
+
75
+ // 修正後
76
+ this.player = new (window as any).multi_embed_player.iframe_api_class[this.service](...);
77
+ ```
78
+
79
+ 3. iframe_api_loader内でも同様に修正:
80
+ ```typescript
81
+ // 修正前
82
+ multi_embed_player.iframe_api_class["youtube"] = mep_youtube;
83
+
84
+ // 修正後
85
+ (window as any).multi_embed_player.iframe_api_class["youtube"] = mep_youtube;
86
+ ```
87
+
88
+ これによりコンパイル後も `multi_embed_player.iframe_api_class` の形でクラス名が保持される。
89
+
90
+ ## Memories
91
+
92
+ - moduleを使わないこと
package/README.md CHANGED
@@ -7,30 +7,6 @@ support service list of multi embed player
7
7
  - SoundCloud
8
8
  - Niconico(**temporarily unavailable if your site not accepted by niconico**)
9
9
 
10
- ## TypeScript Support
11
-
12
- This project has been migrated to TypeScript! 🎉
13
-
14
- ### Development
15
-
16
- ```bash
17
- # Install dependencies
18
- npm install
19
-
20
- # Build TypeScript files
21
- npm run build
22
-
23
- # Watch mode for development
24
- npm run dev
25
- ```
26
-
27
- ### Usage
28
-
29
- The compiled JavaScript files are available in the `dist/` directory:
30
- - Main player: `dist/multi_embed_player.js`
31
- - Type definitions: `dist/multi_embed_player.d.ts`
32
- - Individual iframe APIs: `dist/iframe_api/`
33
-
34
10
  ## Document and Demo Page
35
11
 
36
12
  [https://multi-embed-player.pages.dev/docs/](https://multi-embed-player.pages.dev/docs/)
package/add_types.sh ADDED
@@ -0,0 +1,61 @@
1
+ #!/bin/bash
2
+
3
+ # iframe_api/bilibili.tsに型宣言を追加
4
+ sed -i '/class mep_bilibili{/a\
5
+ player: any;\
6
+ play_control_wrap: any;\
7
+ front_error_code: any;\
8
+ loading: any;\
9
+ before_mute_volume: any;\
10
+ content_width: any;\
11
+ content_height: any;\
12
+ videoid: any;\
13
+ original_replacing_element: any;\
14
+ player_set_event: any;\
15
+ seek_time: any;\
16
+ seek_time_used: any;\
17
+ noextention_count_stop: any;\
18
+ state: any;\
19
+ apicache: any;\
20
+ no_extention_pause: any;\
21
+ startSeconds: any;\
22
+ innerStartSeconds: any;\
23
+ autoplay_flag: any;\
24
+ displayCommentMode: any;\
25
+ fastload: any;\
26
+ no_extention_estimate_stop: any;\
27
+ play_start_time: any;\
28
+ play_start_count_interval: any;\
29
+ endSeconds: any;\
30
+ end_point_observe: any;\
31
+ custom_state: any;\
32
+ estimate_time: any;' iframe_api/bilibili.ts
33
+
34
+ # iframe_api/soundcloud.tsに型宣言を追加
35
+ sed -i '/class mep_soundcloud{/a\
36
+ player: any;\
37
+ playerVars: any;\
38
+ player_statusdata: any;\
39
+ autoplay: any;\
40
+ player_widget: any;\
41
+ player_metadata: any;\
42
+ before_mute_volume: any;\
43
+ forse_pause: any;\
44
+ first_seek_time: any;\
45
+ endSeconds: any;\
46
+ pause_sended: any;\
47
+ interval: any;\
48
+ previous_player_status: any;\
49
+ retry_count: any;' iframe_api/soundcloud.ts
50
+
51
+ # iframe_api/niconico.tsに型宣言を追加
52
+ sed -i '/class mep_niconico{/a\
53
+ state: any;\
54
+ startSeconds: any;\
55
+ player: any;\
56
+ playerId: any;\
57
+ autoplay_flag: any;\
58
+ endSeconds: any;\
59
+ displayCommentMode: any;' iframe_api/niconico.ts
60
+
61
+ echo "型宣言を追加しました"
@@ -1,91 +1,210 @@
1
- import { BilibiliContent, IPlayer, PlayerState, EventHandler } from '../types';
1
+ interface mep_bilibili_playerVars {
2
+ startSeconds?: number;
3
+ endSeconds?: number;
4
+ autoplay?: number;
5
+ displayComment?: number;
6
+ fastLoad?: number;
7
+ play_control_wrap?: number;
8
+ }
9
+ interface mep_bilibili_content {
10
+ videoId: string;
11
+ width: number;
12
+ height: number;
13
+ playerVars: mep_bilibili_playerVars;
14
+ overwrite?: boolean;
15
+ displayComment?: number;
16
+ play_control_wrap?: number;
17
+ startSeconds?: number;
18
+ endSeconds?: number;
19
+ }
20
+ interface BilibiliApiResponse {
21
+ code: number;
22
+ data?: {
23
+ title: string;
24
+ duration: number;
25
+ pic?: string;
26
+ };
27
+ image_base64?: string | null;
28
+ }
29
+ interface BilibiliPlayerState {
30
+ getPlayerState: string;
31
+ currentTime?: number;
32
+ dulation?: number;
33
+ volumeValue?: number;
34
+ getTitle?: string;
35
+ }
36
+ interface BilibiliQuery {
37
+ bvid: string;
38
+ t?: number;
39
+ autoplay: 0 | 1;
40
+ danmaku: 0 | 1;
41
+ }
2
42
  /**
3
43
  * Class representing a Bilibili player.
44
+ * @class
45
+ * @classdesc This class provides methods to control a Bilibili player and handle errors.
46
+ * @property {boolean} localStorageCheck - A flag indicating whether the local storage is accessible.
47
+ * @property {boolean} mep_extension_bilibili - A flag indicating whether the extension is installed.
48
+ * @property {string} api_endpoint - The API endpoint for the player.
49
+ * @property {string} no_extention_error - The error message to display when the extension is not installed.
50
+ * @property {string} player_base_url - The base URL for the player.
51
+ * @property {Object} bilibili_api_cache - The cache for the Bilibili API.
52
+ * @property {string} cors_proxy - The CORS proxy for the player.
53
+ * @constructor
54
+ * @param {HTMLElement|String} replacing_element - The element to replace with the player or the ID of the element to replace with the player.
55
+ * @param {Object} content - The content to display in the player.
56
+ * @param {Function} player_set_event_function - The function to set the player event.
4
57
  */
5
- export declare class mep_bilibili implements IPlayer {
6
- private static error_description;
7
- private static localStorageCheck;
8
- private static mep_extension_bilibili;
9
- private static api_endpoint;
10
- private static no_extention_error;
11
- private static player_base_url;
12
- private static bilibili_api_cache;
13
- private static cors_proxy;
14
- private static currentTime_delay;
15
- private static bilibili_api_promise;
16
- private player;
17
- private videoid;
18
- private autoplay;
19
- private startSeconds;
20
- private endSeconds;
21
- private displayComment;
22
- private fastLoad;
23
- private play_control_wrap;
24
- private front_error_code?;
25
- private playerState;
26
- private currentTime;
27
- private duration;
28
- private volume;
29
- private muted;
30
- constructor(replacing_element: string | HTMLElement, content: BilibiliContent, player_set_event_function?: EventHandler);
58
+ declare class mep_bilibili {
59
+ #private;
60
+ player: HTMLIFrameElement | HTMLElement;
61
+ play_control_wrap: boolean;
62
+ front_error_code: number | undefined;
63
+ loading: boolean;
64
+ before_mute_volume: number;
65
+ content_width: number;
66
+ content_height: number;
67
+ videoid: string;
68
+ original_replacing_element: HTMLElement;
69
+ player_set_event: ((player: HTMLIFrameElement) => void) | undefined;
70
+ seek_time: number;
71
+ seek_time_used: boolean;
72
+ noextention_count_stop: number;
73
+ state: BilibiliPlayerState;
74
+ apicache: Record<string, any>;
75
+ no_extention_pause: boolean;
76
+ startSeconds: number;
77
+ innerStartSeconds: number;
78
+ autoplay_flag: boolean;
79
+ displayCommentMode: boolean;
80
+ fastload: boolean;
81
+ no_extention_estimate_stop: boolean;
82
+ play_start_time: number;
83
+ play_start_count_interval: number | undefined;
84
+ endSeconds: number;
85
+ end_point_observe: number | undefined;
86
+ custom_state: number | undefined;
87
+ estimate_time: number | undefined;
88
+ start_event_count: number;
89
+ end_event_count: number;
90
+ static error_description: {
91
+ 0: string;
92
+ 1: string;
93
+ 2: string;
94
+ 3: string;
95
+ 4: string;
96
+ };
97
+ static localStorageCheck: boolean | null;
98
+ static mep_extension_bilibili: boolean;
99
+ static api_endpoint: string;
100
+ static no_extention_error: string;
101
+ static player_base_url: string;
102
+ static bilibili_api_cache: Record<string, BilibiliApiResponse>;
103
+ static cors_proxy: string;
104
+ static currentTime_delay: number;
105
+ static bilibili_api_promise: Record<string, {
106
+ res: ((value: BilibiliApiResponse) => void)[];
107
+ rej: ((reason?: any) => void)[];
108
+ }>;
109
+ constructor(replacing_element: HTMLElement | string, content: mep_bilibili_content, player_set_event_function?: (player: HTMLIFrameElement) => void);
31
110
  /**
32
- * Initialize player base URL based on browser.
111
+ * Loads the video player with the specified content in cue mode.
112
+ * @param {Object} content - The content to display in the player.
33
113
  */
34
- private initialize_player_base_url;
114
+ cueVideoById(content: Partial<mep_bilibili_content>): void;
35
115
  /**
36
- * Constructor for element setup.
116
+ * Loads the video player with the specified content in play mode.
117
+ * @param {Object} content - The content to display in the player.
37
118
  */
38
- private element_constructor;
119
+ loadVideoById(content: Partial<mep_bilibili_content>): void;
39
120
  /**
40
- * Display image player when paused.
121
+ * Returns the current time of the video.
122
+ * @returns {Promise<number>} - The current time of the video.
41
123
  */
42
- private image_player;
124
+ getCurrentTime(): number;
43
125
  /**
44
- * Set pause transparent overlay.
126
+ * Plays the video. If the Bilibili extension is not installed, loads the video with the specified parameters.
127
+ * If the extension is installed, sends a message to the extension to play the video.
45
128
  */
46
- private set_pause_transparent;
129
+ playVideo(): void;
47
130
  /**
48
- * Add loading animation.
131
+ * Pauses the video playback. If the Bilibili extension is not detected, it replaces the player with an image and stops the play start count interval.
132
+ * @function
49
133
  */
50
- private add_loading_animation;
134
+ pauseVideo(): void;
51
135
  /**
52
- * Remove loading animation.
136
+ * Seeks to the specified time in the video.
137
+ * @async
138
+ * @param {number} seektime - The time to seek to, in seconds.
53
139
  */
54
- private remove_loading_animation;
140
+ seekTo(seektime: number): Promise<void>;
55
141
  /**
56
- * Add error description.
142
+ * Calculates the real duration of the video based on the start and end seconds.
143
+ * @async
144
+ * @function
145
+ * @returns {Promise<number>} The real duration of the video.
57
146
  */
58
- private add_error_description;
147
+ getRealDulation(): Promise<number>;
59
148
  /**
60
- * Add player CSS style.
149
+ * Get the duration of the video.
150
+ * @async
151
+ * @returns {Promise<number>} The duration of the video in seconds.
61
152
  */
62
- private add_player_css_style;
153
+ getDuration(): Promise<number>;
63
154
  /**
64
- * Get video data from API.
155
+ * Gets the title of the video.
156
+ * @returns {Promise<string>} The title of the video.
157
+ */
158
+ getTitle(): Promise<string>;
159
+ /**
160
+ * Returns the current state of the player.
161
+ * @async
162
+ * @returns {number} The state of the player. Possible values are:
163
+ * 0 - Player is not ready or cache is not available.
164
+ * 1 - Player is ready and not playing.
165
+ * 2 - Player is playing.
166
+ * 3 - Player is paused.
167
+ * 4 - Player was ended.
168
+ */
169
+ getPlayerState(): Promise<number>;
170
+ /**
171
+ * Sets the volume of the Bilibili player.
172
+ * When not install extention, this function will not work.
173
+ * @param {number} volume - The volume level to set, between 0 and 100.
65
174
  */
66
- private getVideodataApi;
67
- playVideo(): void;
68
- pauseVideo(): void;
69
- getCurrentTime(): Promise<number>;
70
- getDuration(): Promise<number>;
71
- seekTo(time: number): Promise<void>;
72
175
  setVolume(volume: number): void;
73
- getVolume(): Promise<number>;
74
- mute(): void;
75
- unMute(): void;
76
- isMuted(): Promise<boolean>;
77
- getPlayerState(): Promise<PlayerState>;
78
176
  /**
79
- * Get real duration between start and end times.
177
+ * Gets the current volume of the Bilibili player.
178
+ * When not install extention, this function will not work.
179
+ * @returns {number} The current volume value.
80
180
  */
81
- getRealDulation(): Promise<number>;
181
+ getVolume(): number | undefined;
82
182
  /**
83
- * Load video by ID.
183
+ * Checks if the player is currently muted.
184
+ * When not install extention, this function will not work.
185
+ * @returns {boolean} True if the player is muted, false otherwise.
84
186
  */
85
- loadVideoById(content: BilibiliContent): void;
187
+ isMuted(): boolean | undefined;
188
+ /**
189
+ * Mutes the player by setting the volume to 0.
190
+ * When not install extention, this function will not work.
191
+ * @function
192
+ * @returns {void}
193
+ */
194
+ mute(): void;
195
+ /**
196
+ * Unmutes the player by setting the volume to the previous volume.
197
+ * When not install extention, this function will not work.
198
+ * @function
199
+ * @returns {void}
200
+ */
201
+ unMute(): void;
86
202
  /**
87
- * Cue video by ID.
203
+ * Sends a message to the player's content window to display or hide comments.
204
+ * When not install extention, this function will not work.
205
+ * @param {string} mode - The visibility mode of the comments. Possible values are "visible" or "hidden".
206
+ * @returns {void}
88
207
  */
89
- cueVideoById(content: BilibiliContent): void;
208
+ displayComment(mode: string): void;
90
209
  }
91
210
  //# sourceMappingURL=bilibili.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bilibili.d.ts","sourceRoot":"","sources":["../../iframe_api/bilibili.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAsB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAkBnG;;GAEG;AACH,qBAAa,YAAa,YAAW,OAAO;IAC1C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAM9B;IAEF,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAwB;IACxD,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAkB;IACvD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAqD;IAChF,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAiQ;IAClS,OAAO,CAAC,MAAM,CAAC,eAAe,CAAc;IAC5C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAwB;IACzD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAc;IACvC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAa;IAC7C,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAA0B;IAE7D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAkB;gBAG7B,iBAAiB,EAAE,MAAM,GAAG,WAAW,EACvC,OAAO,EAAE,eAAe,EACxB,yBAAyB,CAAC,EAAE,YAAY;IAM1C;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAWlC;;OAEG;YACW,mBAAmB;IA0EjC;;OAEG;YACW,YAAY;IA0C1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoD7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAWhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;YACW,eAAe;IAoC7B,SAAS,IAAI,IAAI;IASjB,UAAU,IAAI,IAAI;IAQlB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAczC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAc/B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAS5B,IAAI,IAAI,IAAI;IASZ,MAAM,IAAI,IAAI;IAQd,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAItC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IASxC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAW7C;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;CAU7C"}
1
+ {"version":3,"file":"bilibili.d.ts","sourceRoot":"","sources":["../../iframe_api/bilibili.ts"],"names":[],"mappings":"AAIA,UAAU,uBAAuB;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,oBAAoB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,mBAAmB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,UAAU,mBAAmB;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,cAAM,YAAY;;IACd,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAAoC;IAC3E,iBAAiB,EAAE,OAAO,CAAS;IACnC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAS;IACzB,kBAAkB,EAAE,MAAM,CAAO;IACjC,aAAa,EAAE,MAAM,CAAK;IAC1B,cAAc,EAAE,MAAM,CAAK;IAC3B,OAAO,EAAE,MAAM,CAAM;IACrB,0BAA0B,EAAE,WAAW,CAAiC;IACxE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpE,SAAS,EAAE,MAAM,CAAK;IACtB,cAAc,EAAE,OAAO,CAAS;IAChC,sBAAsB,EAAE,MAAM,CAAK;IACnC,KAAK,EAAE,mBAAmB,CAA2B;IACrD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACnC,kBAAkB,EAAE,OAAO,CAAS;IACpC,YAAY,EAAE,MAAM,CAAK;IACzB,iBAAiB,EAAE,MAAM,CAAK;IAC9B,aAAa,EAAE,OAAO,CAAS;IAC/B,kBAAkB,EAAE,OAAO,CAAS;IACpC,QAAQ,EAAE,OAAO,CAAS;IAC1B,0BAA0B,EAAE,OAAO,CAAS;IAC5C,eAAe,EAAE,MAAM,CAAK;IAC5B,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAM;IACxB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAK;IAC9B,eAAe,EAAE,MAAM,CAAK;IAE5B,MAAM,CAAC,iBAAiB;;;;;;MAAmK;IAC3L,MAAM,CAAC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAQ;IAChD,MAAM,CAAC,sBAAsB,UAAS;IACtC,MAAM,CAAC,YAAY,SAA6C;IAChE,MAAM,CAAC,kBAAkB,SAAwP;IACjR,MAAM,CAAC,eAAe,SAAM;IAC5B,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAM;IACpE,MAAM,CAAC,UAAU,SAAM;IACvB,MAAM,CAAC,iBAAiB,SAAK;IAC7B,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC,EAAE,CAAC;QAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE,CAAA;KAAC,CAAC,CAAO;gBACxH,iBAAiB,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI;IAsbnJ;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAuB1D;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAmI3D;;;OAGG;IACH,cAAc,IAAI,MAAM;IAmBxB;;;OAGG;IACH,SAAS,IAAI,IAAI;IAyBjB;;;OAGG;IACH,UAAU,IAAI,IAAI;IAalB;;;;OAIG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB7C;;;;;OAKG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAiFxC;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAUpC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IASjC;;;;;;;;;OASG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IA4CvC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/B;;;;OAIG;IACH,SAAS,IAAI,MAAM,GAAG,SAAS;IAS/B;;;;OAIG;IACH,OAAO,IAAI,OAAO,GAAG,SAAS;IAc9B;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IASZ;;;;;OAKG;IACH,MAAM,IAAI,IAAI;IAQd;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAkCrC"}