ziplayer 0.0.8 → 0.1.0

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/README.md CHANGED
@@ -17,6 +17,7 @@ A modular Discord voice player with plugin system for @discordjs/voice.
17
17
  - 🔔 **Event-driven** - Rich event system for all player actions
18
18
  - 🎭 **Multi-guild support** - Manage players across multiple Discord servers
19
19
  - 🗃️ **User data** - Attach custom data to each player for later use
20
+ - 🔌 **Lavalink** - Support manage an external Lavalink JVM node
20
21
 
21
22
  ## Installation
22
23
 
@@ -120,41 +121,71 @@ Notes
120
121
  - For CPU-heavy TTS generation, consider offloading to `worker_threads` or a separate process and pass a stream/buffer to the
121
122
  plugin.
122
123
 
123
- ## Creating Custom Plugins
124
+ ### Player Lifecycle Overview
124
125
 
125
- ```typescript
126
- import { BasePlugin, Track, SearchResult, StreamInfo } from "ziplayer";
127
-
128
- export class MyPlugin extends BasePlugin {
129
- name = "myplugin";
130
- version = "1.0.0";
131
-
132
- canHandle(query: string): boolean {
133
- return query.includes("mysite.com");
134
- }
135
-
136
- async search(query: string, requestedBy: string): Promise<SearchResult> {
137
- // Implement search logic
138
- return {
139
- tracks: [
140
- /* ... */
141
- ],
142
- };
143
- }
144
-
145
- async getStream(track: Track): Promise<StreamInfo> {
146
- // Return audio stream
147
- return { stream, type: "arbitrary" };
148
- }
149
- }
126
+ ```
127
+ PlayerManager.create(guild, opts)
128
+
129
+
130
+ [Player constructor]
131
+ - setup event listeners
132
+ - freeze ExtensionContext { player, manager }
133
+ - register plugins
134
+
135
+
136
+ attachExtension(ext)
137
+ - set ext.player
138
+ - ext.onRegister?(context)
139
+ - ext.active?(...) → false ⇒ detach
140
+
141
+
142
+ player.play(query, by)
143
+ - runBeforePlayHooks → extensions may mutate query/tracks/start Lavalink
144
+ - resolve track list / queue updates / TTS interrupt check
145
+ - extensionsProvideStream → extension stream overrides plugin pipeline
146
+ - plugin.getStream / getFallback
147
+
148
+
149
+ Audio playback
150
+ - trackStart / queue events emitted
151
+ - runAfterPlayHooks with final outcome
152
+
153
+
154
+ player.destroy()
155
+ - stop audio/voice / clear queue & plugins
156
+ - ext.onDestroy?(context) for each attached extension
157
+ - emit playerDestroy & cleanup references
150
158
  ```
151
159
 
152
- ## Progress Bar
160
+ This diagram shows how custom extensions (voice, lyrics, Lavalink, etc.) integrate across the full player lifecycle and where
161
+ their hooks are invoked.
153
162
 
154
- Display the current playback progress with `getProgressBar`:
163
+ ### Lavalink Process
155
164
 
156
- ```typescript
157
- console.log(player.getProgressBar({ size: 30, barChar: "-", progressChar: "🔘" }));
165
+ Use `lavalinkExt` when you need ZiPlayer to manage an external Lavalink JVM node. The extension starts, stops, and optionally
166
+ restarts the Lavalink jar and forwards lifecycle events through the manager/player.
167
+
168
+ ```ts
169
+ import { PlayerManager } from "ziplayer";
170
+ import { lavalinkExt } from "@ziplayer/extension";
171
+
172
+ const lavalink = new lavalinkExt(null, {
173
+ nodes: [
174
+ {
175
+ identifier: "locallavalink",
176
+ password: "youshallnotpass",
177
+ host: "localhost",
178
+ port: 2333,
179
+ secure: false,
180
+ },
181
+ ],
182
+ client: client,
183
+ searchPrefix: "scsearch",
184
+ });
185
+
186
+ const manager = new PlayerManager({
187
+ extensions: ["lavalinkExt"],
188
+ });
158
189
  ```
159
190
 
160
191
  ## Events
