@claude-flow/hooks 3.0.0-alpha.1

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 (72) hide show
  1. package/README.md +440 -0
  2. package/bin/hooks-daemon.js +199 -0
  3. package/bin/statusline.js +77 -0
  4. package/dist/bridge/official-hooks-bridge.d.ts +99 -0
  5. package/dist/bridge/official-hooks-bridge.d.ts.map +1 -0
  6. package/dist/bridge/official-hooks-bridge.js +280 -0
  7. package/dist/bridge/official-hooks-bridge.js.map +1 -0
  8. package/dist/cli/guidance-cli.d.ts +17 -0
  9. package/dist/cli/guidance-cli.d.ts.map +1 -0
  10. package/dist/cli/guidance-cli.js +486 -0
  11. package/dist/cli/guidance-cli.js.map +1 -0
  12. package/dist/daemons/index.d.ts +204 -0
  13. package/dist/daemons/index.d.ts.map +1 -0
  14. package/dist/daemons/index.js +443 -0
  15. package/dist/daemons/index.js.map +1 -0
  16. package/dist/executor/index.d.ts +80 -0
  17. package/dist/executor/index.d.ts.map +1 -0
  18. package/dist/executor/index.js +273 -0
  19. package/dist/executor/index.js.map +1 -0
  20. package/dist/index.d.ts +51 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +85 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/llm/index.d.ts +11 -0
  25. package/dist/llm/index.d.ts.map +1 -0
  26. package/dist/llm/index.js +11 -0
  27. package/dist/llm/index.js.map +1 -0
  28. package/dist/llm/llm-hooks.d.ts +93 -0
  29. package/dist/llm/llm-hooks.d.ts.map +1 -0
  30. package/dist/llm/llm-hooks.js +382 -0
  31. package/dist/llm/llm-hooks.js.map +1 -0
  32. package/dist/mcp/index.d.ts +61 -0
  33. package/dist/mcp/index.d.ts.map +1 -0
  34. package/dist/mcp/index.js +501 -0
  35. package/dist/mcp/index.js.map +1 -0
  36. package/dist/reasoningbank/guidance-provider.d.ts +78 -0
  37. package/dist/reasoningbank/guidance-provider.d.ts.map +1 -0
  38. package/dist/reasoningbank/guidance-provider.js +350 -0
  39. package/dist/reasoningbank/guidance-provider.js.map +1 -0
  40. package/dist/reasoningbank/index.d.ts +212 -0
  41. package/dist/reasoningbank/index.d.ts.map +1 -0
  42. package/dist/reasoningbank/index.js +785 -0
  43. package/dist/reasoningbank/index.js.map +1 -0
  44. package/dist/registry/index.d.ts +85 -0
  45. package/dist/registry/index.d.ts.map +1 -0
  46. package/dist/registry/index.js +212 -0
  47. package/dist/registry/index.js.map +1 -0
  48. package/dist/statusline/index.d.ts +128 -0
  49. package/dist/statusline/index.d.ts.map +1 -0
  50. package/dist/statusline/index.js +493 -0
  51. package/dist/statusline/index.js.map +1 -0
  52. package/dist/swarm/index.d.ts +271 -0
  53. package/dist/swarm/index.d.ts.map +1 -0
  54. package/dist/swarm/index.js +638 -0
  55. package/dist/swarm/index.js.map +1 -0
  56. package/dist/types.d.ts +525 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +56 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/workers/index.d.ts +232 -0
  61. package/dist/workers/index.d.ts.map +1 -0
  62. package/dist/workers/index.js +1521 -0
  63. package/dist/workers/index.js.map +1 -0
  64. package/dist/workers/mcp-tools.d.ts +37 -0
  65. package/dist/workers/mcp-tools.d.ts.map +1 -0
  66. package/dist/workers/mcp-tools.js +414 -0
  67. package/dist/workers/mcp-tools.js.map +1 -0
  68. package/dist/workers/session-hook.d.ts +42 -0
  69. package/dist/workers/session-hook.d.ts.map +1 -0
  70. package/dist/workers/session-hook.js +172 -0
  71. package/dist/workers/session-hook.js.map +1 -0
  72. package/package.json +101 -0
