@openremote/core 1.0.2 → 1.2.0-snapshot.20240512155932

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.
Files changed (58) hide show
  1. package/README.md +86 -8
  2. package/dist/umd/index.bundle.js +2 -0
  3. package/dist/umd/index.bundle.js.LICENSE.txt +26 -0
  4. package/dist/umd/index.js +2 -0
  5. package/dist/umd/index.js.LICENSE.txt +22 -0
  6. package/dist/umd/index.orbundle.js +50 -0
  7. package/dist/umd/index.orbundle.js.LICENSE.txt +38 -0
  8. package/lib/asset-mixin.d.ts +46 -0
  9. package/lib/asset-mixin.js +1 -0
  10. package/lib/asset-mixin.js.map +1 -0
  11. package/{dist → lib}/console.d.ts +21 -12
  12. package/lib/console.js +1 -0
  13. package/lib/console.js.map +1 -0
  14. package/lib/defaults.d.ts +15 -0
  15. package/lib/defaults.js +1 -0
  16. package/lib/defaults.js.map +1 -0
  17. package/{dist → lib}/event.d.ts +30 -16
  18. package/lib/event.js +1 -0
  19. package/lib/event.js.map +1 -0
  20. package/lib/index.d.ts +150 -0
  21. package/lib/index.js +1 -0
  22. package/lib/index.js.map +1 -0
  23. package/lib/util.d.ts +92 -0
  24. package/lib/util.js +1 -0
  25. package/lib/util.js.map +1 -0
  26. package/package.json +31 -14
  27. package/dist/asset-mixin.d.ts +0 -25
  28. package/dist/asset-mixin.js +0 -115
  29. package/dist/asset-mixin.js.map +0 -1
  30. package/dist/console.js +0 -446
  31. package/dist/console.js.map +0 -1
  32. package/dist/event.js +0 -454
  33. package/dist/event.js.map +0 -1
  34. package/dist/index.d.ts +0 -137
  35. package/dist/index.js +0 -683
  36. package/dist/index.js.map +0 -1
  37. package/dist/util.d.ts +0 -17
  38. package/dist/util.js +0 -72
  39. package/dist/util.js.map +0 -1
  40. package/src/asset-mixin.ts +0 -132
  41. package/src/console.d.ts +0 -56
  42. package/src/console.js +0 -451
  43. package/src/console.js.map +0 -1
  44. package/src/console.ts +0 -530
  45. package/src/event.d.ts +0 -75
  46. package/src/event.js +0 -410
  47. package/src/event.js.map +0 -1
  48. package/src/event.ts +0 -584
  49. package/src/index.d.ts +0 -110
  50. package/src/index.js +0 -525
  51. package/src/index.js.map +0 -1
  52. package/src/index.ts +0 -803
  53. package/src/util.d.ts +0 -15
  54. package/src/util.js +0 -46
  55. package/src/util.js.map +0 -1
  56. package/src/util.ts +0 -94
  57. package/tsconfig.json +0 -14
  58. package/tsconfig.tsbuildinfo +0 -9788
