@stinkycomputing/sesame-api-client 1.4.1-alpha.9 → 1.4.1-beta.10
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 +60 -136
- package/dist/index.browser.mjs +2054 -1520
- package/dist/index.browser.mjs.map +4 -4
- package/dist/index.cjs +2058 -1522
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +2054 -1520
- package/dist/index.mjs.map +4 -4
- package/dist/jobs-api.d.ts +5 -6
- package/dist/jobs-api.d.ts.map +1 -1
- package/dist/proto/api.d.ts +936 -897
- package/dist/proto/api.js +3716 -3072
- package/dist/rpc-client.d.ts +7 -0
- package/dist/rpc-client.d.ts.map +1 -1
- package/dist/sesame-api-client.d.ts +5 -6
- package/dist/sesame-api-client.d.ts.map +1 -1
- package/dist/sesame-connection.d.ts +11 -2
- package/dist/sesame-connection.d.ts.map +1 -1
- package/dist/sesame-wire-protocol.d.ts +29 -0
- package/dist/sesame-wire-protocol.d.ts.map +1 -0
- package/dist/status-api.d.ts +0 -1
- package/dist/status-api.d.ts.map +1 -1
- package/docs/protocol-reference.md +1218 -0
- package/package.json +2 -1
package/dist/rpc-client.d.ts
CHANGED
|
@@ -75,6 +75,13 @@ export declare class RPCClient<T extends protobuf.rpc.Service> extends EventEmit
|
|
|
75
75
|
constructor(connection: SesameConnection, service: {
|
|
76
76
|
create(rpcImpl: protobuf.RPCImpl): T;
|
|
77
77
|
}, options?: IClientOptions);
|
|
78
|
+
/**
|
|
79
|
+
* Wraps service method calls to attach a rejection handler on all returned
|
|
80
|
+
* promises. This prevents unhandled promise rejections (e.g. from timeouts
|
|
81
|
+
* while disconnected) from crashing the host process. Callers can still
|
|
82
|
+
* catch errors normally via await / .catch().
|
|
83
|
+
*/
|
|
84
|
+
private wrapServicePromises;
|
|
78
85
|
private openHandler;
|
|
79
86
|
private rpcImpl;
|
|
80
87
|
private rpcCallback;
|
package/dist/rpc-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IACrE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,kBAAkB,GAAG;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CACvF;AASD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;IACvD;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1D;;;;OAIG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAA;CAC7H;AAED;;;;GAIG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,SAAQ,YAAa,YAAW,aAAa;IAEhG;;OAEG;IACH,SAAgB,OAAO,EAAE,cAAc,CAAA;IAEvC;;OAEG;IACH,SAAgB,OAAO,EAAE,CAAC,CAAA;IAE1B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAE3B;;;;OAIG;gBACS,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE;QAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAA;KAAE,EAAE,OAAO,GAAE,cAAmB;IAczH;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,WAAW,CAKlB;IAED,OAAO,CAAC,OAAO,CA2Bd;IAED,OAAO,CAAC,WAAW,CAalB;IAED,OAAO,CAAC,YAAY,CAInB;YAEa,kBAAkB;IAmBhC,OAAO,CAAC,YAAY,CAMnB;IAED,OAAO,CAAC,cAAc,CAcrB;YAEa,eAAe;IAQ7B,OAAO,CAAC,YAAY;CA2BvB;AAED;;;GAGG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MediaPacketCallback } from './sesame-connection';
|
|
2
2
|
import { RPCClient } from './rpc-client';
|
|
3
3
|
import { sesame } from './proto/api';
|
|
4
4
|
import { CommandList } from './command-list';
|
|
@@ -52,22 +52,21 @@ interface CallbackMessage {
|
|
|
52
52
|
export declare class SesameClient extends EventEmitter {
|
|
53
53
|
private conn;
|
|
54
54
|
private rpc;
|
|
55
|
-
private
|
|
55
|
+
private mediaSubscriptionId;
|
|
56
56
|
private subscriptions;
|
|
57
|
-
private errorIsLogged;
|
|
58
57
|
readonly status: StatusApi;
|
|
59
58
|
readonly recorder: RecorderApi;
|
|
60
59
|
readonly jobs: JobsApi;
|
|
61
|
-
|
|
62
|
-
onAudioPacket: AudioCallback;
|
|
60
|
+
onMediaPacket: MediaPacketCallback;
|
|
63
61
|
onCallbackMessage: CallbackMessage;
|
|
64
62
|
isConnected(): boolean;
|
|
65
63
|
constructor(portOrUrl: number | string);
|
|
66
64
|
private sendSubscriptions;
|
|
67
|
-
|
|
65
|
+
addMediaSubscription(id: string): void;
|
|
68
66
|
addSubscription(topic: sesame.v1.common.EventTopic, callback: TopicDataCallback): void;
|
|
69
67
|
removeSubscription(topic: sesame.v1.common.EventTopic, callback: TopicDataCallback): void;
|
|
70
68
|
getService(): RPCClient<sesame.v1.rpc.SesameAPIService>;
|
|
69
|
+
requestKeyframe(outputId: string): Promise<void>;
|
|
71
70
|
execute(cl: CommandList): Promise<void>;
|
|
72
71
|
disconnect(): void;
|
|
73
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sesame-api-client.d.ts","sourceRoot":"","sources":["../src/sesame-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sesame-api-client.d.ts","sourceRoot":"","sources":["../src/sesame-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAoB,MAAM,qBAAqB,CAAA;AAE3E,OAAO,EAAkB,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,YAAY,gBAAgB;IAC5B,aAAa,iBAAiB;IAC9B,eAAe,mBAAmB;IAClC,QAAQ,YAAY;IACpB,SAAS,aAAa;IACtB,WAAW,eAAe;IAC1B,UAAU,cAAc;IACxB,WAAW,eAAe;IAC1B,aAAa,iBAAiB;IAC9B,UAAU,cAAc;IACxB,WAAW,eAAe;IAC1B,aAAa,iBAAiB;IAC9B,aAAa,iBAAiB;IAC9B,cAAc,kBAAkB;IAChC,gBAAgB,oBAAoB;IACpC,cAAc,kBAAkB;IAChC,eAAe,mBAAmB;IAClC,iBAAiB,qBAAqB;IACtC,WAAW,eAAe;IAC1B,YAAY,gBAAgB;IAC5B,cAAc,kBAAkB;IAChC,SAAS,aAAa;IACtB,UAAU,cAAc;IACxB,YAAY,gBAAgB;IAC5B,UAAU,cAAc;IACxB,WAAW,eAAe;IAC1B,aAAa,iBAAiB;IAC9B,OAAO,WAAW;IAClB,QAAQ,YAAY;IACpB,UAAU,cAAc;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;CACxE;AAED,UAAU,eAAe;IACvB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC;AAOD,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,GAAG,CAA4C;IACvD,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,aAAa,CAA2B;IAEhD,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAEvB,aAAa,EAAE,mBAAmB,CAAY;IAC9C,iBAAiB,EAAE,eAAe,CAAY;IAE9C,WAAW,IAAI,OAAO;gBAIjB,SAAS,EAAE,MAAM,GAAG,MAAM;IAgEtC,OAAO,CAAC,iBAAiB;IAYlB,oBAAoB,CAAC,EAAE,EAAE,MAAM;IAK/B,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,iBAAiB;IAU/E,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,iBAAiB;IAKlF,UAAU;IAIJ,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,OAAO,CAAC,EAAE,EAAE,WAAW;IAO7B,UAAU;CAGlB"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
|
|
3
|
-
export type
|
|
2
|
+
import { ParsedFrame } from './sesame-wire-protocol';
|
|
3
|
+
export type MediaPacketCallback = (id: string, frame: ParsedFrame) => void;
|
|
4
|
+
export declare enum ConnectionState {
|
|
5
|
+
Disconnected = "disconnected",
|
|
6
|
+
Connecting = "connecting",
|
|
7
|
+
Connected = "connected",
|
|
8
|
+
Reconnecting = "reconnecting"
|
|
9
|
+
}
|
|
4
10
|
export declare function waitForEvent<T>(emitter: EventEmitter, eventName: string | symbol): Promise<T>;
|
|
5
11
|
export interface IConnectionOptions {
|
|
6
12
|
autoConnect: boolean;
|
|
@@ -13,6 +19,9 @@ export declare class SesameConnection extends EventEmitter {
|
|
|
13
19
|
private numRetries;
|
|
14
20
|
private url;
|
|
15
21
|
private autoReconnect;
|
|
22
|
+
private _state;
|
|
23
|
+
get state(): ConnectionState;
|
|
24
|
+
private setState;
|
|
16
25
|
private boundMessageHandler;
|
|
17
26
|
private boundOpenHandler;
|
|
18
27
|
private boundCloseHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sesame-connection.d.ts","sourceRoot":"","sources":["../src/sesame-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"sesame-connection.d.ts","sourceRoot":"","sources":["../src/sesame-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAA2B,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE3E,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAI3F;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,MAAM,CAAiD;IAE/D,IAAW,KAAK,IAAI,eAAe,CAElC;IAED,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,mBAAmB,CAAuD;IAClF,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA8C;gBAE3D,OAAO,EAAE,kBAAkB;IAShC,WAAW,IAAI,OAAO;IAIhB,IAAI,CAAC,IAAI,EAAE,UAAU;IAQrB,OAAO;IAsCpB;;OAEG;IACU,UAAU;IAcvB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,WAAW,CAIlB;IAED,SAAS,CAAC,cAAc,GAAI,OAAO,YAAY,UAe9C;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sesame Wire Protocol - TypeScript Implementation
|
|
3
|
+
*
|
|
4
|
+
* Protobuf-based wire framing for all websocket packets.
|
|
5
|
+
* Format: [4-byte LE header_size][serialized FrameHeader][payload]
|
|
6
|
+
*/
|
|
7
|
+
import { sesame } from './proto/api';
|
|
8
|
+
export declare const FrameType: typeof sesame.v1.wire.FrameType;
|
|
9
|
+
export type IFrameHeader = sesame.v1.wire.IFrameHeader;
|
|
10
|
+
export declare const FrameHeader: typeof sesame.v1.wire.FrameHeader;
|
|
11
|
+
export type IMediaCodecData = sesame.v1.wire.IMediaCodecData;
|
|
12
|
+
export declare const MediaCodecData: typeof sesame.v1.wire.MediaCodecData;
|
|
13
|
+
export declare const CodecType: typeof sesame.v1.common.CodecType;
|
|
14
|
+
export interface ParsedFrame {
|
|
15
|
+
valid: boolean;
|
|
16
|
+
header: sesame.v1.wire.FrameHeader | null;
|
|
17
|
+
payload: Uint8Array | null;
|
|
18
|
+
}
|
|
19
|
+
export declare class WireProtocol {
|
|
20
|
+
/**
|
|
21
|
+
* Serialize a wire frame: 4-byte LE header_size + protobuf FrameHeader + payload.
|
|
22
|
+
*/
|
|
23
|
+
static serialize(header: sesame.v1.wire.IFrameHeader, payload?: Uint8Array | null): Uint8Array;
|
|
24
|
+
/**
|
|
25
|
+
* Parse an incoming wire frame.
|
|
26
|
+
*/
|
|
27
|
+
static parse(data: Uint8Array): ParsedFrame;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=sesame-wire-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sesame-wire-protocol.d.ts","sourceRoot":"","sources":["../src/sesame-wire-protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,eAAO,MAAM,SAAS,iCAA2B,CAAC;AAClD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;AACvD,eAAO,MAAM,WAAW,mCAA6B,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC;AAC7D,eAAO,MAAM,cAAc,sCAAgC,CAAC;AAC5D,eAAO,MAAM,SAAS,mCAA6B,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;CAC5B;AAID,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,UAAU;IAqB9F;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW;CAqB5C"}
|
package/dist/status-api.d.ts
CHANGED
|
@@ -6,6 +6,5 @@ export declare class StatusApi {
|
|
|
6
6
|
constructor(rpc: RPCClient<sesame.v1.rpc.SesameAPIService>);
|
|
7
7
|
getStatus(): Promise<sesame.v1.status.Status>;
|
|
8
8
|
getIODevices(): Promise<sesame.v1.status.IODeviceListResponse>;
|
|
9
|
-
requestKeyframe(outputId: string): Promise<void>;
|
|
10
9
|
}
|
|
11
10
|
//# sourceMappingURL=status-api.d.ts.map
|
package/dist/status-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-api.d.ts","sourceRoot":"","sources":["../src/status-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,SAAS;IAER,OAAO,CAAC,GAAG;IADvB,gBAAgB;gBACI,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE5D,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAI7C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"status-api.d.ts","sourceRoot":"","sources":["../src/status-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,SAAS;IAER,OAAO,CAAC,GAAG;IADvB,gBAAgB;gBACI,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE5D,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAI7C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC;CAGrE"}
|