@harny/sdk 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/cjs/agent/adapters.d.ts +167 -0
  2. package/dist/cjs/agent/adapters.js +557 -0
  3. package/dist/cjs/agent/adapters.js.map +1 -0
  4. package/dist/cjs/agent/hooks.d.ts +52 -0
  5. package/dist/cjs/agent/hooks.js +41 -0
  6. package/dist/cjs/agent/hooks.js.map +1 -0
  7. package/dist/cjs/agent/index.d.ts +34 -0
  8. package/dist/cjs/agent/index.js +62 -0
  9. package/dist/cjs/agent/index.js.map +1 -0
  10. package/dist/cjs/agent/loop.d.ts +401 -0
  11. package/dist/cjs/agent/loop.js +1252 -0
  12. package/dist/cjs/agent/loop.js.map +1 -0
  13. package/dist/cjs/agent/roster.d.ts +62 -0
  14. package/dist/cjs/agent/roster.js +149 -0
  15. package/dist/cjs/agent/roster.js.map +1 -0
  16. package/dist/cjs/agent/session.d.ts +106 -0
  17. package/dist/cjs/agent/session.js +261 -0
  18. package/dist/cjs/agent/session.js.map +1 -0
  19. package/dist/cjs/agent/spend.d.ts +39 -0
  20. package/dist/cjs/agent/spend.js +70 -0
  21. package/dist/cjs/agent/spend.js.map +1 -0
  22. package/dist/cjs/agent/tools.d.ts +83 -0
  23. package/dist/cjs/agent/tools.js +212 -0
  24. package/dist/cjs/agent/tools.js.map +1 -0
  25. package/dist/cjs/agent/tracing.d.ts +72 -0
  26. package/dist/cjs/agent/tracing.js +128 -0
  27. package/dist/cjs/agent/tracing.js.map +1 -0
  28. package/dist/cjs/agent/util.d.ts +60 -0
  29. package/dist/cjs/agent/util.js +188 -0
  30. package/dist/cjs/agent/util.js.map +1 -0
  31. package/dist/cjs/conflictQuestion.d.ts +137 -0
  32. package/dist/cjs/conflictQuestion.js +356 -0
  33. package/dist/cjs/conflictQuestion.js.map +1 -0
  34. package/dist/cjs/index.d.ts +950 -0
  35. package/dist/cjs/index.js +1124 -0
  36. package/dist/cjs/index.js.map +1 -0
  37. package/dist/cjs/memoryV1.d.ts +121 -0
  38. package/dist/cjs/memoryV1.js +132 -0
  39. package/dist/cjs/memoryV1.js.map +1 -0
  40. package/dist/cjs/package.json +1 -0
  41. package/dist/esm/agent/adapters.d.ts +167 -0
  42. package/dist/esm/agent/adapters.js +543 -0
  43. package/dist/esm/agent/adapters.js.map +1 -0
  44. package/dist/esm/agent/hooks.d.ts +52 -0
  45. package/dist/esm/agent/hooks.js +36 -0
  46. package/dist/esm/agent/hooks.js.map +1 -0
  47. package/dist/esm/agent/index.d.ts +34 -0
  48. package/dist/esm/agent/index.js +28 -0
  49. package/dist/esm/agent/index.js.map +1 -0
  50. package/dist/esm/agent/loop.d.ts +401 -0
  51. package/dist/esm/agent/loop.js +1243 -0
  52. package/dist/esm/agent/loop.js.map +1 -0
  53. package/dist/esm/agent/roster.d.ts +62 -0
  54. package/dist/esm/agent/roster.js +143 -0
  55. package/dist/esm/agent/roster.js.map +1 -0
  56. package/dist/esm/agent/session.d.ts +106 -0
  57. package/dist/esm/agent/session.js +221 -0
  58. package/dist/esm/agent/session.js.map +1 -0
  59. package/dist/esm/agent/spend.d.ts +39 -0
  60. package/dist/esm/agent/spend.js +65 -0
  61. package/dist/esm/agent/spend.js.map +1 -0
  62. package/dist/esm/agent/tools.d.ts +83 -0
  63. package/dist/esm/agent/tools.js +205 -0
  64. package/dist/esm/agent/tools.js.map +1 -0
  65. package/dist/esm/agent/tracing.d.ts +72 -0
  66. package/dist/esm/agent/tracing.js +119 -0
  67. package/dist/esm/agent/tracing.js.map +1 -0
  68. package/dist/esm/agent/util.d.ts +60 -0
  69. package/dist/esm/agent/util.js +168 -0
  70. package/dist/esm/agent/util.js.map +1 -0
  71. package/dist/esm/conflictQuestion.d.ts +137 -0
  72. package/dist/esm/conflictQuestion.js +346 -0
  73. package/dist/esm/conflictQuestion.js.map +1 -0
  74. package/dist/esm/index.d.ts +950 -0
  75. package/dist/esm/index.js +1072 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/memoryV1.d.ts +121 -0
  78. package/dist/esm/memoryV1.js +124 -0
  79. package/dist/esm/memoryV1.js.map +1 -0
  80. package/dist/esm/package.json +1 -0
  81. package/package.json +3 -4
