@opendatalabs/personal-server-ts-lite 0.0.1-canary.9ce2194

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 (44) hide show
  1. package/dist/bridge.d.ts +23 -0
  2. package/dist/bridge.d.ts.map +1 -0
  3. package/dist/bridge.js +53 -0
  4. package/dist/bridge.js.map +1 -0
  5. package/dist/browser-runtime.d.ts +29 -0
  6. package/dist/browser-runtime.d.ts.map +1 -0
  7. package/dist/browser-runtime.js +81 -0
  8. package/dist/browser-runtime.js.map +1 -0
  9. package/dist/browser-tls-rustls/browser_tls_rustls.d.ts +49 -0
  10. package/dist/browser-tls-rustls/browser_tls_rustls.js +401 -0
  11. package/dist/browser-tls-rustls/browser_tls_rustls_bg.wasm +0 -0
  12. package/dist/index.d.ts +9 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +9 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/relay-tls.d.ts +19 -0
  17. package/dist/relay-tls.d.ts.map +1 -0
  18. package/dist/relay-tls.js +226 -0
  19. package/dist/relay-tls.js.map +1 -0
  20. package/dist/relay.d.ts +68 -0
  21. package/dist/relay.d.ts.map +1 -0
  22. package/dist/relay.js +361 -0
  23. package/dist/relay.js.map +1 -0
  24. package/dist/runtime.d.ts +76 -0
  25. package/dist/runtime.d.ts.map +1 -0
  26. package/dist/runtime.js +543 -0
  27. package/dist/runtime.js.map +1 -0
  28. package/dist/state.d.ts +58 -0
  29. package/dist/state.d.ts.map +1 -0
  30. package/dist/state.js +281 -0
  31. package/dist/state.js.map +1 -0
  32. package/dist/storage-utils.d.ts +7 -0
  33. package/dist/storage-utils.d.ts.map +1 -0
  34. package/dist/storage-utils.js +66 -0
  35. package/dist/storage-utils.js.map +1 -0
  36. package/dist/storage.d.ts +37 -0
  37. package/dist/storage.d.ts.map +1 -0
  38. package/dist/storage.js +282 -0
  39. package/dist/storage.js.map +1 -0
  40. package/dist/sync.d.ts +25 -0
  41. package/dist/sync.d.ts.map +1 -0
  42. package/dist/sync.js +62 -0
  43. package/dist/sync.js.map +1 -0
  44. package/package.json +40 -0
