@casual-simulation/aux-records 3.8.1 → 3.10.2

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 (239) hide show
  1. package/AIChatInterface.d.ts +7 -43
  2. package/AIChatInterface.js +8 -6
  3. package/AIChatInterface.js.map +1 -1
  4. package/AIController.js +44 -49
  5. package/AIController.js.map +1 -1
  6. package/AIOpenAIRealtimeInterface.d.ts +1 -1
  7. package/AnthropicAIChatInterface.js +4 -4
  8. package/AnthropicAIChatInterface.js.map +1 -1
  9. package/AuthController.d.ts +78 -10
  10. package/AuthController.js +230 -166
  11. package/AuthController.js.map +1 -1
  12. package/AuthStore.d.ts +317 -4
  13. package/BigIntPatch.d.ts +1 -0
  14. package/BigIntPatch.js +24 -0
  15. package/BigIntPatch.js.map +1 -0
  16. package/BlockadeLabsGenerateSkyboxInterface.js +4 -4
  17. package/BlockadeLabsGenerateSkyboxInterface.js.map +1 -1
  18. package/CachingConfigStore.d.ts +8 -1
  19. package/CachingConfigStore.js +50 -0
  20. package/CachingConfigStore.js.map +1 -1
  21. package/ComIdConfig.d.ts +132 -86
  22. package/ComIdConfig.js +5 -5
  23. package/ComIdConfig.js.map +1 -1
  24. package/ConfigurationStore.d.ts +1393 -3
  25. package/ConfigurationStore.js +49 -0
  26. package/ConfigurationStore.js.map +1 -1
  27. package/DataRecordsController.js +28 -28
  28. package/DataRecordsController.js.map +1 -1
  29. package/EventRecordsController.js +9 -9
  30. package/EventRecordsController.js.map +1 -1
  31. package/FileRecordsController.js +18 -17
  32. package/FileRecordsController.js.map +1 -1
  33. package/GoogleAIChatInterface.js +4 -4
  34. package/GoogleAIChatInterface.js.map +1 -1
  35. package/HttpTestUtils.d.ts +48 -0
  36. package/HttpTestUtils.js +256 -0
  37. package/HttpTestUtils.js.map +1 -0
  38. package/LivekitController.js +2 -2
  39. package/LivekitController.js.map +1 -1
  40. package/LoomController.js +3 -4
  41. package/LoomController.js.map +1 -1
  42. package/MemoryStore.d.ts +60 -7
  43. package/MemoryStore.js +427 -59
  44. package/MemoryStore.js.map +1 -1
  45. package/MetricsStore.d.ts +11 -0
  46. package/ModerationConfiguration.d.ts +11 -85
  47. package/ModerationConfiguration.js +17 -17
  48. package/ModerationConfiguration.js.map +1 -1
  49. package/ModerationController.js +9 -11
  50. package/ModerationController.js.map +1 -1
  51. package/OpenAIChatInterface.js +8 -13
  52. package/OpenAIChatInterface.js.map +1 -1
  53. package/OpenAIImageInterface.js +4 -5
  54. package/OpenAIImageInterface.js.map +1 -1
  55. package/PolicyController.js +66 -73
  56. package/PolicyController.js.map +1 -1
  57. package/PolicyStore.d.ts +59 -33
  58. package/PolicyStore.js +35 -1
  59. package/PolicyStore.js.map +1 -1
  60. package/PrivoClient.d.ts +3 -1
  61. package/PrivoClient.js +2 -4
  62. package/PrivoClient.js.map +1 -1
  63. package/PrivoConfiguration.d.ts +6 -72
  64. package/PrivoConfiguration.js +30 -31
  65. package/PrivoConfiguration.js.map +1 -1
  66. package/README.md +276 -2
  67. package/RateLimitController.js +2 -2
  68. package/RateLimitController.js.map +1 -1
  69. package/RecordsClient.d.ts +3 -1
  70. package/RecordsClient.js +6 -6
  71. package/RecordsClient.js.map +1 -1
  72. package/RecordsController.d.ts +145 -3
  73. package/RecordsController.js +399 -61
  74. package/RecordsController.js.map +1 -1
  75. package/RecordsServer.d.ts +1932 -1109
  76. package/RecordsStore.d.ts +99 -14
  77. package/RecordsStore.js +8 -10
  78. package/RecordsStore.js.map +1 -1
  79. package/ServerConfig.d.ts +698 -9867
  80. package/ServerConfig.js +457 -377
  81. package/ServerConfig.js.map +1 -1
  82. package/SloydInterface.js +1 -1
  83. package/SloydInterface.js.map +1 -1
  84. package/StabilityAIImageInterface.js +6 -9
  85. package/StabilityAIImageInterface.js.map +1 -1
  86. package/StripeInterface.d.ts +431 -287
  87. package/StripeInterface.js +21 -1
  88. package/StripeInterface.js.map +1 -1
  89. package/SubscriptionConfigBuilder.d.ts +10 -1
  90. package/SubscriptionConfigBuilder.js +72 -41
  91. package/SubscriptionConfigBuilder.js.map +1 -1
  92. package/SubscriptionConfiguration.d.ts +606 -6334
  93. package/SubscriptionConfiguration.js +460 -277
  94. package/SubscriptionConfiguration.js.map +1 -1
  95. package/SubscriptionController.d.ts +677 -4
  96. package/SubscriptionController.js +2986 -186
  97. package/SubscriptionController.js.map +1 -1
  98. package/SystemNotificationMessenger.d.ts +14 -70
  99. package/SystemNotificationMessenger.js +17 -20
  100. package/SystemNotificationMessenger.js.map +1 -1
  101. package/TestUtils.d.ts +18 -3
  102. package/TestUtils.js +84 -8
  103. package/TestUtils.js.map +1 -1
  104. package/TypeUtils.d.ts +991 -0
  105. package/TypeUtils.js +2 -0
  106. package/TypeUtils.js.map +1 -0
  107. package/Utils.d.ts +59 -0
  108. package/Utils.js +507 -3
  109. package/Utils.js.map +1 -1
  110. package/Validations.d.ts +24 -108
  111. package/Validations.js +62 -45
  112. package/Validations.js.map +1 -1
  113. package/ViewTemplateRenderer.d.ts +39 -0
  114. package/ViewTemplateRenderer.js +19 -0
  115. package/ViewTemplateRenderer.js.map +1 -0
  116. package/contracts/ContractRecordsController.d.ts +58 -0
  117. package/contracts/ContractRecordsController.js +144 -0
  118. package/contracts/ContractRecordsController.js.map +1 -0
  119. package/contracts/ContractRecordsStore.d.ts +285 -0
  120. package/contracts/ContractRecordsStore.js +19 -0
  121. package/contracts/ContractRecordsStore.js.map +1 -0
  122. package/contracts/MemoryContractRecordsStore.d.ts +27 -0
  123. package/contracts/MemoryContractRecordsStore.js +124 -0
  124. package/contracts/MemoryContractRecordsStore.js.map +1 -0
  125. package/contracts/index.d.ts +4 -0
  126. package/contracts/index.js +21 -0
  127. package/contracts/index.js.map +1 -0
  128. package/crud/CrudHelpers.d.ts +25 -26
  129. package/crud/CrudHelpers.js +1 -1
  130. package/crud/CrudHelpers.js.map +1 -1
  131. package/crud/CrudRecordsController.js +13 -16
  132. package/crud/CrudRecordsController.js.map +1 -1
  133. package/crud/CrudRecordsControllerTests.d.ts +2 -2
  134. package/crud/CrudRecordsControllerTests.js +605 -580
  135. package/crud/CrudRecordsControllerTests.js.map +1 -1
  136. package/crud/MemoryCrudRecordsStore.js +1 -2
  137. package/crud/MemoryCrudRecordsStore.js.map +1 -1
  138. package/crud/sub/MemorySubCrudRecordsStore.js +4 -6
  139. package/crud/sub/MemorySubCrudRecordsStore.js.map +1 -1
  140. package/crud/sub/SubCrudRecordsController.js +8 -8
  141. package/crud/sub/SubCrudRecordsController.js.map +1 -1
  142. package/database/DatabaseRecordsController.js +1 -2
  143. package/database/DatabaseRecordsController.js.map +1 -1
  144. package/database/SqliteDatabaseInterface.js +1 -2
  145. package/database/SqliteDatabaseInterface.js.map +1 -1
  146. package/dns/DNSDomainNameValidator.d.ts +11 -0
  147. package/dns/DNSDomainNameValidator.js +59 -0
  148. package/dns/DNSDomainNameValidator.js.map +1 -0
  149. package/dns/DomainNameValidator.d.ts +36 -0
  150. package/dns/DomainNameValidator.js +19 -0
  151. package/dns/DomainNameValidator.js.map +1 -0
  152. package/dns/index.d.ts +3 -0
  153. package/dns/index.js +20 -0
  154. package/dns/index.js.map +1 -0
  155. package/financial/FinancialController.d.ts +272 -0
  156. package/financial/FinancialController.js +762 -0
  157. package/financial/FinancialController.js.map +1 -0
  158. package/financial/FinancialInterface.d.ts +352 -0
  159. package/financial/FinancialInterface.js +642 -0
  160. package/financial/FinancialInterface.js.map +1 -0
  161. package/financial/FinancialStore.d.ts +186 -0
  162. package/financial/FinancialStore.js +19 -0
  163. package/financial/FinancialStore.js.map +1 -0
  164. package/financial/MemoryFinancialInterface.d.ts +23 -0
  165. package/financial/MemoryFinancialInterface.js +592 -0
  166. package/financial/MemoryFinancialInterface.js.map +1 -0
  167. package/financial/TigerBeetleFinancialInterface.d.ts +46 -0
  168. package/financial/TigerBeetleFinancialInterface.js +109 -0
  169. package/financial/TigerBeetleFinancialInterface.js.map +1 -0
  170. package/financial/TigerBeetleTestUtils.d.ts +40 -0
  171. package/financial/TigerBeetleTestUtils.js +185 -0
  172. package/financial/TigerBeetleTestUtils.js.map +1 -0
  173. package/financial/Types.d.ts +1 -0
  174. package/financial/Types.js +801 -0
  175. package/financial/Types.js.map +1 -0
  176. package/financial/index.d.ts +6 -0
  177. package/financial/index.js +24 -0
  178. package/financial/index.js.map +1 -0
  179. package/index.d.ts +4 -0
  180. package/index.js +3 -0
  181. package/index.js.map +1 -1
  182. package/notifications/NotificationRecordsController.js +14 -14
  183. package/notifications/NotificationRecordsController.js.map +1 -1
  184. package/notifications/WebPushInterface.d.ts +24 -155
  185. package/notifications/WebPushInterface.js +2 -2
  186. package/notifications/WebPushInterface.js.map +1 -1
  187. package/package.json +72 -70
  188. package/packages/version/MemoryPackageVersionRecordsStore.js +12 -15
  189. package/packages/version/MemoryPackageVersionRecordsStore.js.map +1 -1
  190. package/packages/version/PackageVersionRecordsController.d.ts +19 -0
  191. package/packages/version/PackageVersionRecordsController.js +102 -22
  192. package/packages/version/PackageVersionRecordsController.js.map +1 -1
  193. package/packages/version/PackageVersionRecordsStore.js +6 -8
  194. package/packages/version/PackageVersionRecordsStore.js.map +1 -1
  195. package/purchasable-items/MemoryPurchasableItemRecordsStore.d.ts +7 -0
  196. package/purchasable-items/MemoryPurchasableItemRecordsStore.js +33 -0
  197. package/purchasable-items/MemoryPurchasableItemRecordsStore.js.map +1 -0
  198. package/purchasable-items/PurchasableItemRecordsController.d.ts +16 -0
  199. package/purchasable-items/PurchasableItemRecordsController.js +72 -0
  200. package/purchasable-items/PurchasableItemRecordsController.js.map +1 -0
  201. package/purchasable-items/PurchasableItemRecordsStore.d.ts +66 -0
  202. package/purchasable-items/PurchasableItemRecordsStore.js +2 -0
  203. package/purchasable-items/PurchasableItemRecordsStore.js.map +1 -0
  204. package/purchasable-items/index.d.ts +4 -0
  205. package/purchasable-items/index.js +21 -0
  206. package/purchasable-items/index.js.map +1 -0
  207. package/queue/MemoryQueue.js +1 -1
  208. package/queue/MemoryQueue.js.map +1 -1
  209. package/search/MemorySearchInterface.js +1 -2
  210. package/search/MemorySearchInterface.js.map +1 -1
  211. package/search/SearchRecordsController.d.ts +66 -244
  212. package/search/SearchRecordsController.js +35 -36
  213. package/search/SearchRecordsController.js.map +1 -1
  214. package/search/SearchSyncProcessor.d.ts +7 -83
  215. package/search/TypesenseSearchInterface.js +8 -11
  216. package/search/TypesenseSearchInterface.js.map +1 -1
  217. package/tracing/TracingDecorators.js +5 -8
  218. package/tracing/TracingDecorators.js.map +1 -1
  219. package/webhooks/WebhookEnvironment.d.ts +36 -560
  220. package/webhooks/WebhookEnvironment.js +1 -1
  221. package/webhooks/WebhookEnvironment.js.map +1 -1
  222. package/webhooks/WebhookRecordsController.js +14 -16
  223. package/webhooks/WebhookRecordsController.js.map +1 -1
  224. package/websockets/MemoryLockStore.d.ts +18 -0
  225. package/websockets/MemoryLockStore.js +2 -0
  226. package/websockets/MemoryLockStore.js.map +1 -0
  227. package/websockets/MemoryTempInstRecordsStore.js +15 -27
  228. package/websockets/MemoryTempInstRecordsStore.js.map +1 -1
  229. package/websockets/MemoryWebsocketConnectionStore.js +6 -8
  230. package/websockets/MemoryWebsocketConnectionStore.js.map +1 -1
  231. package/websockets/MemoryWebsocketMessenger.js +1 -2
  232. package/websockets/MemoryWebsocketMessenger.js.map +1 -1
  233. package/websockets/SplitInstRecordsStore.js +2 -2
  234. package/websockets/SplitInstRecordsStore.js.map +1 -1
  235. package/websockets/WebsocketController.d.ts +5 -0
  236. package/websockets/WebsocketController.js +122 -83
  237. package/websockets/WebsocketController.js.map +1 -1
  238. package/RecordsServer.js +0 -6435
  239. package/RecordsServer.js.map +0 -1
