iotas-ts 0.1.0 → 1.0.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/CHANGELOG.md +25 -0
- package/dist/src/api/iotasClient.d.ts +3 -2
- package/dist/src/api/iotasClient.js +36 -8
- package/dist/src/api/iotasClient.js.map +1 -1
- package/dist/src/cache/featureCache.d.ts +3 -0
- package/dist/src/cache/featureCache.js +6 -1
- package/dist/src/cache/featureCache.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/quirks.d.ts +2 -0
- package/dist/src/quirks.js +11 -0
- package/dist/src/quirks.js.map +1 -0
- package/dist/src/types.d.ts +2 -0
- package/dist/src/utils.d.ts +18 -0
- package/dist/src/utils.js +43 -0
- package/dist/src/utils.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.0.0](https://github.com/mezaugusto/iotas-ts/compare/v0.2.0...v1.0.0) (2026-04-12)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* :sparkles: Use fire-and-forget for feature update ([#8](https://github.com/mezaugusto/iotas-ts/issues/8))
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* :sparkles: Use fire-and-forget for feature update ([#8](https://github.com/mezaugusto/iotas-ts/issues/8)) ([b144cc7](https://github.com/mezaugusto/iotas-ts/commit/b144cc7f5a277df1a945b7a36cae07beddec70ff))
|
|
13
|
+
|
|
14
|
+
## [0.2.0](https://github.com/mezaugusto/iotas-ts/compare/v0.1.1...v0.2.0) (2026-04-12)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* :sparkles: Implement allow/deny listing devices ([#6](https://github.com/mezaugusto/iotas-ts/issues/6)) ([0ef03c5](https://github.com/mezaugusto/iotas-ts/commit/0ef03c5ccf6acb9ffcf1238d69352625d5b9f5cd))
|
|
20
|
+
|
|
21
|
+
## 0.1.1 (2026-04-11)
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
- :sparkles: Initial abstraction from homebridge plugin ([#1](https://github.com/mezaugusto/iotas-ts/issues/1)) ([8907c54](https://github.com/mezaugusto/iotas-ts/commit/8907c54d69be6c3f3d8702da8412b26bc6a62298))
|
|
@@ -15,6 +15,7 @@ export declare class IotasClient {
|
|
|
15
15
|
private readonly delay;
|
|
16
16
|
private unitRequest;
|
|
17
17
|
private featureIndex;
|
|
18
|
+
private deviceIndex;
|
|
18
19
|
private unit;
|
|
19
20
|
constructor(options: IotasClientOptions);
|
|
20
21
|
static withCredentials(log: IotasLogger, email: string, password: string, unitName?: string, options?: Pick<IotasClientOptions, 'fetch' | 'delay'>): IotasClient;
|
|
@@ -22,6 +23,6 @@ export declare class IotasClient {
|
|
|
22
23
|
getRooms(): Promise<Rooms>;
|
|
23
24
|
getFeature(featureId: string): Promise<Feature | null>;
|
|
24
25
|
private buildFeatureIndex;
|
|
25
|
-
updateFeature(featureId: string, value: number):
|
|
26
|
-
updateFeatureReliable
|
|
26
|
+
updateFeature(featureId: string, value: number): void;
|
|
27
|
+
private updateFeatureReliable;
|
|
27
28
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { needsReliableUpdate } from '../quirks.js';
|
|
1
2
|
import { IotasSession } from './session.js';
|
|
2
3
|
import { IotasTransport } from './transport.js';
|
|
3
4
|
const DEFAULT_RELIABLE_UPDATE_ATTEMPTS = 3;
|
|
@@ -18,6 +19,7 @@ export class IotasClient {
|
|
|
18
19
|
delay;
|
|
19
20
|
unitRequest = null;
|
|
20
21
|
featureIndex = null;
|
|
22
|
+
deviceIndex = null;
|
|
21
23
|
unit = 0;
|
|
22
24
|
constructor(options) {
|
|
23
25
|
this.log = options.log;
|
|
@@ -97,27 +99,53 @@ export class IotasClient {
|
|
|
97
99
|
}
|
|
98
100
|
buildFeatureIndex(rooms) {
|
|
99
101
|
this.featureIndex = new Map();
|
|
102
|
+
this.deviceIndex = new Map();
|
|
100
103
|
for (const room of rooms) {
|
|
101
104
|
for (const device of room.devices) {
|
|
102
105
|
for (const feature of device.features) {
|
|
103
106
|
this.featureIndex.set(feature.id.toString(), feature);
|
|
107
|
+
this.deviceIndex.set(feature.id.toString(), device);
|
|
104
108
|
}
|
|
105
109
|
}
|
|
106
110
|
}
|
|
107
111
|
}
|
|
108
|
-
|
|
109
|
-
|
|
112
|
+
updateFeature(featureId, value) {
|
|
113
|
+
if (!this.deviceIndex) {
|
|
114
|
+
this.log.error('Device index not built. Call getRooms() first.');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const device = this.deviceIndex.get(featureId);
|
|
118
|
+
if (device && needsReliableUpdate(device)) {
|
|
119
|
+
this.updateFeatureReliable(featureId, value);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.transport
|
|
123
|
+
.request(`/feature/${encodeURIComponent(featureId)}/value`, {
|
|
110
124
|
method: 'PUT',
|
|
111
125
|
body: JSON.stringify({ value }),
|
|
126
|
+
})
|
|
127
|
+
.catch((err) => {
|
|
128
|
+
this.log.warn(`Failed to update feature ${featureId}:`, err instanceof Error ? err.message : String(err));
|
|
112
129
|
});
|
|
113
130
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
updateFeatureReliable(featureId, value) {
|
|
132
|
+
const sendUpdates = async () => {
|
|
133
|
+
for (let attempt = 0; attempt < this.reliableUpdateAttempts; attempt++) {
|
|
134
|
+
try {
|
|
135
|
+
await this.transport.request(`/feature/${encodeURIComponent(featureId)}/value`, {
|
|
136
|
+
method: 'PUT',
|
|
137
|
+
body: JSON.stringify({ value }),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
this.log.warn(`Failed to update feature ${featureId} (attempt ${attempt + 1}):`, err instanceof Error ? err.message : String(err));
|
|
142
|
+
}
|
|
143
|
+
if (attempt < this.reliableUpdateAttempts - 1) {
|
|
144
|
+
await this.delay(this.reliableUpdateDelayMs);
|
|
145
|
+
}
|
|
119
146
|
}
|
|
120
|
-
}
|
|
147
|
+
};
|
|
148
|
+
sendUpdates();
|
|
121
149
|
}
|
|
122
150
|
}
|
|
123
151
|
//# sourceMappingURL=iotasClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iotasClient.js","sourceRoot":"","sources":["../../../src/api/iotasClient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"iotasClient.js","sourceRoot":"","sources":["../../../src/api/iotasClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import type { IotasLogger } from '../logger.js';
|
|
|
2
2
|
import type { IotasClient } from '../api/iotasClient.js';
|
|
3
3
|
import type { FeatureCacheOptions, Rooms } from '../types.js';
|
|
4
4
|
export type FeatureChangeCallback = (changed: Map<string, number>) => void;
|
|
5
|
+
/** Optional transform applied to every rooms snapshot (discovery and polling). */
|
|
6
|
+
export type SnapshotFilter = (rooms: Rooms) => Rooms;
|
|
5
7
|
/**
|
|
6
8
|
* FeatureCache provides cached feature values with background polling.
|
|
7
9
|
*
|
|
@@ -23,6 +25,7 @@ export declare class FeatureCache {
|
|
|
23
25
|
private readonly writeBarrierMs;
|
|
24
26
|
private readonly pollBackoffBaseMs;
|
|
25
27
|
private readonly pollBackoffMaxMs;
|
|
28
|
+
private readonly snapshotFilter?;
|
|
26
29
|
constructor(log: IotasLogger, client: IotasClient, options?: FeatureCacheOptions);
|
|
27
30
|
seed(rooms: Rooms): void;
|
|
28
31
|
get(featureId: string): number | undefined;
|
|
@@ -23,6 +23,7 @@ export class FeatureCache {
|
|
|
23
23
|
writeBarrierMs;
|
|
24
24
|
pollBackoffBaseMs;
|
|
25
25
|
pollBackoffMaxMs;
|
|
26
|
+
snapshotFilter;
|
|
26
27
|
constructor(log, client, options) {
|
|
27
28
|
this.log = log;
|
|
28
29
|
this.client = client;
|
|
@@ -30,6 +31,7 @@ export class FeatureCache {
|
|
|
30
31
|
this.writeBarrierMs = options?.writeBarrierMs ?? DEFAULT_WRITE_BARRIER_MS;
|
|
31
32
|
this.pollBackoffBaseMs = options?.pollBackoffBaseMs ?? DEFAULT_POLL_BACKOFF_BASE_MS;
|
|
32
33
|
this.pollBackoffMaxMs = options?.pollBackoffMaxMs ?? DEFAULT_POLL_BACKOFF_MAX_MS;
|
|
34
|
+
this.snapshotFilter = options?.snapshotFilter;
|
|
33
35
|
}
|
|
34
36
|
seed(rooms) {
|
|
35
37
|
for (const room of rooms) {
|
|
@@ -111,7 +113,10 @@ export class FeatureCache {
|
|
|
111
113
|
return;
|
|
112
114
|
}
|
|
113
115
|
try {
|
|
114
|
-
|
|
116
|
+
let rooms = await this.client.getRooms();
|
|
117
|
+
if (this.snapshotFilter) {
|
|
118
|
+
rooms = this.snapshotFilter(rooms);
|
|
119
|
+
}
|
|
115
120
|
this.updateFromSnapshot(rooms);
|
|
116
121
|
this.consecutiveFailures = 0;
|
|
117
122
|
this.schedulePoll(this.pollIntervalMs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureCache.js","sourceRoot":"","sources":["../../../src/cache/featureCache.ts"],"names":[],"mappings":"AAKA,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,2BAA2B,GAAG,OAAO,CAAC,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"featureCache.js","sourceRoot":"","sources":["../../../src/cache/featureCache.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { IotasLogger } from './logger.js';
|
|
2
2
|
export { IotasClient } from './api/iotasClient.js';
|
|
3
3
|
export { FeatureCache } from './cache/featureCache.js';
|
|
4
|
-
export type { FeatureChangeCallback } from './cache/featureCache.js';
|
|
4
|
+
export type { FeatureChangeCallback, SnapshotFilter } from './cache/featureCache.js';
|
|
5
5
|
export type { Room, Rooms, Device, Feature, Residency, AuthResponse, AccountResponse, PhysicalDeviceDescription, IotasClientOptions, IotasTokens, FeatureCacheOptions, } from './types.js';
|
|
6
|
-
export { Temperature } from './utils.js';
|
|
6
|
+
export { Temperature, filterDevices } from './utils.js';
|
|
7
|
+
export type { DeviceFilterOptions } from './utils.js';
|
package/dist/src/index.js
CHANGED
|
@@ -3,5 +3,5 @@ export { IotasClient } from './api/iotasClient.js';
|
|
|
3
3
|
// Caching
|
|
4
4
|
export { FeatureCache } from './cache/featureCache.js';
|
|
5
5
|
// Utilities
|
|
6
|
-
export { Temperature } from './utils.js';
|
|
6
|
+
export { Temperature, filterDevices } from './utils.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAkBvD,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAkBvD,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const ZWAVE_MANUFACTURERS = {
|
|
2
|
+
JASCO: '0x0063',
|
|
3
|
+
};
|
|
4
|
+
const DEVICE_CATEGORIES = {
|
|
5
|
+
DIMMER: 'dimmer',
|
|
6
|
+
};
|
|
7
|
+
export function needsReliableUpdate(device) {
|
|
8
|
+
return (device.category === DEVICE_CATEGORIES.DIMMER &&
|
|
9
|
+
device.physicalDeviceDescription?.manufacturer === ZWAVE_MANUFACTURERS.JASCO);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=quirks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quirks.js","sourceRoot":"","sources":["../../src/quirks.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,QAAQ;CACP,CAAC;AAEX,MAAM,iBAAiB,GAAG;IACxB,MAAM,EAAE,QAAQ;CACR,CAAC;AAEX,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,CACL,MAAM,CAAC,QAAQ,KAAK,iBAAiB,CAAC,MAAM;QAC5C,MAAM,CAAC,yBAAyB,EAAE,YAAY,KAAK,mBAAmB,CAAC,KAAK,CAC7E,CAAC;AACJ,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -41,6 +41,8 @@ export interface FeatureCacheOptions {
|
|
|
41
41
|
pollBackoffBaseMs?: number;
|
|
42
42
|
/** Maximum backoff delay on poll failure in ms. Default: 300_000 */
|
|
43
43
|
pollBackoffMaxMs?: number;
|
|
44
|
+
/** Optional transform applied to every rooms snapshot (discovery and polling). */
|
|
45
|
+
snapshotFilter?: (rooms: Rooms) => Rooms;
|
|
44
46
|
}
|
|
45
47
|
export interface Room {
|
|
46
48
|
id: number;
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
|
+
import type { Rooms } from './types.js';
|
|
1
2
|
export declare const Temperature: {
|
|
2
3
|
readonly toFahrenheit: (c: number) => number;
|
|
3
4
|
readonly toCelsius: (f: number) => number;
|
|
4
5
|
};
|
|
6
|
+
export interface DeviceFilterOptions {
|
|
7
|
+
/** Only include devices whose name is in this list (case-insensitive, trimmed). */
|
|
8
|
+
allowList?: string[];
|
|
9
|
+
/** Exclude devices whose name is in this list (case-insensitive, trimmed). */
|
|
10
|
+
denyList?: string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Filter devices in rooms by allowList and/or denyList.
|
|
14
|
+
*
|
|
15
|
+
* - If allowList is non-empty, only devices matching it are kept.
|
|
16
|
+
* - If denyList is non-empty, matching devices are excluded.
|
|
17
|
+
* - Both can be applied simultaneously (allowed AND not denied).
|
|
18
|
+
* - Matching is case-insensitive and trimmed.
|
|
19
|
+
* - Rooms with no remaining devices are excluded from the result.
|
|
20
|
+
* - Returns a new array; input is not mutated.
|
|
21
|
+
*/
|
|
22
|
+
export declare function filterDevices(rooms: Rooms, options?: DeviceFilterOptions): Rooms;
|
package/dist/src/utils.js
CHANGED
|
@@ -2,4 +2,47 @@ export const Temperature = {
|
|
|
2
2
|
toFahrenheit: (c) => (c * 9) / 5 + 32,
|
|
3
3
|
toCelsius: (f) => ((f - 32) * 5) / 9,
|
|
4
4
|
};
|
|
5
|
+
function normalizeSet(list) {
|
|
6
|
+
if (!list || list.length === 0) {
|
|
7
|
+
return new Set();
|
|
8
|
+
}
|
|
9
|
+
return new Set(list.map((s) => s.trim().toLowerCase()));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Filter devices in rooms by allowList and/or denyList.
|
|
13
|
+
*
|
|
14
|
+
* - If allowList is non-empty, only devices matching it are kept.
|
|
15
|
+
* - If denyList is non-empty, matching devices are excluded.
|
|
16
|
+
* - Both can be applied simultaneously (allowed AND not denied).
|
|
17
|
+
* - Matching is case-insensitive and trimmed.
|
|
18
|
+
* - Rooms with no remaining devices are excluded from the result.
|
|
19
|
+
* - Returns a new array; input is not mutated.
|
|
20
|
+
*/
|
|
21
|
+
export function filterDevices(rooms, options) {
|
|
22
|
+
if (!options) {
|
|
23
|
+
return rooms;
|
|
24
|
+
}
|
|
25
|
+
const allowSet = normalizeSet(options.allowList);
|
|
26
|
+
const denySet = normalizeSet(options.denyList);
|
|
27
|
+
if (allowSet.size === 0 && denySet.size === 0) {
|
|
28
|
+
return rooms;
|
|
29
|
+
}
|
|
30
|
+
const filtered = [];
|
|
31
|
+
for (const room of rooms) {
|
|
32
|
+
const devices = room.devices.filter((device) => {
|
|
33
|
+
const name = device.name.trim().toLowerCase();
|
|
34
|
+
if (allowSet.size > 0 && !allowSet.has(name)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (denySet.size > 0 && denySet.has(name)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
});
|
|
42
|
+
if (devices.length > 0) {
|
|
43
|
+
filtered.push({ ...room, devices });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return filtered;
|
|
47
|
+
}
|
|
5
48
|
//# sourceMappingURL=utils.js.map
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;IAC7C,SAAS,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;CACpC,CAAC;AASX,SAAS,YAAY,CAAC,IAAe;IACnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,OAA6B;IACvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAU,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|