@@ -1,9 +1,15 @@
1
- import { SourceExtension } from "../types";
2
- import { Player } from "../structures/Player";
1
+ import type { SourceExtension, ExtensionContext, SearchResult, ExtensionPlayRequest, ExtensionPlayResponse, ExtensionAfterPlayPayload, ExtensionStreamRequest, StreamInfo, ExtensionSearchRequest } from "../types";
2
+ import type { Player } from "../structures/Player";
3
3
  export declare abstract class BaseExtension implements SourceExtension {
4
4
  abstract name: string;
5
5
  abstract version: string;
6
6
  abstract player: Player | null;
7
- abstract active(alas: any): boolean;
7
+ abstract active(alas: any): boolean | Promise<boolean>;
8
+ onRegister?(context: ExtensionContext): void | Promise<void>;
9
+ onDestroy?(context: ExtensionContext): void | Promise<void>;
10
+ beforePlay?(context: ExtensionContext, payload: ExtensionPlayRequest): Promise<ExtensionPlayResponse | void> | ExtensionPlayResponse | void;
11
+ afterPlay?(context: ExtensionContext, payload: ExtensionAfterPlayPayload): Promise<void> | void;
12
+ provideSearch?(context: ExtensionContext, payload: ExtensionSearchRequest): Promise<SearchResult | null | undefined> | SearchResult | null | undefined;
13
+ provideStream?(context: ExtensionContext, payload: ExtensionStreamRequest): Promise<StreamInfo | null | undefined> | StreamInfo | null | undefined;
8
14
  }
9
15
  //# sourceMappingURL=BaseExtension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/BaseExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAmC,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,8BAAsB,aAAc,YAAW,eAAe;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO;CACnC"}
1
+ {"version":3,"file":"BaseExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/BaseExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,8BAAsB,aAAc,YAAW,eAAe;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtD,UAAU,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5D,SAAS,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3D,UAAU,CAAC,CACV,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,qBAAqB,GAAG,IAAI;IACvE,SAAS,CAAC,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC/F,aAAa,CAAC,CACb,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,sBAAsB,GAC7B,OAAO,CAAC,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS;IAC7E,aAAa,CAAC,CACb,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,sBAAsB,GAC7B,OAAO,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS;CACzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseExtension.js","sourceRoot":"","sources":["../../src/extensions/BaseExtension.ts"],"names":[],"mappings":";;;AAGA,MAAsB,aAAa;CAMlC;AAND,sCAMC"}
1
+ {"version":3,"file":"BaseExtension.js","sourceRoot":"","sources":["../../src/extensions/BaseExtension.ts"],"names":[],"mappings":";;;AAaA,MAAsB,aAAa;CAqBlC;AArBD,sCAqBC"}
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter } from "events";
2
2
  import { VoiceConnection, AudioPlayer as DiscordAudioPlayer } from "@discordjs/voice";
3
3
  import { VoiceChannel } from "discord.js";
4
+ import { BaseExtension } from "../extensions";
4
5
  import { Track, PlayerOptions, PlayerEvents, SourcePlugin, SearchResult, ProgressBarOptions, LoopMode } from "../types";
5
6
  import { Queue } from "./Queue";
6
7
  import { PluginManager } from "../plugins";
@@ -9,6 +10,42 @@ export declare interface Player {
9
10
  on<K extends keyof PlayerEvents>(event: K, listener: (...args: PlayerEvents[K]) => void): this;
10
11
  emit<K extends keyof PlayerEvents>(event: K, ...args: PlayerEvents[K]): boolean;
11
12
  }