package/RecordsStore.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import type { ComIdConfig, ComIdPlayerConfig } from './ComIdConfig';
3
3
  import type { PublicRecordKeyPolicy } from '@casual-simulation/aux-common';
4
+ import type { StripeAccountStatus, StripeRequirementsStatus } from './StripeInterface';
5
+ import type { WebManifest } from '@casual-simulation/aux-common/common/WebManifest';
4
6
  /**
5
7
  * Defines an interface for objects that can store records.
6
8
  */
@@ -165,6 +167,43 @@ export interface RecordsStore {
165
167
  * @param config The config that should be updated for the studio.
166
168
  */
167
169
  updateStudioHumeConfig(studioId: string, config: HumeConfig): Promise<void>;
170
+ /**
171
+ * Gets the studio with the given stripe account ID. Returns null if no studio has that stripe account ID.
172
+ * @param accountId The ID of the stripe account.
173
+ */
174
+ getStudioByStripeAccountId(accountId: string): Promise<Studio | null>;
175
+ /**
176
+ * Saves the given custom domain to the store.
177
+ * @param domain The custom domain to save.
178
+ */
179
+ saveCustomDomain(domain: CustomDomain): Promise<void>;
180
+ /**
181
+ * Removes the custom domain with the given ID from the store.
182
+ * @param domainId The ID of the custom domain to remove.
183
+ */
184
+ deleteCustomDomain(domainId: string): Promise<void>;
185
+ /**
186
+ * Gets the custom domain with the given ID.
187
+ * @param domainId The ID of the custom domain.
188
+ */
189
+ getCustomDomainById(domainId: string): Promise<CustomDomainWithStudio | null>;
190
+ /**
191
+ * Gets the list of custom domains for the given studio ID.
192
+ * @param studioId The ID of the studio.
193
+ */
194
+ listCustomDomainsByStudioId(studioId: string): Promise<CustomDomain[]>;
195
+ /**
196
+ * Gets the verified custom domain with the given domain name.
197
+ * Returns null if no verified custom domain with the given name exists.
198
+ *
199
+ * @param domainName The domain name.
200
+ */
201
+ getVerifiedCustomDomainByName(domainName: string): Promise<CustomDomainWithStudio | null>;
202
+ /**
203
+ * Marks the custom domain with the given ID as verified.
204
+ * @param domainId The ID of the custom domain to mark as verified.
205
+ */
206
+ markCustomDomainAsVerified(domainId: string): Promise<void>;
168
207
  }
