@threejs-shared/protobuf 0.1.2 → 0.1.4

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,80 @@
1
+ import { WebSocketManager, MessageFormat } from './WebSocketManager';
2
+ import type { WebSocketManagerOptions, WebSocketCallbacks, ProtoBufManagerOptions } from './index';
3
+ /**
4
+ * Protobuf WebSocket 客户端配置
5
+ */
6
+ export interface ProtobufWebSocketClientConfig {
7
+ /** Proto 文件路径 */
8
+ protoPath: string;
9
+ /** 消息类型名称(例如:'SimulationMonitor.SimulationMonitorMsg') */
10
+ messageType: string;
11
+ /** WebSocket URL */
12
+ wsUrl: string;
13
+ /** WebSocket 管理器选项 */
14
+ wsOptions?: WebSocketManagerOptions;
15
+ /** ProtoBuf 管理器选项 */
16
+ protoBufOptions?: ProtoBufManagerOptions;
17
+ }
18
+ /**
19
+ * Protobuf WebSocket 客户端
20
+ *
21
+ * 这是一个高级封装类,将 ProtoBufManager 和 WebSocketManager 的使用流程封装起来,
22
+ * 简化业务代码中的使用。业务代码只需要配置参数和定义回调函数即可。
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const client = new ProtobufWebSocketClient({
27
+ * protoPath: '/proto/SimulationMonitor.proto',
28
+ * messageType: 'SimulationMonitor.SimulationMonitorMsg',
29
+ * wsUrl: 'ws://localhost:8080',
30
+ * wsOptions: {
31
+ * autoReconnect: true,
32
+ * reconnectDelay: 3000,
33
+ * },
34
+ * protoBufOptions: {
35
+ * enableLog: true, // 控制 ProtoBufManager 的日志
36
+ * }
37
+ * })
38
+ *
39
+ * await client.connect({
40
+ * onOpen: () => {
41
+ * // 连接成功后可以在这里发送初始消息
42
+ * client.send({ frameRate: { frameRate: 20 } })
43
+ * },
44
+ * onMessage: (data) => {
45
+ * console.log('Received:', data)
46
+ * }
47
+ * })
48
+ * ```
49
+ */
50
+ export declare class ProtobufWebSocketClient {
51
+ private protoBufManager;
52
+ webSocketManager: WebSocketManager | null;
53
+ private config;
54
+ private protobufType;
55
+ constructor(config: ProtobufWebSocketClientConfig);
56
+ /**
57
+ * 连接 WebSocket(会自动加载 Proto 文件)
58
+ * @param callbacks 事件回调函数
59
+ * @returns Promise<void>
60
+ */
61
+ connect(callbacks?: WebSocketCallbacks): Promise<void>;
62
+ /**
63
+ * 发送消息
64
+ * @param message 要发送的消息对象或 JSON 字符串
65
+ * @param format 消息格式,默认为 Protobuf 格式
66
+ * @throws 如果连接未建立或消息验证失败
67
+ */
68
+ send(message: object | string, format?: MessageFormat): void;
69
+ /**
70
+ * 断开连接
71
+ * @param code 关闭代码
72
+ * @param reason 关闭原因
73
+ */
74
+ disconnect(code?: number, reason?: string): void;
75
+ /**
76
+ * 销毁客户端,清理所有资源
77
+ */
78
+ destroy(): void;
79
+ }
80
+ //# sourceMappingURL=ProtobufWebSocketClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtobufWebSocketClient.d.ts","sourceRoot":"","sources":["../src/ProtobufWebSocketClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAElG;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;IACnB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,sBAAsB;IACtB,SAAS,CAAC,EAAE,uBAAuB,CAAA;IACnC,qBAAqB;IACrB,eAAe,CAAC,EAAE,sBAAsB,CAAA;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,eAAe,CAAiB;IACjC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAO;IACvD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,EAAE,6BAA6B;IAKjD;;;;OAIG;IACG,OAAO,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5D;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAE,aAAsC,GAAG,IAAI;IAOpF;;;;OAIG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhD;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}
@@ -0,0 +1,94 @@
1
+ import { ProtoBufManager } from './ProtoBufManager';
2
+ import { WebSocketManager, MessageFormat } from './WebSocketManager';
3
+ /**
4
+ * Protobuf WebSocket 客户端
5
+ *
6
+ * 这是一个高级封装类,将 ProtoBufManager 和 WebSocketManager 的使用流程封装起来,
7
+ * 简化业务代码中的使用。业务代码只需要配置参数和定义回调函数即可。
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const client = new ProtobufWebSocketClient({
12
+ * protoPath: '/proto/SimulationMonitor.proto',
13
+ * messageType: 'SimulationMonitor.SimulationMonitorMsg',
14
+ * wsUrl: 'ws://localhost:8080',
15
+ * wsOptions: {
16
+ * autoReconnect: true,
17
+ * reconnectDelay: 3000,
18
+ * },
19
+ * protoBufOptions: {
20
+ * enableLog: true, // 控制 ProtoBufManager 的日志
21
+ * }
22
+ * })
23
+ *
24
+ * await client.connect({
25
+ * onOpen: () => {
26
+ * // 连接成功后可以在这里发送初始消息
27
+ * client.send({ frameRate: { frameRate: 20 } })
28
+ * },
29
+ * onMessage: (data) => {
30
+ * console.log('Received:', data)
31
+ * }
32
+ * })
33
+ * ```
34
+ */
35
+ export class ProtobufWebSocketClient {
36
+ constructor(config) {
37
+ this.webSocketManager = null;
38
+ this.protobufType = null;
39
+ this.config = config;
40
+ this.protoBufManager = new ProtoBufManager(config.protoBufOptions);
41
+ }
42
+ /**
43
+ * 连接 WebSocket(会自动加载 Proto 文件)
44
+ * @param callbacks 事件回调函数
45
+ * @returns Promise<void>
46
+ */
47
+ async connect(callbacks) {
48
+ try {
49
+ // 加载 Proto 文件
50
+ this.protobufType = await this.protoBufManager.loadProto(this.config.protoPath, this.config.messageType);
51
+ // 创建 WebSocket 管理器
52
+ this.webSocketManager = new WebSocketManager(this.config.wsUrl, this.protobufType, this.config.wsOptions);
53
+ // 连接 WebSocket
54
+ this.webSocketManager.connect(callbacks);
55
+ }
56
+ catch (error) {
57
+ console.error('Protobuf WebSocket 连接失败:', error);
58
+ throw error;
59
+ }
60
+ }
61
+ /**
62
+ * 发送消息
63
+ * @param message 要发送的消息对象或 JSON 字符串
64
+ * @param format 消息格式,默认为 Protobuf 格式
65
+ * @throws 如果连接未建立或消息验证失败
66
+ */
67
+ send(message, format = MessageFormat.PROTOBUF) {
68
+ if (!this.webSocketManager) {
69
+ throw new Error('WebSocket is not connected. Please call connect() first.');
70
+ }
71
+ this.webSocketManager.send(message, format);
72
+ }
73
+ /**
74
+ * 断开连接
75
+ * @param code 关闭代码
76
+ * @param reason 关闭原因
77
+ */
78
+ disconnect(code, reason) {
79
+ if (this.webSocketManager) {
80
+ this.webSocketManager.disconnect(code, reason);
81
+ }
82
+ }
83
+ /**
84
+ * 销毁客户端,清理所有资源
85
+ */
86
+ destroy() {
87
+ if (this.webSocketManager) {
88
+ this.webSocketManager.destroy();
89
+ this.webSocketManager = null;
90
+ }
91
+ this.protobufType = null;
92
+ }
93
+ }
94
+ //# sourceMappingURL=ProtobufWebSocketClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtobufWebSocketClient.js","sourceRoot":"","sources":["../src/ProtobufWebSocketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAoBrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,uBAAuB;IAMlC,YAAY,MAAqC;QAJ1C,qBAAgB,GAA4B,IAAI,CAAA;QAE/C,iBAAY,GAAwB,IAAI,CAAA;QAG9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IACpE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,SAA8B;QAC1C,IAAI,CAAC;YACH,cAAc;YACd,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CACtD,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,IAAI,CAAC,MAAM,CAAC,WAAW,CACxB,CAAA;YAED,mBAAmB;YACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB,CAAA;YAED,eAAe;YACf,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;YAChD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IACD;;;;;OAKG;IACH,IAAI,CAAC,OAAwB,EAAE,SAAwB,aAAa,CAAC,QAAQ;QAC3E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,IAAa,EAAE,MAAe;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC9C,CAAC;IACL,CAAC;IACD;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAA;YAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC9B,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ type FrameDataCallback = (frameData: Array<{
2
+ id: number;
3
+ value: number;
4
+ }>) => void;
5
+ type Callback = (args?: any) => void;
6
+ export declare class TimerManager {
7
+ private dataArray;
8
+ private frameSize;
9
+ private interval;
10
+ private currentIndex;
11
+ private timer;
12
+ isPaused: Boolean;
13
+ private onFrame;
14
+ private onComplete;
15
+ private onProcess;
16
+ constructor(dataArray?: never[], interval?: number, frameSize?: number);
17
+ connect(onFrame: FrameDataCallback, onProcess?: Callback, onComplete?: Callback): void;
18
+ start(): void;
19
+ startFrom(startSecond?: number): void;
20
+ stop(): void;
21
+ reset(): void;
22
+ pause(): void;
23
+ resume(): void;
24
+ }
25
+ export {};
26
+ //# sourceMappingURL=TimerManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimerManager.d.ts","sourceRoot":"","sources":["../src/TimerManager.ts"],"names":[],"mappings":"AAAA,KAAK,iBAAiB,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,KAAK,IAAI,CAAA;AAClF,KAAK,QAAQ,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;AAEpC,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,KAAK,CAAuC;IACpD,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAU;gBAEf,SAAS,UAAK,EAAE,QAAQ,SAAK,EAAE,SAAS,SAAI;IAkBjD,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,IAAI;IAUtF,KAAK,IAAI,IAAI;IAmBb,SAAS,CAAC,WAAW,GAAE,MAAU;IAMjC,IAAI,IAAI,IAAI;IASZ,KAAK,IAAI,IAAI;IAQb,KAAK,IAAI,IAAI;IAUb,MAAM,IAAI,IAAI;CAQtB"}
@@ -0,0 +1,93 @@
1
+ export class TimerManager {
2
+ constructor(dataArray = [], interval = 50, frameSize = 1) {
3
+ this.dataArray = dataArray;
4
+ this.frameSize = frameSize;
5
+ this.interval = interval;
6
+ this.currentIndex = 0;
7
+ this.timer = null;
8
+ this.isPaused = false;
9
+ this.onFrame = () => {
10
+ console.log('Frame updated');
11
+ };
12
+ this.onComplete = () => {
13
+ console.log('Timer complete');
14
+ };
15
+ this.onProcess = (args) => {
16
+ console.log('Timer process', args);
17
+ };
18
+ }
19
+ // 开始模拟 WebSocket 数据发送
20
+ connect(onFrame, onProcess, onComplete) {
21
+ this.onFrame = onFrame || this.onFrame;
22
+ this.onProcess = onProcess || this.onProcess;
23
+ this.onComplete = onComplete || this.onComplete;
24
+ if (this.timer) {
25
+ console.warn('Simulation is already running.');
26
+ return;
27
+ }
28
+ this.start();
29
+ }
30
+ start() {
31
+ const processFrame = () => {
32
+ var _a;
33
+ if (this.isPaused)
34
+ return; // 如果暂停,跳过处理
35
+ if (this.currentIndex >= this.dataArray.length) {
36
+ this.stop(); // 停止定时器
37
+ if (this.onComplete)
38
+ this.onComplete(); // 调用完成回调
39
+ return;
40
+ }
41
+ const frameData = this.dataArray.slice(this.currentIndex, this.currentIndex + this.frameSize); // 获取当前帧数据
42
+ this.currentIndex += this.frameSize; // 更新索引
43
+ this.onFrame(frameData[0]); // 调用帧数据处理回调
44
+ const currentSecond = Math.floor(this.currentIndex / this.interval);
45
+ (_a = this.onProcess) === null || _a === void 0 ? void 0 : _a.call(this, currentSecond);
46
+ };
47
+ this.timer && clearInterval(this.timer);
48
+ this.timer = setInterval(processFrame, 1000 / this.interval);
49
+ }
50
+ startFrom(startSecond = 0) {
51
+ this.currentIndex = startSecond * this.interval;
52
+ // this.isPaused = false
53
+ this.start();
54
+ }
55
+ // 停止模拟
56
+ stop() {
57
+ if (this.timer) {
58
+ clearInterval(this.timer);
59
+ this.timer = null;
60
+ this.isPaused = true;
61
+ console.log('Simulation stopped.');
62
+ }
63
+ }
64
+ // 重置模拟器(可重新开始)
65
+ reset() {
66
+ this.stop();
67
+ this.currentIndex = 0;
68
+ this.isPaused = false;
69
+ this.start();
70
+ console.log('Simulation reset.');
71
+ }
72
+ // 暂停模拟
73
+ pause() {
74
+ if (this.timer) {
75
+ this.isPaused = true; // 设置暂停状态
76
+ // console.log('Simulation paused.')
77
+ }
78
+ else {
79
+ console.warn('Simulation is not running. Cannot pause.');
80
+ }
81
+ }
82
+ // 继续模拟
83
+ resume() {
84
+ if (this.timer && this.isPaused) {
85
+ this.isPaused = false; // 恢复非暂停状态
86
+ // console.log('Simulation resumed.')
87
+ }
88
+ else {
89
+ console.warn('Simulation is not running or already resumed.');
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=TimerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimerManager.js","sourceRoot":"","sources":["../src/TimerManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import type { ProtobufType } from './types';
2
+ /**
3
+ * WebSocket 连接状态
4
+ */
5
+ export declare enum WebSocketStatus {
6
+ CONNECTING = "CONNECTING",
7
+ CONNECTED = "CONNECTED",
8
+ DISCONNECTING = "DISCONNECTING",
9
+ DISCONNECTED = "DISCONNECTED",
10
+ ERROR = "ERROR"
11
+ }
12
+ /**
13
+ * 消息发送格式
14
+ */
15
+ export declare enum MessageFormat {
16
+ /** JSON 格式 */
17
+ JSON = "JSON",
18
+ /** Protobuf 二进制格式 */
19
+ PROTOBUF = "PROTOBUF",
20
+ /** 原始字符串格式 */
21
+ STRING = "STRING"
22
+ }
23
+ /**
24
+ * WebSocket 管理器配置选项
25
+ */
26
+ export interface WebSocketManagerOptions {
27
+ /** 是否启用自动重连 */
28
+ autoReconnect?: boolean;
29
+ /** 重连延迟时间(毫秒) */
30
+ reconnectDelay?: number;
31
+ /** 最大重连次数 */
32
+ maxReconnectAttempts?: number;
33
+ /** 是否启用日志 */
34
+ enableLog?: boolean;
35
+ }
36
+ /**
37
+ * WebSocket 事件回调
38
+ */
39
+ export interface WebSocketCallbacks {
40
+ /** 连接打开时的回调 */
41
+ onOpen?: () => void;
42
+ /** 接收到消息时的回调 */
43
+ onMessage?: (data: any) => void;
44
+ /** 连接错误时的回调 */
45
+ onError?: (error: Event) => void;
46
+ /** 连接关闭时的回调 */
47
+ onClose?: (event: CloseEvent) => void;
48
+ /** 重连时的回调 */
49
+ onReconnect?: (attempt: number) => void;
50
+ }
51
+ /**
52
+ * WebSocket 管理器,用于管理基于 Protobuf 的 WebSocket 连接
53
+ */
54
+ export declare class WebSocketManager {
55
+ private socket;
56
+ private MessagePb;
57
+ private wsUrl;
58
+ private status;
59
+ private reconnectAttempts;
60
+ private reconnectTimer;
61
+ private options;
62
+ private callbacks;
63
+ constructor(wsUrl: string, protobufType: ProtobufType, options?: WebSocketManagerOptions);
64
+ /**
65
+ * 连接 WebSocket
66
+ * @param callbacks 事件回调
67
+ */
68
+ connect(callbacks?: WebSocketCallbacks): void;
69
+ /**
70
+ * 设置事件监听器
71
+ */
72
+ private setupEventListeners;
73
+ /**
74
+ * 发送消息
75
+ * @param message 要发送的消息对象或字符串
76
+ * @param format 消息格式,默认为 Protobuf 格式
77
+ * @throws 如果连接未建立或消息验证失败
78
+ */
79
+ send(message: object | string, format?: MessageFormat): void;
80
+ /**
81
+ * 断开连接
82
+ * @param code 关闭代码
83
+ * @param reason 关闭原因
84
+ */
85
+ disconnect(code?: number, reason?: string): void;
86
+ /**
87
+ * 获取当前连接状态
88
+ */
89
+ getStatus(): WebSocketStatus;
90
+ /**
91
+ * 检查是否已连接
92
+ */
93
+ isConnected(): boolean;
94
+ /**
95
+ * 设置 Protobuf 类型
96
+ */
97
+ setProtobufType(protobufType: ProtobufType): void;
98
+ /**
99
+ * 更新回调函数
100
+ */
101
+ updateCallbacks(callbacks: WebSocketCallbacks): void;
102
+ /**
103
+ * 计划重连
104
+ */
105
+ private scheduleReconnect;
106
+ /**
107
+ * 清理资源
108
+ */
109
+ private cleanup;
110
+ /**
111
+ * 日志输出
112
+ */
113
+ private log;
114
+ /**
115
+ * 销毁实例,清理所有资源
116
+ */
117
+ destroy(): void;
118
+ }
119
+ //# sourceMappingURL=WebSocketManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketManager.d.ts","sourceRoot":"","sources":["../src/WebSocketManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C;;GAEG;AACH,oBAAY,eAAe;IACzB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,cAAc;IACd,IAAI,SAAS;IACb,qBAAqB;IACrB,QAAQ,aAAa;IACrB,cAAc;IACd,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,eAAe;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iBAAiB;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,aAAa;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,eAAe;IACf,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,gBAAgB;IAChB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC/B,eAAe;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,eAAe;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACrC,aAAa;IACb,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAAyB;gBAE9B,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAWxF;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAyB7C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuD3B;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAE,aAAsC,GAAG,IAAI;IAiEpF;;;;OAIG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAShD;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,WAAW,IAAI,OAAO;IAKtB;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAIjD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;IAIpD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;IACH,OAAO,CAAC,OAAO;IAuBf;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}