@tensorix/metahub 0.3.2 → 0.4.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 +23 -10
- package/README.zh-CN.md +23 -10
- package/dist/cli/edge-worker-script.d.ts +4 -0
- package/dist/cli/edge-worker-script.d.ts.map +1 -0
- package/dist/cli.js +16882 -8691
- package/dist/cli.js.map +109 -59
- package/dist/core/access-policy.d.ts +82 -0
- package/dist/core/access-policy.d.ts.map +1 -0
- package/dist/core/blobs-core.d.ts +19 -0
- package/dist/core/blobs-core.d.ts.map +1 -1
- package/dist/core/blobs.d.ts.map +1 -1
- package/dist/core/compact.d.ts.map +1 -1
- package/dist/core/config.d.ts +13 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/crdt.d.ts +29 -2
- package/dist/core/crdt.d.ts.map +1 -1
- package/dist/core/data-map.d.ts +105 -0
- package/dist/core/data-map.d.ts.map +1 -0
- package/dist/core/db.d.ts +1 -1
- package/dist/core/db.d.ts.map +1 -1
- package/dist/core/documents.d.ts.map +1 -1
- package/dist/core/errors.d.ts +2 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/grants-core.d.ts +132 -0
- package/dist/core/grants-core.d.ts.map +1 -0
- package/dist/core/guest-intent.d.ts +33 -0
- package/dist/core/guest-intent.d.ts.map +1 -0
- package/dist/core/hash.d.ts +4 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/history.d.ts.map +1 -1
- package/dist/core/hlc.d.ts +5 -0
- package/dist/core/hlc.d.ts.map +1 -1
- package/dist/core/ids.d.ts +1 -1
- package/dist/core/ids.d.ts.map +1 -1
- package/dist/core/inject-runtime.d.ts +8 -0
- package/dist/core/inject-runtime.d.ts.map +1 -0
- package/dist/core/intent-retention.d.ts +23 -0
- package/dist/core/intent-retention.d.ts.map +1 -0
- package/dist/core/md/inline.d.ts +6 -2
- package/dist/core/md/inline.d.ts.map +1 -1
- package/dist/core/node.d.ts +13 -0
- package/dist/core/node.d.ts.map +1 -1
- package/dist/core/records.d.ts +31 -0
- package/dist/core/records.d.ts.map +1 -1
- package/dist/core/schema-init.d.ts +19 -2
- package/dist/core/schema-init.d.ts.map +1 -1
- package/dist/core/schema.d.ts +1 -1
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/shares.d.ts +15 -0
- package/dist/core/shares.d.ts.map +1 -1
- package/dist/core/site-channel-lifecycle.d.ts +10 -0
- package/dist/core/site-channel-lifecycle.d.ts.map +1 -0
- package/dist/core/site-channel-store.d.ts +120 -0
- package/dist/core/site-channel-store.d.ts.map +1 -0
- package/dist/core/site-channels.d.ts +65 -0
- package/dist/core/site-channels.d.ts.map +1 -0
- package/dist/core/sites-core.d.ts +100 -7
- package/dist/core/sites-core.d.ts.map +1 -1
- package/dist/core/sites.d.ts +65 -2
- package/dist/core/sites.d.ts.map +1 -1
- package/dist/core/sync/anti-abuse.d.ts +26 -0
- package/dist/core/sync/anti-abuse.d.ts.map +1 -0
- package/dist/core/sync/auth.d.ts +30 -2
- package/dist/core/sync/auth.d.ts.map +1 -1
- package/dist/core/sync/blob-routes.d.ts.map +1 -1
- package/dist/core/sync/cf-api.d.ts +54 -0
- package/dist/core/sync/cf-api.d.ts.map +1 -0
- package/dist/core/sync/cf-oauth.d.ts +91 -0
- package/dist/core/sync/cf-oauth.d.ts.map +1 -0
- package/dist/core/sync/client.d.ts +12 -0
- package/dist/core/sync/client.d.ts.map +1 -1
- package/dist/core/sync/data-map-db.d.ts +8 -0
- package/dist/core/sync/data-map-db.d.ts.map +1 -0
- package/dist/core/sync/devices.d.ts +65 -0
- package/dist/core/sync/devices.d.ts.map +1 -0
- package/dist/core/sync/drop-host.d.ts +40 -0
- package/dist/core/sync/drop-host.d.ts.map +1 -0
- package/dist/core/sync/drop-keys.d.ts +64 -0
- package/dist/core/sync/drop-keys.d.ts.map +1 -0
- package/dist/core/sync/drop-protocol.d.ts +94 -0
- package/dist/core/sync/drop-protocol.d.ts.map +1 -0
- package/dist/core/sync/drop-pull.d.ts +67 -0
- package/dist/core/sync/drop-pull.d.ts.map +1 -0
- package/dist/core/sync/drop-wire.d.ts +39 -0
- package/dist/core/sync/drop-wire.d.ts.map +1 -0
- package/dist/core/sync/e2ee.d.ts +3 -0
- package/dist/core/sync/e2ee.d.ts.map +1 -1
- package/dist/core/sync/edge-config.d.ts +77 -0
- package/dist/core/sync/edge-config.d.ts.map +1 -0
- package/dist/core/sync/edge-connect.d.ts +13 -0
- package/dist/core/sync/edge-connect.d.ts.map +1 -0
- package/dist/core/sync/edge-service.d.ts +100 -0
- package/dist/core/sync/edge-service.d.ts.map +1 -0
- package/dist/core/sync/grants-routes.d.ts +46 -0
- package/dist/core/sync/grants-routes.d.ts.map +1 -0
- package/dist/core/sync/guest-session.d.ts +29 -0
- package/dist/core/sync/guest-session.d.ts.map +1 -0
- package/dist/core/sync/html-escape.d.ts +2 -0
- package/dist/core/sync/html-escape.d.ts.map +1 -0
- package/dist/core/sync/http-status.d.ts +14 -0
- package/dist/core/sync/http-status.d.ts.map +1 -0
- package/dist/core/sync/http-util.d.ts +6 -0
- package/dist/core/sync/http-util.d.ts.map +1 -0
- package/dist/core/sync/pairing.d.ts +9 -9
- package/dist/core/sync/pairing.d.ts.map +1 -1
- package/dist/core/sync/partition.d.ts +77 -0
- package/dist/core/sync/partition.d.ts.map +1 -0
- package/dist/core/sync/peers-routes.d.ts.map +1 -1
- package/dist/core/sync/peers.d.ts +77 -0
- package/dist/core/sync/peers.d.ts.map +1 -1
- package/dist/core/sync/protocol.d.ts +2 -0
- package/dist/core/sync/protocol.d.ts.map +1 -1
- package/dist/core/sync/rate-limit.d.ts +20 -0
- package/dist/core/sync/rate-limit.d.ts.map +1 -0
- package/dist/core/sync/recovery.d.ts +9 -0
- package/dist/core/sync/recovery.d.ts.map +1 -0
- package/dist/core/sync/room-client.d.ts +50 -0
- package/dist/core/sync/room-client.d.ts.map +1 -0
- package/dist/core/sync/room-peer.d.ts +62 -0
- package/dist/core/sync/room-peer.d.ts.map +1 -0
- package/dist/core/sync/room-protocol.d.ts +130 -0
- package/dist/core/sync/room-protocol.d.ts.map +1 -0
- package/dist/core/sync/room-serve.d.ts +38 -0
- package/dist/core/sync/room-serve.d.ts.map +1 -0
- package/dist/core/sync/room-url.d.ts +4 -0
- package/dist/core/sync/room-url.d.ts.map +1 -0
- package/dist/core/sync/routes.d.ts +4 -1
- package/dist/core/sync/routes.d.ts.map +1 -1
- package/dist/core/sync/seal.d.ts +22 -0
- package/dist/core/sync/seal.d.ts.map +1 -0
- package/dist/core/sync/server.d.ts +7 -0
- package/dist/core/sync/server.d.ts.map +1 -1
- package/dist/core/sync/share-actions.d.ts +55 -6
- package/dist/core/sync/share-actions.d.ts.map +1 -1
- package/dist/core/sync/share-export.d.ts +14 -0
- package/dist/core/sync/share-export.d.ts.map +1 -1
- package/dist/core/sync/share-render.d.ts +9 -1
- package/dist/core/sync/share-render.d.ts.map +1 -1
- package/dist/core/sync/share-serve.d.ts +5 -1
- package/dist/core/sync/share-serve.d.ts.map +1 -1
- package/dist/core/sync/site-channel-reconcile.d.ts +26 -0
- package/dist/core/sync/site-channel-reconcile.d.ts.map +1 -0
- package/dist/core/sync/site-publish-recovery.d.ts +32 -0
- package/dist/core/sync/site-publish-recovery.d.ts.map +1 -0
- package/dist/core/sync/site-reachability.d.ts +13 -0
- package/dist/core/sync/site-reachability.d.ts.map +1 -0
- package/dist/core/sync/sites-routes.d.ts.map +1 -1
- package/dist/core/sync/sites-serve.d.ts +24 -1
- package/dist/core/sync/sites-serve.d.ts.map +1 -1
- package/dist/core/sync/storage-s3-bun.d.ts +1 -24
- package/dist/core/sync/storage-s3-bun.d.ts.map +1 -1
- package/dist/core/sync/storage-s3-sign.d.ts +43 -0
- package/dist/core/sync/storage-s3-sign.d.ts.map +1 -0
- package/dist/core/sync/storage.d.ts +59 -0
- package/dist/core/sync/storage.d.ts.map +1 -1
- package/dist/db-worker.js +206 -76
- package/dist/edge-worker.js +3960 -0
- package/dist/index.js +13175 -6670
- package/dist/index.js.map +87 -41
- package/dist/metahub-sdk.js +10 -1
- package/dist/mh-runtime.js +1 -1
- package/dist/room/do-driver.d.ts +30 -0
- package/dist/room/do-driver.d.ts.map +1 -0
- package/dist/sw.js +10 -1
- package/dist/webui/server/edge-routes.d.ts +3 -0
- package/dist/webui/server/edge-routes.d.ts.map +1 -0
- package/dist/webui/server/json-handler.d.ts +4 -0
- package/dist/webui/server/json-handler.d.ts.map +1 -0
- package/dist/webui/server/routes.d.ts.map +1 -1
- package/dist/webui/server/share-routes.d.ts.map +1 -1
- package/dist/webui/server/site-hosting-routes.d.ts +7 -0
- package/dist/webui/server/site-hosting-routes.d.ts.map +1 -0
- package/dist/webui.js +192 -137
- package/dist/workers/edge-worker.d.ts +66 -0
- package/dist/workers/edge-worker.d.ts.map +1 -0
- package/dist/workers/room.d.ts +34 -0
- package/dist/workers/room.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export { MhRoom } from "./room.ts";
|
|
2
|
+
export declare const EDGE_WORKER_VERSION = "3";
|
|
3
|
+
export declare const EDGE_WORKER_MARKER = "mh-edge-worker";
|
|
4
|
+
export declare const DROP_DEFAULT_MAX_ENVELOPES = 2000;
|
|
5
|
+
export declare const DROP_DEFAULT_MAX_BYTES: number;
|
|
6
|
+
export declare const DROP_ENVELOPE_LIMIT_BYTES: number;
|
|
7
|
+
/** D1 schema, also executed by `mh edge deploy` through the D1 HTTP API (the
|
|
8
|
+
* worker itself never migrates — deploy owns the schema). Statements are
|
|
9
|
+
* IF NOT EXISTS so re-deploys are idempotent.
|
|
10
|
+
*
|
|
11
|
+
* CONTRACT: cf-api.ts `d1Exec` splits this on ';' naively (no SQL parser), so do
|
|
12
|
+
* NOT add a trigger body or a string literal containing ';' here — it would cut
|
|
13
|
+
* the statement in half. Keep every statement a single semicolon-free CREATE. */
|
|
14
|
+
export declare const EDGE_SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS drops (\n drop_id TEXT PRIMARY KEY,\n turnstile_sitekey TEXT,\n turnstile_secret TEXT,\n password_salt TEXT,\n password_verifier TEXT,\n max_envelopes INTEGER NOT NULL DEFAULT 2000,\n max_bytes INTEGER NOT NULL DEFAULT 20971520,\n created_at INTEGER NOT NULL\n);\nCREATE TABLE IF NOT EXISTS envelopes (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n drop_id TEXT NOT NULL,\n envelope_id TEXT NOT NULL,\n body TEXT NOT NULL,\n bytes INTEGER NOT NULL,\n created_at INTEGER NOT NULL,\n UNIQUE (drop_id, envelope_id)\n);\nCREATE INDEX IF NOT EXISTS idx_envelopes_drop ON envelopes(drop_id, id);\nCREATE INDEX IF NOT EXISTS idx_envelopes_drop_created ON envelopes(drop_id, created_at);\n";
|
|
15
|
+
/** The narrow SQL surface the handler needs. D1 adapts via d1Sql below; tests
|
|
16
|
+
* adapt bun:sqlite in-memory — same SQLite dialect, full API surface tested. */
|
|
17
|
+
export interface EdgeSql {
|
|
18
|
+
all<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
19
|
+
run(sql: string, params?: unknown[]): Promise<{
|
|
20
|
+
changes: number;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
export interface InboxDeps {
|
|
24
|
+
sql: EdgeSql;
|
|
25
|
+
/** The owner secret ("drt_…"); empty/undefined denies every owner route. */
|
|
26
|
+
ownerToken: string | undefined;
|
|
27
|
+
/** Injectable for tests; defaults to the real Turnstile siteverify call. */
|
|
28
|
+
verifyTurnstile?: (secret: string, token: string, ip: string | null) => Promise<boolean>;
|
|
29
|
+
now?: () => number;
|
|
30
|
+
}
|
|
31
|
+
/** Build the inbox fetch handler over injected deps — a pure function of
|
|
32
|
+
* (Request → Response), so the identical logic is unit-tested in Bun and
|
|
33
|
+
* served by workerd. */
|
|
34
|
+
export declare function createInboxFetch(deps: InboxDeps): (req: Request) => Promise<Response>;
|
|
35
|
+
/** Minimal D1 typing so this file needs no @cloudflare/workers-types dependency. */
|
|
36
|
+
interface D1Like {
|
|
37
|
+
prepare(sql: string): {
|
|
38
|
+
bind(...params: unknown[]): {
|
|
39
|
+
all(): Promise<{
|
|
40
|
+
results?: Record<string, unknown>[];
|
|
41
|
+
}>;
|
|
42
|
+
run(): Promise<{
|
|
43
|
+
meta?: {
|
|
44
|
+
changes?: number;
|
|
45
|
+
};
|
|
46
|
+
}>;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** Minimal DO namespace typing (same rationale as D1Like). */
|
|
51
|
+
interface RoomNamespaceLike {
|
|
52
|
+
idFromName(name: string): unknown;
|
|
53
|
+
get(id: unknown): {
|
|
54
|
+
fetch(req: Request): Promise<Response>;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
interface EdgeEnv {
|
|
58
|
+
DB: D1Like;
|
|
59
|
+
OWNER_TOKEN?: string;
|
|
60
|
+
ROOM?: RoomNamespaceLike;
|
|
61
|
+
}
|
|
62
|
+
declare const _default: {
|
|
63
|
+
fetch(req: Request, env: EdgeEnv): Promise<Response>;
|
|
64
|
+
};
|
|
65
|
+
export default _default;
|
|
66
|
+
//# sourceMappingURL=edge-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-worker.d.ts","sourceRoot":"","sources":["../../src/workers/edge-worker.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAOnC,eAAO,MAAM,mBAAmB,MAA+B,CAAC;AAChE,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AAEnD,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AACvD,eAAO,MAAM,yBAAyB,QAAY,CAAC;AAInD;;;;;;kFAMkF;AAClF,eAAO,MAAM,eAAe,mxBAsB3B,CAAC;AAIF;iFACiF;AACjF,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,OAAO,CAAC;IACb,4EAA4E;IAC5E,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,4EAA4E;IAC5E,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAiCD;;yBAEyB;AACzB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAiNrF;AAID,oFAAoF;AACpF,UAAU,MAAM;IACd,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;YAC1B,GAAG,IAAI,OAAO,CAAC;gBAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;aAAE,CAAC,CAAC;YACxD,GAAG,IAAI,OAAO,CAAC;gBAAE,IAAI,CAAC,EAAE;oBAAE,OAAO,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAC;SACjD,CAAC;KACH,CAAC;CACH;AAED,8DAA8D;AAC9D,UAAU,iBAAiB;IACzB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAC;CAC9D;AAED,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;;eAyCkB,OAAO,OAAO,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAD5D,wBAmBE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type DoStorageLike } from "../room/do-driver.ts";
|
|
2
|
+
interface WsLike {
|
|
3
|
+
send(data: string): void;
|
|
4
|
+
close(code?: number, reason?: string): void;
|
|
5
|
+
serializeAttachment?(value: unknown): void;
|
|
6
|
+
deserializeAttachment?(): unknown;
|
|
7
|
+
}
|
|
8
|
+
interface RoomState {
|
|
9
|
+
storage: DoStorageLike & {
|
|
10
|
+
deleteAll(): Promise<void> | void;
|
|
11
|
+
setAlarm(scheduledTime: number): Promise<void> | void;
|
|
12
|
+
deleteAlarm?(): Promise<void> | void;
|
|
13
|
+
};
|
|
14
|
+
blockConcurrencyWhile?<T>(fn: () => Promise<T>): Promise<T>;
|
|
15
|
+
acceptWebSocket(ws: WsLike): void;
|
|
16
|
+
getWebSockets(): WsLike[];
|
|
17
|
+
setWebSocketAutoResponse?(pair: unknown): void;
|
|
18
|
+
}
|
|
19
|
+
interface RoomEnv {
|
|
20
|
+
OWNER_TOKEN?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class MhRoom {
|
|
23
|
+
private readonly state;
|
|
24
|
+
private readonly db;
|
|
25
|
+
private readonly handler;
|
|
26
|
+
constructor(state: RoomState, env: RoomEnv);
|
|
27
|
+
fetch(req: Request): Promise<Response>;
|
|
28
|
+
private upgrade;
|
|
29
|
+
webSocketMessage(ws: WsLike, message: unknown): Promise<void>;
|
|
30
|
+
alarm(): Promise<void>;
|
|
31
|
+
private broadcast;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=room.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room.d.ts","sourceRoot":"","sources":["../../src/workers/room.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AASvE,UAAU,MAAM;IACd,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,mBAAmB,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3C,qBAAqB,CAAC,IAAI,OAAO,CAAC;CACnC;AAED,UAAU,SAAS;IACjB,OAAO,EAAE,aAAa,GAAG;QACvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACtD,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACtC,CAAC;IACF,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,wBAAwB,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAChD;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,MAAM;IAKf,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAG3C,KAAK,EAAE,SAAS,EACjC,GAAG,EAAE,OAAO;IA0CR,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;YAgB9B,OAAO;IAiBf,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B5B,OAAO,CAAC,SAAS;CAUlB"}
|