@arcadiasol/game-sdk 1.0.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.
@@ -0,0 +1,617 @@
1
+ /**
2
+ * Message types for postMessage communication
3
+ */
4
+ var MessageType;
5
+ (function (MessageType) {
6
+ // SDK → Parent
7
+ MessageType["INIT_REQUEST"] = "INIT_REQUEST";
8
+ MessageType["GET_WALLET_ADDRESS"] = "GET_WALLET_ADDRESS";
9
+ MessageType["PAYMENT_REQUEST"] = "PAYMENT_REQUEST";
10
+ MessageType["GAME_READY"] = "GAME_READY";
11
+ // Parent → SDK
12
+ MessageType["INIT"] = "INIT";
13
+ MessageType["WALLET_ADDRESS_RESPONSE"] = "WALLET_ADDRESS_RESPONSE";
14
+ MessageType["WALLET_UPDATE"] = "WALLET_UPDATE";
15
+ MessageType["PAYMENT_RESPONSE"] = "PAYMENT_RESPONSE";
16
+ })(MessageType || (MessageType = {}));
17
+
18
+ /**
19
+ * Base error class for all SDK errors
20
+ */
21
+ class ArcadiaSDKError extends Error {
22
+ constructor(message, code) {
23
+ super(message);
24
+ this.code = code;
25
+ this.name = 'ArcadiaSDKError';
26
+ Object.setPrototypeOf(this, ArcadiaSDKError.prototype);
27
+ }
28
+ }
29
+ /**
30
+ * Error thrown when wallet is not connected
31
+ */
32
+ class WalletNotConnectedError extends ArcadiaSDKError {
33
+ constructor(message = 'Wallet is not connected. Please connect your wallet in Arcadia.') {
34
+ super(message, 'WALLET_NOT_CONNECTED');
35
+ this.name = 'WalletNotConnectedError';
36
+ Object.setPrototypeOf(this, WalletNotConnectedError.prototype);
37
+ }
38
+ }
39
+ /**
40
+ * Error thrown when payment fails
41
+ */
42
+ class PaymentFailedError extends ArcadiaSDKError {
43
+ constructor(message = 'Payment failed', txSignature) {
44
+ super(message, 'PAYMENT_FAILED');
45
+ this.txSignature = txSignature;
46
+ this.name = 'PaymentFailedError';
47
+ Object.setPrototypeOf(this, PaymentFailedError.prototype);
48
+ }
49
+ }
50
+ /**
51
+ * Error thrown when request times out
52
+ */
53
+ class TimeoutError extends ArcadiaSDKError {
54
+ constructor(message = 'Request timed out. Please try again.') {
55
+ super(message, 'TIMEOUT');
56
+ this.name = 'TimeoutError';
57
+ Object.setPrototypeOf(this, TimeoutError.prototype);
58
+ }
59
+ }
60
+ /**
61
+ * Error thrown when SDK configuration is invalid
62
+ */
63
+ class InvalidConfigError extends ArcadiaSDKError {
64
+ constructor(message = 'Invalid SDK configuration') {
65
+ super(message, 'INVALID_CONFIG');
66
+ this.name = 'InvalidConfigError';
67
+ Object.setPrototypeOf(this, InvalidConfigError.prototype);
68
+ }
69
+ }
70
+ /**
71
+ * Error thrown when SDK is not running in iframe
72
+ */
73
+ class NotInIframeError extends ArcadiaSDKError {
74
+ constructor(message = 'This function only works when the game is running in an Arcadia iframe') {
75
+ super(message, 'NOT_IN_IFRAME');
76
+ this.name = 'NotInIframeError';
77
+ Object.setPrototypeOf(this, NotInIframeError.prototype);
78
+ }
79
+ }
80
+ /**
81
+ * Error thrown when invalid amount is provided
82
+ */
83
+ class InvalidAmountError extends ArcadiaSDKError {
84
+ constructor(message = 'Invalid payment amount. Amount must be greater than 0.') {
85
+ super(message, 'INVALID_AMOUNT');
86
+ this.name = 'InvalidAmountError';
87
+ Object.setPrototypeOf(this, InvalidAmountError.prototype);
88
+ }
89
+ }
90
+ /**
91
+ * Error thrown when invalid token is provided
92
+ */
93
+ class InvalidTokenError extends ArcadiaSDKError {
94
+ constructor(message = "Invalid token. Must be 'SOL' or 'USDC'.") {
95
+ super(message, 'INVALID_TOKEN');
96
+ this.name = 'InvalidTokenError';
97
+ Object.setPrototypeOf(this, InvalidTokenError.prototype);
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Handles postMessage communication with parent window
103
+ */
104
+ class MessageHandler {
105
+ constructor(parentOrigin = '*', timeout = 30000) {
106
+ this.messageId = 0;
107
+ this.pendingRequests = new Map();
108
+ this.messageListener = null;
109
+ this.parentOrigin = parentOrigin;
110
+ this.timeout = timeout;
111
+ }
112
+ /**
113
+ * Initialize message listener
114
+ */
115
+ init() {
116
+ if (this.messageListener) {
117
+ return; // Already initialized
118
+ }
119
+ this.messageListener = (event) => {
120
+ this.handleMessage(event);
121
+ };
122
+ window.addEventListener('message', this.messageListener);
123
+ }
124
+ /**
125
+ * Cleanup message listener
126
+ */
127
+ destroy() {
128
+ if (this.messageListener) {
129
+ window.removeEventListener('message', this.messageListener);
130
+ this.messageListener = null;
131
+ }
132
+ // Clear all pending requests
133
+ this.pendingRequests.forEach((request) => {
134
+ clearTimeout(request.timeout);
135
+ request.reject(new Error('Message handler destroyed'));
136
+ });
137
+ this.pendingRequests.clear();
138
+ }
139
+ /**
140
+ * Send message to parent window and wait for response
141
+ */
142
+ sendMessage(type, payload) {
143
+ return new Promise((resolve, reject) => {
144
+ const id = ++this.messageId;
145
+ // Set up timeout
146
+ const timeout = setTimeout(() => {
147
+ this.pendingRequests.delete(id);
148
+ reject(new TimeoutError(`Request ${type} timed out after ${this.timeout}ms`));
149
+ }, this.timeout);
150
+ // Store request
151
+ this.pendingRequests.set(id, {
152
+ resolve: (value) => {
153
+ clearTimeout(timeout);
154
+ resolve(value);
155
+ },
156
+ reject: (error) => {
157
+ clearTimeout(timeout);
158
+ reject(error);
159
+ },
160
+ timeout,
161
+ });
162
+ // Send message to parent
163
+ const message = {
164
+ type,
165
+ id,
166
+ payload,
167
+ };
168
+ if (window.parent) {
169
+ window.parent.postMessage(message, this.parentOrigin);
170
+ }
171
+ else {
172
+ clearTimeout(timeout);
173
+ this.pendingRequests.delete(id);
174
+ reject(new Error('No parent window found'));
175
+ }
176
+ });
177
+ }
178
+ /**
179
+ * Handle incoming messages from parent
180
+ */
181
+ handleMessage(event) {
182
+ // Validate origin if specified
183
+ if (this.parentOrigin !== '*' && event.origin !== this.parentOrigin) {
184
+ return; // Ignore messages from unauthorized origins
185
+ }
186
+ const message = event.data;
187
+ // Handle response messages (have ID)
188
+ if (message.id !== undefined) {
189
+ const request = this.pendingRequests.get(message.id);
190
+ if (request) {
191
+ this.pendingRequests.delete(message.id);
192
+ if (message.type === MessageType.PAYMENT_RESPONSE) {
193
+ const response = message.payload;
194
+ if (response.success) {
195
+ request.resolve(response);
196
+ }
197
+ else {
198
+ request.reject(new Error(response.error || 'Payment failed'));
199
+ }
200
+ }
201
+ else if (message.type === MessageType.WALLET_ADDRESS_RESPONSE) {
202
+ request.resolve(message.payload);
203
+ }
204
+ else if (message.type === MessageType.INIT) {
205
+ request.resolve(message.payload);
206
+ }
207
+ else {
208
+ // Generic response - resolve with payload
209
+ request.resolve(message.payload);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ /**
215
+ * Send one-way message (no response expected)
216
+ */
217
+ sendOneWay(type, payload) {
218
+ const message = {
219
+ type,
220
+ payload,
221
+ };
222
+ if (window.parent) {
223
+ window.parent.postMessage(message, this.parentOrigin);
224
+ }
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Wallet address management
230
+ */
231
+ class WalletManager {
232
+ constructor(messageHandler, isIframe) {
233
+ this.walletAddress = null;
234
+ this.walletConnected = false;
235
+ this.walletChangeCallbacks = [];
236
+ this.messageHandler = messageHandler;
237
+ this.isIframe = isIframe;
238
+ }
239
+ /**
240
+ * Get wallet address from parent window
241
+ */
242
+ async getWalletAddress() {
243
+ if (!this.isIframe) {
244
+ throw new NotInIframeError();
245
+ }
246
+ try {
247
+ const response = await this.messageHandler.sendMessage(MessageType.GET_WALLET_ADDRESS);
248
+ this.walletAddress = response.walletAddress;
249
+ this.walletConnected = response.connected;
250
+ return this.walletAddress;
251
+ }
252
+ catch (error) {
253
+ // If request fails, assume wallet not connected
254
+ this.walletAddress = null;
255
+ this.walletConnected = false;
256
+ return null;
257
+ }
258
+ }
259
+ /**
260
+ * Check if wallet is connected
261
+ */
262
+ async isWalletConnected() {
263
+ if (!this.isIframe) {
264
+ return false;
265
+ }
266
+ // If we have cached address, return true
267
+ if (this.walletAddress) {
268
+ return true;
269
+ }
270
+ // Otherwise, fetch from parent
271
+ const address = await this.getWalletAddress();
272
+ return address !== null;
273
+ }
274
+ /**
275
+ * Listen for wallet connection changes
276
+ */
277
+ onWalletChange(callback) {
278
+ this.walletChangeCallbacks.push(callback);
279
+ }
280
+ /**
281
+ * Remove wallet change listener
282
+ */
283
+ offWalletChange(callback) {
284
+ const index = this.walletChangeCallbacks.indexOf(callback);
285
+ if (index > -1) {
286
+ this.walletChangeCallbacks.splice(index, 1);
287
+ }
288
+ }
289
+ /**
290
+ * Update wallet status (called by SDK when receiving WALLET_UPDATE message)
291
+ */
292
+ updateWalletStatus(walletInfo) {
293
+ const oldAddress = this.walletAddress;
294
+ const oldConnected = this.walletConnected;
295
+ this.walletAddress = walletInfo.address;
296
+ this.walletConnected = walletInfo.connected;
297
+ // Notify callbacks if status changed
298
+ if (oldAddress !== this.walletAddress || oldConnected !== this.walletConnected) {
299
+ this.walletChangeCallbacks.forEach((callback) => {
300
+ try {
301
+ callback(this.walletConnected, this.walletAddress);
302
+ }
303
+ catch (error) {
304
+ console.error('Error in wallet change callback:', error);
305
+ }
306
+ });
307
+ }
308
+ }
309
+ /**
310
+ * Get current cached wallet address (without fetching)
311
+ */
312
+ getCachedWalletAddress() {
313
+ return this.walletAddress;
314
+ }
315
+ /**
316
+ * Get current cached connection status (without fetching)
317
+ */
318
+ getCachedConnectionStatus() {
319
+ return this.walletConnected;
320
+ }
321
+ /**
322
+ * Clear cached wallet data
323
+ */
324
+ clearCache() {
325
+ this.walletAddress = null;
326
+ this.walletConnected = false;
327
+ }
328
+ }
329
+
330
+ /**
331
+ * Payment processing
332
+ */
333
+ class PaymentManager {
334
+ constructor(gameId, isIframe, messageHandler, walletManager) {
335
+ this.gameId = gameId;
336
+ this.isIframe = isIframe;
337
+ this.messageHandler = messageHandler;
338
+ this.walletManager = walletManager;
339
+ }
340
+ /**
341
+ * Pay to play - one-time payment to access game
342
+ */
343
+ async payToPlay(amount, token) {
344
+ this.validatePaymentParams(amount, token);
345
+ if (!this.isIframe) {
346
+ throw new NotInIframeError('payToPlay only works when the game is running in an Arcadia iframe');
347
+ }
348
+ // Check wallet connection
349
+ const isConnected = await this.walletManager.isWalletConnected();
350
+ if (!isConnected) {
351
+ throw new WalletNotConnectedError();
352
+ }
353
+ const request = {
354
+ amount,
355
+ token,
356
+ type: 'pay_to_play',
357
+ gameId: this.gameId,
358
+ };
359
+ try {
360
+ const response = await this.messageHandler.sendMessage(MessageType.PAYMENT_REQUEST, request);
361
+ if (!response.success) {
362
+ throw new PaymentFailedError(response.error || 'Payment failed', response.txSignature);
363
+ }
364
+ if (!response.txSignature) {
365
+ throw new PaymentFailedError('Payment succeeded but no transaction signature received');
366
+ }
367
+ if (!response.amount || !response.token || !response.timestamp) {
368
+ throw new PaymentFailedError('Payment succeeded but incomplete payment details received');
369
+ }
370
+ return {
371
+ success: true,
372
+ txSignature: response.txSignature,
373
+ amount: response.amount,
374
+ token: response.token,
375
+ timestamp: response.timestamp,
376
+ purchaseId: response.purchaseId,
377
+ platformFee: response.platformFee,
378
+ developerAmount: response.developerAmount,
379
+ };
380
+ }
381
+ catch (error) {
382
+ if (error instanceof PaymentFailedError || error instanceof WalletNotConnectedError) {
383
+ throw error;
384
+ }
385
+ throw new PaymentFailedError(error instanceof Error ? error.message : 'Payment failed');
386
+ }
387
+ }
388
+ /**
389
+ * Purchase in-game item
390
+ */
391
+ async purchaseItem(itemId, amount, token) {
392
+ this.validatePaymentParams(amount, token);
393
+ if (!itemId || typeof itemId !== 'string' || itemId.trim().length === 0) {
394
+ throw new Error('Item ID is required and must be a non-empty string');
395
+ }
396
+ if (!this.isIframe) {
397
+ throw new NotInIframeError('purchaseItem only works when the game is running in an Arcadia iframe');
398
+ }
399
+ // Check wallet connection
400
+ const isConnected = await this.walletManager.isWalletConnected();
401
+ if (!isConnected) {
402
+ throw new WalletNotConnectedError();
403
+ }
404
+ const request = {
405
+ amount,
406
+ token,
407
+ type: 'in_game_purchase',
408
+ gameId: this.gameId,
409
+ itemId: itemId.trim(),
410
+ };
411
+ try {
412
+ const response = await this.messageHandler.sendMessage(MessageType.PAYMENT_REQUEST, request);
413
+ if (!response.success) {
414
+ throw new PaymentFailedError(response.error || 'Purchase failed', response.txSignature);
415
+ }
416
+ if (!response.txSignature) {
417
+ throw new PaymentFailedError('Purchase succeeded but no transaction signature received');
418
+ }
419
+ if (!response.amount || !response.token || !response.timestamp) {
420
+ throw new PaymentFailedError('Purchase succeeded but incomplete payment details received');
421
+ }
422
+ return {
423
+ success: true,
424
+ txSignature: response.txSignature,
425
+ amount: response.amount,
426
+ token: response.token,
427
+ timestamp: response.timestamp,
428
+ purchaseId: response.purchaseId,
429
+ platformFee: response.platformFee,
430
+ developerAmount: response.developerAmount,
431
+ };
432
+ }
433
+ catch (error) {
434
+ if (error instanceof PaymentFailedError || error instanceof WalletNotConnectedError) {
435
+ throw error;
436
+ }
437
+ throw new PaymentFailedError(error instanceof Error ? error.message : 'Purchase failed');
438
+ }
439
+ }
440
+ /**
441
+ * Validate payment parameters
442
+ */
443
+ validatePaymentParams(amount, token) {
444
+ if (typeof amount !== 'number' || isNaN(amount) || amount <= 0) {
445
+ throw new InvalidAmountError();
446
+ }
447
+ if (token !== 'SOL' && token !== 'USDC') {
448
+ throw new InvalidTokenError();
449
+ }
450
+ }
451
+ }
452
+
453
+ /**
454
+ * Main Arcadia Game SDK class
455
+ */
456
+ class ArcadiaSDK {
457
+ /**
458
+ * Create new SDK instance
459
+ */
460
+ constructor(config) {
461
+ this.initialized = false;
462
+ // Validate config
463
+ if (!config || !config.gameId || typeof config.gameId !== 'string' || config.gameId.trim().length === 0) {
464
+ throw new InvalidConfigError('gameId is required and must be a non-empty string');
465
+ }
466
+ this.config = {
467
+ gameId: config.gameId.trim(),
468
+ parentOrigin: config.parentOrigin || '*',
469
+ timeout: config.timeout || 30000,
470
+ };
471
+ // Detect iframe environment
472
+ this.isIframe = typeof window !== 'undefined' && window.self !== window.top;
473
+ // Initialize message handler
474
+ this.messageHandler = new MessageHandler(this.config.parentOrigin, this.config.timeout);
475
+ // Initialize managers
476
+ this.walletManager = new WalletManager(this.messageHandler, this.isIframe);
477
+ this.paymentManager = new PaymentManager(this.config.gameId, this.isIframe, this.messageHandler, this.walletManager);
478
+ // Set up message listener if in iframe
479
+ if (this.isIframe) {
480
+ this.messageHandler.init();
481
+ this.setupMessageListener();
482
+ }
483
+ }
484
+ /**
485
+ * Initialize SDK and request initialization data from parent
486
+ */
487
+ async init() {
488
+ if (this.initialized) {
489
+ return; // Already initialized
490
+ }
491
+ if (!this.isIframe) {
492
+ // Not in iframe - can't initialize
493
+ this.initialized = true;
494
+ return;
495
+ }
496
+ try {
497
+ // Request initialization from parent
498
+ const initData = await this.messageHandler.sendMessage(MessageType.INIT_REQUEST);
499
+ // Update wallet status from init data
500
+ if (initData.wallet) {
501
+ this.walletManager.updateWalletStatus(initData.wallet);
502
+ }
503
+ // Notify parent that game is ready
504
+ this.messageHandler.sendOneWay(MessageType.GAME_READY);
505
+ this.initialized = true;
506
+ }
507
+ catch (error) {
508
+ // Initialization failed, but SDK can still be used
509
+ // Wallet functions will fetch on demand
510
+ this.initialized = true;
511
+ console.warn('SDK initialization failed:', error);
512
+ }
513
+ }
514
+ /**
515
+ * Get wallet address - use this as user identifier
516
+ * Games should link all save data to this wallet address
517
+ * Returns null if wallet not connected
518
+ */
519
+ async getWalletAddress() {
520
+ return this.walletManager.getWalletAddress();
521
+ }
522
+ /**
523
+ * Check if wallet is connected
524
+ */
525
+ async isWalletConnected() {
526
+ return this.walletManager.isWalletConnected();
527
+ }
528
+ /**
529
+ * Listen for wallet connection changes
530
+ */
531
+ onWalletChange(callback) {
532
+ this.walletManager.onWalletChange(callback);
533
+ }
534
+ /**
535
+ * Remove wallet change listener
536
+ */
537
+ offWalletChange(callback) {
538
+ this.walletManager.offWalletChange(callback);
539
+ }
540
+ /**
541
+ * Payment methods
542
+ */
543
+ get payment() {
544
+ return {
545
+ /**
546
+ * Pay to play - one-time payment to start/access game
547
+ */
548
+ payToPlay: (amount, token) => {
549
+ return this.paymentManager.payToPlay(amount, token);
550
+ },
551
+ /**
552
+ * In-game purchase - buy items, upgrades, etc.
553
+ */
554
+ purchaseItem: (itemId, amount, token) => {
555
+ return this.paymentManager.purchaseItem(itemId, amount, token);
556
+ },
557
+ };
558
+ }
559
+ /**
560
+ * Get SDK configuration
561
+ */
562
+ getConfig() {
563
+ return { ...this.config };
564
+ }
565
+ /**
566
+ * Check if SDK is running in iframe
567
+ */
568
+ isInIframe() {
569
+ return this.isIframe;
570
+ }
571
+ /**
572
+ * Check if SDK is initialized
573
+ */
574
+ isInitialized() {
575
+ return this.initialized;
576
+ }
577
+ /**
578
+ * Cleanup SDK resources
579
+ */
580
+ destroy() {
581
+ this.messageHandler.destroy();
582
+ this.walletManager.clearCache();
583
+ this.initialized = false;
584
+ }
585
+ /**
586
+ * Set up message listener for wallet updates
587
+ */
588
+ setupMessageListener() {
589
+ // Additional listener for wallet updates (not request/response)
590
+ const listener = (event) => {
591
+ // Validate origin if specified
592
+ if (this.config.parentOrigin !== '*' && event.origin !== this.config.parentOrigin) {
593
+ return;
594
+ }
595
+ const message = event.data;
596
+ // Handle wallet update messages
597
+ if (message.type === MessageType.WALLET_UPDATE && message.payload) {
598
+ const walletInfo = message.payload;
599
+ this.walletManager.updateWalletStatus(walletInfo);
600
+ }
601
+ };
602
+ window.addEventListener('message', listener);
603
+ // Store listener for cleanup (though SDK doesn't typically need cleanup)
604
+ // This is handled by messageHandler.destroy()
605
+ }
606
+ }
607
+
608
+ /**
609
+ * Arcadia Game SDK
610
+ *
611
+ * SDK for integrating Arcadia wallet and payment features into Web3 games.
612
+ * Works in iframe environments by communicating with parent window via postMessage.
613
+ */
614
+ // Main SDK class
615
+
616
+ export { ArcadiaSDK, ArcadiaSDKError, InvalidAmountError, InvalidConfigError, InvalidTokenError, NotInIframeError, PaymentFailedError, TimeoutError, WalletNotConnectedError, ArcadiaSDK as default };
617
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/types.ts","../../src/errors.ts","../../src/messaging.ts","../../src/wallet.ts","../../src/payment.ts","../../src/sdk.ts","../../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { MessageType } from './types';
2
+ /**
3
+ * Handles postMessage communication with parent window
4
+ */
5
+ export declare class MessageHandler {
6
+ private messageId;
7
+ private pendingRequests;
8
+ private parentOrigin;
9
+ private timeout;
10
+ private messageListener;
11
+ constructor(parentOrigin?: string, timeout?: number);
12
+ /**
13
+ * Initialize message listener
14
+ */
15
+ init(): void;
16
+ /**
17
+ * Cleanup message listener
18
+ */
19
+ destroy(): void;
20
+ /**
21
+ * Send message to parent window and wait for response
22
+ */
23
+ sendMessage(type: MessageType | string, payload?: any): Promise<any>;
24
+ /**
25
+ * Handle incoming messages from parent
26
+ */
27
+ private handleMessage;
28
+ /**
29
+ * Send one-way message (no response expected)
30
+ */
31
+ sendOneWay(type: MessageType | string, payload?: any): void;
32
+ }
33
+ //# sourceMappingURL=messaging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../src/messaging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,WAAW,EAAE,MAAM,SAAS,CAAC;AAY/C;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAgD;gBAE3D,YAAY,GAAE,MAAY,EAAE,OAAO,GAAE,MAAc;IAK/D;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACH,OAAO,IAAI,IAAI;IAcf;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAwCpE;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;CAU5D"}