package/dist/state.js ADDED
@@ -0,0 +1,281 @@
1
+ import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
2
+ import { ServerConfigSchema } from "@opendatalabs/personal-server-ts-core/schemas";
3
+ import { deriveMasterKey, deriveScopeKey, } from "@opendatalabs/vana-sdk/browser";
4
+ const DEFAULT_STATE_DB_NAME = "personal-server-lite";
5
+ const DEFAULT_STATE_STORE = "state";
6
+ const DEFAULT_TOKEN_STORE = "tokens";
7
+ const DEFAULT_ACCESS_LOG_STORE = "accessLogs";
8
+ const STATE_DB_VERSION = 2;
9
+ const CONFIG_KEY = "config-v1";
10
+ const SERVER_IDENTITY_KEY = "server-identity-v1";
11
+ const ACCESS_LOG_TIMESTAMP_INDEX = "timestamp";
12
+ function bytesToBase64(bytes) {
13
+ let binary = "";
14
+ for (const byte of bytes) {
15
+ binary += String.fromCharCode(byte);
16
+ }
17
+ return btoa(binary);
18
+ }
19
+ function base64ToBytes(value) {
20
+ const binary = atob(value);
21
+ const bytes = new Uint8Array(binary.length);
22
+ for (let i = 0; i < binary.length; i += 1) {
23
+ bytes[i] = binary.charCodeAt(i);
24
+ }
25
+ return bytes;
26
+ }
27
+ function toArrayBuffer(bytes) {
28
+ const copy = new Uint8Array(bytes.byteLength);
29
+ copy.set(bytes);
30
+ return copy.buffer;
31
+ }
32
+ async function importAesKey(masterKey) {
33
+ const identityKey = deriveScopeKey(masterKey, "ps-lite.server-identity");
34
+ return crypto.subtle.importKey("raw", identityKey, "AES-GCM", false, [
35
+ "encrypt",
36
+ "decrypt",
37
+ ]);
38
+ }
39
+ async function encryptPrivateKey(privateKey, ownerSignature) {
40
+ const iv = crypto.getRandomValues(new Uint8Array(12));
41
+ const key = await importAesKey(deriveMasterKey(ownerSignature));
42
+ const plaintext = new TextEncoder().encode(privateKey);
43
+ const ciphertext = new Uint8Array(await crypto.subtle.encrypt({ name: "AES-GCM", iv }, key, plaintext));
44
+ return {
45
+ algorithm: "AES-GCM",
46
+ iv: bytesToBase64(iv),
47
+ ciphertext: bytesToBase64(ciphertext),
48
+ };
49
+ }
50
+ async function decryptPrivateKey(encrypted, ownerSignature) {
51
+ const key = await importAesKey(deriveMasterKey(ownerSignature));
52
+ const iv = base64ToBytes(encrypted.iv);
53
+ const ciphertext = base64ToBytes(encrypted.ciphertext);
54
+ const plaintext = await crypto.subtle.decrypt({ name: "AES-GCM", iv: toArrayBuffer(iv) }, key, toArrayBuffer(ciphertext));
55
+ return new TextDecoder().decode(plaintext);
56
+ }
57
+ function accountFromPrivateKey(privateKey) {
58
+ const account = privateKeyToAccount(privateKey);
59
+ return {
60
+ address: account.address,
61
+ publicKey: account.publicKey,
62
+ async signTypedData(params) {
63
+ return account.signTypedData({
64
+ domain: params.domain,
65
+ types: params.types,
66
+ primaryType: params.primaryType,
67
+ message: params.message,
68
+ });
69
+ },
70
+ async signMessage(message) {
71
+ return account.signMessage({ message });
72
+ },
73
+ };
74
+ }
75
+ function createPsLiteStateSchema(db, transaction, stores) {
76
+ if (!db.objectStoreNames.contains(stores.stateStoreName)) {
77
+ db.createObjectStore(stores.stateStoreName);
78
+ }
79
+ if (!db.objectStoreNames.contains(stores.tokenStoreName)) {
80
+ db.createObjectStore(stores.tokenStoreName, { keyPath: "token" });
81
+ }
82
+ if (!db.objectStoreNames.contains(stores.accessLogStoreName)) {
83
+ const accessLogs = db.createObjectStore(stores.accessLogStoreName, {
84
+ keyPath: "logId",
85
+ });
86
+ accessLogs.createIndex(ACCESS_LOG_TIMESTAMP_INDEX, "timestamp");
87
+ }
88
+ else {
89
+ const accessLogs = transaction?.objectStore(stores.accessLogStoreName);
90
+ if (accessLogs &&
91
+ !accessLogs.indexNames.contains(ACCESS_LOG_TIMESTAMP_INDEX)) {
92
+ accessLogs.createIndex(ACCESS_LOG_TIMESTAMP_INDEX, "timestamp");
93
+ }
94
+ }
95
+ }
96
+ function openStateDb(options) {
97
+ if (typeof indexedDB === "undefined") {
98
+ throw new Error("IndexedDB is not available in this runtime");
99
+ }
100
+ return new Promise((resolve, reject) => {
101
+ const request = indexedDB.open(options.dbName, STATE_DB_VERSION);
102
+ request.onupgradeneeded = () => {
103
+ createPsLiteStateSchema(request.result, request.transaction, {
104
+ stateStoreName: options.stateStoreName ?? DEFAULT_STATE_STORE,
105
+ tokenStoreName: options.tokenStoreName ?? DEFAULT_TOKEN_STORE,
106
+ accessLogStoreName: options.accessLogStoreName ?? DEFAULT_ACCESS_LOG_STORE,
107
+ });
108
+ };
109
+ request.onsuccess = () => resolve(request.result);
110
+ request.onerror = () => reject(request.error);
111
+ });
112
+ }
113
+ function runStateTransaction(options, mode, callback) {
114
+ return openStateDb({
115
+ dbName: options.dbName,
116
+ stateStoreName: options.storeName,
117
+ }).then((db) => new Promise((resolve, reject) => {
118
+ const transaction = db.transaction(options.storeName, mode);
119
+ const store = transaction.objectStore(options.storeName);
120
+ const request = callback(store);
121
+ request.onsuccess = () => resolve(request.result);
122
+ request.onerror = () => reject(request.error);
123
+ transaction.oncomplete = () => db.close();
124
+ transaction.onerror = () => {
125
+ db.close();
126
+ reject(transaction.error);
127
+ };
128
+ }));
129
+ }
130
+ function runStoreTransaction(options, mode, callback) {
131
+ return openStateDb({
132
+ dbName: options.dbName,
133
+ tokenStoreName: options.schemaStore === "token" ? options.storeName : undefined,
134
+ accessLogStoreName: options.schemaStore === "accessLog" ? options.storeName : undefined,
135
+ }).then((db) => new Promise((resolve, reject) => {
136
+ const transaction = db.transaction(options.storeName, mode);
137
+ const store = transaction.objectStore(options.storeName);
138
+ const request = callback(store);
139
+ request.onsuccess = () => resolve(request.result);
140
+ request.onerror = () => reject(request.error);
141
+ transaction.oncomplete = () => db.close();
142
+ transaction.onerror = () => {
143
+ db.close();
144
+ reject(transaction.error);
145
+ };
146
+ }));
147
+ }
148
+ function normalizeTokenExpiresAt(value) {
149
+ if (value == null)
150
+ return null;
151
+ const date = value instanceof Date ? value : new Date(value);
152
+ if (Number.isNaN(date.getTime())) {
153
+ throw new Error("Invalid token expiry");
154
+ }
155
+ return date.toISOString();
156
+ }
157
+ function tokenIsExpired(expiresAt) {
158
+ return expiresAt ? new Date(expiresAt).getTime() <= Date.now() : false;
159
+ }
160
+ async function purgeExpiredTokens(options) {
161
+ const tokens = await runStoreTransaction(options, "readonly", (store) => store.getAll());
162
+ const expired = tokens.filter((entry) => tokenIsExpired(entry.expiresAt));
163
+ if (expired.length === 0)
164
+ return;
165
+ await Promise.all(expired.map((entry) => runStoreTransaction(options, "readwrite", (store) => store.delete(entry.token))));
166
+ }
167
+ export function createIndexedDbPsLiteStateStore(options = {}) {
168
+ const resolved = {
169
+ dbName: options.dbName ?? DEFAULT_STATE_DB_NAME,
170
+ storeName: options.storeName ?? DEFAULT_STATE_STORE,
171
+ };
172
+ return {
173
+ async get(key) {
174
+ const value = await runStateTransaction(resolved, "readonly", (store) => store.get(key));
175
+ return value ?? null;
176
+ },
177
+ async set(key, value) {
178
+ await runStateTransaction(resolved, "readwrite", (store) => store.put(value, key));
179
+ },
180
+ async delete(key) {
181
+ await runStateTransaction(resolved, "readwrite", (store) => store.delete(key));
182
+ },
183
+ };
184
+ }
185
+ export function createIndexedDbPsLiteTokenStore(options = {}) {
186
+ const resolved = {
187
+ dbName: options.dbName ?? DEFAULT_STATE_DB_NAME,
188
+ storeName: options.storeName ?? DEFAULT_TOKEN_STORE,
189
+ schemaStore: "token",
190
+ };
191
+ return {
192
+ capabilities: { tokens: "indexeddb" },
193
+ async getTokens() {
194
+ await purgeExpiredTokens(resolved);
195
+ const tokens = await runStoreTransaction(resolved, "readonly", (store) => store.getAll());
196
+ return tokens.map((entry) => entry.token);
197
+ },
198
+ async isValid(token) {
199
+ const entry = await runStoreTransaction(resolved, "readonly", (store) => store.get(token));
200
+ if (!entry)
201
+ return false;
202
+ if (tokenIsExpired(entry.expiresAt)) {
203
+ await runStoreTransaction(resolved, "readwrite", (store) => store.delete(token));
204
+ return false;
205
+ }
206
+ return true;
207
+ },
208
+ async addToken(token, options) {
209
+ await runStoreTransaction(resolved, "readwrite", (store) => store.put({
210
+ token,
211
+ expiresAt: normalizeTokenExpiresAt(options?.expiresAt),
212
+ }));
213
+ },
214
+ async removeToken(token) {
215
+ await runStoreTransaction(resolved, "readwrite", (store) => store.delete(token));
216
+ },
217
+ };
218
+ }
219
+ export function createIndexedDbPsLiteAccessLogStore(options = {}) {
220
+ const resolved = {
221
+ dbName: options.dbName ?? DEFAULT_STATE_DB_NAME,
222
+ storeName: options.storeName ?? DEFAULT_ACCESS_LOG_STORE,
223
+ schemaStore: "accessLog",
224
+ };
225
+ return {
226
+ capabilities: { accessLogs: "indexeddb" },
227
+ async write(entry) {
228
+ await runStoreTransaction(resolved, "readwrite", (store) => store.put({ ...entry }));
229
+ },
230
+ async read(options) {
231
+ const limit = options?.limit ?? 50;
232
+ const offset = options?.offset ?? 0;
233
+ const logs = await runStoreTransaction(resolved, "readonly", (store) => store.getAll());
234
+ logs.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
235
+ return {
236
+ logs: logs.slice(offset, offset + limit),
237
+ total: logs.length,
238
+ limit,
239
+ offset,
240
+ };
241
+ },
242
+ };
243
+ }
244
+ export async function loadOrCreatePsLiteConfig(store, defaults) {
245
+ const existing = await store.get(CONFIG_KEY);
246
+ const config = ServerConfigSchema.parse(existing ?? defaults ?? {});
247
+ if (!existing) {
248
+ await store.set(CONFIG_KEY, config);
249
+ }
250
+ return config;
251
+ }
252
+ export async function savePsLiteConfig(store, value) {
253
+ const config = ServerConfigSchema.parse(value);
254
+ await store.set(CONFIG_KEY, config);
255
+ return config;
256
+ }
257
+ export async function loadOrCreatePsLiteServerIdentity(params) {
258
+ const now = (params.now ?? (() => new Date()))().toISOString();
259
+ const existing = await params.store.get(SERVER_IDENTITY_KEY);
260
+ if (existing) {
261
+ const privateKey = await decryptPrivateKey(existing.encryptedPrivateKey, params.ownerSignature);
262
+ const account = accountFromPrivateKey(privateKey);
263
+ if (account.address.toLowerCase() !== existing.address.toLowerCase()) {
264
+ throw new Error("Encrypted PS Lite server identity is corrupt");
265
+ }
266
+ return { persisted: existing, account };
267
+ }
268
+ const privateKey = generatePrivateKey();
269
+ const account = accountFromPrivateKey(privateKey);
270
+ const persisted = {
271
+ version: 1,
272
+ address: account.address,
273
+ publicKey: account.publicKey,
274
+ encryptedPrivateKey: await encryptPrivateKey(privateKey, params.ownerSignature),
275
+ createdAt: now,
276
+ updatedAt: now,
277
+ };
278
+ await params.store.set(SERVER_IDENTITY_KEY, persisted);
279
+ return { persisted, account };
280
+ }
281
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { DataStoragePort } from "@opendatalabs/personal-server-ts-core/ports";
2
+ import type { DataFileEnvelope } from "@opendatalabs/vana-sdk/browser";
3
+ import type { IndexEntry } from "@opendatalabs/personal-server-ts-core/storage/index";
4
+ export declare function sortEntries(entries: IndexEntry[]): IndexEntry[];
5
+ export declare function createStorageReadMethods(entries: () => Iterable<Pick<IndexEntry, "scope" | "collectedAt">>, entriesForScope: (scope: string) => IndexEntry[]): Pick<DataStoragePort, "listScopes" | "listVersions" | "countVersions" | "findEntry">;
6
+ export declare function readEnvelopeFromMap(envelopes: ReadonlyMap<string, DataFileEnvelope>, key: string): DataFileEnvelope;
7
+ //# sourceMappingURL=storage-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-utils.d.ts","sourceRoot":"","sources":["../src/storage-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,qDAAqD,CAAC;AAE7D,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAI/D;AAsCD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,aAAa,CAAC,CAAC,EAClE,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,EAAE,GAC/C,IAAI,CACL,eAAe,EACf,YAAY,GAAG,cAAc,GAAG,eAAe,GAAG,WAAW,CAC9D,CAkBA;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAChD,GAAG,EAAE,MAAM,GACV,gBAAgB,CAMlB"}
@@ -0,0 +1,66 @@
1
+ export function sortEntries(entries) {
2
+ return [...entries].sort((a, b) => b.collectedAt.localeCompare(a.collectedAt));
3
+ }
4
+ function paginate(items, options) {
5
+ const offset = options.offset ?? 0;
6
+ const limit = options.limit ?? items.length;
7
+ return items.slice(offset, offset + limit);
8
+ }
9
+ function listScopes(entries, options) {
10
+ const scopes = summarizeScopes(entries, options);
11
+ return {
12
+ scopes: paginate(scopes, options),
13
+ total: scopes.length,
14
+ };
15
+ }
16
+ function findEntryInScope(entries, lookup) {
17
+ if (lookup.fileId) {
18
+ return entries.find((entry) => entry.fileId === lookup.fileId);
19
+ }
20
+ if (lookup.at) {
21
+ return entries.find((entry) => entry.collectedAt === lookup.at);
22
+ }
23
+ return entries[0];
24
+ }
25
+ export function createStorageReadMethods(entries, entriesForScope) {
26
+ return {
27
+ listScopes(options) {
28
+ return listScopes(entries(), options);
29
+ },
30
+ listVersions(scope, options) {
31
+ return paginate(entriesForScope(scope), options);
32
+ },
33
+ countVersions(scope) {
34
+ return entriesForScope(scope).length;
35
+ },
36
+ findEntry(lookup) {
37
+ return findEntryInScope(entriesForScope(lookup.scope), lookup);
38
+ },
39
+ };
40
+ }
41
+ export function readEnvelopeFromMap(envelopes, key) {
42
+ const envelope = envelopes.get(key);
43
+ if (!envelope) {
44
+ throw new Error("Envelope not found");
45
+ }
46
+ return envelope;
47
+ }
48
+ function summarizeScopes(entries, options) {
49
+ const summaries = new Map();
50
+ for (const entry of entries) {
51
+ if (options.scopePrefix && !entry.scope.startsWith(options.scopePrefix)) {
52
+ continue;
53
+ }
54
+ const existing = summaries.get(entry.scope);
55
+ summaries.set(entry.scope, {
56
+ scope: entry.scope,
57
+ latestCollectedAt: existing &&
58
+ existing.latestCollectedAt.localeCompare(entry.collectedAt) > 0
59
+ ? existing.latestCollectedAt
60
+ : entry.collectedAt,
61
+ versionCount: (existing?.versionCount ?? 0) + 1,
62
+ });
63
+ }
64
+ return Array.from(summaries.values()).sort((a, b) => a.scope.localeCompare(b.scope));
65
+ }
66
+ //# sourceMappingURL=storage-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-utils.js","sourceRoot":"","sources":["../src/storage-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { DataStoragePort } from "@opendatalabs/personal-server-ts-core/ports";
2
+ import type { DataFileEnvelope } from "@opendatalabs/vana-sdk/browser";
3
+ import type { IndexEntry } from "@opendatalabs/personal-server-ts-core/storage/index";
4
+ import type { PsLiteStorageAdapter } from "./runtime.js";
5
+ export interface PsLitePersistedStorageState {
6
+ version: 1;
7
+ nextId: number;
8
+ entries: IndexEntry[];
9
+ envelopes: DataFileEnvelope[];
10
+ }
11
+ export type PsLiteFileStorageKind = "opfs" | "indexeddb";
12
+ export interface PsLiteDataFileStore {
13
+ readonly kind: PsLiteFileStorageKind;
14
+ readEnvelope(path: string): Promise<DataFileEnvelope | null>;
15
+ writeEnvelope(path: string, envelope: DataFileEnvelope): Promise<number>;
16
+ deleteEnvelope(path: string): Promise<void>;
17
+ }
18
+ export interface PsLiteStorageCapabilities {
19
+ metadata: "indexeddb" | "memory" | "custom";
20
+ files: PsLiteFileStorageKind | "memory";
21
+ opfsAvailable: boolean;
22
+ }
23
+ export interface PsLitePersistenceAdapter {
24
+ read(): Promise<PsLitePersistedStorageState | null>;
25
+ write(state: PsLitePersistedStorageState): Promise<void>;
26
+ }
27
+ export interface IndexedDbPsLitePersistenceOptions {
28
+ dbName?: string;
29
+ storeName?: string;
30
+ key?: string;
31
+ }
32
+ export declare function createIndexedDbFallbackDataFileStore(envelopes: Map<string, DataFileEnvelope>): PsLiteDataFileStore;
33
+ export declare function isOpfsAvailable(): Promise<boolean>;
34
+ export declare function createOpfsPsLiteDataFileStore(): Promise<PsLiteDataFileStore>;
35
+ export declare function createIndexedDbPsLitePersistence(options?: IndexedDbPsLitePersistenceOptions): PsLitePersistenceAdapter;
36
+ export declare function createPersistentPsLiteStorage(adapter: PsLiteStorageAdapter, persistence?: PsLitePersistenceAdapter, dataFileStore?: PsLiteDataFileStore): Promise<DataStoragePort>;
37
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,WAAW,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC7D,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,KAAK,EAAE,qBAAqB,GAAG,QAAQ,CAAC;IACxC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,IAAI,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;IACpD,KAAK,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,iCAAiC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAoCD,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACvC,mBAAmB,CAcrB;AA2BD,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAKxD;AAED,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,mBAAmB,CAAC,CA2ClF;AAgDD,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,iCAAsC,GAC9C,wBAAwB,CAsB1B;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,oBAAoB,EAC7B,WAAW,GAAE,wBAA6D,EAC1E,aAAa,CAAC,EAAE,mBAAmB,GAClC,OAAO,CAAC,eAAe,CAAC,CA8I1B"}