169
208
  export interface CountRecordsFilter {
170
209
  /**
@@ -242,6 +281,28 @@ export interface Studio {
242
281
  * The ID of the stripe customer for this studio.
243
282
  */
244
283
  stripeCustomerId?: string;
284
+ /**
285
+ * The ID of the stripe account for this studio.
286
+ */
287
+ stripeAccountId?: string | null;
288
+ /**
289
+ * The status of the stripe account requirements for this studio.
290
+ *
291
+ * If null, then the studio does not have a stripe account.
292
+ * If 'incomplete', then the studio has a stripe account but it is not fully set up.
293
+ * If 'complete', then the studio has a stripe account that is fully set up.
294
+ */
295
+ stripeAccountRequirementsStatus?: StripeRequirementsStatus;
296
+ /**
297
+ * The status of the stripe account that is associated with this studio.
298
+ *
299
+ * If null, then the studio does not have a stripe account.
300
+ * If 'active', then the stripe account has been approved and is active.
301
+ * If 'pending', then the stripe account is waiting approval.
302
+ * If 'rejected', then the stripe account was rejected.
303
+ * If 'disabled', then the stripe account was disabled but not because it was rejected.
304
+ */
305
+ stripeAccountStatus?: StripeAccountStatus;
245
306
  /**
246
307
  * The current subscription status for this studio.
247
308
  */
@@ -275,6 +336,10 @@ export interface Studio {
275
336
  * The player web config for the studio.
276
337
  */
277
338
  playerConfig?: ComIdPlayerConfig;
339
+ /**
340
+ * The PWA web manifest that should be served for the player.
341
+ */
342
+ playerWebManifest?: WebManifest;
278
343
  /**
279
344
  * The config for comId features.
280
345
  */
@@ -284,23 +349,11 @@ export type LoomConfig = z.infer<typeof LOOM_CONFIG>;
284
349
  export declare const LOOM_CONFIG: z.ZodObject<{
285
350
  appId: z.ZodString;
286
351
  privateKey: z.ZodString;
287
- }, "strip", z.ZodTypeAny, {
288
- appId?: string;
289
- privateKey?: string;
290
- }, {
291
- appId?: string;
292
- privateKey?: string;
293
- }>;
352
+ }, z.core.$strip>;
294
353
  export declare const HUME_CONFIG: z.ZodObject<{
295
354
  apiKey: z.ZodString;
296
355
  secretKey: z.ZodString;
297
- }, "strip", z.ZodTypeAny, {
298
- apiKey?: string;
299
- secretKey?: string;
300
- }, {
301
- apiKey?: string;
302
- secretKey?: string;
303
- }>;
356
+ }, z.core.$strip>;
304
357
  export type HumeConfig = z.infer<typeof HUME_CONFIG>;
