@plane31/blind-relay 0.1.3 → 0.2.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.
Files changed (81) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/index.d.ts +3 -3
  3. package/dist/adapters/index.d.ts.map +1 -1
  4. package/dist/adapters/index.js +1 -1
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/audience.d.ts +1 -1
  7. package/dist/audience.d.ts.map +1 -1
  8. package/dist/audience.js +7 -6
  9. package/dist/audience.js.map +1 -1
  10. package/dist/client.d.ts +78 -3
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +903 -85
  13. package/dist/client.js.map +1 -1
  14. package/dist/codec.d.ts +25 -1
  15. package/dist/codec.d.ts.map +1 -1
  16. package/dist/codec.js +44 -0
  17. package/dist/codec.js.map +1 -1
  18. package/dist/crypto.d.ts +1 -1
  19. package/dist/crypto.d.ts.map +1 -1
  20. package/dist/crypto.js.map +1 -1
  21. package/dist/errors.d.ts +9 -1
  22. package/dist/errors.d.ts.map +1 -1
  23. package/dist/errors.js +2 -1
  24. package/dist/errors.js.map +1 -1
  25. package/dist/identity.d.ts +8 -2
  26. package/dist/identity.d.ts.map +1 -1
  27. package/dist/identity.js +7 -3
  28. package/dist/identity.js.map +1 -1
  29. package/dist/index.d.ts +4 -4
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/policy.d.ts +13 -0
  34. package/dist/policy.d.ts.map +1 -1
  35. package/dist/policy.js +12 -1
  36. package/dist/policy.js.map +1 -1
  37. package/dist/rows.d.ts.map +1 -1
  38. package/dist/rows.js +2 -0
  39. package/dist/rows.js.map +1 -1
  40. package/dist/store.d.ts +114 -3
  41. package/dist/store.d.ts.map +1 -1
  42. package/dist/store.js.map +1 -1
  43. package/dist/succession.d.ts +108 -0
  44. package/dist/succession.d.ts.map +1 -0
  45. package/dist/succession.js +205 -0
  46. package/dist/succession.js.map +1 -0
  47. package/dist/testing/clock.d.ts.map +1 -1
  48. package/dist/testing/clock.js +1 -0
  49. package/dist/testing/clock.js.map +1 -1
  50. package/dist/testing/fakeHost.d.ts +60 -1
  51. package/dist/testing/fakeHost.d.ts.map +1 -1
  52. package/dist/testing/fakeHost.js +201 -31
  53. package/dist/testing/fakeHost.js.map +1 -1
  54. package/dist/testing/faults.d.ts +5 -3
  55. package/dist/testing/faults.d.ts.map +1 -1
  56. package/dist/testing/faults.js +24 -3
  57. package/dist/testing/faults.js.map +1 -1
  58. package/dist/transactions.d.ts +6 -0
  59. package/dist/transactions.d.ts.map +1 -1
  60. package/dist/transactions.js +11 -5
  61. package/dist/transactions.js.map +1 -1
  62. package/dist/transport.d.ts +66 -2
  63. package/dist/transport.d.ts.map +1 -1
  64. package/package.json +1 -1
  65. package/src/adapters/index.ts +13 -0
  66. package/src/audience.ts +7 -6
  67. package/src/client.ts +881 -90
  68. package/src/codec.ts +64 -1
  69. package/src/crypto.ts +1 -0
  70. package/src/errors.ts +12 -1
  71. package/src/identity.ts +13 -3
  72. package/src/index.ts +5 -3
  73. package/src/policy.ts +23 -1
  74. package/src/rows.ts +2 -0
  75. package/src/store.ts +110 -3
  76. package/src/succession.ts +270 -0
  77. package/src/testing/clock.ts +1 -0
  78. package/src/testing/fakeHost.ts +204 -28
  79. package/src/testing/faults.ts +28 -7
  80. package/src/transactions.ts +13 -6
  81. package/src/transport.ts +69 -2
@@ -1,10 +1,17 @@
1
1
  import { type RecordKind } from "../codec.js";
2
2
  import { type SigningKeypair } from "../crypto.js";