package/src/event.js DELETED
@@ -1,410 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- return new (P || (P = Promise))(function (resolve, reject) {
3
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
4
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
5
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
6
- step((generator = generator.apply(thisArg, _arguments || [])).next());
7
- });
8
- };
9
- import openremote from "./index";
10
- import { Deferred } from "./util";
11
- export var EventProviderStatus;
12
- (function (EventProviderStatus) {
13
- EventProviderStatus["DISCONNECTED"] = "DISCONNECTED";
14
- EventProviderStatus["CONNECTED"] = "CONNECTED";
15
- EventProviderStatus["CONNECTING"] = "CONNECTING";
16
- })(EventProviderStatus || (EventProviderStatus = {}));
17
- const SUBSCRIBE_MESSAGE_PREFIX = "SUBSCRIBE:";
18
- const SUBSCRIBED_MESSAGE_PREFIX = "SUBSCRIBED:";
19
- const UNSUBSCRIBE_MESSAGE_PREFIX = "UNSUBSCRIBE:";
20
- const RENEW_MESSAGE_PREFIX = "RENEW:";
21
- const UNAUTHORIZED_MESSAGE_PREFIX = "UNAUTHORIZED:";
22
- const EVENT_MESSAGE_PREFIX = "EVENT:";
23
- class EventProviderImpl {
24
- constructor(statusCallback) {
25
- this._disconnectRequested = false;
26
- this._reconnectDelayMillis = WebSocketEventProvider.MIN_RECONNECT_DELAY;
27
- this._reconnectTimer = null;
28
- this._status = EventProviderStatus.DISCONNECTED;
29
- this._connectingDeferred = null;
30
- this._pendingSubscription = null;
31
- this._queuedSubscriptions = [];
32
- this._subscriptionMap = {};
33
- this._statusCallback = statusCallback;
34
- }
35
- get status() {
36
- return this._status;
37
- }
38
- connect() {
39
- if (this._status === EventProviderStatus.CONNECTED) {
40
- return Promise.resolve(true);
41
- }
42
- this._disconnectRequested = false;
43
- if (this._connectingDeferred) {
44
- return this._connectingDeferred.promise;
45
- }
46
- this._onStatusChanged(EventProviderStatus.CONNECTING);
47
- this._connectingDeferred = new Deferred();
48
- this._doConnect().then((connected) => {
49
- if (this._connectingDeferred) {
50
- let deferred = this._connectingDeferred;
51
- this._connectingDeferred = null;
52
- if (this._reconnectTimer) {
53
- window.clearTimeout(this._reconnectTimer);
54
- this._reconnectTimer = null;
55
- }
56
- if (connected) {
57
- console.debug("Connected to event service: " + this.endpointUrl);
58
- this._reconnectDelayMillis = WebSocketEventProvider.MIN_RECONNECT_DELAY;
59
- this._onStatusChanged(EventProviderStatus.CONNECTED);
60
- window.setTimeout(() => {
61
- this._onConnect();
62
- }, 0);
63
- }
64
- else {
65
- console.debug("Failed to connect to event service: " + this.endpointUrl);
66
- this._onStatusChanged(EventProviderStatus.DISCONNECTED);
67
- }
68
- deferred.resolve(connected);
69
- }
70
- });
71
- return this._connectingDeferred.promise;
72
- }
73
- disconnect() {
74
- if (this._disconnectRequested) {
75
- return;
76
- }
77
- this._disconnectRequested = true;
78
- if (this._reconnectTimer) {
79
- window.clearTimeout(this._reconnectTimer);
80
- this._reconnectTimer = null;
81
- }
82
- if (this.status === EventProviderStatus.DISCONNECTED) {
83
- return;
84
- }
85
- this._doDisconnect();
86
- }
87
- subscribe(eventSubscription, callback) {
88
- let subscriptionInfo = {
89
- eventSubscription: eventSubscription,
90
- callback: callback,
91
- deferred: new Deferred()
92
- };
93
- if (this._pendingSubscription != null || this._status !== EventProviderStatus.CONNECTED) {
94
- this._queuedSubscriptions.push(subscriptionInfo);
95
- return subscriptionInfo.deferred.promise;
96
- }
97
- this._pendingSubscription = subscriptionInfo;
98
- this._doSubscribe(eventSubscription).then(subscriptionId => {
99
- if (this._pendingSubscription) {
100
- let subscriptionInfo = this._pendingSubscription;
101
- this._pendingSubscription = null;
102
- // Store subscriptionId and callback
103
- this._subscriptionMap[subscriptionId] = subscriptionInfo;
104
- this._processNextSubscription();
105
- let deferred = subscriptionInfo.deferred;
106
- subscriptionInfo.deferred = null;
107
- if (deferred) {
108
- deferred.resolve(subscriptionId);
109
- }
110
- }
111
- }, reason => {
112
- if (this._pendingSubscription) {
113
- let subscriptionInfo = this._pendingSubscription;
114
- this._pendingSubscription = null;
115
- this._processNextSubscription();
116
- let deferred = subscriptionInfo.deferred;
117
- subscriptionInfo.deferred = null;
118
- if (deferred) {
119
- deferred.reject(reason);
120
- }
121
- }
122
- });
123
- return this._pendingSubscription.deferred.promise;
124
- }
125
- unsubscribe(subscriptionId) {
126
- let callback = this._subscriptionMap[subscriptionId];
127
- if (callback) {
128
- delete this._subscriptionMap[subscriptionId];
129
- this._doUnsubscribe(subscriptionId);
130
- }
131
- }
132
- sendEvent(event) {
133
- this._doSend(event);
134
- }
135
- subscribeAttributeEvents(assetIds, callback) {
136
- return __awaiter(this, void 0, void 0, function* () {
137
- let subscription = {
138
- eventType: "attribute",
139
- filter: {
140
- filterType: "attribute-entity-id",
141
- entityIds: assetIds
142
- }
143
- };
144
- let subscriptionId = null;
145
- try {
146
- subscriptionId = yield this.subscribe(subscription, callback);
147
- // Get the current value of each assets attributes
148
- assetIds.forEach(assetId => {
149
- let readEvent = {
150
- assetId: assetId,
151
- eventType: "read-asset-attributes",
152
- subscriptionId: subscriptionId
153
- };
154
- this.sendEvent(readEvent);
155
- });
156
- }
157
- catch (e) {
158
- console.log("Failed to subscribe to attribute events for assets: " + assetIds);
159
- if (subscriptionId) {
160
- this.unsubscribe(subscriptionId);
161
- }
162
- throw e;
163
- }
164
- return subscriptionId;
165
- });
166
- }
167
- _processNextSubscription() {
168
- if (this._status != EventProviderStatus.CONNECTED || this._queuedSubscriptions.length === 0) {
169
- return;
170
- }
171
- setTimeout(() => {
172
- let subscriptionInfo = this._queuedSubscriptions.shift();
173
- if (subscriptionInfo) {
174
- this.subscribe(subscriptionInfo.eventSubscription, subscriptionInfo.callback)
175
- .then((id) => {
176
- let deferred = subscriptionInfo.deferred;
177
- subscriptionInfo.deferred = null;
178
- if (deferred) {
179
- deferred.resolve(id);
180
- }
181
- }, reason => {
182
- let deferred = subscriptionInfo.deferred;
183
- subscriptionInfo.deferred = null;
184
- if (deferred) {
185
- deferred.reject(reason);
186
- }
187
- });
188
- }
189
- }, 0);
190
- }
191
- _onStatusChanged(status) {
192
- if (status === this._status) {
193
- return;
194
- }
195
- console.debug("Event provider status changed: " + status);
196
- this._status = status;
197
- window.setTimeout(() => {
198
- this._statusCallback(status);
199
- }, 0);
200
- }
201
- _onMessageReceived(subscriptionId, event) {
202
- let subscriptionInfo = this._subscriptionMap[subscriptionId];
203
- if (subscriptionInfo) {
204
- subscriptionInfo.callback(event);
205
- }
206
- }
207
- _onConnect() {
208
- console.debug("Event provider connected: " + this.constructor.name);
209
- if (Object.keys(this._subscriptionMap).length > 0) {
210
- for (const subscriptionId in this._subscriptionMap) {
211
- if (this._subscriptionMap.hasOwnProperty(subscriptionId)) {
212
- this._queuedSubscriptions.unshift(this._subscriptionMap[subscriptionId]);
213
- }
214
- }
215
- this._subscriptionMap = {};
216
- }
217
- this._processNextSubscription();
218
- }
219
- _onDisconnect() {
220
- console.debug("Event provider disconnected");
221
- this._onStatusChanged(EventProviderStatus.DISCONNECTED);
222
- if (this._pendingSubscription) {
223
- this._queuedSubscriptions.unshift(this._pendingSubscription);
224
- this._pendingSubscription = null;
225
- }
226
- this._scheduleReconnect();
227
- }
228
- _scheduleReconnect() {
229
- if (this._reconnectTimer) {
230
- return;
231
- }
232
- if (this._disconnectRequested) {
233
- return;
234
- }
235
- console.debug("Event provider scheduling reconnect in " + this._reconnectDelayMillis + "ms");
236
- this._reconnectTimer = window.setTimeout(() => {
237
- if (this._disconnectRequested) {
238
- return;
239
- }
240
- this.connect().then(connected => {
241
- if (!connected) {
242
- this._scheduleReconnect();
243
- }
244
- }).catch(error => {
245
- this._scheduleReconnect();
246
- });
247
- }, this._reconnectDelayMillis);
248
- if (this._reconnectDelayMillis < WebSocketEventProvider.MAX_RECONNECT_DELAY) {
249
- this._reconnectDelayMillis = Math.min(WebSocketEventProvider.MAX_RECONNECT_DELAY, this._reconnectDelayMillis + 3000);
250
- }
251
- }
252
- }
253
- EventProviderImpl.MIN_RECONNECT_DELAY = 0;
254
- EventProviderImpl.MAX_RECONNECT_DELAY = 30000;
255
- export class WebSocketEventProvider extends EventProviderImpl {
256
- constructor(managerUrl, statusCallback) {
257
- super(statusCallback);
258
- this._webSocket = undefined;
259
- this._connectDeferred = null;
260
- this._subscribeDeferred = null;
261
- this._renewalTimer = null;
262
- this._endpointUrl = (managerUrl.startsWith("https:") ? "wss" : "ws") + "://" + managerUrl.substr(managerUrl.indexOf("://") + 3) + "/websocket/events";
263
- // Close socket on unload/refresh of page
264
- window.addEventListener("beforeunload", () => {
265
- this.disconnect();
266
- });
267
- }
268
- get endpointUrl() {
269
- return this._endpointUrl;
270
- }
271
- _doConnect() {
272
- let authorisedUrl = this._endpointUrl + "?Auth-Realm=" + openremote.config.realm;
273
- if (openremote.authenticated) {
274
- authorisedUrl += "&Authorization=" + openremote.getAuthorizationHeader();
275
- }
276
- this._webSocket = new WebSocket(authorisedUrl);
277
- this._connectDeferred = new Deferred();
278
- this._webSocket.onopen = () => {
279
- if (this._connectDeferred) {
280
- let deferred = this._connectDeferred;
281
- this._connectDeferred = null;
282
- deferred.resolve(true);
283
- }
284
- };
285
- this._webSocket.onerror = () => {
286
- if (this._connectDeferred) {
287
- let deferred = this._connectDeferred;
288
- this._connectDeferred = null;
289
- deferred.resolve(false);
290
- }
291
- else {
292
- console.debug("Event provider error");
293
- // Could have inconsistent state so disconnect and let consumers decide what to do and when to reconnect
294
- this._beforeDisconnect();
295
- }
296
- };
297
- this._webSocket.onclose = () => {
298
- this._webSocket = undefined;
299
- if (this._connectDeferred) {
300
- let deferred = this._connectDeferred;
301
- this._connectDeferred = null;
302
- deferred.resolve(false);
303
- }
304
- else {
305
- this._beforeDisconnect();
306
- }
307
- };
308
- this._webSocket.onmessage = (e) => {
309
- let msg = e.data;
310
- if (msg && msg.startsWith(SUBSCRIBED_MESSAGE_PREFIX)) {
311
- let jsonStr = msg.substring(SUBSCRIBED_MESSAGE_PREFIX.length);
312
- let subscription = JSON.parse(jsonStr);
313
- // Create a renewal timer if not done so
314
- if (!this._renewalTimer) {
315
- setInterval(() => {
316
- this._doRenewal();
317
- }, WebSocketEventProvider._subscriptionRenewalMillis);
318
- }
319
- let deferred = this._subscribeDeferred;
320
- this._subscribeDeferred = null;
321
- if (deferred) {
322
- deferred.resolve(subscription.subscriptionId);
323
- }
324
- }
325
- else if (msg.startsWith(UNAUTHORIZED_MESSAGE_PREFIX)) {
326
- let jsonStr = msg.substring(UNAUTHORIZED_MESSAGE_PREFIX.length);
327
- let subscription = JSON.parse(jsonStr);
328
- let deferred = this._subscribeDeferred;
329
- this._subscribeDeferred = null;
330
- if (deferred) {
331
- console.warn("Unauthorized event subscription: " + subscription);
332
- deferred.reject("Unauthorized");
333
- }
334
- }
335
- else if (msg.startsWith(EVENT_MESSAGE_PREFIX)) {
336
- let str = msg.substring(EVENT_MESSAGE_PREFIX.length);
337
- let seperatorPos = str.indexOf(":");
338
- if (seperatorPos > 0) {
339
- let strArr = [str.substring(0, seperatorPos), str.substring(seperatorPos + 1)];
340
- let subscriptionId = strArr[0];
341
- let jsonStr = strArr[1];
342
- if (jsonStr.startsWith("[")) {
343
- let events = JSON.parse(jsonStr);
344
- events.forEach(event => {
345
- this._onMessageReceived(subscriptionId, event);
346
- });
347
- }
348
- else {
349
- let event = JSON.parse(jsonStr);
350
- this._onMessageReceived(subscriptionId, event);
351
- }
352
- }
353
- }
354
- };
355
- return this._connectDeferred.promise;
356
- }
357
- _beforeDisconnect() {
358
- if (this._renewalTimer != null) {
359
- clearInterval(this._renewalTimer);
360
- this._renewalTimer = null;
361
- }
362
- this._onDisconnect();
363
- }
364
- _doDisconnect() {
365
- this._webSocket.close();
366
- }
367
- _doSubscribe(subscription) {
368
- if (!this._webSocket) {
369
- return Promise.reject("Not connected");
370
- }
371
- if (this._subscribeDeferred) {
372
- return Promise.reject("There's already a pending subscription");
373
- }
374
- this._subscribeDeferred = new Deferred();
375
- subscription.subscriptionId = WebSocketEventProvider._subscriptionCounter++ + "";
376
- this._webSocket.send(SUBSCRIBE_MESSAGE_PREFIX + JSON.stringify(subscription));
377
- return this._subscribeDeferred.promise;
378
- }
379
- _doUnsubscribe(subscriptionId) {
380
- if (!this._webSocket) {
381
- return;
382
- }
383
- let cancelSubscription = {
384
- subscriptionId: subscriptionId
385
- };
386
- this._webSocket.send(UNSUBSCRIBE_MESSAGE_PREFIX + JSON.stringify(cancelSubscription));
387
- if (Object.keys(this._subscriptionMap).length == 0 && this._renewalTimer) {
388
- clearInterval(this._renewalTimer);
389
- }
390
- }
391
- _doRenewal() {
392
- if (!this._webSocket) {
393
- return;
394
- }
395
- let renewSubscriptions = {
396
- subscriptionIds: Object.keys(this._subscriptionMap)
397
- };
398
- this._webSocket.send(RENEW_MESSAGE_PREFIX + JSON.stringify(renewSubscriptions));
399
- }
400
- _doSend(event) {
401
- if (!this._webSocket) {
402
- return;
403
- }
404
- let message = EVENT_MESSAGE_PREFIX + JSON.stringify(event);
405
- this._webSocket.send(message);
406
- }
407
- }
408
- WebSocketEventProvider._subscriptionCounter = 1;
409
- WebSocketEventProvider._subscriptionRenewalMillis = 150 * 1000;
410
- //# sourceMappingURL=event.js.map
package/src/event.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["event.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,UAAU,MAAM,SAAS,CAAC;AACjC,OAAO,EAAC,QAAQ,EAAC,MAAM,QAAQ,CAAC;AAUhC,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC3B,oDAA6B,CAAA;IAC7B,8CAAuB,CAAA;IACvB,gDAAyB,CAAA;AAC7B,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAwBD,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAC9C,MAAM,yBAAyB,GAAG,aAAa,CAAC;AAChD,MAAM,0BAA0B,GAAG,cAAc,CAAC;AAClD,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AACtC,MAAM,2BAA2B,GAAG,eAAe,CAAC;AACpD,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAEtC,MAAe,iBAAiB;IAqB5B,YAAsB,cAAqD;QAjBjE,yBAAoB,GAAY,KAAK,CAAC;QACtC,0BAAqB,GAAW,sBAAsB,CAAC,mBAAmB,CAAC;QAC3E,oBAAe,GAAkB,IAAI,CAAC;QAEtC,YAAO,GAAwB,mBAAmB,CAAC,YAAY,CAAC;QAChE,wBAAmB,GAA6B,IAAI,CAAC;QAErD,yBAAoB,GAA8C,IAAI,CAAC;QACvE,yBAAoB,GAAyC,EAAE,CAAC;QAChE,qBAAgB,GAAyD,EAAE,CAAC;QASlF,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IAC1C,CAAC;IAND,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAMM,OAAO;QACV,IAAI,IAAI,CAAC,OAAO,KAAK,mBAAmB,CAAC,SAAS,EAAE;YAChD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAElC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;SAC3C;QAED,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,mBAAmB,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1C,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,SAAkB,EAAE,EAAE;YAC1C,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBACxC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAEhC,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBAC/B;gBAED,IAAI,SAAS,EAAE;oBACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;oBACjE,IAAI,CAAC,qBAAqB,GAAG,sBAAsB,CAAC,mBAAmB,CAAC;oBACxE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;oBAErD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;wBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;oBACtB,CAAC,EAAE,CAAC,CAAC,CAAC;iBACT;qBAAM;oBACH,OAAO,CAAC,KAAK,CAAC,sCAAsC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;oBACzE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;iBAC3D;gBAED,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aAC/B;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAC5C,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,OAAO;SACV;QACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEjC,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,mBAAmB,CAAC,YAAY,EAAE;YAClD,OAAO;SACV;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAEM,SAAS,CAAwB,iBAAuC,EAAE,QAA4B;QAEzG,IAAI,gBAAgB,GAAG;YACnB,iBAAiB,EAAE,iBAAiB;YACpC,QAAQ,EAAE,QAA0C;YACpD,QAAQ,EAAE,IAAI,QAAQ,EAAU;SACnC,CAAC;QAEF,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,mBAAmB,CAAC,SAAS,EAAE;YACrF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC;SAC5C;QAED,IAAI,CAAC,oBAAoB,GAAG,gBAAgB,CAAC;QAE7C,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,IAAI,CACrC,cAAc,CAAC,EAAE;YACb,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBACjD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBAEjC,oCAAoC;gBACpC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC;gBAEzD,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,IAAI,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;gBACzC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAEjC,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;iBACpC;aACJ;QACL,CAAC,EACD,MAAM,CAAC,EAAE;YACL,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBACjD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,IAAI,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;gBACzC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAEjC,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC3B;aACJ;QACL,CAAC,CAAC,CAAC;QAEP,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAS,CAAC,OAAO,CAAC;IACvD,CAAC;IAEM,WAAW,CAAwB,cAAsB;QAE5D,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,QAAQ,EAAE;YACV,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;SACvC;IACL,CAAC;IAEM,SAAS,CAAwB,KAAQ;QAC5C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEY,wBAAwB,CAAC,QAAkB,EAAE,QAAyC;;YAC/F,IAAI,YAAY,GAAsC;gBAClD,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE;oBACJ,UAAU,EAAE,qBAAqB;oBACjC,SAAS,EAAE,QAAQ;iBACtB;aACJ,CAAC;YAEF,IAAI,cAAc,GAAkB,IAAI,CAAC;YAEzC,IAAI;gBACA,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAE9D,kDAAkD;gBAClD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACvB,IAAI,SAAS,GAA6B;wBACtC,OAAO,EAAE,OAAO;wBAChB,SAAS,EAAE,uBAAuB;wBAClC,cAAc,EAAE,cAAe;qBAClC,CAAC;oBACF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,GAAG,CAAC,sDAAsD,GAAG,QAAQ,CAAC,CAAC;gBAC/E,IAAI,cAAc,EAAE;oBAChB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;iBACpC;gBACD,MAAM,CAAC,CAAC;aACX;YAED,OAAO,cAAe,CAAC;QAC3B,CAAC;KAAA;IAES,wBAAwB;QAC9B,IAAI,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,SAAS,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;YACzF,OAAO;SACV;QAED,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;YACzD,IAAI,gBAAgB,EAAE;gBAClB,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,QAAQ,CAAC;qBACxE,IAAI,CACD,CAAC,EAAU,EAAE,EAAE;oBACX,IAAI,QAAQ,GAAG,gBAAiB,CAAC,QAAQ,CAAC;oBAC1C,gBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAElC,IAAI,QAAQ,EAAE;wBACV,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;qBACxB;gBACL,CAAC,EAAE,MAAM,CAAC,EAAE;oBACR,IAAI,QAAQ,GAAG,gBAAiB,CAAC,QAAQ,CAAC;oBAC1C,gBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAElC,IAAI,QAAQ,EAAE;wBACV,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;qBAC3B;gBACL,CAAC,CAAC,CAAC;aACd;QACL,CAAC,EAAE,CAAC,CAAC,CAAC;IACV,CAAC;IAEO,gBAAgB,CAAC,MAA2B;QAChD,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;YACzB,OAAO;SACV;QAED,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,MAAM,CAAC,CAAC;QAE1D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,EAAE,CAAC,CAAC,CAAC;IACV,CAAC;IAES,kBAAkB,CAAC,cAAsB,EAAE,KAAkB;QACnE,IAAI,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAE7D,IAAI,gBAAgB,EAAE;YAClB,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACpC;IACL,CAAC;IAES,UAAU;QAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEpE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBAChD,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;oBACtD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;iBAC5E;aACJ;YACD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;SAC9B;QAED,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAES,aAAa;QACnB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC7D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACpC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAES,kBAAkB;QACxB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,OAAO;SACV;QAED,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,OAAO;SACV;QAED,OAAO,CAAC,KAAK,CAAC,yCAAyC,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;QAE7F,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YAE1C,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,OAAO;aACV;YAED,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC5B,IAAI,CAAC,SAAS,EAAE;oBACZ,IAAI,CAAC,kBAAkB,EAAE,CAAC;iBAC7B;YACL,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,qBAAqB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE;YACzE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;SACxH;IACL,CAAC;;AAhSgB,qCAAmB,GAAW,CAAC,CAAC;AAChC,qCAAmB,GAAW,KAAK,CAAC;AA4SzD,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IAezD,YAAY,UAAkB,EAAE,cAAwD;QACpF,KAAK,CAAC,cAAc,CAAC,CAAC;QAVhB,eAAU,GAA0B,SAAS,CAAC;QAC9C,qBAAgB,GAA6B,IAAI,CAAC;QAClD,uBAAkB,GAA4B,IAAI,CAAC;QACnD,kBAAa,GAAkB,IAAI,CAAC;QAS1C,IAAI,CAAC,YAAY,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC;QAEtJ,yCAAyC;QACzC,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE;YACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;IAbD,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAaS,UAAU;QAChB,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;QAEjF,IAAI,UAAU,CAAC,aAAa,EAAE;YAC1B,aAAa,IAAI,iBAAiB,GAAG,UAAU,CAAC,sBAAsB,EAAE,CAAC;SAC5E;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,QAAQ,EAAE,CAAC;QAEvC,IAAI,CAAC,UAAW,CAAC,MAAM,GAAG,GAAG,EAAE;YAC3B,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC1B;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,UAAW,CAAC,OAAO,GAAG,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC3B;iBAAM;gBACH,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACtC,wGAAwG;gBACxG,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,UAAW,CAAC,OAAO,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAE5B,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC3B;iBAAM;gBACH,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,UAAW,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,GAAG,GAAG,CAAC,CAAC,IAAc,CAAC;YAC3B,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAAE;gBAClD,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;gBAC9D,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmC,CAAC;gBAEzE,wCAAwC;gBACxC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACrB,WAAW,CAAC,GAAG,EAAE;wBACb,IAAI,CAAC,UAAU,EAAE,CAAC;oBACtB,CAAC,EAAE,sBAAsB,CAAC,0BAA0B,CAAC,CAAC;iBACzD;gBAED,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBAC/B,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;iBACjD;aACJ;iBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAAE;gBACpD,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;gBAChE,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmC,CAAC;gBACzE,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBAC/B,IAAI,QAAQ,EAAE;oBACV,OAAO,CAAC,IAAI,CAAC,mCAAmC,GAAG,YAAY,CAAC,CAAC;oBACjE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;iBACnC;aACJ;iBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;gBAC7C,IAAI,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,YAAY,GAAG,CAAC,EAAE;oBAClB,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/E,IAAI,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;wBACzB,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;wBAClD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BACnB,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;wBACnD,CAAC,CAAC,CAAC;qBACN;yBAAM;wBACH,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;wBAC/C,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;qBAClD;iBACJ;aACJ;QACL,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;IACzC,CAAC;IAES,iBAAiB;QACvB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC5B,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAES,aAAa;QACnB,IAAI,CAAC,UAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAES,YAAY,CAAwB,YAAkC;QAC5E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,OAAO,OAAO,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzC,YAAY,CAAC,cAAc,GAAG,sBAAsB,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC;QACjF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAC3C,CAAC;IAES,cAAc,CAAC,cAAsB;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO;SACV;QACD,IAAI,kBAAkB,GAAyC;YAC3D,cAAc,EAAE,cAAc;SACjC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACtF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;YACtE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACrC;IACL,CAAC;IAES,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO;SACV;QAED,IAAI,kBAAkB,GAA4B;YAC9C,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACtD,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpF,CAAC;IAES,OAAO,CAAwB,KAAQ;QAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO;SACV;QAED,IAAI,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;;AA9KgB,2CAAoB,GAAW,CAAC,CAAC;AACjC,iDAA0B,GAAG,GAAG,GAAG,IAAI,CAAC"}