@@ -0,0 +1,486 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * V3 Guidance CLI
4
+ *
5
+ * Command-line interface for hooks guidance system.
6
+ * Outputs plain text or JSON that Claude Code hooks can consume.
7
+ *
8
+ * Usage:
9
+ * npx @claude-flow/hooks session-context
10
+ * npx @claude-flow/hooks user-prompt "Fix authentication bug"
11
+ * npx @claude-flow/hooks pre-edit "/path/to/file.ts"
12
+ * npx @claude-flow/hooks route "Implement caching layer"
13
+ *
14
+ * @module @claude-flow/hooks/cli/guidance-cli
15
+ */
16
+ import { GuidanceProvider } from '../reasoningbank/guidance-provider.js';
17
+ import { reasoningBank } from '../reasoningbank/index.js';
18
+ import { swarmComm } from '../swarm/index.js';
19
+ import { readFileSync } from 'fs';
20
+ const provider = new GuidanceProvider(reasoningBank);
21
+ async function main() {
22
+ const args = process.argv.slice(2);
23
+ const command = args[0];
24
+ try {
25
+ await provider.initialize();
26
+ switch (command) {
27
+ case 'session-context':
28
+ case 'session':
29
+ console.log(await provider.generateSessionContext());
30
+ process.exit(0);
31
+ break;
32
+ case 'user-prompt':
33
+ case 'prompt':
34
+ console.log(await provider.generatePromptContext(args[1] || ''));
35
+ process.exit(0);
36
+ break;
37
+ case 'pre-edit':
38
+ console.log(JSON.stringify(await provider.generatePreEditGuidance(args[1] || '')));
39
+ process.exit(0);
40
+ break;
41
+ case 'post-edit': {
42
+ let content;
43
+ try {
44
+ content = readFileSync(args[1], 'utf-8');
45
+ }
46
+ catch {
47
+ // File might not exist yet
48
+ }
49
+ console.log(JSON.stringify(await provider.generatePostEditFeedback(args[1] || '', content)));
50
+ process.exit(0);
51
+ break;
52
+ }
53
+ case 'pre-command':
54
+ console.log(JSON.stringify(await provider.generatePreCommandGuidance(args[1] || '')));
55
+ process.exit(0);
56
+ break;
57
+ case 'route':
58
+ console.log(await provider.generateRoutingGuidance(args[1] || ''));
59
+ process.exit(0);
60
+ break;
61
+ case 'stop-check': {
62
+ const result = await provider.generateStopCheck();
63
+ if (!result.shouldStop) {
64
+ console.error(result.reason);
65
+ process.exit(2);
66
+ }
67
+ process.exit(0);
68
+ break;
69
+ }
70
+ case 'store': {
71
+ const strategy = args[1] || '';
72
+ const domain = args[2] || 'general';
73
+ const result = await reasoningBank.storePattern(strategy, domain);
74
+ console.log(JSON.stringify(result));
75
+ process.exit(0);
76
+ break;
77
+ }
78
+ case 'search': {
79
+ const query = args[1] || '';
80
+ const k = parseInt(args[2] || '5');
81
+ const results = await reasoningBank.searchPatterns(query, k);
82
+ console.log(JSON.stringify({
83
+ patterns: results.map(r => ({
84
+ id: r.pattern.id,
85
+ strategy: r.pattern.strategy,
86
+ domain: r.pattern.domain,
87
+ similarity: r.similarity,
88
+ quality: r.pattern.quality,
89
+ })),
90
+ }));
91
+ process.exit(0);
92
+ break;
93
+ }
94
+ case 'consolidate': {
95
+ const result = await reasoningBank.consolidate();
96
+ console.log(JSON.stringify(result));
97
+ process.exit(0);
98
+ break;
99
+ }
100
+ case 'stats':
101
+ console.log(JSON.stringify(reasoningBank.getStats()));
102
+ process.exit(0);
103
+ break;
104
+ case 'export': {
105
+ const exported = await reasoningBank.exportPatterns();
106
+ console.log(JSON.stringify({
107
+ shortTermCount: exported.shortTerm.length,
108
+ longTermCount: exported.longTerm.length,
109
+ patterns: [...exported.shortTerm, ...exported.longTerm].map(p => ({
110
+ id: p.id,
111
+ strategy: p.strategy,
112
+ domain: p.domain,
113
+ quality: p.quality,
114
+ })),
115
+ }));
116
+ process.exit(0);
117
+ break;
118
+ }
119
+ // ========================================
120
+ // Swarm Communication Commands
121
+ // ========================================
122
+ case 'swarm-send': {
123
+ const to = args[1] || '*';
124
+ const content = args[2] || '';
125
+ await swarmComm.initialize();
126
+ const msg = await swarmComm.sendMessage(to, content, {
127
+ type: args[3] || 'context',
128
+ priority: args[4] || 'normal',
129
+ });
130
+ console.log(JSON.stringify(msg));
131
+ process.exit(0);
132
+ break;
133
+ }
134
+ case 'swarm-messages': {
135
+ await swarmComm.initialize();
136
+ const messages = swarmComm.getMessages({
137
+ limit: parseInt(args[1] || '10'),
138
+ type: args[2],
139
+ });
140
+ console.log(JSON.stringify({
141
+ count: messages.length,
142
+ messages: messages.map(m => ({
143
+ id: m.id,
144
+ from: m.from,
145
+ type: m.type,
146
+ content: m.content.substring(0, 100),
147
+ priority: m.priority,
148
+ timestamp: new Date(m.timestamp).toISOString(),
149
+ })),
150
+ }));
151
+ process.exit(0);
152
+ break;
153
+ }
154
+ case 'swarm-broadcast': {
155
+ const content = args[1] || '';
156
+ await swarmComm.initialize();
157
+ const msg = await swarmComm.broadcastContext(content);
158
+ console.log(JSON.stringify({
159
+ id: msg.id,
160
+ to: msg.to,
161
+ broadcast: true,
162
+ timestamp: new Date(msg.timestamp).toISOString(),
163
+ }));
164
+ process.exit(0);
165
+ break;
166
+ }
167
+ case 'swarm-pattern-broadcast': {
168
+ const strategy = args[1] || '';
169
+ const domain = args[2] || 'general';
170
+ await swarmComm.initialize();
171
+ // Store pattern first
172
+ const stored = await reasoningBank.storePattern(strategy, domain);
173
+ const patterns = await reasoningBank.searchPatterns(stored.id, 1);
174
+ if (patterns.length > 0) {
175
+ const broadcast = await swarmComm.broadcastPattern(patterns[0].pattern);
176
+ console.log(JSON.stringify({
177
+ broadcastId: broadcast.id,
178
+ patternId: stored.id,
179
+ strategy: patterns[0].pattern.strategy,
180
+ domain: patterns[0].pattern.domain,
181
+ recipients: broadcast.recipients.length,
182
+ }));
183
+ }
184
+ else {
185
+ console.log(JSON.stringify({ error: 'Pattern not found after storage' }));
186
+ }
187
+ process.exit(0);
188
+ break;
189
+ }
190
+ case 'swarm-patterns': {
191
+ await swarmComm.initialize();
192
+ const broadcasts = swarmComm.getPatternBroadcasts({
193
+ domain: args[1],
194
+ minQuality: args[2] ? parseFloat(args[2]) : undefined,
195
+ });
196
+ console.log(JSON.stringify({
197
+ count: broadcasts.length,
198
+ broadcasts: broadcasts.map(b => ({
199
+ id: b.id,
200
+ source: b.sourceAgent,
201
+ strategy: b.pattern.strategy,
202
+ domain: b.pattern.domain,
203
+ quality: b.pattern.quality,
204
+ acknowledgments: b.acknowledgments.length,
205
+ })),
206
+ }));
207
+ process.exit(0);
208
+ break;
209
+ }
210
+ case 'swarm-import-pattern': {
211
+ const broadcastId = args[1] || '';
212
+ await swarmComm.initialize();
213
+ const success = await swarmComm.importBroadcastPattern(broadcastId);
214
+ console.log(JSON.stringify({ broadcastId, imported: success }));
215
+ process.exit(success ? 0 : 1);
216
+ break;
217
+ }
218
+ case 'swarm-consensus': {
219
+ const question = args[1] || '';
220
+ const optionsStr = args[2] || '';
221
+ const timeout = args[3] ? parseInt(args[3]) : undefined;
222
+ const options = optionsStr.split(',').map(o => o.trim()).filter(Boolean);
223
+ if (options.length < 2) {
224
+ console.error('Error: Consensus requires at least 2 options (comma-separated)');
225
+ process.exit(1);
226
+ }
227
+ await swarmComm.initialize();
228
+ const consensus = await swarmComm.initiateConsensus(question, options, timeout);
229
+ console.log(JSON.stringify({
230
+ consensusId: consensus.id,
231
+ question: consensus.question,
232
+ options: consensus.options,
233
+ deadline: new Date(consensus.deadline).toISOString(),
234
+ status: consensus.status,
235
+ }));
236
+ process.exit(0);
237
+ break;
238
+ }
239
+ case 'swarm-vote': {
240
+ const consensusId = args[1] || '';
241
+ const vote = args[2] || '';
242
+ await swarmComm.initialize();
243
+ const success = swarmComm.voteConsensus(consensusId, vote);
244
+ console.log(JSON.stringify({ consensusId, vote, accepted: success }));
245
+ process.exit(success ? 0 : 1);
246
+ break;
247
+ }
248
+ case 'swarm-consensus-status': {
249
+ const consensusId = args[1] || '';
250
+ await swarmComm.initialize();
251
+ if (consensusId) {
252
+ const consensus = swarmComm.getConsensus(consensusId);
253
+ if (consensus) {
254
+ console.log(swarmComm.generateConsensusGuidance(consensusId));
255
+ }
256
+ else {
257
+ console.error(`Consensus ${consensusId} not found`);
258
+ process.exit(1);
259
+ }
260
+ }
261
+ else {
262
+ const pending = swarmComm.getPendingConsensus();
263
+ console.log(JSON.stringify({
264
+ pendingCount: pending.length,
265
+ requests: pending.map(r => ({
266
+ id: r.id,
267
+ question: r.question,
268
+ votes: r.votes.size,
269
+ deadline: new Date(r.deadline).toISOString(),
270
+ })),
271
+ }));
272
+ }
273
+ process.exit(0);
274
+ break;
275
+ }
276
+ case 'swarm-handoff': {
277
+ const toAgent = args[1] || '';
278
+ const description = args[2] || '';
279
+ const contextJson = args[3];
280
+ let context = {
281
+ filesModified: [],
282
+ patternsUsed: [],
283
+ decisions: [],
284
+ blockers: [],
285
+ nextSteps: [],
286
+ };
287
+ if (contextJson) {
288
+ try {
289
+ context = { ...context, ...JSON.parse(contextJson) };
290
+ }
291
+ catch {
292
+ console.error('Error: Invalid context JSON');
293
+ process.exit(1);
294
+ }
295
+ }
296
+ await swarmComm.initialize();
297
+ const handoff = await swarmComm.initiateHandoff(toAgent, description, context);
298
+ console.log(JSON.stringify({
299
+ handoffId: handoff.id,
300
+ toAgent: handoff.toAgent,
301
+ description: handoff.description,
302
+ status: handoff.status,
303
+ }));
304
+ process.exit(0);
305
+ break;
306
+ }
307
+ case 'swarm-accept-handoff': {
308
+ const handoffId = args[1] || '';
309
+ await swarmComm.initialize();
310
+ const success = swarmComm.acceptHandoff(handoffId);
311
+ if (success) {
312
+ console.log(swarmComm.generateHandoffContext(handoffId));
313
+ }
314
+ else {
315
+ console.error(`Failed to accept handoff ${handoffId}`);
316
+ }
317
+ process.exit(success ? 0 : 1);
318
+ break;
319
+ }
320
+ case 'swarm-complete-handoff': {
321
+ const handoffId = args[1] || '';
322
+ const resultJson = args[2];
323
+ let result;
324
+ if (resultJson) {
325
+ try {
326
+ result = JSON.parse(resultJson);
327
+ }
328
+ catch {
329
+ console.error('Error: Invalid result JSON');
330
+ process.exit(1);
331
+ }
332
+ }
333
+ await swarmComm.initialize();
334
+ const success = swarmComm.completeHandoff(handoffId, result);
335
+ console.log(JSON.stringify({ handoffId, completed: success }));
336
+ process.exit(success ? 0 : 1);
337
+ break;
338
+ }
339
+ case 'swarm-handoffs': {
340
+ await swarmComm.initialize();
341
+ const handoffs = swarmComm.getPendingHandoffs();
342
+ console.log(JSON.stringify({
343
+ pendingCount: handoffs.length,
344
+ handoffs: handoffs.map(h => ({
345
+ id: h.id,
346
+ from: h.fromAgent,
347
+ description: h.description,
348
+ status: h.status,
349
+ timestamp: new Date(h.timestamp).toISOString(),
350
+ })),
351
+ }));
352
+ process.exit(0);
353
+ break;
354
+ }
355
+ case 'swarm-agents': {
356
+ await swarmComm.initialize();
357
+ const agents = swarmComm.getAgents();
358
+ console.log(JSON.stringify({
359
+ count: agents.length,
360
+ agents: agents.map(a => ({
361
+ id: a.id,
362
+ name: a.name,
363
+ status: a.status,
364
+ patternsShared: a.patternsShared,
365
+ handoffsReceived: a.handoffsReceived,
366
+ handoffsCompleted: a.handoffsCompleted,
367
+ })),
368
+ }));
369
+ process.exit(0);
370
+ break;
371
+ }
372
+ case 'swarm-stats': {
373
+ await swarmComm.initialize();
374
+ const stats = swarmComm.getStats();
375
+ console.log(JSON.stringify(stats, null, 2));
376
+ process.exit(0);
377
+ break;
378
+ }
379
+ case 'help':
380
+ case '--help':
381
+ case '-h':
382
+ printHelp();
383
+ process.exit(0);
384
+ break;
385
+ default:
386
+ console.error(`Unknown command: ${command}`);
387
+ console.error('Use --help for usage information');
388
+ process.exit(1);
389
+ }
390
+ }
391
+ catch (error) {
392
+ console.error(`Error: ${error.message}`);
393
+ process.exit(1);
394
+ }
395
+ }
396
+ function printHelp() {
397
+ console.log(`
398
+ @claude-flow/hooks - V3 Guidance System CLI
399
+
400
+ Usage: npx @claude-flow/hooks <command> [args]
401
+
402
+ Guidance Commands (for Claude hooks):
403
+ session-context Output project context for SessionStart hook
404
+ user-prompt <prompt> Analyze prompt and inject relevant guidance
405
+ pre-edit <path> Validate and guide before file edit
406
+ post-edit <path> Provide feedback after file edit
407
+ pre-command <cmd> Risk assessment for bash commands
408
+ route <task> Suggest optimal agent for task
409
+ stop-check Verify work complete before stopping
410
+
411
+ Pattern Management:
412
+ store <strategy> [domain] Store a new pattern
413
+ search <query> [k] Search for similar patterns
414
+ consolidate Deduplicate and promote patterns
415
+ stats Get learning statistics
416
+ export Export all patterns
417
+
418
+ Swarm Communication:
419
+ swarm-send <to> <content> [type] [priority]
420
+ Send message to agent (* for broadcast)
421
+ swarm-messages [limit] [type]
422
+ Get messages for this agent
423
+ swarm-broadcast <content> Broadcast context to all agents
424
+
425
+ Pattern Broadcasting:
426
+ swarm-pattern-broadcast <strategy> [domain]
427
+ Store and broadcast a pattern to swarm
428
+ swarm-patterns [domain] [minQuality]
429
+ List recent pattern broadcasts
430
+ swarm-import-pattern <broadcastId>
431
+ Import a broadcast pattern locally
432
+
433
+ Consensus Guidance:
434
+ swarm-consensus <question> <options> [timeout]
435
+ Initiate consensus (options: comma-separated)
436
+ swarm-vote <consensusId> <vote>
437
+ Vote on a consensus request
438
+ swarm-consensus-status [consensusId]
439
+ Get consensus status/guidance
440
+
441
+ Task Handoff:
442
+ swarm-handoff <toAgent> <description> [contextJson]
443
+ Initiate task handoff to another agent
444
+ swarm-accept-handoff <handoffId>
445
+ Accept a pending handoff
446
+ swarm-complete-handoff <handoffId> [resultJson]
447
+ Mark handoff as completed
448
+ swarm-handoffs List pending handoffs
449
+
450
+ Swarm Status:
451
+ swarm-agents List registered agents
452
+ swarm-stats Get swarm communication statistics
453
+
454
+ Exit Codes:
455
+ 0 - Success (stdout added as context for Claude)
456
+ 2 - Block (stderr shown to Claude as reason)
457
+ 1 - Error
458
+
459
+ Examples:
460
+ # Session start guidance
461
+ npx @claude-flow/hooks session-context
462
+
463
+ # User prompt analysis
464
+ npx @claude-flow/hooks user-prompt "Fix authentication security vulnerability"
465
+
466
+ # Pre-edit security check
467
+ npx @claude-flow/hooks pre-edit "src/auth/login.ts"
468
+
469
+ # Agent routing
470
+ npx @claude-flow/hooks route "Implement HNSW vector search"
471
+
472
+ # Store a learned pattern
473
+ npx @claude-flow/hooks store "Use dependency injection for testability" architecture
474
+
475
+ # Broadcast pattern to swarm
476
+ npx @claude-flow/hooks swarm-pattern-broadcast "Use HNSW for 150x faster search" memory
477
+
478
+ # Initiate consensus
479
+ npx @claude-flow/hooks swarm-consensus "Which auth method?" "JWT,OAuth2,Session"
480
+
481
+ # Hand off task
482
+ npx @claude-flow/hooks swarm-handoff security-auditor "Review auth implementation"
483
+ `);
484
+ }
485
+ main().catch(console.error);
486
+ //# sourceMappingURL=guidance-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guidance-cli.js","sourceRoot":"","sources":["../../src/cli/guidance-cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAErD,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE5B,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,iBAAiB,CAAC;YACvB,KAAK,SAAS;gBACZ,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,aAAa,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,UAAU;gBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,IAAI,OAA2B,CAAC;gBAChC,IAAI,CAAC;oBACH,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,2BAA2B;gBAC7B,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,aAAa;gBAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,OAAO;gBACV,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC1B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;wBAChB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;wBAC5B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;wBACxB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO;qBAC3B,CAAC,CAAC;iBACJ,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,OAAO;gBACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;oBACzC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;oBACvC,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAChE,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;qBACnB,CAAC,CAAC;iBACJ,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,2CAA2C;YAC3C,+BAA+B;YAC/B,2CAA2C;YAE3C,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;gBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE;oBACnD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAQ,IAAI,SAAS;oBACjC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAQ,IAAI,QAAQ;iBACrC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC;oBACrC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;oBAChC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAQ;iBACrB,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,KAAK,EAAE,QAAQ,CAAC,MAAM;oBACtB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC3B,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;wBACpC,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;qBAC/C,CAAC,CAAC;iBACJ,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;iBACjD,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBACpC,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAE7B,sBAAsB;gBACtB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAElE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACxE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;wBACzB,WAAW,EAAE,SAAS,CAAC,EAAE;wBACzB,SAAS,EAAE,MAAM,CAAC,EAAE;wBACpB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ;wBACtC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;wBAClC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM;qBACxC,CAAC,CAAC,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,oBAAoB,CAAC;oBAChD,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;oBACf,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBACtD,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,KAAK,EAAE,UAAU,CAAC,MAAM;oBACxB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC/B,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,MAAM,EAAE,CAAC,CAAC,WAAW;wBACrB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;wBAC5B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;wBACxB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO;wBAC1B,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,MAAM;qBAC1C,CAAC,CAAC;iBACJ,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM;YACR,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAExD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACzE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;oBAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;oBACpD,MAAM,EAAE,SAAS,CAAC,MAAM;iBACzB,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3B,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAE7B,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;oBACtD,IAAI,SAAS,EAAE,CAAC;wBACd,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,aAAa,WAAW,YAAY,CAAC,CAAC;wBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,OAAO,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;wBACzB,YAAY,EAAE,OAAO,CAAC,MAAM;wBAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;4BACnB,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;yBAC7C,CAAC,CAAC;qBACJ,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAE5B,IAAI,OAAO,GAAG;oBACZ,aAAa,EAAE,EAAc;oBAC7B,YAAY,EAAE,EAAc;oBAC5B,SAAS,EAAE,EAAc;oBACzB,QAAQ,EAAE,EAAc;oBACxB,SAAS,EAAE,EAAc;iBAC1B,CAAC;gBAEF,IAAI,WAAW,EAAE,CAAC;oBAChB,IAAI,CAAC;wBACH,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;oBACvD,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;wBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAEnD,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAE3B,IAAI,MAA2C,CAAC;gBAChD,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC;wBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAClC,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;wBAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM;YACR,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,YAAY,EAAE,QAAQ,CAAC,MAAM;oBAC7B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC3B,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,SAAS;wBACjB,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;qBAC/C,CAAC,CAAC;iBACJ,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,cAAc,EAAE,CAAC,CAAC,cAAc;wBAChC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;wBACpC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;qBACvC,CAAC,CAAC;iBACJ,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFb,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}