13
+ /**
14
+ * Represents a music player for a specific Discord guild.
15
+ *
16
+ * @example
17
+ * // Create and configure player
18
+ * const player = await manager.create(guildId, {
19
+ * tts: { interrupt: true, volume: 1 },
20
+ * leaveOnEnd: true,
21
+ * leaveTimeout: 30000
22
+ * });
23
+ *
24
+ * // Connect to voice channel
25
+ * await player.connect(voiceChannel);
26
+ *
27
+ * // Play different types of content
28
+ * await player.play("Never Gonna Give You Up", userId); // Search query
29
+ * await player.play("https://youtube.com/watch?v=dQw4w9WgXcQ", userId); // Direct URL
30
+ * await player.play("tts: Hello everyone!", userId); // Text-to-Speech
31
+ *
32
+ * // Player controls
33
+ * player.pause(); // Pause current track
34
+ * player.resume(); // Resume paused track
35
+ * player.skip(); // Skip to next track
36
+ * player.stop(); // Stop and clear queue
37
+ * player.setVolume(0.5); // Set volume to 50%
38
+ *
39
+ * // Event handling
40
+ * player.on("trackStart", (player, track) => {
41
+ * console.log(`Now playing: ${track.title}`);
42
+ * });
43
+ *
44
+ * player.on("queueEnd", (player) => {
45
+ * console.log("Queue finished");
46
+ * });
47
+ *
48
+ */
12
49
  export declare class Player extends EventEmitter {
13
50
  readonly guildId: string;
14
51
  connection: VoiceConnection | null;
@@ -25,6 +62,38 @@ export declare class Player extends EventEmitter {
25
62
  private currentResource;
26
63
  private volumeInterval;
27
64
  private skipLoop;
65
+ private extensions;
66
+ private extensionContext;
67
+ /**
68
+ * Attach an extension to the player
69
+ *
70
+ * @param {BaseExtension} extension - The extension to attach
71
+ * @example
72
+ * player.attachExtension(new MyExtension());
73
+ */
74
+ attachExtension(extension: BaseExtension): void;
75
+ /**
76
+ * Detach an extension from the player
77
+ *
78
+ * @param {BaseExtension} extension - The extension to detach
79
+ * @example
80
+ * player.detachExtension(new MyExtension());
81
+ */
82
+ detachExtension(extension: BaseExtension): void;
83
+ /**
84
+ * Get all extensions attached to the player
85
+ *
86
+ * @returns {readonly BaseExtension[]} All attached extensions
87
+ * @example
88
+ * const extensions = player.getExtensions();
89
+ * console.log(`Extensions: ${extensions.length}`);
90
+ */
91
+ getExtensions(): readonly BaseExtension[];
92
+ private invokeExtensionLifecycle;
93
+ private runBeforePlayHooks;
94
+ private runAfterPlayHooks;
95
+ private extensionsProvideSearch;
96
+ private extensionsProvideStream;
28
97
  /**
29
98
  * Start playing a specific track immediately, replacing the current resource.
30
99
  */
@@ -33,58 +102,286 @@ export declare class Player extends EventEmitter {
33
102
  private ttsQueue;
34
103
  private ttsActive;
35
104
  private clearLeaveTimeout;
36
- private withTimeout;
37
105
  private debug;
38
106
  constructor(guildId: string, options: PlayerOptions | undefined, manager: PlayerManager);
39
107
  private setupEventListeners;
40
108
  private ensureTTSPlayer;
41
109
  addPlugin(plugin: SourcePlugin): void;
42
110
  removePlugin(name: string): boolean;
111
+ /**
112
+ * Connect to a voice channel
113
+ *
114
+ * @param {VoiceChannel} channel - Discord voice channel
115
+ * @returns {Promise<VoiceConnection>} The voice connection
116
+ * @example
117
+ * await player.connect(voiceChannel);
118
+ */
43
119
  connect(channel: VoiceChannel): Promise<VoiceConnection>;
120
+ /**
121
+ * Search for tracks using the player's extensions and plugins
122
+ *
123
+ * @param {string} query - The query to search for
124
+ * @param {string} requestedBy - The user ID who requested the search
125
+ * @returns {Promise<SearchResult>} The search result
126
+ * @example
127
+ * const result = await player.search("Never Gonna Give You Up", userId);
128
+ * console.log(`Search result: ${result.tracks.length} tracks`);
129
+ */
44
130
  search(query: string, requestedBy: string): Promise<SearchResult>;
131
+ /**
132
+ * Play a track or search query
133
+ *
134
+ * @param {string | Track} query - Track URL, search query, or Track object
135
+ * @param {string} requestedBy - User ID who requested the track
136
+ * @returns {Promise<boolean>} True if playback started successfully
137
+ * @example
138
+ * await player.play("Never Gonna Give You Up", userId);
139
+ * await player.play("https://youtube.com/watch?v=dQw4w9WgXcQ", userId);
140
+ * await player.play("tts: Hello everyone!", userId);
141
+ */
45
142
  play(query: string | Track, requestedBy?: string): Promise<boolean>;
46
143
  /**
47
144
  * Interrupt current music with a TTS track. Pauses music, swaps the
48
145
  * subscription to a dedicated TTS player, plays TTS, then resumes.
146
+ *
147
+ * @param {Track} track - The track to interrupt with
148
+ * @returns {Promise<void>}
149
+ * @example
150
+ * await player.interruptWithTTSTrack(track);
49
151
  */
50
152
  interruptWithTTSTrack(track: Track): Promise<void>;
51
- /** Play queued TTS items sequentially */
153
+ /**
154
+ * Play queued TTS items sequentially
155
+ *
156
+ * @returns {Promise<void>}
157
+ * @example
158
+ * await player.playNextTTS();
159
+ */
52
160
  private playNextTTS;
53
161
  /** Build AudioResource for a given track using the plugin pipeline */
54
162
  private resourceFromTrack;
55
163
  private generateWillNext;
56
164
  private playNext;
165
+ /**
166
+ * Pause the current track
167
+ *
168
+ * @returns {boolean} True if paused successfully
169
+ * @example
170
+ * const paused = player.pause();
171
+ * console.log(`Paused: ${paused}`);
172
+ */
57
173
  pause(): boolean;
174
+ /**
175
+ * Resume the current track
176
+ *
177
+ * @returns {boolean} True if resumed successfully
178
+ * @example
179
+ * const resumed = player.resume();
180
+ * console.log(`Resumed: ${resumed}`);
181
+ */
58
182
  resume(): boolean;
183
+ /**
184
+ * Stop the current track
185
+ *
186
+ * @returns {boolean} True if stopped successfully
187
+ * @example
188
+ * const stopped = player.stop();
189
+ * console.log(`Stopped: ${stopped}`);
190
+ */
59
191
  stop(): boolean;
192
+ /**
193
+ * Skip to the next track
194
+ *
195
+ * @returns {boolean} True if skipped successfully
196
+ * @example
197
+ * const skipped = player.skip();
198
+ * console.log(`Skipped: ${skipped}`);
199
+ */
60
200
  skip(): boolean;
61
201
  /**
62
202
  * Go back to the previous track in history and play it.
203
+ *
204
+ * @returns {Promise<boolean>} True if previous track was played successfully
205
+ * @example
206
+ * const previous = await player.previous();
207
+ * console.log(`Previous: ${previous}`);
63
208
  */
64
209
  previous(): Promise<boolean>;
210
+ /**
211
+ * Loop the current track
212
+ *
213
+ * @param {LoopMode} mode - The loop mode to set
214
+ * @returns {LoopMode} The loop mode
215
+ * @example
216
+ * const loopMode = player.loop("track");
217
+ * console.log(`Loop mode: ${loopMode}`);
218
+ */
65
219
  loop(mode?: LoopMode): LoopMode;
220
+ /**
221
+ * Set the auto-play mode
222
+ *
223
+ * @param {boolean} mode - The auto-play mode to set
224
+ * @returns {boolean} The auto-play mode
225
+ * @example
226
+ * const autoPlayMode = player.autoPlay(true);
227
+ * console.log(`Auto-play mode: ${autoPlayMode}`);
228
+ */
66
229
  autoPlay(mode?: boolean): boolean;
230
+ /**
231
+ * Set the volume of the current track
232
+ *
233
+ * @param {number} volume - The volume to set
234
+ * @returns {boolean} True if volume was set successfully
235
+ * @example
236
+ * const volumeSet = player.setVolume(50);
237
+ * console.log(`Volume set: ${volumeSet}`);
238
+ */
67
239
  setVolume(volume: number): boolean;
240
+ /**
241
+ * Shuffle the queue
242
+ *
243
+ * @returns {void}
244
+ * @example
245
+ * player.shuffle();
246
+ */
68
247
  shuffle(): void;
248
+ /**
249
+ * Clear the queue
250
+ *
251
+ * @returns {void}
252
+ * @example
253
+ * player.clearQueue();
254
+ */
69
255
  clearQueue(): void;
70
256
  /**
71
257
  * Insert a track or list of tracks into the upcoming queue at a specific position (0 = play after current).
72
258
  * - If `query` is a string, performs a search and inserts resulting tracks (playlist supported).
73
259
  * - If a Track or Track[] is provided, inserts directly.
74
260
  * Does not auto-start playback; it only modifies the queue.
261
+ *
262
+ * @param {string | Track | Track[]} query - The track or tracks to insert
263
+ * @param {number} index - The index to insert the tracks at
264
+ * @param {string} requestedBy - The user ID who requested the insert
265
+ * @returns {Promise<boolean>} True if the tracks were inserted successfully
266
+ * @example
267
+ * const inserted = await player.insert("Song Name", 0, userId);
268
+ * console.log(`Inserted: ${inserted}`);
75
269
  */
76
270
  insert(query: string | Track | Track[], index: number, requestedBy?: string): Promise<boolean>;
271
+ /**
272
+ * Remove a track from the queue
273
+ *
274
+ * @param {number} index - The index of the track to remove
275
+ * @returns {Track | null} The removed track or null
276
+ * @example
277
+ * const removed = player.remove(0);
278
+ * console.log(`Removed: ${removed?.title}`);
279
+ */
77
280
  remove(index: number): Track | null;
281
+ /**
282
+ * Get the progress bar of the current track
283
+ *
284
+ * @param {ProgressBarOptions} options - The options for the progress bar
285
+ * @returns {string} The progress bar
286
+ * @example
287
+ * const progressBar = player.getProgressBar();
288
+ * console.log(`Progress bar: ${progressBar}`);
289
+ */
78
290
  getProgressBar(options?: ProgressBarOptions): string;
291
+ /**
292
+ * Get the time of the current track
293
+ *
294
+ * @returns {Object} The time of the current track
295
+ * @example
296
+ * const time = player.getTime();
297
+ * console.log(`Time: ${time.current}`);
298
+ */
299
+ getTime(): {
300
+ current: number;
301
+ total: number;
302
+ format: string;
303
+ };
304
+ /**
305
+ * Format the time in the format of HH:MM:SS
306
+ *
307
+ * @param {number} ms - The time in milliseconds
308
+ * @returns {string} The formatted time
309
+ * @example
310
+ * const formattedTime = player.formatTime(1000);
311
+ * console.log(`Formatted time: ${formattedTime}`);
312
+ */
79
313
  formatTime(ms: number): string;
80
314
  private scheduleLeave;
315
+ /**
316
+ * Destroy the player
317
+ *
318
+ * @returns {void}
319
+ * @example
320
+ * player.destroy();
321
+ */
81
322
  destroy(): void;
323
+ /**
324
+ * Get the size of the queue
325
+ *
326
+ * @returns {number} The size of the queue
327
+ * @example
328
+ * const queueSize = player.queueSize;
329
+ * console.log(`Queue size: ${queueSize}`);
330
+ */
82
331
  get queueSize(): number;
332
+ /**
333
+ * Get the current track
334
+ *
335
+ * @returns {Track | null} The current track or null
336
+ * @example
337
+ * const currentTrack = player.currentTrack;
338
+ * console.log(`Current track: ${currentTrack?.title}`);
339
+ */
83
340
  get currentTrack(): Track | null;
341
+ /**
342
+ * Get the previous track
343
+ *
344
+ * @returns {Track | null} The previous track or null
345
+ * @example
346
+ * const previousTrack = player.previousTrack;
347
+ * console.log(`Previous track: ${previousTrack?.title}`);
348
+ */
84
349
  get previousTrack(): Track | null;
350
+ /**
351
+ * Get the upcoming tracks
352
+ *
353
+ * @returns {Track[]} The upcoming tracks
354
+ * @example
355
+ * const upcomingTracks = player.upcomingTracks;
356
+ * console.log(`Upcoming tracks: ${upcomingTracks.length}`);
357
+ */
85
358
  get upcomingTracks(): Track[];
359
+ /**
360
+ * Get the previous tracks
361
+ *
362
+ * @returns {Track[]} The previous tracks
363
+ * @example
364
+ * const previousTracks = player.previousTracks;
365
+ * console.log(`Previous tracks: ${previousTracks.length}`);
366
+ */
86
367
  get previousTracks(): Track[];
368
+ /**
369
+ * Get the available plugins
370
+ *
371
+ * @returns {string[]} The available plugins
372
+ * @example
373
+ * const availablePlugins = player.availablePlugins;
374
+ * console.log(`Available plugins: ${availablePlugins.length}`);
375
+ */
87
376
  get availablePlugins(): string[];
377
+ /**
378
+ * Get the related tracks
379
+ *
380
+ * @returns {Track[] | null} The related tracks or null
381
+ * @example
382
+ * const relatedTracks = player.relatedTracks;
383
+ * console.log(`Related tracks: ${relatedTracks?.length}`);
384
+ */
88
385
  get relatedTracks(): Track[] | null;
89
386
  }
90
387
  //# sourceMappingURL=Player.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":"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"}