homebridge 2.0.0-alpha.4 → 2.0.0-alpha.41
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 +1 -1
- package/bin/homebridge.js +22 -0
- package/dist/api.d.ts +210 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +140 -0
- package/dist/api.js.map +1 -0
- package/dist/bridgeService.d.ts +122 -0
- package/dist/bridgeService.d.ts.map +1 -0
- package/dist/bridgeService.js +396 -0
- package/dist/bridgeService.js.map +1 -0
- package/dist/childBridgeFork.d.ts +38 -0
- package/dist/childBridgeFork.d.ts.map +1 -0
- package/dist/childBridgeFork.js +241 -2
- package/dist/childBridgeFork.js.map +1 -7
- package/dist/childBridgeService.d.ts +204 -0
- package/dist/childBridgeService.d.ts.map +1 -0
- package/dist/childBridgeService.js +452 -0
- package/dist/childBridgeService.js.map +1 -0
- package/dist/childMatterBridgeFork.d.ts +108 -0
- package/dist/childMatterBridgeFork.d.ts.map +1 -0
- package/dist/childMatterBridgeFork.js +330 -0
- package/dist/childMatterBridgeFork.js.map +1 -0
- package/dist/childMatterBridgeService.d.ts +166 -0
- package/dist/childMatterBridgeService.d.ts.map +1 -0
- package/dist/childMatterBridgeService.js +623 -0
- package/dist/childMatterBridgeService.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +90 -2
- package/dist/cli.js.map +1 -7
- package/dist/externalPortService.d.ts +33 -0
- package/dist/externalPortService.d.ts.map +1 -0
- package/dist/externalPortService.js +59 -0
- package/dist/externalPortService.js.map +1 -0
- package/dist/index.d.ts +90 -1099
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -7
- package/dist/ipcService.d.ts +46 -0
- package/dist/ipcService.d.ts.map +1 -0
- package/dist/ipcService.js +62 -0
- package/dist/ipcService.js.map +1 -0
- package/dist/logger.d.ts +78 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +138 -0
- package/dist/logger.js.map +1 -0
- package/dist/matter/index.d.ts +13 -0
- package/dist/matter/index.d.ts.map +1 -0
- package/dist/matter/index.js +12 -0
- package/dist/matter/index.js.map +1 -0
- package/dist/matter/matterBridge.d.ts +64 -0
- package/dist/matter/matterBridge.d.ts.map +1 -0
- package/dist/matter/matterBridge.js +154 -0
- package/dist/matter/matterBridge.js.map +1 -0
- package/dist/matter/matterConfigValidator.d.ts +27 -0
- package/dist/matter/matterConfigValidator.d.ts.map +1 -0
- package/dist/matter/matterConfigValidator.js +162 -0
- package/dist/matter/matterConfigValidator.js.map +1 -0
- package/dist/matter/matterDevice.d.ts +107 -0
- package/dist/matter/matterDevice.d.ts.map +1 -0
- package/dist/matter/matterDevice.js +913 -0
- package/dist/matter/matterDevice.js.map +1 -0
- package/dist/matter/matterDiagnostics.d.ts +121 -0
- package/dist/matter/matterDiagnostics.d.ts.map +1 -0
- package/dist/matter/matterDiagnostics.js +323 -0
- package/dist/matter/matterDiagnostics.js.map +1 -0
- package/dist/matter/matterErrorHandler.d.ts +113 -0
- package/dist/matter/matterErrorHandler.d.ts.map +1 -0
- package/dist/matter/matterErrorHandler.js +482 -0
- package/dist/matter/matterErrorHandler.js.map +1 -0
- package/dist/matter/matterNetworkMonitor.d.ts +65 -0
- package/dist/matter/matterNetworkMonitor.d.ts.map +1 -0
- package/dist/matter/matterNetworkMonitor.js +227 -0
- package/dist/matter/matterNetworkMonitor.js.map +1 -0
- package/dist/matter/matterServer.d.ts +110 -0
- package/dist/matter/matterServer.d.ts.map +1 -0
- package/dist/matter/matterServer.js +584 -0
- package/dist/matter/matterServer.js.map +1 -0
- package/dist/matter/matterSharedTypes.d.ts +167 -0
- package/dist/matter/matterSharedTypes.d.ts.map +1 -0
- package/dist/matter/matterSharedTypes.js +55 -0
- package/dist/matter/matterSharedTypes.js.map +1 -0
- package/dist/matter/matterTypes.d.ts +35 -0
- package/dist/matter/matterTypes.d.ts.map +1 -0
- package/dist/matter/matterTypes.js +278 -0
- package/dist/matter/matterTypes.js.map +1 -0
- package/dist/matter/portAllocator.d.ts +85 -0
- package/dist/matter/portAllocator.d.ts.map +1 -0
- package/dist/matter/portAllocator.js +296 -0
- package/dist/matter/portAllocator.js.map +1 -0
- package/dist/platformAccessory.d.ts +56 -0
- package/dist/platformAccessory.d.ts.map +1 -0
- package/dist/platformAccessory.js +105 -0
- package/dist/platformAccessory.js.map +1 -0
- package/dist/plugin.d.ts +30 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +182 -0
- package/dist/plugin.js.map +1 -0
- package/dist/pluginManager.d.ts +77 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +375 -0
- package/dist/pluginManager.js.map +1 -0
- package/dist/server.d.ts +67 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +799 -0
- package/dist/server.js.map +1 -0
- package/dist/storageService.d.ts +13 -0
- package/dist/storageService.d.ts.map +1 -0
- package/dist/storageService.js +41 -0
- package/dist/storageService.js.map +1 -0
- package/dist/user.d.ts +13 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +29 -0
- package/dist/user.js.map +1 -0
- package/dist/util/mac.d.ts +5 -0
- package/dist/util/mac.d.ts.map +1 -0
- package/dist/util/mac.js +14 -0
- package/dist/util/mac.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/package.json +31 -34
- package/bin/homebridge +0 -19
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/* global NodeJS */
|
|
2
|
+
/**
|
|
3
|
+
* Matter Network Monitor
|
|
4
|
+
*
|
|
5
|
+
* Monitors network connectivity and handles recovery
|
|
6
|
+
*/
|
|
7
|
+
import * as net from 'node:net';
|
|
8
|
+
import * as os from 'node:os';
|
|
9
|
+
import { Logger } from '../logger.js';
|
|
10
|
+
import { errorHandler, MatterErrorType } from './matterErrorHandler.js';
|
|
11
|
+
const log = Logger.withPrefix('Matter');
|
|
12
|
+
export class MatterNetworkMonitor {
|
|
13
|
+
static instance;
|
|
14
|
+
status;
|
|
15
|
+
checkInterval = null;
|
|
16
|
+
callbacks = new Set();
|
|
17
|
+
checkIntervalMs = 30000; // Check every 30 seconds
|
|
18
|
+
isMonitoring = false;
|
|
19
|
+
stabilityCounter = 0;
|
|
20
|
+
STABILITY_THRESHOLD = 3;
|
|
21
|
+
constructor() {
|
|
22
|
+
this.status = {
|
|
23
|
+
isOnline: true,
|
|
24
|
+
interfaces: [],
|
|
25
|
+
lastCheck: new Date(),
|
|
26
|
+
consecutiveFailures: 0,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
static getInstance() {
|
|
30
|
+
if (!MatterNetworkMonitor.instance) {
|
|
31
|
+
MatterNetworkMonitor.instance = new MatterNetworkMonitor();
|
|
32
|
+
}
|
|
33
|
+
return MatterNetworkMonitor.instance;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Start monitoring network connectivity
|
|
37
|
+
*/
|
|
38
|
+
startMonitoring() {
|
|
39
|
+
if (this.isMonitoring) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.isMonitoring = true;
|
|
43
|
+
log.debug('Starting Matter network monitoring');
|
|
44
|
+
// Initial check (fire-and-forget with error handling)
|
|
45
|
+
this.checkNetworkStatus().catch((error) => {
|
|
46
|
+
log.debug('Error during initial network check:', error);
|
|
47
|
+
});
|
|
48
|
+
// Set up periodic checks
|
|
49
|
+
this.checkInterval = setInterval(() => {
|
|
50
|
+
// Fire-and-forget with error handling
|
|
51
|
+
this.checkNetworkStatus().catch((error) => {
|
|
52
|
+
log.debug('Error during periodic network check:', error);
|
|
53
|
+
});
|
|
54
|
+
}, this.checkIntervalMs);
|
|
55
|
+
// Register recovery callback with error handler
|
|
56
|
+
errorHandler.registerRecoveryCallback(MatterErrorType.NETWORK, async () => this.handleNetworkRecovery());
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Stop monitoring
|
|
60
|
+
*/
|
|
61
|
+
stopMonitoring() {
|
|
62
|
+
if (this.checkInterval) {
|
|
63
|
+
clearInterval(this.checkInterval);
|
|
64
|
+
this.checkInterval = null;
|
|
65
|
+
}
|
|
66
|
+
this.isMonitoring = false;
|
|
67
|
+
log.debug('Stopped Matter network monitoring');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check network status
|
|
71
|
+
*/
|
|
72
|
+
async checkNetworkStatus() {
|
|
73
|
+
try {
|
|
74
|
+
// Get network interfaces
|
|
75
|
+
const interfaces = this.getActiveInterfaces();
|
|
76
|
+
// Test connectivity with a simple port check
|
|
77
|
+
const isOnline = await this.testConnectivity();
|
|
78
|
+
const previousStatus = this.status.isOnline;
|
|
79
|
+
this.status = {
|
|
80
|
+
isOnline,
|
|
81
|
+
interfaces: interfaces.map(i => i.name),
|
|
82
|
+
primaryInterface: interfaces[0]?.name,
|
|
83
|
+
lastCheck: new Date(),
|
|
84
|
+
consecutiveFailures: isOnline ? 0 : this.status.consecutiveFailures + 1,
|
|
85
|
+
};
|
|
86
|
+
// Notify listeners if status changed
|
|
87
|
+
if (previousStatus !== isOnline) {
|
|
88
|
+
this.notifyStatusChange();
|
|
89
|
+
if (!isOnline) {
|
|
90
|
+
this.stabilityCounter = 0;
|
|
91
|
+
log.warn('Matter network connectivity lost');
|
|
92
|
+
await errorHandler.handleError(new Error('Network connectivity lost'), 'network-monitor');
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.stabilityCounter = 0;
|
|
96
|
+
log.info('Matter network connectivity restored');
|
|
97
|
+
errorHandler.resetErrorCount(MatterErrorType.NETWORK);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (isOnline) {
|
|
101
|
+
// Increment stability counter when consistently online
|
|
102
|
+
this.stabilityCounter = Math.min(this.stabilityCounter + 1, this.STABILITY_THRESHOLD);
|
|
103
|
+
}
|
|
104
|
+
// Log warnings for repeated failures
|
|
105
|
+
if (this.status.consecutiveFailures > 3) {
|
|
106
|
+
log.error(`Network has been offline for ${this.status.consecutiveFailures} consecutive checks`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
log.debug('Error checking network status:', error);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get active network interfaces
|
|
115
|
+
*/
|
|
116
|
+
getActiveInterfaces() {
|
|
117
|
+
const interfaces = [];
|
|
118
|
+
const networkInterfaces = os.networkInterfaces();
|
|
119
|
+
for (const [name, addrs] of Object.entries(networkInterfaces)) {
|
|
120
|
+
if (!addrs) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
for (const addr of addrs) {
|
|
124
|
+
// Skip internal (loopback) and non-IPv4 addresses
|
|
125
|
+
if (!addr.internal && addr.family === 'IPv4') {
|
|
126
|
+
interfaces.push({ name, address: addr.address });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return interfaces;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Test network connectivity with optimizations
|
|
134
|
+
*/
|
|
135
|
+
async testConnectivity() {
|
|
136
|
+
// If we recently had a successful check, skip the test
|
|
137
|
+
const timeSinceLastCheck = Date.now() - (this.status.lastCheck?.getTime() || 0);
|
|
138
|
+
if (this.status.isOnline && timeSinceLastCheck < 5000 && this.stabilityCounter >= this.STABILITY_THRESHOLD) {
|
|
139
|
+
log.debug('Skipping connectivity test - recent successful check');
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
return new Promise((resolve) => {
|
|
143
|
+
const socket = new net.Socket();
|
|
144
|
+
const timeout = 2000; // Reduced timeout for faster failure detection
|
|
145
|
+
const cleanup = () => {
|
|
146
|
+
socket.destroy();
|
|
147
|
+
};
|
|
148
|
+
socket.setTimeout(timeout);
|
|
149
|
+
socket.once('connect', () => {
|
|
150
|
+
cleanup();
|
|
151
|
+
resolve(true);
|
|
152
|
+
});
|
|
153
|
+
socket.once('error', () => {
|
|
154
|
+
cleanup();
|
|
155
|
+
resolve(false);
|
|
156
|
+
});
|
|
157
|
+
socket.once('timeout', () => {
|
|
158
|
+
cleanup();
|
|
159
|
+
resolve(false);
|
|
160
|
+
});
|
|
161
|
+
// Try multiple fallback servers for redundancy
|
|
162
|
+
const servers = [
|
|
163
|
+
{ host: '1.1.1.1', port: 53 }, // Cloudflare DNS
|
|
164
|
+
{ host: '8.8.8.8', port: 53 }, // Google DNS
|
|
165
|
+
{ host: '9.9.9.9', port: 53 }, // Quad9 DNS
|
|
166
|
+
];
|
|
167
|
+
// Try first server, with fallback logic if needed
|
|
168
|
+
const server = servers[this.status.consecutiveFailures % servers.length];
|
|
169
|
+
socket.connect(server.port, server.host);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Handle network recovery
|
|
174
|
+
*/
|
|
175
|
+
async handleNetworkRecovery() {
|
|
176
|
+
log.info('Attempting network recovery...');
|
|
177
|
+
// Force a network check
|
|
178
|
+
await this.checkNetworkStatus();
|
|
179
|
+
if (this.status.isOnline) {
|
|
180
|
+
log.info('Network is online, recovery successful');
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
log.warn('Network still offline, will retry');
|
|
184
|
+
throw new Error('Network recovery failed');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Register a callback for network status changes
|
|
189
|
+
*/
|
|
190
|
+
onStatusChange(callback) {
|
|
191
|
+
this.callbacks.add(callback);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Remove a status change callback
|
|
195
|
+
*/
|
|
196
|
+
removeStatusChangeCallback(callback) {
|
|
197
|
+
this.callbacks.delete(callback);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Notify all listeners of status change
|
|
201
|
+
*/
|
|
202
|
+
notifyStatusChange() {
|
|
203
|
+
for (const callback of this.callbacks) {
|
|
204
|
+
try {
|
|
205
|
+
callback(this.status);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
log.debug('Error in network status callback:', error);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get current network status
|
|
214
|
+
*/
|
|
215
|
+
getStatus() {
|
|
216
|
+
return { ...this.status };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if network is healthy
|
|
220
|
+
*/
|
|
221
|
+
isHealthy() {
|
|
222
|
+
return this.status.isOnline && this.status.consecutiveFailures === 0;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Export singleton instance
|
|
226
|
+
export const networkMonitor = MatterNetworkMonitor.getInstance();
|
|
227
|
+
//# sourceMappingURL=matterNetworkMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matterNetworkMonitor.js","sourceRoot":"","sources":["../../src/matter/matterNetworkMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { PlatformAccessory } from '../platformAccessory.js';
|
|
2
|
+
import { MatterDevice } from './matterDevice.js';
|
|
3
|
+
import { MatterServerConfig } from './matterSharedTypes.js';
|
|
4
|
+
export { MatterServerConfig } from './matterSharedTypes.js';
|
|
5
|
+
/**
|
|
6
|
+
* Real Matter.js Server for Homebridge
|
|
7
|
+
* Creates a Matter bridge that exposes HAP accessories to Matter controllers
|
|
8
|
+
*/
|
|
9
|
+
export declare class MatterServer {
|
|
10
|
+
private readonly config;
|
|
11
|
+
private serverNode;
|
|
12
|
+
private aggregator;
|
|
13
|
+
private devices;
|
|
14
|
+
private removedDevices;
|
|
15
|
+
private isRunning;
|
|
16
|
+
private restartTimer;
|
|
17
|
+
private isRestarting;
|
|
18
|
+
private readonly MAX_DEVICES;
|
|
19
|
+
private readonly MAX_REMOVED_DEVICES;
|
|
20
|
+
private readonly RESTART_DELAY_MS;
|
|
21
|
+
private shutdownHandler;
|
|
22
|
+
private passcode;
|
|
23
|
+
private discriminator;
|
|
24
|
+
private vendorId;
|
|
25
|
+
private productId;
|
|
26
|
+
private commissioningInfo;
|
|
27
|
+
private serialNumber?;
|
|
28
|
+
private cleanupHandlers;
|
|
29
|
+
constructor(config?: MatterServerConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Generate a secure random passcode
|
|
32
|
+
*/
|
|
33
|
+
private generateSecurePasscode;
|
|
34
|
+
/**
|
|
35
|
+
* Generate a random discriminator
|
|
36
|
+
*/
|
|
37
|
+
private generateRandomDiscriminator;
|
|
38
|
+
/**
|
|
39
|
+
* Start the Matter server
|
|
40
|
+
*/
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Set up and validate storage
|
|
44
|
+
*/
|
|
45
|
+
private setupStorage;
|
|
46
|
+
/**
|
|
47
|
+
* Generate serial number for the bridge
|
|
48
|
+
*/
|
|
49
|
+
private generateSerialNumber;
|
|
50
|
+
/**
|
|
51
|
+
* Generate and display commissioning information
|
|
52
|
+
*/
|
|
53
|
+
private generateCommissioningInfo;
|
|
54
|
+
/**
|
|
55
|
+
* Wait for the server to be ready
|
|
56
|
+
*/
|
|
57
|
+
private waitForServerReady;
|
|
58
|
+
/**
|
|
59
|
+
* Add a Homebridge accessory as a bridged Matter device
|
|
60
|
+
*/
|
|
61
|
+
addAccessory(accessory: PlatformAccessory): Promise<MatterDevice | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Remove a Matter device
|
|
64
|
+
*/
|
|
65
|
+
removeAccessory(accessory: PlatformAccessory): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Schedule a server restart to clean up removed endpoints
|
|
68
|
+
*/
|
|
69
|
+
private scheduleRestart;
|
|
70
|
+
/**
|
|
71
|
+
* Get server information
|
|
72
|
+
*/
|
|
73
|
+
getInfo(): {
|
|
74
|
+
running: boolean;
|
|
75
|
+
port: number;
|
|
76
|
+
deviceCount: number;
|
|
77
|
+
config: MatterServerConfig;
|
|
78
|
+
serialNumber?: string;
|
|
79
|
+
commissioned?: boolean;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Get commissioning information
|
|
83
|
+
*/
|
|
84
|
+
getCommissioningInfo(): {
|
|
85
|
+
qrCode?: string;
|
|
86
|
+
manualPairingCode?: string;
|
|
87
|
+
commissioned: boolean;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Check if the server is commissioned
|
|
91
|
+
*/
|
|
92
|
+
isCommissioned(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Get all Matter devices
|
|
95
|
+
*/
|
|
96
|
+
getDevices(): Map<string, MatterDevice>;
|
|
97
|
+
/**
|
|
98
|
+
* Stop the Matter server
|
|
99
|
+
*/
|
|
100
|
+
stop(): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Cleanup resources
|
|
103
|
+
*/
|
|
104
|
+
private cleanup;
|
|
105
|
+
/**
|
|
106
|
+
* Clean up all devices
|
|
107
|
+
*/
|
|
108
|
+
private cleanupAllDevices;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=matterServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matterServer.d.ts","sourceRoot":"","sources":["../../src/matter/matterServer.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAK3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE3D;;;GAGG;AACH,qBAAa,YAAY;IA4BX,OAAO,CAAC,QAAQ,CAAC,MAAM;IA3BnC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAmD;IACrE,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,eAAe,CAAqC;IAE5D,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,iBAAiB,CAInB;IAEN,OAAO,CAAC,YAAY,CAAC,CAAQ;IAE7B,OAAO,CAAC,eAAe,CAAwC;gBAElC,MAAM,GAAE,kBAAuB;IAoB5D;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsC9B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAMnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+G5B;;OAEG;YACW,YAAY;IA6C1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;YACW,yBAAyB;IAmDvC;;OAEG;YACW,kBAAkB;IAchC;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAgD9E;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyClE;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;IACH,OAAO,IAAI;QACT,OAAO,EAAE,OAAO,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,EAAE,kBAAkB,CAAA;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB;IAqBD;;OAEG;IACH,oBAAoB,IAAI;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,YAAY,EAAE,OAAO,CAAA;KACtB;IAOD;;OAEG;IACH,cAAc,IAAI,OAAO;IAUzB;;OAEG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAIvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC3B;;OAEG;YACW,OAAO;IA+BrB;;OAEG;YACW,iBAAiB;CAoBhC"}
|