@@ -0,0 +1,346 @@
1
+ /**
2
+ * What to ask a person whose notes conflict, and the rule for when. Pure: no network, no model call, no clock.
3
+ *
4
+ * A person can say two things that cannot both be true ("Maya prefers email", weeks later "Maya prefers phone").
5
+ * Harny keeps both and picks neither; the context response returns them in
6
+ * `conflicts`. Harny adds no pause of its own. The question is YOUR confirm step's: call
7
+ * `decideConflictQuestion` before an action, show `text` if it says `ask`, tell Harny you asked
8
+ * (`client.markConflictAsked`), and send the person's answer (`client.answerConflict`). The answer is saved as
9
+ * something the person said, and the conflict stops being returned.
10
+ *
11
+ * const result = await client.assembleContext("send Maya the update", undefined, { user });
12
+ * const decision = decideConflictQuestion({
13
+ * conflicts: result.conflicts,
14
+ * dependsOn: conflictsTheSendDependsOn.map((c) => c.record_id_1), // the ones whose answer changes what is sent
15
+ * actionKinds: ["others_affected"], // the kinds of action this is
16
+ * mode: result.conflict_question_mode, // the app's "When notes conflict" setting
17
+ * phrases: new QuestionPhrases({ action: "send", question: "Does Maya prefer email or phone?" }),
18
+ * });
19
+ * if (decision.ask) {
20
+ * const claim = await client.markConflictAsked(decision, { user }); // claim the question FIRST
21
+ * if (claim.first_time) show(decision.text); // only the first claim shows it
22
+ * // (in your own confirm card or chat)
23
+ * }
24
+ *
25
+ * Report before you show, and show only when `first_time` is true: the first report wins, so a second action in the same
26
+ * turn, a retry or a second process cannot put the question twice. (A decision by itself changes nothing: `ledger` and
27
+ * `record` only help a host that keeps its own memory.)
28
+ *
29
+ * THE RULE (all six must hold, checked in this order; the first that fails names itself in `reason`):
30
+ *
31
+ * 1. the action is of the "others affected" or "irreversible" kind (`ASKING_KINDS`): an action that only touches
32
+ * the person's own things never asks;
33
+ * 2. a conflict exists for a note the action depends on. `dependsOn` lists the `record_id_1` / `record_id_2` of each
34
+ * conflict whose answer changes what the action does; you (or your agent) decide that from the two statements;
35
+ * 3. the question is on (`mode` is not null or undefined). The response names the app's mode only while Harny has
36
+ * the question on, so no mode with a conflict in hand means do not ask;
37
+ * 4. the person did not say both in one conversation (`same_conversation` is false): they have just said it, so
38
+ * they are never asked about it there;
39
+ * 5. that conflict has not been asked about before: at most once per conflict. It counts as asked when the
40
+ * response marked it `asked` or your `ledger` has it;
41
+ * 6. the wording the question needs was supplied FOR THAT CONFLICT (a lone `QuestionPhrases` is accepted only while
42
+ * one conflict can be asked; with several, pass a function of the conflict or a map by `conflictKey`).
43
+ *
44
+ * THE WORDS depend on the app's "When notes conflict" setting: `simple` (the default, no dates), `precise` (both
45
+ * statements with the day each was said) and `handoff` (a short question that offers the detail, which your own
46
+ * interface shows from the `conflicts` data). The sentences carry natural-language phrases ("Maya prefers email") that the stored statements do not, so YOU supply them in `QuestionPhrases`; this module never writes
47
+ * wording of its own: a missing phrase is a `missing_phrases` refusal, not a guess.
48
+ */
49
+ /** The closed set the app's "When notes conflict" setting takes. */
50
+ export const CONFLICT_QUESTION_MODES = ["simple", "precise", "handoff"];
51
+ export const DEFAULT_CONFLICT_QUESTION_MODE = "simple";
52
+ /** The action kinds that may ask. `money` and `nobody_else` do not. */
53
+ export const ASKING_KINDS = new Set(["others_affected", "irreversible"]);
54
+ // the three question sentences a person sees (in your confirm card or chat), and the month names they print.
55
+ const SIMPLE = "Before I {action} this: my notes conflict. {question}";
56
+ const PRECISE = "Before I {action} this: my notes conflict. On {day_1} you said {claim_1}, and on {day_2} that {claim_2}. Which is right?";
57
+ const HANDOFF = "Before I {action} this: my notes conflict about {topic}. Want to see both?";
58
+ const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];
59
+ const PHRASE_NAMES = ["action", "question", "claim_1", "claim_2", "topic"];
60
+ /**
61
+ * The natural-language pieces YOU write about THIS conflict.
62
+ *
63
+ * `action`: the verb of what is about to happen ("send", "reply", "share"); all three modes. `question`: a complete
64
+ * yes/no question about the fact, for `simple` ("Does Maya prefer email or phone?"). `claim_1` /
65
+ * `claim_2`: the two statements as they read after "you said" and "that", for `precise` ("Maya prefers email", "she prefers phone"). `topic`: what the notes conflict about, for `handoff` ("Maya's contact preference").
66
+ */
67
+ export class QuestionPhrases {
68
+ constructor(init = {}) {
69
+ this.action = init.action ?? "";
70
+ this.question = init.question ?? "";
71
+ this.claim_1 = init.claim_1 ?? "";
72
+ this.claim_2 = init.claim_2 ?? "";
73
+ this.topic = init.topic ?? "";
74
+ }
75
+ }
76
+ /** A ledger held in memory: for tests and for a first draft. */
77
+ export class InMemoryConflictAskLedger {
78
+ constructor(asked = []) {
79
+ this.asked = new Set(asked);
80
+ }
81
+ has(key) {
82
+ return this.asked.has(key);
83
+ }
84
+ add(key) {
85
+ this.asked.add(key);
86
+ }
87
+ get size() {
88
+ return this.asked.size;
89
+ }
90
+ }
91
+ /** One of `CONFLICT_QUESTION_MODES`; anything else is the default (the plain, no-dates question). */
92
+ export function normaliseMode(value) {
93
+ const text = pyStr(value).trim().toLowerCase();
94
+ return CONFLICT_QUESTION_MODES.includes(text)
95
+ ? text
96
+ : DEFAULT_CONFLICT_QUESTION_MODE;
97
+ }
98
+ /** `2024-09-22` -> `Sept 22`. An empty string when the value is not an ISO day. */
99
+ export function formatDay(isoDay) {
100
+ const s = pyStr(isoDay).trim();
101
+ if (s.length < 10 || s[4] !== "-" || s[7] !== "-")
102
+ return "";
103
+ const digits = (part) => (/^[0-9]+$/.test(part) ? Number(part) : null);
104
+ const year = digits(s.slice(0, 4));
105
+ const month = digits(s.slice(5, 7));
106
+ const day = digits(s.slice(8, 10));
107
+ if (year === null || month === null || day === null)
108
+ return "";
109
+ if (year < 1 || month < 1 || month > 12 || day < 1)
110
+ return "";
111
+ // A real calendar day: 2024-02-31 is not one.
112
+ const daysInMonth = [31, isLeap(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1];
113
+ if (day > daysInMonth)
114
+ return "";
115
+ return `${MONTHS[month - 1]} ${day}`;
116
+ }
117
+ function isLeap(year) {
118
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
119
+ }
120
+ /** The question for `mode`. Throws on a missing phrase or an unreadable said-day (`precise` only). */
121
+ export function questionText(mode, conflict, phrases) {
122
+ const m = normaliseMode(mode);
123
+ const missing = missingPhrases(m, phrases);
124
+ if (missing.length > 0)
125
+ throw new Error("missing phrases: " + missing.join(", "));
126
+ const action = phrases.action.trim();
127
+ if (m === "simple")
128
+ return fill(SIMPLE, { action, question: phrases.question.trim() });
129
+ if (m === "handoff")
130
+ return fill(HANDOFF, { action, topic: phrases.topic.trim() });
131
+ const day1 = formatDay(conflict["said_1"]);
132
+ const day2 = formatDay(conflict["said_2"]);
133
+ if (!day1 || !day2)
134
+ throw new Error("unreadable said day");
135
+ return fill(PRECISE, {
136
+ action,
137
+ day_1: day1,
138
+ claim_1: phrases.claim_1.trim(),
139
+ day_2: day2,
140
+ claim_2: phrases.claim_2.trim(),
141
+ });
142
+ }
143
+ /** One pass over the template: a value that itself looks like a placeholder is never filled in again. */
144
+ function fill(template, values) {
145
+ return template.replace(/\{(\w+)\}/g, (whole, name) => values[name] ?? whole);
146
+ }
147
+ /**
148
+ * The identity of one conflict: the two stored notes behind it, in either order. The same value Harny puts in
149
+ * `conflicts[].conflict_key`, stable across responses, so "asked once" holds however the list is ordered.
150
+ */
151
+ export function conflictKey(conflict) {
152
+ const pair = [pyStr(conflict["record_id_1"]), pyStr(conflict["record_id_2"])].sort(compareCodePoints);
153
+ return sha256Hex(new TextEncoder().encode(pair.join("\u001f"))).slice(0, 16);
154
+ }
155
+ /** Whether to ask now, and what to say. See the module comment for the rule. */
156
+ export function decideConflictQuestion(options) {
157
+ const ledger = options.ledger ?? new InMemoryConflictAskLedger();
158
+ const refuse = (reason, conflict, key) => ({
159
+ ask: false,
160
+ reason,
161
+ text: null,
162
+ key: key ?? null,
163
+ conflict: conflict ?? null,
164
+ });
165
+ const kinds = asSet(options.actionKinds);
166
+ if (![...kinds].some((k) => ASKING_KINDS.has(k)))
167
+ return refuse("kind_not_eligible");
168
+ const relied = asSet(options.dependsOn);
169
+ const relevant = (options.conflicts ?? [])
170
+ .map((c) => ({ ...c }))
171
+ .filter((c) => relied.has(pyStr(c["record_id_1"])) || relied.has(pyStr(c["record_id_2"])));
172
+ if (relevant.length === 0)
173
+ return refuse("no_conflict");
174
+ relevant.sort((a, b) => {
175
+ const byDay = compareCodePoints(pyStr(a["said_2"]), pyStr(b["said_2"]));
176
+ return byDay !== 0 ? byDay : compareCodePoints(conflictKey(a), conflictKey(b));
177
+ });
178
+ if (options.mode === null || options.mode === undefined) {
179
+ const c = relevant[0];
180
+ return refuse("rule_dark", c, conflictKey(c));
181
+ }
182
+ const askable = relevant.filter((c) => !isTruthy(c["same_conversation"]));
183
+ if (askable.length === 0) {
184
+ const c = relevant[0];
185
+ return refuse("same_conversation", c, conflictKey(c));
186
+ }
187
+ const fresh = askable.filter((c) => !(c["asked"] === true || ledger.has(conflictKey(c))));
188
+ if (fresh.length === 0) {
189
+ const c = askable[0];
190
+ return refuse("already_asked", c, conflictKey(c));
191
+ }
192
+ const chosen = fresh[0];
193
+ const key = conflictKey(chosen);
194
+ if (isLonePhrases(options.phrases) && fresh.length > 1) {
195
+ // One set of words, several conflicts that could be asked: the function would pick one and the words
196
+ // (and the days) would not be about the same conflict. Refuse; nothing is recorded.
197
+ return refuse("ambiguous_phrases", chosen, key);
198
+ }
199
+ let text;
200
+ try {
201
+ text = questionText(options.mode, chosen, phrasesFor(options.phrases, chosen, key));
202
+ }
203
+ catch {
204
+ return refuse("missing_phrases", chosen, key);
205
+ }
206
+ if (options.record)
207
+ ledger.add(key);
208
+ return { ask: true, reason: "asked", text, key, conflict: chosen };
209
+ }
210
+ // ---------------------------------------------------------------------------------------------------------------
211
+ // internals
212
+ // ---------------------------------------------------------------------------------------------------------------
213
+ /** What the Python helper's `str(x or "")` gives: empty for null, undefined and other falsy values. */
214
+ function pyStr(value) {
215
+ if (value === null || value === undefined || value === false || value === 0 || value === "")
216
+ return "";
217
+ return String(value);
218
+ }
219
+ function isTruthy(value) {
220
+ if (Array.isArray(value))
221
+ return value.length > 0;
222
+ return Boolean(value);
223
+ }
224
+ /** A set of non-empty strings from an iterable or ONE bare string (a lone string is one item, not its letters). */
225
+ function asSet(value) {
226
+ if (value === null || value === undefined)
227
+ return new Set();
228
+ if (typeof value === "string")
229
+ return value ? new Set([value]) : new Set();
230
+ return new Set([...value].map((v) => String(v)).filter((v) => v !== ""));
231
+ }
232
+ /** Code-point order, the order Python sorts strings in (UTF-16 order differs for characters beyond the BMP). */
233
+ function compareCodePoints(a, b) {
234
+ const x = Array.from(a);
235
+ const y = Array.from(b);
236
+ const n = Math.min(x.length, y.length);
237
+ for (let i = 0; i < n; i++) {
238
+ const d = x[i].codePointAt(0) - y[i].codePointAt(0);
239
+ if (d !== 0)
240
+ return d;
241
+ }
242
+ return x.length - y.length;
243
+ }
244
+ function missingPhrases(mode, phrases) {
245
+ const need = {
246
+ simple: ["action", "question"],
247
+ precise: ["action", "claim_1", "claim_2"],
248
+ handoff: ["action", "topic"],
249
+ };
250
+ return need[mode].filter((name) => pyStr(phrases[name]).trim() === "");
251
+ }
252
+ function isLonePhrases(source) {
253
+ if (source instanceof QuestionPhrases)
254
+ return true;
255
+ if (typeof source === "function" || source instanceof Map)
256
+ return false;
257
+ return typeof source === "object" && source !== null && PHRASE_NAMES.some((name) => name in source);
258
+ }
259
+ function phrasesFor(source, conflict, key) {
260
+ let found;
261
+ if (source instanceof QuestionPhrases) {
262
+ found = source;
263
+ }
264
+ else if (typeof source === "function") {
265
+ found = source(conflict);
266
+ }
267
+ else if (source instanceof Map) {
268
+ found = source.get(key);
269
+ }
270
+ else if (isLonePhrases(source)) {
271
+ found = new QuestionPhrases(source);
272
+ }
273
+ else {
274
+ found = source[key];
275
+ }
276
+ if (!(found instanceof QuestionPhrases)) {
277
+ if (found && typeof found === "object")
278
+ return new QuestionPhrases(found);
279
+ throw new Error("no phrases for this conflict");
280
+ }
281
+ return found;
282
+ }
283
+ // SHA-256 (FIPS 180-4), synchronous and dependency-free: the SDK also runs where `crypto.subtle` is async-only.
284
+ const K = new Uint32Array([
285
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
286
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
287
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
288
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
289
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
290
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
291
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
292
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
293
+ ]);
294
+ function rotr(x, n) {
295
+ return (x >>> n) | (x << (32 - n));
296
+ }
297
+ function sha256Hex(message) {
298
+ const h = new Uint32Array([
299
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
300
+ ]);
301
+ const length = message.length;
302
+ const padded = Math.ceil((length + 9) / 64) * 64;
303
+ const buffer = new Uint8Array(padded);
304
+ buffer.set(message);
305
+ buffer[length] = 0x80;
306
+ const view = new DataView(buffer.buffer);
307
+ view.setUint32(padded - 8, Math.floor(length / 0x20000000), false);
308
+ view.setUint32(padded - 4, (length << 3) >>> 0, false);
309
+ const w = new Uint32Array(64);
310
+ for (let offset = 0; offset < padded; offset += 64) {
311
+ for (let i = 0; i < 16; i++)
312
+ w[i] = view.getUint32(offset + i * 4, false);
313
+ for (let i = 16; i < 64; i++) {
314
+ const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);
315
+ const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);
316
+ w[i] = (w[i - 16] + s0 + w[i - 7] + s1) | 0;
317
+ }
318
+ let [a, b, c, d, e, f, g, hh] = [h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7]];
319
+ for (let i = 0; i < 64; i++) {
320
+ const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
321
+ const ch = (e & f) ^ (~e & g);
322
+ const t1 = (hh + s1 + ch + K[i] + w[i]) | 0;
323
+ const s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
324
+ const maj = (a & b) ^ (a & c) ^ (b & c);
325
+ const t2 = (s0 + maj) | 0;
326
+ hh = g;
327
+ g = f;
328
+ f = e;
329
+ e = (d + t1) | 0;
330
+ d = c;
331
+ c = b;
332
+ b = a;
333
+ a = (t1 + t2) | 0;
334
+ }
335
+ h[0] = (h[0] + a) | 0;
336
+ h[1] = (h[1] + b) | 0;
337
+ h[2] = (h[2] + c) | 0;
338
+ h[3] = (h[3] + d) | 0;
339
+ h[4] = (h[4] + e) | 0;
340
+ h[5] = (h[5] + f) | 0;
341
+ h[6] = (h[6] + g) | 0;
342
+ h[7] = (h[7] + hh) | 0;
343
+ }
344
+ return Array.from(h, (word) => (word >>> 0).toString(16).padStart(8, "0")).join("");
345
+ }
346
+ //# sourceMappingURL=conflictQuestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflictQuestion.js","sourceRoot":"","sources":["../../src/conflictQuestion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAEjF,MAAM,CAAC,MAAM,8BAA8B,GAAyB,QAAQ,CAAC;AAE7E,uEAAuE;AACvE,MAAM,CAAC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;AAE9F,6GAA6G;AAC7G,MAAM,MAAM,GAAG,uDAAuD,CAAC;AACvE,MAAM,OAAO,GACT,0HAA0H,CAAC;AAC/H,MAAM,OAAO,GAAG,4EAA4E,CAAC;AAE7F,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAKvG,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAUpF;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAOxB,YAAY,OAA4B,EAAE;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,CAAC;CACJ;AAmBD,gEAAgE;AAChE,MAAM,OAAO,yBAAyB;IAGlC,YAAY,QAA0B,EAAE;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,GAAW;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,GAAW;QACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;CACJ;AAgCD,qGAAqG;AACrG,MAAM,UAAU,aAAa,CAAC,KAAc;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,OAAQ,uBAA6C,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChE,CAAC,CAAE,IAA6B;QAChC,CAAC,CAAC,8BAA8B,CAAC;AACzC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,MAAe;IACrC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAG,CAAC,IAAY,EAAiB,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/D,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9D,8CAA8C;IAC9C,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;IACrG,IAAI,GAAG,GAAG,WAAW;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IACxB,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,QAAsB,EAAE,OAAwB;IACxF,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvF,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,OAAO,EAAE;QACjB,MAAM;QACN,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;QAC/B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;KAClC,CAAC,CAAC;AACP,CAAC;AAED,yGAAyG;AACzG,SAAS,IAAI,CAAC,QAAgB,EAAE,MAA8B;IAC1D,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAsB;IAC9C,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtG,OAAO,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CAAC,OAAsC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,yBAAyB,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,QAAuB,EAAE,GAAY,EAAoB,EAAE,CAAC,CAAC;QACzF,GAAG,EAAE,KAAK;QACV,MAAM;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,GAAG,IAAI,IAAI;QAChB,QAAQ,EAAE,QAAQ,IAAI,IAAI;KAC7B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QACvB,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QACvB,OAAO,MAAM,CAAC,mBAAmB,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACtB,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,qGAAqG;QACrG,oFAAoF;QACpF,OAAO,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACD,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACvE,CAAC;AAED,kHAAkH;AAClH,YAAY;AACZ,kHAAkH;AAElH,uGAAuG;AACvG,SAAS,KAAK,CAAC,KAAc;IACzB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACvG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,mHAAmH;AACnH,SAAS,KAAK,CAAC,KAAmD;IAC9D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IAC3E,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,gHAAgH;AAChH,SAAS,iBAAiB,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,IAA0B,EAAE,OAAwB;IACxE,MAAM,IAAI,GAA2E;QACjF,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;QACzC,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC/B,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,MAAqB;IACxC,IAAI,MAAM,YAAY,eAAe;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,YAAY,GAAG;QAAE,OAAO,KAAK,CAAC;IACxE,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,UAAU,CAAC,MAAqB,EAAE,QAAsB,EAAE,GAAW;IAC1E,IAAI,KAAc,CAAC;IACnB,IAAI,MAAM,YAAY,eAAe,EAAE,CAAC;QACpC,KAAK,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACtC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,MAAM,YAAY,GAAG,EAAE,CAAC;QAC/B,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,KAAK,GAAG,IAAI,eAAe,CAAC,MAA6B,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACJ,KAAK,GAAI,MAAoD,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC,EAAE,CAAC;QACtC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,eAAe,CAAC,KAA4B,CAAC,CAAC;QACjG,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,gHAAgH;AAChH,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC;IACtB,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;CACjG,CAAC,CAAC;AAEH,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS;IAC9B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,SAAS,CAAC,OAAmB;IAClC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC;QACtB,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;KACjG,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1E,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAE,KAAK,CAAC,CAAC,CAAC;YAC3E,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,EAAE,GAAG,CAAC,CAAC;YACP,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC"}