305
358
  /**
306
359
  * Defines the list of possible studio roles that a user can be assigned.
@@ -509,4 +562,36 @@ export interface StudioComIdRequest {
509
562
  */
510
563
  updatedAtMs: number;
511
564
  }
565
+ /**
566
+ * Represents a custom domain that is associated with a studio.
567
+ *
568
+ * These domains may or may not be verified.
569
+ */
570
+ export interface CustomDomain {
571
+ /**
572
+ * The ID of the custom domain.
573
+ */
574
+ id: string;
575
+ /**
576
+ * The domain name.
577
+ */
578
+ domainName: string;
579
+ /**
580
+ * The ID of the studio that the custom domain is associated with.
581
+ */
582
+ studioId: string;
583
+ /**
584
+ * The HMAC-SHA-256 verification key.
585
+ */
586
+ verificationKey: string;
587
+ /**
588
+ * Whether the custom domain has been verified.
589
+ * Null if not verified.
590
+ */
591
+ verified: true | null;
592
+ }
593
+ export type ListedCustomDomain = Pick<CustomDomain, 'id' | 'domainName' | 'verified'>;
594
+ export interface CustomDomainWithStudio extends CustomDomain {
595
+ studio: Studio;
596
+ }
512
597
  //# sourceMappingURL=RecordsStore.d.ts.map