3
- import type { AppendOutcome, JoinRequest, Transport } from "../transport.js";
3
+ import type { AppendOutcome, JoinRequest, SuccessionLink, Transport } from "../transport.js";
4
4
  interface Account {
5
5
  accountName: string;
6
6
  accountKey: Uint8Array;
7
+ /** The identity of the current key. */
7
8
  identityId: string;
9
+ /** The account id: the root of the succession chain; what circles, manifests and streams name. */
10
+ accountId: string;
11
+ /** The chain from the root, oldest first; empty until a succession. */
12
+ successions: SuccessionLink[];
13
+ /** The certificate the first succession replaced: a certificate under the root key. */
14
+ rootCertificate: Uint8Array | undefined;
8
15
  certificate: Uint8Array;
9
16
  certificateHash: string;
10
17
  generation: bigint;
@@ -85,6 +92,40 @@ export declare class FakeHost {
85
92
  readonly streams: Map<string, StreamState>;
86
93
  readonly notifications: Notification[];
87
94
  readonly receipts: Map<string, Uint8Array<ArrayBufferLike>>;
95
+ /** Successions by succession id: the committed document and the certificate hash it bound, for idempotent commits. */
96
+ readonly successionLog: Map<string, {
97
+ accountName: string;
98
+ certificateHash: string;
99
+ wire: Uint8Array;
100
+ }>;
101
+ /** Replacement authorizations the product's fresh authentication issued (`authorizeReplacement`), single use. */
102
+ readonly authorizations: Map<string, {
103
+ accountName: string;
104
+ successionId: string;
105
+ expectedCertificateHash: string;
106
+ certificateHash: string;
107
+ expiresAt: bigint;
108
+ used: boolean;
109
+ }>;
110
+ /** Sharing preferences per (account id, circle id), with the revision that orders them. */
111
+ readonly preferences: Map<string, {
112
+ enabled: boolean;
113
+ revision: bigint;
114
+ }>;
115
+ authorizationTtlMs: bigint;
116
+ successionPageSize: number;
117
+ circlePageSize: number;
118
+ /** Re-attest a link under the current operational key when its original signer is no longer it (section 7). */
119
+ reattest: boolean;
120
+ /** Test switch: the n-th call to listCircles (1-based) fails with a transport error, once. */
121
+ failCircleListAt: number | undefined;
122
+ circleListCalls: number;
123
+ /** Every getSuccessions call, for tests that check where a peer resumes a chain. */
124
+ readonly successionCalls: {
125
+ accountId: string;
126
+ afterGeneration: bigint;
127
+ limit: number;
128
+ }[];
88
129
  resetKeyList: Uint8Array | undefined;
89
130
  resetSigner: {
90
131
  key: SigningKeypair;
@@ -106,6 +147,24 @@ export declare class FakeHost {
106
147
  counter: number;
107
148
  }[];
108
149
  accountByIdentity(iid: string): Account | undefined;
150
+ /** The account an id names today: its account id, its current identity, or an identity it retired. */
151
+ accountByAnyId(id: string): Account | undefined;
152
+ /**
153
+ * The product's fresh authentication, as a test hook: an authorization bound to the proposal
154
+ * (account, succession id, expected certificate, the certificate's hash), single use, expiring.
155
+ */
156
+ authorizeReplacement(input: {
157
+ accountName: string;
158
+ successionId: Uint8Array;
159
+ expectedCertificateHash: Uint8Array;
160
+ certificate: Uint8Array;
161
+ }): Uint8Array;
162
+ private resolvedOf;
163
+ private successionPage;
164
+ /** A link as served: re-attested under the current operational key when its signer changed and re-attestation is on. */
165
+ private served;
166
+ /** The circle fence: is this certificate the account's current device? A retired device is refused reads too. */
167
+ private isCurrentDevice;
109
168
  private stream;
110
169
  /** The expiry alarm: delete the expired prefix and advance the watermark. */
111
170
  expire(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"fakeHost.d.ts","sourceRoot":"","sources":["../../src/testing/fakeHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fakeHost.d.ts","sourceRoot":"","sources":["../../src/testing/fakeHost.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@
5
5
  * exported under `@plane31/blind-relay/testing` only.
6
6
  */
7
7
  import { equalBytes, fromHex, toHex } from "../bytes.js";
8
- import { DocumentType, buildResetReceipt, expectType, parseDocument, parseVaultHeader, verifyDocument } from "../codec.js";
9
- import { bodyHash, identityId, streamId as deriveStreamId } from "../crypto.js";
8
+ import { DocumentType, buildResetReceipt, buildSuccession, expectType, parseDocument, parseVaultHeader, verifyDocument } from "../codec.js";
9
+ import { bodyHash, identityId, randomBytes, streamId as deriveStreamId } from "../crypto.js";
10
10
  export class FakeHost {
11
11
  now = () => 0n;
12
12
  deliveryWindowMs = 86400000n;
@@ -18,6 +18,22 @@ export class FakeHost {
18
18
  streams = new Map();
19
19
  notifications = [];
20
20
  receipts = new Map();
21
+ /** Successions by succession id: the committed document and the certificate hash it bound, for idempotent commits. */
22
+ successionLog = new Map();
23
+ /** Replacement authorizations the product's fresh authentication issued (`authorizeReplacement`), single use. */
24
+ authorizations = new Map();
25
+ /** Sharing preferences per (account id, circle id), with the revision that orders them. */
26
+ preferences = new Map();
27
+ authorizationTtlMs = 300000n;
28
+ successionPageSize = 8;
29
+ circlePageSize = 50;
30
+ /** Re-attest a link under the current operational key when its original signer is no longer it (section 7). */
31
+ reattest = true;
32
+ /** Test switch: the n-th call to listCircles (1-based) fails with a transport error, once. */
33
+ failCircleListAt;
34
+ circleListCalls = 0;
35
+ /** Every getSuccessions call, for tests that check where a peer resumes a chain. */
36
+ successionCalls = [];
21
37
  resetKeyList;
22
38
  resetSigner;
23
39
  /** Test switches. */
@@ -32,6 +48,54 @@ export class FakeHost {
32
48
  accountByIdentity(iid) {
33
49
  return [...this.accounts.values()].find((a) => a.identityId === iid);
34
50
  }
51
+ /** The account an id names today: its account id, its current identity, or an identity it retired. */
52
+ accountByAnyId(id) {
53
+ return [...this.accounts.values()].find((a) => a.accountId === id || a.identityId === id || a.previousIdentities.has(id));
54
+ }
55
+ /**
56
+ * The product's fresh authentication, as a test hook: an authorization bound to the proposal
57
+ * (account, succession id, expected certificate, the certificate's hash), single use, expiring.
58
+ */
59
+ authorizeReplacement(input) {
60
+ const doc = expectType(verifyDocument(input.certificate), DocumentType.AccountDevice);
61
+ const token = randomBytes(32);
62
+ this.authorizations.set(toHex(token), { accountName: input.accountName, successionId: toHex(input.successionId), expectedCertificateHash: toHex(input.expectedCertificateHash), certificateHash: toHex(doc.bodyHash), expiresAt: this.now() + this.authorizationTtlMs, used: false });
63
+ return token;
64
+ }
65
+ resolvedOf(a) {
66
+ const r = { accountName: a.accountName, accountKey: a.accountKey, certificate: a.certificate };
67
+ const page = this.successionPage(a, 0n, this.successionPageSize);
68
+ return {
69
+ ...r,
70
+ ...(a.resetReceipt ? { resetReceipt: a.resetReceipt } : {}),
71
+ ...(page.successions.length ? { successions: page.successions } : {}),
72
+ ...(page.nextGeneration !== undefined ? { successionsNext: page.nextGeneration } : {}),
73
+ ...(page.rootCertificate ? { rootCertificate: page.rootCertificate } : {})
74
+ };
75
+ }
76
+ successionPage(a, afterGeneration, limit) {
77
+ const gen = (l) => expectType(parseDocument(l.certificate), DocumentType.AccountDevice).generation;
78
+ const rest = a.successions.filter((l) => gen(l) > afterGeneration).map((l) => this.served(l));
79
+ const page = rest.slice(0, Math.max(1, limit));
80
+ const last = page.at(-1);
81
+ const root = afterGeneration === 0n && page.length && a.rootCertificate ? { rootCertificate: a.rootCertificate } : {};
82
+ return rest.length > page.length && last ? { successions: page, nextGeneration: gen(last), ...root } : { successions: page, ...root };
83
+ }
84
+ /** A link as served: re-attested under the current operational key when its signer changed and re-attestation is on. */
85
+ served(l) {
86
+ const signer = this.resetSigner;
87
+ if (!this.reattest || !signer)
88
+ return l;
89
+ const doc = expectType(parseDocument(l.wire), DocumentType.AccountSuccession);
90
+ if (equalBytes(doc.authorityKeyId, signer.keyId))
91
+ return l;
92
+ const fields = { accountName: doc.accountName, accountId: doc.accountId, previousIdentityId: doc.previousIdentityId, newIdentityId: doc.newIdentityId, previousGeneration: doc.previousGeneration, newGeneration: doc.newGeneration, newCertificateHash: doc.newCertificateHash, successionId: doc.successionId };
93
+ return { wire: buildSuccession({ ...fields, issuedAt: this.now(), authorityKeyId: signer.keyId }, signer.key.secretKey), certificate: l.certificate };
94
+ }
95
+ /** The circle fence: is this certificate the account's current device? A retired device is refused reads too. */
96
+ isCurrentDevice(accountName, certificateHash) {
97
+ return this.accounts.get(accountName)?.certificateHash === certificateHash;
98
+ }
35
99
  stream(streamHex, authorIdentityId, accountName) {
36
100
  let s = this.streams.get(streamHex);
37
101
  if (!s) {
@@ -107,19 +171,13 @@ export class FakeHost {
107
171
  async resolveAccounts(names) {
108
172
  return names.flatMap((n) => {
109
173
  const a = host.accounts.get(n);
110
- if (!a)
111
- return [];
112
- const r = { accountName: n, accountKey: a.accountKey, certificate: a.certificate };
113
- return [a.resetReceipt ? { ...r, resetReceipt: a.resetReceipt } : r];
174
+ return a ? [host.resolvedOf(a)] : [];
114
175
  });
115
176
  },
116
177
  async resolveIdentities(identityIds) {
117
178
  return identityIds.flatMap((iid) => {
118
- const a = host.accountByIdentity(toHex(iid)) ?? [...host.accounts.values()].find((x) => x.previousIdentities.has(toHex(iid)));
119
- if (!a)
120
- return [];
121
- const r = { accountName: a.accountName, accountKey: a.accountKey, certificate: a.certificate };
122
- return [a.resetReceipt ? { ...r, resetReceipt: a.resetReceipt } : r];
179
+ const a = host.accountByAnyId(toHex(iid));
180
+ return a ? [host.resolvedOf(a)] : [];
123
181
  });
124
182
  },
125
183
  async getCertificate(hash) {
@@ -130,18 +188,21 @@ export class FakeHost {
130
188
  const taken = host.accounts.get(doc.accountName);
131
189
  if (taken)
132
190
  return equalBytes(taken.certificate, certificate) ? { status: "ALREADY_COMMITTED" } : { status: "CONFLICT" };
133
- const vh = parseVaultHeader(vault);
191
+ const vh = vault ? parseVaultHeader(vault) : undefined;
134
192
  const iid = toHex(identityId(doc.accountName, doc.accountKey));
135
193
  host.accounts.set(doc.accountName, {
136
194
  accountName: doc.accountName,
137
195
  accountKey: doc.accountKey,
138
196
  identityId: iid,
197
+ accountId: iid,
198
+ successions: [],
199
+ rootCertificate: undefined,
139
200
  certificate,
140
201
  certificateHash: toHex(doc.bodyHash),
141
202
  generation: doc.generation,
142
203
  deviceIds: new Set([toHex(doc.deviceId)]),
143
204
  retiredCertificates: new Set(),
144
- vault: { wire: vault, revision: vh.vaultRevision, hash: toHex(vh.hash) },
205
+ vault: vault && vh ? { wire: vault, revision: vh.vaultRevision, hash: toHex(vh.hash) } : undefined,
145
206
  retiredIdentity: false,
146
207
  previousIdentities: new Set(),
147
208
  resetReceipt: undefined
@@ -171,7 +232,7 @@ export class FakeHost {
171
232
  a.deviceIds.add(toHex(doc.deviceId));
172
233
  a.vault = { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) };
173
234
  host.certificates.set(a.certificateHash, input.newCertificate);
174
- host.stream(toHex(deriveStreamId(fromHex(a.identityId), doc.deviceId)), a.identityId, a.accountName);
235
+ host.stream(toHex(deriveStreamId(fromHex(a.identityId), doc.deviceId)), a.accountId, a.accountName);
175
236
  return { status: "COMMITTED" };
176
237
  },
177
238
  async getVault(name) {
@@ -203,7 +264,7 @@ export class FakeHost {
203
264
  if (!current())
204
265
  return { status: "UNAUTHORIZED" };
205
266
  const doc = expectType(verifyDocument(newSnapshot, a.accountKey), DocumentType.CircleSnapshot);
206
- if (toHex(doc.ownerIdentityId) !== a.identityId || !equalBytes(doc.circleId, circleId))
267
+ if (toHex(doc.ownerIdentityId) !== a.accountId || !equalBytes(doc.circleId, circleId))
207
268
  return { status: "UNAUTHORIZED" };
208
269
  const key = toHex(circleId);
209
270
  const existing = host.circles.get(key);
@@ -216,10 +277,10 @@ export class FakeHost {
216
277
  }
217
278
  else if (expectedRevision !== 0n || doc.revision !== 1n)
218
279
  return { status: "CONFLICT" };
219
- host.circles.set(key, { snapshot: newSnapshot, revision: doc.revision, hash: toHex(doc.bodyHash), ownerIdentityId: a.identityId, closed: false });
280
+ host.circles.set(key, { snapshot: newSnapshot, revision: doc.revision, hash: toHex(doc.bodyHash), ownerIdentityId: a.accountId, closed: false });
220
281
  // Requests for accounts now admitted are cleared.
221
282
  const members = new Set(doc.members.map(toHex));
222
- host.requests.set(key, (host.requests.get(key) ?? []).filter((r) => !members.has(host.accounts.get(r.accountName)?.identityId ?? "")));
283
+ host.requests.set(key, (host.requests.get(key) ?? []).filter((r) => !members.has(host.accounts.get(r.accountName)?.accountId ?? "")));
223
284
  return { status: "COMMITTED" };
224
285
  },
225
286
  async requestJoin(circleId) {
@@ -233,7 +294,7 @@ export class FakeHost {
233
294
  list.push({ circleId, accountName: a.accountName, action: "join", requestedAt: host.now() });
234
295
  host.requests.set(toHex(circleId), list);
235
296
  if (!hadLive) {
236
- const owner = host.accountByIdentity(c.ownerIdentityId);
297
+ const owner = host.accountByAnyId(c.ownerIdentityId);
237
298
  if (owner)
238
299
  host.notifications.push({ kind: "joinRequest", to: owner.accountName, from: a.accountName, circleId: toHex(circleId) });
239
300
  }
@@ -247,7 +308,7 @@ export class FakeHost {
247
308
  const list = host.requests.get(toHex(circleId)) ?? [];
248
309
  list.push({ circleId, accountName: a.accountName, action: "leave", requestedAt: host.now() });
249
310
  host.requests.set(toHex(circleId), list);
250
- const owner = host.accountByIdentity(c.ownerIdentityId);
311
+ const owner = host.accountByAnyId(c.ownerIdentityId);
251
312
  if (owner)
252
313
  host.notifications.push({ kind: "leaveRequest", to: owner.accountName, from: a.accountName, circleId: toHex(circleId) });
253
314
  return { status: "COMMITTED" };
@@ -255,7 +316,7 @@ export class FakeHost {
255
316
  async readRequests(circleId) {
256
317
  const a = caller();
257
318
  const c = host.circles.get(toHex(circleId));
258
- if (!c || c.ownerIdentityId !== a.identityId)
319
+ if (!c || c.ownerIdentityId !== a.accountId)
259
320
  return [];
260
321
  const cutoff = host.now() - 7n * 86400000n;
261
322
  return (host.requests.get(toHex(circleId)) ?? []).filter((r) => r.requestedAt > cutoff);
@@ -280,10 +341,16 @@ export class FakeHost {
280
341
  const receipt = buildResetReceipt({ accountName: input.accountName, oldIdentityId: input.expectedOldIdentityId, newIdentityId: newIid, resetId: input.resetId, issuedAt: host.now(), authorityKeyId: host.resetSigner.keyId }, host.resetSigner.key.secretKey);
281
342
  host.receipts.set(toHex(input.resetId), receipt);
282
343
  for (const c of host.circles.values())
283
- if (c.ownerIdentityId === a.identityId)
344
+ if (c.ownerIdentityId === a.accountId)
284
345
  c.closed = true;
285
- const vh = parseVaultHeader(input.newVault);
346
+ const vh = input.newVault ? parseVaultHeader(input.newVault) : undefined;
347
+ // The whole chain is retired; the reset starts a new account root with an empty chain.
286
348
  a.previousIdentities.add(a.identityId);
349
+ a.previousIdentities.add(a.accountId);
350
+ for (const l of a.successions)
351
+ a.previousIdentities.add(toHex(expectType(parseDocument(l.wire), DocumentType.AccountSuccession).previousIdentityId));
352
+ a.successions = [];
353
+ a.rootCertificate = undefined;
287
354
  a.resetReceipt = receipt;
288
355
  a.retiredCertificates.add(a.certificateHash);
289
356
  a.accountKey = doc.accountKey;
@@ -292,10 +359,110 @@ export class FakeHost {
292
359
  a.certificateHash = toHex(doc.bodyHash);
293
360
  a.generation = doc.generation;
294
361
  a.deviceIds.add(toHex(doc.deviceId));
295
- a.vault = { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) };
362
+ a.accountId = toHex(newIid);
363
+ a.vault = input.newVault && vh ? { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) } : undefined;
296
364
  host.certificates.set(a.certificateHash, input.newCertificate);
297
- host.stream(toHex(deriveStreamId(newIid, doc.deviceId)), a.identityId, a.accountName);
365
+ host.stream(toHex(deriveStreamId(newIid, doc.deviceId)), a.accountId, a.accountName);
298
366
  return { status: "COMMITTED", receipt };
367
+ },
368
+ async succeedAccount(input) {
369
+ // The succession id answers first: a device retrying after a lost response finds its
370
+ // proposal committed and its token spent, and must get the document, not UNAUTHORIZED.
371
+ const doc = expectType(verifyDocument(input.newCertificate), DocumentType.AccountDevice);
372
+ const certHash = toHex(doc.bodyHash);
373
+ const known = host.successionLog.get(toHex(input.successionId));
374
+ if (known)
375
+ return known.certificateHash === certHash && known.accountName === input.accountName ? { status: "ALREADY_COMMITTED", succession: known.wire } : { status: "UNAUTHORIZED" };
376
+ const a = host.accounts.get(input.accountName);
377
+ if (!a || doc.accountName !== a.accountName)
378
+ return { status: "UNAUTHORIZED" };
379
+ // The authorization: issued for this proposal, unspent, unexpired.
380
+ const auth = host.authorizations.get(toHex(input.authorization));
381
+ if (!auth || auth.used || auth.expiresAt < host.now() || auth.accountName !== a.accountName || auth.successionId !== toHex(input.successionId) || auth.expectedCertificateHash !== toHex(input.expectedCertificateHash) || auth.certificateHash !== certHash) {
382
+ return { status: "UNAUTHORIZED" };
383
+ }
384
+ if (a.certificateHash !== toHex(input.expectedCertificateHash))
385
+ return { status: "CONFLICT", current: a.certificate };
386
+ if (equalBytes(doc.accountKey, a.accountKey) || doc.generation !== a.generation + 1n || a.deviceIds.has(toHex(doc.deviceId)))
387
+ return { status: "UNAUTHORIZED" };
388
+ if (!host.resetSigner)
389
+ return { status: "PERMANENT_FAILURE" };
390
+ const newIid = identityId(doc.accountName, doc.accountKey);
391
+ const wire = buildSuccession({
392
+ accountName: a.accountName,
393
+ accountId: fromHex(a.accountId),
394
+ previousIdentityId: fromHex(a.identityId),
395
+ newIdentityId: newIid,
396
+ previousGeneration: a.generation,
397
+ newGeneration: doc.generation,
398
+ newCertificateHash: doc.bodyHash,
399
+ successionId: input.successionId,
400
+ issuedAt: host.now(),
401
+ authorityKeyId: host.resetSigner.keyId
402
+ }, host.resetSigner.key.secretKey);
403
+ auth.used = true;
404
+ host.successionLog.set(toHex(input.successionId), { accountName: a.accountName, certificateHash: certHash, wire });
405
+ if (a.successions.length === 0)
406
+ a.rootCertificate = a.certificate;
407
+ a.successions.push({ wire, certificate: input.newCertificate });
408
+ a.previousIdentities.add(a.identityId);
409
+ a.retiredCertificates.add(a.certificateHash);
410
+ a.accountKey = doc.accountKey;
411
+ a.identityId = toHex(newIid);
412
+ a.certificate = input.newCertificate;
413
+ a.certificateHash = certHash;
414
+ a.generation = doc.generation;
415
+ a.deviceIds.add(toHex(doc.deviceId));
416
+ if (input.newVault) {
417
+ const vh = parseVaultHeader(input.newVault);
418
+ a.vault = { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) };
419
+ }
420
+ host.certificates.set(certHash, input.newCertificate);
421
+ host.stream(toHex(deriveStreamId(newIid, doc.deviceId)), a.accountId, a.accountName);
422
+ return { status: "COMMITTED", succession: wire };
423
+ },
424
+ async getSuccessions(accountId, afterGeneration, limit) {
425
+ host.successionCalls.push({ accountId: toHex(accountId), afterGeneration, limit });
426
+ const a = host.accountByAnyId(toHex(accountId));
427
+ if (!a || a.accountId !== toHex(accountId))
428
+ return { successions: [] };
429
+ return host.successionPage(a, afterGeneration, limit);
430
+ },
431
+ async listCircles(cursor) {
432
+ const a = caller();
433
+ if (host.failCircleListAt !== undefined && ++host.circleListCalls === host.failCircleListAt) {
434
+ host.failCircleListAt = undefined;
435
+ throw new Error("transport down");
436
+ }
437
+ if (!current())
438
+ return { circles: [] };
439
+ const mine = [];
440
+ for (const [key, c] of [...host.circles].sort(([x], [y]) => (x < y ? -1 : x > y ? 1 : 0))) {
441
+ if (cursor !== undefined && key <= cursor)
442
+ continue;
443
+ const snap = expectType(parseDocument(c.snapshot), DocumentType.CircleSnapshot);
444
+ const pending = (host.requests.get(key) ?? []).some((r) => r.accountName === a.accountName && r.action === "join");
445
+ const role = c.ownerIdentityId === a.accountId ? "owner" : snap.members.some((m) => toHex(m) === a.accountId) ? "member" : pending ? "pending" : undefined;
446
+ if (!role)
447
+ continue;
448
+ const pref = host.preferences.get(`${a.accountId}:${key}`);
449
+ mine.push({ circleId: fromHex(key), ownerAccountId: fromHex(c.ownerIdentityId), role, snapshot: c.closed ? undefined : c.snapshot, enabled: pref?.enabled, preferenceRevision: pref?.revision ?? 0n });
450
+ }
451
+ const page = mine.slice(0, Math.max(1, host.circlePageSize));
452
+ const last = page.at(-1);
453
+ return mine.length > page.length && last ? { circles: page, cursor: toHex(last.circleId) } : { circles: page };
454
+ },
455
+ async setSharingPreference(circleId, enabled, expectedRevision) {
456
+ const a = caller();
457
+ if (!current())
458
+ return { status: "UNAUTHORIZED", revision: 0n };
459
+ const key = `${a.accountId}:${toHex(circleId)}`;
460
+ const cur = host.preferences.get(key) ?? { enabled: false, revision: 0n };
461
+ if (cur.revision !== expectedRevision)
462
+ return { status: "CONFLICT", revision: cur.revision, enabled: cur.enabled };
463
+ const next = { enabled, revision: cur.revision + 1n };
464
+ host.preferences.set(key, next);
465
+ return { status: "COMMITTED", revision: next.revision };
299
466
  }
300
467
  };
301
468
  const relay = {
@@ -312,12 +479,12 @@ export class FakeHost {
312
479
  const e = s?.epochs.get(epoch);
313
480
  if (!e)
314
481
  return undefined;
315
- return { manifest: e.manifest, wrap: e.wraps.get(caller().identityId) };
482
+ return { manifest: e.manifest, wrap: e.wraps.get(caller().accountId) };
316
483
  },
317
484
  async publishEpoch({ streamId, expectedEpoch, manifest, wraps }) {
318
485
  const a = caller();
319
486
  const s = host.streams.get(toHex(streamId));
320
- if (!s || s.authorIdentityId !== a.identityId)
487
+ if (!s || s.authorIdentityId !== a.accountId)
321
488
  return { status: "UNAUTHORIZED" };
322
489
  if (!current())
323
490
  return { status: "UNAUTHORIZED" };
@@ -333,7 +500,7 @@ export class FakeHost {
333
500
  s.currentEpoch = doc.epoch;
334
501
  s.currentManifestHash = toHex(doc.bodyHash);
335
502
  for (const r of rows) {
336
- if (r.identityId === a.identityId)
503
+ if (r.identityId === a.accountId)
337
504
  continue;
338
505
  if (!s.subscriptions.has(r.certificateHash))
339
506
  s.subscriptions.set(r.certificateHash, { identityId: r.identityId, cursor: s.tail, startSeq: s.tail });
@@ -349,7 +516,7 @@ export class FakeHost {
349
516
  const a = caller();
350
517
  const rec = expectType(parseDocument(wire), DocumentType.EncryptedRecord);
351
518
  const s = host.streams.get(toHex(rec.streamId));
352
- if (!s || s.authorIdentityId !== a.identityId)
519
+ if (!s || s.authorIdentityId !== a.accountId)
353
520
  return { status: "UNAUTHORIZED" };
354
521
  if (!current())
355
522
  return { status: "SUPERSEDED_DEVICE" };
@@ -375,15 +542,15 @@ export class FakeHost {
375
542
  const seq = ++s.tail;
376
543
  const acceptedAt = host.now() > s.lastAcceptedAt ? host.now() : s.lastAcceptedAt;
377
544
  s.lastAcceptedAt = acceptedAt;
378
- const required = new Set(epoch.rows.filter((r) => r.identityId !== a.identityId).map((r) => r.certificateHash));
545
+ const required = new Set(epoch.rows.filter((r) => r.identityId !== a.accountId).map((r) => r.certificateHash));
379
546
  s.records.set(seq, { recordId: id, wire, acceptedAt, epoch: rec.epoch, counter: rec.counter, kind: rec.headerClass, required });
380
547
  s.highWater = { epoch: rec.epoch, counter: rec.counter };
381
548
  const outcome = { status: "ACCEPTED", deliverySeq: seq };
382
549
  s.lastAppend = { recordId: id, hash, seq, at: acceptedAt, outcome };
383
550
  for (const r of epoch.rows) {
384
- if (r.identityId === a.identityId)
551
+ if (r.identityId === a.accountId)
385
552
  continue;
386
- const to = host.accountByIdentity(r.identityId)?.accountName ?? r.identityId;
553
+ const to = host.accountByAnyId(r.identityId)?.accountName ?? r.identityId;
387
554
  // By header class, as the test profile declares them: 1 is a visible notification, 2 is
388
555
  // silent and needs no wake-up, anything else is a wake-up. The host never sees the kind.
389
556
  if (rec.headerClass !== 2)
@@ -407,6 +574,9 @@ export class FakeHost {
407
574
  },
408
575
  async readRecords(streamId, afterSeq, limit) {
409
576
  const s = host.streams.get(toHex(streamId));
577
+ // The fence: a retired device reads nothing more (amendment A1, host rules).
578
+ if (!host.isCurrentDevice(accountName, callerCert))
579
+ throw new Error("SUPERSEDED_DEVICE");
410
580
  if (!s)
411
581
  return { records: [], nextSeq: afterSeq, tail: 0n, expiredThrough: 0n, committedCursor: 0n };
412
582
  if (afterSeq > s.tail)
@@ -1 +1 @@
1
- {"version":3,"file":"fakeHost.js","sourceRoot":"","sources":["../../src/testing/fakeHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fakeHost.js","sourceRoot":"","sources":["../../src/testing/fakeHost.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EAOf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,IAAI,cAAc,EAAuB,MAAM,cAAc,CAAC;AAqElH,MAAM,OAAO,QAAQ;IACnB,GAAG,GAAiB,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7B,gBAAgB,GAAG,SAAW,CAAC;IAC/B,mBAAmB,GAAG,UAAY,CAAC;IAC1B,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,OAAO,GAAG,IAAI,GAAG,EAA8G,CAAC;IAChI,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzC,aAAa,GAAmB,EAAE,CAAC;IACnC,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAClD,sHAAsH;IAC7G,aAAa,GAAG,IAAI,GAAG,EAA8E,CAAC;IAC/G,iHAAiH;IACxG,cAAc,GAAG,IAAI,GAAG,EAAqJ,CAAC;IACvL,2FAA2F;IAClF,WAAW,GAAG,IAAI,GAAG,EAAkD,CAAC;IACjF,kBAAkB,GAAG,OAAQ,CAAC;IAC9B,kBAAkB,GAAG,CAAC,CAAC;IACvB,cAAc,GAAG,EAAE,CAAC;IACpB,+GAA+G;IAC/G,QAAQ,GAAG,IAAI,CAAC;IAChB,8FAA8F;IAC9F,gBAAgB,CAAqB;IACrC,eAAe,GAAG,CAAC,CAAC;IACpB,oFAAoF;IAC3E,eAAe,GAAoE,EAAE,CAAC;IAC/F,YAAY,CAAyB;IACrC,WAAW,CAAyD;IACpE,qBAAqB;IACrB,WAAW,GAAG,KAAK,CAAC;IACpB,mBAAmB,GAAG,KAAK,CAAC;IAC5B,iBAAiB,GAAG,KAAK,CAAC;IAC1B,cAAc,GAAG,KAAK,CAAC;IACvB,WAAW,GAAG,CAAC,CAAC;IAChB,oGAAoG;IAC3F,SAAS,GAA4H,EAAE,CAAC;IAEjJ,kGAAkG;IAElG,iBAAiB,CAAC,GAAW;QAC3B,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;IACvE,CAAC;IAED,sGAAsG;IACtG,cAAc,CAAC,EAAU;QACvB,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,KAAsH;QACzI,MAAM,GAAG,GAAG,UAAU,CAAgB,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QACrG,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,uBAAuB,EAAE,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtR,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,UAAU,CAAC,CAAU;QAC3B,MAAM,CAAC,GAAoB,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAChH,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjE,OAAO;YACL,GAAG,CAAC;YACJ,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,CAAU,EAAE,eAAuB,EAAE,KAAa;QACvE,MAAM,GAAG,GAAG,CAAC,CAAiB,EAAU,EAAE,CAAC,UAAU,CAAgB,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC;QAC1I,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,eAAe,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtH,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IACxI,CAAC;IAED,wHAAwH;IAChH,MAAM,CAAC,CAAiB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,UAAU,CAAoB,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACjG,IAAI,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;QAClT,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACxJ,CAAC;IAED,iHAAiH;IACzG,eAAe,CAAC,WAAmB,EAAE,eAAuB;QAClE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,eAAe,KAAK,eAAe,CAAC;IAC7E,CAAC;IAEO,MAAM,CAAC,SAAiB,EAAE,gBAAwB,EAAE,WAAmB;QAC7E,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG;gBACF,gBAAgB;gBAChB,WAAW;gBACX,YAAY,EAAE,CAAC;gBACf,mBAAmB,EAAE,SAAS;gBAC9B,MAAM,EAAE,IAAI,GAAG,EAAE;gBACjB,OAAO,EAAE,IAAI,GAAG,EAAE;gBAClB,IAAI,EAAE,EAAE;gBACR,cAAc,EAAE,EAAE;gBAClB,cAAc,EAAE,EAAE;gBAClB,SAAS,EAAE,SAAS;gBACpB,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,IAAI,GAAG,EAAE;aACzB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,6EAA6E;IAC7E,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,IAAI,GAAG;oBAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9G,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,CAAC,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,CAAc;QAChC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAEO,OAAO,CAAC,CAAc,EAAE,IAAY;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,IAAI,GAAG,GAAG,IAAI;gBAAE,SAAS;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBAC7B,IAAI,GAAG,KAAK,CAAC;oBACb,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,IAAI;gBAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,QAAoB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,mGAAmG;IAEnG,QAAQ,CAAC,WAAmB,EAAE,eAA2B;QACvD,wGAAwG;QACxG,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,GAAY,EAAE;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAY,EAAE,CAAC,MAAM,EAAE,CAAC,eAAe,KAAK,UAAU,CAAC;QAEvE,MAAM,SAAS,GAAc;YAC3B,KAAK,CAAC,eAAe,CAAC,KAAK;gBACzB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,CAAC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,iBAAiB,CAAC,WAAW;gBACjC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBACjC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,CAAC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,IAAI;gBACvB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,KAAK,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE;gBAC1C,MAAM,GAAG,GAAG,UAAU,CAAgB,cAAc,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACjD,IAAI,KAAK;oBAAE,OAAO,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBACxH,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvD,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC/D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE;oBACjC,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,UAAU,EAAE,GAAG;oBACf,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,EAAE;oBACf,eAAe,EAAE,SAAS;oBAC1B,WAAW;oBACX,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACpC,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACzC,mBAAmB,EAAE,IAAI,GAAG,EAAE;oBAC9B,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;oBAClG,eAAe,EAAE,KAAK;oBACtB,kBAAkB,EAAE,IAAI,GAAG,EAAE;oBAC7B,YAAY,EAAE,SAAS;iBACxB,CAAC,CAAC;gBACH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;gBACrF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,KAAK;gBACxB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;gBAC1C,MAAM,GAAG,GAAG,UAAU,CAAgB,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBACxG,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,eAAe;oBAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;gBACtF,IAAI,CAAC,CAAC,eAAe,KAAK,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtH,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;gBAC/M,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;gBACjK,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5C,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;gBAC7C,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC;gBACrC,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC9B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrC,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;gBACpG,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,IAAI;gBACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;YAC9C,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE;gBAC7D,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;gBAClD,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,gBAAgB,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjH,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;wBAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;oBAC5E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC1F,CAAC;gBACD,IAAI,EAAE,CAAC,aAAa,KAAK,gBAAgB,GAAG,EAAE;oBAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;gBAC1I,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,SAAS,CAAC,QAAQ;gBACtB,IAAI,IAAI,CAAC,iBAAiB;oBAAE,OAAO,SAAS,CAAC;gBAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACjD,CAAC;YACD,KAAK,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE;gBAChF,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;gBAClD,MAAM,GAAG,GAAG,UAAU,CAAiB,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;gBAC/G,IAAI,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;gBACzH,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;oBAClF,IAAI,QAAQ,CAAC,QAAQ,KAAK,gBAAgB,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC;wBACjJ,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBAChG,CAAC;gBACH,CAAC;qBAAM,IAAI,gBAAgB,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;oBAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBACzF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjJ,kDAAkD;gBAClD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtI,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,QAAQ;gBACxB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;gBAC/C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;gBACjI,6FAA6F;gBAC7F,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAW,CAAC,CAAC;gBAChL,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC7F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;oBACrD,IAAI,KAAK;wBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACrI,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,QAAQ;gBACzB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC9F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;gBACrD,IAAI,KAAK;oBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACpI,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,QAAQ;gBACzB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,SAAS;oBAAE,OAAO,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAW,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;YAC1F,CAAC;YACD,KAAK,CAAC,eAAe;gBACnB,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,CAAC;YACD,KAAK,CAAC,eAAe,CAAC,OAAO;gBAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,KAAK;gBACtB,yFAAyF;gBACzF,gFAAgF;gBAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzD,IAAI,QAAQ;oBAAE,OAAO,EAAE,MAAM,EAAE,mBAA4B,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACjF,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBAC/H,MAAM,GAAG,GAAG,UAAU,CAAgB,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBACxG,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC3D,MAAM,OAAO,GAAG,iBAAiB,CAC/B,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAC3L,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAC/B,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;gBACjD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;oBAAE,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,SAAS;wBAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC9F,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACzE,uFAAuF;gBACvF,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACtC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW;oBAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAoB,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACxK,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC;gBAC9B,CAAC,CAAC,YAAY,GAAG,OAAO,CAAC;gBACzB,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;gBAC7C,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC9B,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC;gBACrC,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC9B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;gBACrF,OAAO,EAAE,MAAM,EAAE,WAAoB,EAAE,OAAO,EAAE,CAAC;YACnD,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,KAAK;gBACxB,qFAAqF;gBACrF,uFAAuF;gBACvF,MAAM,GAAG,GAAG,UAAU,CAAgB,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBACxG,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;gBAChE,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,mBAA4B,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBACzM,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBACxF,mEAAmE;gBACnE,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,uBAAuB,KAAK,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;oBAC7P,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBAC7C,CAAC;gBACD,IAAI,CAAC,CAAC,eAAe,KAAK,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,UAAmB,EAAE,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC/H,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBACzK,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,OAAO,EAAE,MAAM,EAAE,mBAA4B,EAAE,CAAC;gBACvE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,eAAe,CAC1B;oBACE,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC/B,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;oBACzC,aAAa,EAAE,MAAM;oBACrB,kBAAkB,EAAE,CAAC,CAAC,UAAU;oBAChC,aAAa,EAAE,GAAG,CAAC,UAAU;oBAC7B,kBAAkB,EAAE,GAAG,CAAC,QAAQ;oBAChC,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;oBACpB,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;iBACvC,EACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAC/B,CAAC;gBACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnH,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;oBAAE,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC;gBAClE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;gBAChE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;gBAC7C,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC9B,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC;gBACrC,CAAC,CAAC,eAAe,GAAG,QAAQ,CAAC;gBAC7B,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC9B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC5C,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvF,CAAC;gBACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;gBACrF,OAAO,EAAE,MAAM,EAAE,WAAoB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YAC5D,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK;gBACpD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnF,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC;oBAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBACvE,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,MAAM;gBACtB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC5F,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAoB,EAAE,CAAC;gBACjC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1F,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG,IAAI,MAAM;wBAAE,SAAS;oBACpD,MAAM,IAAI,GAAG,UAAU,CAAiB,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;oBAChG,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;oBACnH,MAAM,IAAI,GAAG,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC3J,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;oBAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzM,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjH,CAAC;YACD,KAAK,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB;gBAC5D,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;gBACzE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAC1E,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB;oBAAE,OAAO,EAAE,MAAM,EAAE,UAAmB,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC5H,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC;gBACtD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,WAAoB,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnE,CAAC;SACF,CAAC;QAEF,MAAM,KAAK,GAAU;YACnB,KAAK,CAAC,eAAe,CAAC,QAAQ;gBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB;oBAAE,OAAO,SAAS,CAAC;gBAC3E,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACjF,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK;gBAC5B,IAAI,IAAI,CAAC,cAAc;oBAAE,OAAO,SAAS,CAAC;gBAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC;oBAAE,OAAO,SAAS,CAAC;gBACzB,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACzE,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAC7D,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,SAAS;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBACzF,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBAC3D,MAAM,GAAG,GAAG,UAAU,CAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC3F,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBACzC,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,YAAY,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,mBAA4B,EAAE,CAAC;gBAC/H,IAAI,aAAa,KAAK,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBACzE,OAAO,EAAE,MAAM,EAAE,UAAmB,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;gBACvG,CAAC;gBACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvH,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnE,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC3B,CAAC,CAAC,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,SAAS;wBAAE,SAAS;oBAC3C,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;wBAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtJ,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACpB,OAAO,EAAE,MAAM,EAAE,WAAoB,EAAE,CAAC;YAC1C,CAAC;YACD,YAAY,CAAC,QAAQ,EAAE,IAAI;gBACzB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,IAAI,CAAC,WAAW;oBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACxD,MAAM,GAAG,GAAG,GAAkB,EAAE;oBAC9B,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;oBACnB,MAAM,GAAG,GAAG,UAAU,CAAkB,aAAa,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;oBAC3F,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAChD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,SAAS;wBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;oBAChF,IAAI,CAAC,OAAO,EAAE;wBAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;oBACvD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kCAAkC;oBACtE,0CAA0C;oBAC1C,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;wBACjD,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI;4BAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;wBAClE,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE;4BAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;oBACpI,CAAC;oBACD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;oBACxE,IAAI,QAAQ;wBAAE,OAAO,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;oBAC3H,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;wBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;oBACjK,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,YAAY;wBAAE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;oBAC9H,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,CAAC,KAAK;wBAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;oBAC9C,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC;oBACrB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjF,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC;oBAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;oBAC/G,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAChI,CAAC,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;oBACzD,MAAM,OAAO,GAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;oBACxE,CAAC,CAAC,UAAU,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;oBACpE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBAC3B,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,SAAS;4BAAE,SAAS;wBAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC;wBAC1E,wFAAwF;wBACxF,yFAAyF;wBACzF,IAAI,GAAG,CAAC,WAAW,KAAK,CAAC;4BAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBACpI,CAAC;oBACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;wBAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC/C,OAAO,OAAO,CAAC;gBACjB,CAAC,CAAC;gBACF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,UAAU,CAAkB,aAAa,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;oBAC3F,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChL,CAAC;gBAAC,MAAM,CAAC;oBACP,wCAAwC;gBAC1C,CAAC;gBACD,IAAI,IAAI,CAAC,mBAAmB;oBAAE,OAAO,IAAI,OAAO,CAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACnH,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK;gBACzC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,6EAA6E;gBAC7E,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACzF,IAAI,CAAC,CAAC;oBAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;gBACrG,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAC9D,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;gBACvH,IAAI,IAAI,GAAG,QAAQ,CAAC;gBACpB,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI;oBAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;gBACzC,IAAI,CAAC,CAAC,cAAc,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC;gBACrD,MAAM,OAAO,GAAgD,EAAE,CAAC;gBAChE,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;oBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBACpC,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;4BAAE,MAAM;wBACnC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACnD,CAAC;oBACD,IAAI,GAAG,GAAG,CAAC;gBACb,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;YACjH,CAAC;YACD,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM;gBAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC7C,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,MAAM,EAAE,cAAuB,EAAE,CAAC;gBAC3D,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI;oBAAE,OAAO,EAAE,MAAM,EAAE,qBAA8B,EAAE,CAAC;gBACvE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;oBACxB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,WAAoB,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;YACvE,CAAC;YACD,KAAK,CAAC,iBAAiB;gBACrB,MAAM,GAAG,GAA6D,EAAE,CAAC;gBACzE,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC9J,OAAO,GAAG,CAAC;YACb,CAAC;SACF,CAAC;QAEF,OAAO;YACL,SAAS;YACT,KAAK;SACN,CAAC;IACJ,CAAC;CACF"}