package/RecordsStore.js CHANGED
@@ -16,20 +16,18 @@
16
16
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
  */
18
18
  import { z } from 'zod';
19
- export const LOOM_CONFIG = z
20
- .object({
21
- appId: z.string().describe('The ID of the loom app.').max(100),
19
+ export const LOOM_CONFIG = z.object({
20
+ appId: z.string().max(100).describe('The ID of the loom app.'),
22
21
  privateKey: z
23
22
  .string()
24
- .describe('The private key for the loom app.')
25
- .max(100),
26
- })
27
- .describe('The configuration that can be used by studios to setup loom.');
23
+ .max(100)
24
+ .describe('The private key for the loom app.'),
25
+ });
28
26
  export const HUME_CONFIG = z.object({
29
- apiKey: z.string().describe('The API key for the Hume service.').max(100),
27
+ apiKey: z.string().max(100).describe('The API key for the Hume service.'),
30
28
  secretKey: z
31
29
  .string()
32
- .describe('The secret key for the Hume service.')
33
- .max(100),
30
+ .max(100)
31
+ .describe('The secret key for the Hume service.'),
34
32
  });
35
33
  //# sourceMappingURL=RecordsStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecordsStore.js","sourceRoot":"","sources":["RecordsStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+VxB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACvB,MAAM,CAAC;IACJ,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9D,UAAU,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,mCAAmC,CAAC;SAC7C,GAAG,CAAC,GAAG,CAAC;CAChB,CAAC;KACD,QAAQ,CAAC,8DAA8D,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACzE,SAAS,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,sCAAsC,CAAC;SAChD,GAAG,CAAC,GAAG,CAAC;CAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"RecordsStore.js","sourceRoot":"","sources":["RecordsStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkbxB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC9D,UAAU,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,mCAAmC,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACzE,SAAS,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,sCAAsC,CAAC;CACxD,CAAC,CAAC"}