@timmeck/brain-core 2.36.61 → 2.36.63

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 (254) hide show
  1. package/dist/guardrails/guardrail-engine.d.ts +2 -0
  2. package/dist/guardrails/guardrail-engine.js +29 -13
  3. package/dist/guardrails/guardrail-engine.js.map +1 -1
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/research/adapters/playwright-adapter.js +28 -2
  8. package/dist/research/adapters/playwright-adapter.js.map +1 -1
  9. package/dist/utils/memory-watchdog.d.ts +33 -0
  10. package/dist/utils/memory-watchdog.js +88 -0
  11. package/dist/utils/memory-watchdog.js.map +1 -0
  12. package/dist/watchdog/watchdog-service.js +11 -5
  13. package/dist/watchdog/watchdog-service.js.map +1 -1
  14. package/package.json +1 -1
  15. package/dist/action/__tests__/action-bridge.test.d.ts +0 -1
  16. package/dist/action/__tests__/action-bridge.test.js +0 -175
  17. package/dist/action/__tests__/action-bridge.test.js.map +0 -1
  18. package/dist/action/__tests__/adjust-parameter-handler.test.d.ts +0 -1
  19. package/dist/action/__tests__/adjust-parameter-handler.test.js +0 -138
  20. package/dist/action/__tests__/adjust-parameter-handler.test.js.map +0 -1
  21. package/dist/action/__tests__/content-handler.test.d.ts +0 -1
  22. package/dist/action/__tests__/content-handler.test.js +0 -100
  23. package/dist/action/__tests__/content-handler.test.js.map +0 -1
  24. package/dist/action/__tests__/creative-seed-handler.test.d.ts +0 -1
  25. package/dist/action/__tests__/creative-seed-handler.test.js +0 -96
  26. package/dist/action/__tests__/creative-seed-handler.test.js.map +0 -1
  27. package/dist/action/__tests__/trade-handler.test.d.ts +0 -1
  28. package/dist/action/__tests__/trade-handler.test.js +0 -165
  29. package/dist/action/__tests__/trade-handler.test.js.map +0 -1
  30. package/dist/active-learning/__tests__/active-learning.test.d.ts +0 -1
  31. package/dist/active-learning/__tests__/active-learning.test.js +0 -132
  32. package/dist/active-learning/__tests__/active-learning.test.js.map +0 -1
  33. package/dist/agent-training/__tests__/agent-trainer.test.d.ts +0 -1
  34. package/dist/agent-training/__tests__/agent-trainer.test.js +0 -158
  35. package/dist/agent-training/__tests__/agent-trainer.test.js.map +0 -1
  36. package/dist/agent-training/__tests__/sub-agent-factory.test.d.ts +0 -1
  37. package/dist/agent-training/__tests__/sub-agent-factory.test.js +0 -100
  38. package/dist/agent-training/__tests__/sub-agent-factory.test.js.map +0 -1
  39. package/dist/agent-training/__tests__/sub-agent.test.d.ts +0 -1
  40. package/dist/agent-training/__tests__/sub-agent.test.js +0 -102
  41. package/dist/agent-training/__tests__/sub-agent.test.js.map +0 -1
  42. package/dist/chat/__tests__/chat-engine.test.d.ts +0 -1
  43. package/dist/chat/__tests__/chat-engine.test.js +0 -209
  44. package/dist/chat/__tests__/chat-engine.test.js.map +0 -1
  45. package/dist/checkpoint/__tests__/checkpoint-manager.test.d.ts +0 -1
  46. package/dist/checkpoint/__tests__/checkpoint-manager.test.js +0 -160
  47. package/dist/checkpoint/__tests__/checkpoint-manager.test.js.map +0 -1
  48. package/dist/code-health/__tests__/code-health.test.d.ts +0 -1
  49. package/dist/code-health/__tests__/code-health.test.js +0 -123
  50. package/dist/code-health/__tests__/code-health.test.js.map +0 -1
  51. package/dist/codegen/__tests__/code-forge.test.d.ts +0 -1
  52. package/dist/codegen/__tests__/code-forge.test.js +0 -105
  53. package/dist/codegen/__tests__/code-forge.test.js.map +0 -1
  54. package/dist/config/__tests__/loader.test.d.ts +0 -1
  55. package/dist/config/__tests__/loader.test.js +0 -86
  56. package/dist/config/__tests__/loader.test.js.map +0 -1
  57. package/dist/consciousness/__tests__/thought-stream.test.d.ts +0 -1
  58. package/dist/consciousness/__tests__/thought-stream.test.js +0 -62
  59. package/dist/consciousness/__tests__/thought-stream.test.js.map +0 -1
  60. package/dist/consensus/__tests__/consensus.test.d.ts +0 -1
  61. package/dist/consensus/__tests__/consensus.test.js +0 -159
  62. package/dist/consensus/__tests__/consensus.test.js.map +0 -1
  63. package/dist/content/__tests__/auto-publisher.test.d.ts +0 -1
  64. package/dist/content/__tests__/auto-publisher.test.js +0 -125
  65. package/dist/content/__tests__/auto-publisher.test.js.map +0 -1
  66. package/dist/content/__tests__/content-forge.test.d.ts +0 -1
  67. package/dist/content/__tests__/content-forge.test.js +0 -117
  68. package/dist/content/__tests__/content-forge.test.js.map +0 -1
  69. package/dist/creative/__tests__/creative-engine.test.d.ts +0 -1
  70. package/dist/creative/__tests__/creative-engine.test.js +0 -229
  71. package/dist/creative/__tests__/creative-engine.test.js.map +0 -1
  72. package/dist/cross-brain/__tests__/borg-sync-engine.test.d.ts +0 -1
  73. package/dist/cross-brain/__tests__/borg-sync-engine.test.js +0 -240
  74. package/dist/cross-brain/__tests__/borg-sync-engine.test.js.map +0 -1
  75. package/dist/cross-brain/__tests__/client.test.d.ts +0 -1
  76. package/dist/cross-brain/__tests__/client.test.js +0 -31
  77. package/dist/cross-brain/__tests__/client.test.js.map +0 -1
  78. package/dist/cross-brain/__tests__/notifications.test.d.ts +0 -1
  79. package/dist/cross-brain/__tests__/notifications.test.js +0 -52
  80. package/dist/cross-brain/__tests__/notifications.test.js.map +0 -1
  81. package/dist/cross-brain/__tests__/signal-router.test.d.ts +0 -1
  82. package/dist/cross-brain/__tests__/signal-router.test.js +0 -218
  83. package/dist/cross-brain/__tests__/signal-router.test.js.map +0 -1
  84. package/dist/cross-brain/__tests__/subscription.test.d.ts +0 -1
  85. package/dist/cross-brain/__tests__/subscription.test.js +0 -75
  86. package/dist/cross-brain/__tests__/subscription.test.js.map +0 -1
  87. package/dist/dashboard/__tests__/command-center-server.test.d.ts +0 -1
  88. package/dist/dashboard/__tests__/command-center-server.test.js +0 -522
  89. package/dist/dashboard/__tests__/command-center-server.test.js.map +0 -1
  90. package/dist/dashboard/__tests__/server.test.d.ts +0 -1
  91. package/dist/dashboard/__tests__/server.test.js +0 -105
  92. package/dist/dashboard/__tests__/server.test.js.map +0 -1
  93. package/dist/db/__tests__/connection.test.d.ts +0 -1
  94. package/dist/db/__tests__/connection.test.js +0 -135
  95. package/dist/db/__tests__/connection.test.js.map +0 -1
  96. package/dist/dream/__tests__/dream-engine.test.d.ts +0 -1
  97. package/dist/dream/__tests__/dream-engine.test.js +0 -184
  98. package/dist/dream/__tests__/dream-engine.test.js.map +0 -1
  99. package/dist/embeddings/__tests__/engine.test.d.ts +0 -1
  100. package/dist/embeddings/__tests__/engine.test.js +0 -82
  101. package/dist/embeddings/__tests__/engine.test.js.map +0 -1
  102. package/dist/feedback/__tests__/feedback-engine.test.d.ts +0 -1
  103. package/dist/feedback/__tests__/feedback-engine.test.js +0 -156
  104. package/dist/feedback/__tests__/feedback-engine.test.js.map +0 -1
  105. package/dist/feedback/__tests__/feedback-router.test.d.ts +0 -1
  106. package/dist/feedback/__tests__/feedback-router.test.js +0 -173
  107. package/dist/feedback/__tests__/feedback-router.test.js.map +0 -1
  108. package/dist/goals/__tests__/goal-engine.test.d.ts +0 -1
  109. package/dist/goals/__tests__/goal-engine.test.js +0 -203
  110. package/dist/goals/__tests__/goal-engine.test.js.map +0 -1
  111. package/dist/guardrails/__tests__/guardrail-engine.test.d.ts +0 -1
  112. package/dist/guardrails/__tests__/guardrail-engine.test.js +0 -343
  113. package/dist/guardrails/__tests__/guardrail-engine.test.js.map +0 -1
  114. package/dist/ipc/__tests__/integration.test.d.ts +0 -1
  115. package/dist/ipc/__tests__/integration.test.js +0 -352
  116. package/dist/ipc/__tests__/integration.test.js.map +0 -1
  117. package/dist/ipc/__tests__/protocol.test.d.ts +0 -1
  118. package/dist/ipc/__tests__/protocol.test.js +0 -69
  119. package/dist/ipc/__tests__/protocol.test.js.map +0 -1
  120. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.d.ts +0 -1
  121. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js +0 -114
  122. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js.map +0 -1
  123. package/dist/knowledge-graph/__tests__/knowledge-graph.test.d.ts +0 -1
  124. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js +0 -215
  125. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js.map +0 -1
  126. package/dist/learning/__tests__/base-engine.test.d.ts +0 -1
  127. package/dist/learning/__tests__/base-engine.test.js +0 -49
  128. package/dist/learning/__tests__/base-engine.test.js.map +0 -1
  129. package/dist/llm/__tests__/anthropic-provider.test.d.ts +0 -1
  130. package/dist/llm/__tests__/anthropic-provider.test.js +0 -121
  131. package/dist/llm/__tests__/anthropic-provider.test.js.map +0 -1
  132. package/dist/llm/__tests__/llm-service.test.d.ts +0 -1
  133. package/dist/llm/__tests__/llm-service.test.js +0 -507
  134. package/dist/llm/__tests__/llm-service.test.js.map +0 -1
  135. package/dist/llm/__tests__/ollama-embedding.test.d.ts +0 -1
  136. package/dist/llm/__tests__/ollama-embedding.test.js +0 -128
  137. package/dist/llm/__tests__/ollama-embedding.test.js.map +0 -1
  138. package/dist/llm/__tests__/ollama-provider.test.d.ts +0 -1
  139. package/dist/llm/__tests__/ollama-provider.test.js +0 -213
  140. package/dist/llm/__tests__/ollama-provider.test.js.map +0 -1
  141. package/dist/llm/__tests__/provider.test.d.ts +0 -1
  142. package/dist/llm/__tests__/provider.test.js +0 -126
  143. package/dist/llm/__tests__/provider.test.js.map +0 -1
  144. package/dist/math/__tests__/time-decay.test.d.ts +0 -1
  145. package/dist/math/__tests__/time-decay.test.js +0 -37
  146. package/dist/math/__tests__/time-decay.test.js.map +0 -1
  147. package/dist/math/__tests__/wilson-score.test.d.ts +0 -1
  148. package/dist/math/__tests__/wilson-score.test.js +0 -43
  149. package/dist/math/__tests__/wilson-score.test.js.map +0 -1
  150. package/dist/memory/__tests__/base-memory-engine.test.d.ts +0 -1
  151. package/dist/memory/__tests__/base-memory-engine.test.js +0 -233
  152. package/dist/memory/__tests__/base-memory-engine.test.js.map +0 -1
  153. package/dist/metacognition/__tests__/auto-experiment-engine.test.d.ts +0 -1
  154. package/dist/metacognition/__tests__/auto-experiment-engine.test.js +0 -218
  155. package/dist/metacognition/__tests__/auto-experiment-engine.test.js.map +0 -1
  156. package/dist/metacognition/__tests__/evolution-engine.test.d.ts +0 -1
  157. package/dist/metacognition/__tests__/evolution-engine.test.js +0 -473
  158. package/dist/metacognition/__tests__/evolution-engine.test.js.map +0 -1
  159. package/dist/metacognition/__tests__/parameter-registry.test.d.ts +0 -1
  160. package/dist/metacognition/__tests__/parameter-registry.test.js +0 -223
  161. package/dist/metacognition/__tests__/parameter-registry.test.js.map +0 -1
  162. package/dist/missions/__tests__/mission-engine.test.d.ts +0 -1
  163. package/dist/missions/__tests__/mission-engine.test.js +0 -67
  164. package/dist/missions/__tests__/mission-engine.test.js.map +0 -1
  165. package/dist/notifications/__tests__/notification-service.test.d.ts +0 -1
  166. package/dist/notifications/__tests__/notification-service.test.js +0 -176
  167. package/dist/notifications/__tests__/notification-service.test.js.map +0 -1
  168. package/dist/plugin/__tests__/plugin-registry.test.d.ts +0 -1
  169. package/dist/plugin/__tests__/plugin-registry.test.js +0 -166
  170. package/dist/plugin/__tests__/plugin-registry.test.js.map +0 -1
  171. package/dist/prediction/__tests__/prediction-engine.test.d.ts +0 -1
  172. package/dist/prediction/__tests__/prediction-engine.test.js +0 -252
  173. package/dist/prediction/__tests__/prediction-engine.test.js.map +0 -1
  174. package/dist/proactive/__tests__/proactive-engine.test.d.ts +0 -1
  175. package/dist/proactive/__tests__/proactive-engine.test.js +0 -183
  176. package/dist/proactive/__tests__/proactive-engine.test.js.map +0 -1
  177. package/dist/rag/__tests__/rag-engine.test.d.ts +0 -1
  178. package/dist/rag/__tests__/rag-engine.test.js +0 -235
  179. package/dist/rag/__tests__/rag-engine.test.js.map +0 -1
  180. package/dist/research/__tests__/autonomy-features.test.d.ts +0 -1
  181. package/dist/research/__tests__/autonomy-features.test.js +0 -155
  182. package/dist/research/__tests__/autonomy-features.test.js.map +0 -1
  183. package/dist/research/__tests__/base-engine.test.d.ts +0 -1
  184. package/dist/research/__tests__/base-engine.test.js +0 -56
  185. package/dist/research/__tests__/base-engine.test.js.map +0 -1
  186. package/dist/research/__tests__/semantic-compressor.test.d.ts +0 -1
  187. package/dist/research/__tests__/semantic-compressor.test.js +0 -153
  188. package/dist/research/__tests__/semantic-compressor.test.js.map +0 -1
  189. package/dist/research/adapters/__tests__/web-adapters.test.d.ts +0 -1
  190. package/dist/research/adapters/__tests__/web-adapters.test.js +0 -106
  191. package/dist/research/adapters/__tests__/web-adapters.test.js.map +0 -1
  192. package/dist/sandbox/__tests__/code-sandbox.test.d.ts +0 -1
  193. package/dist/sandbox/__tests__/code-sandbox.test.js +0 -182
  194. package/dist/sandbox/__tests__/code-sandbox.test.js.map +0 -1
  195. package/dist/scanner/__tests__/signal-scanner.test.d.ts +0 -1
  196. package/dist/scanner/__tests__/signal-scanner.test.js +0 -142
  197. package/dist/scanner/__tests__/signal-scanner.test.js.map +0 -1
  198. package/dist/self-modification/__tests__/self-modification-engine.test.d.ts +0 -1
  199. package/dist/self-modification/__tests__/self-modification-engine.test.js +0 -313
  200. package/dist/self-modification/__tests__/self-modification-engine.test.js.map +0 -1
  201. package/dist/strategy/__tests__/strategy-forge.test.d.ts +0 -1
  202. package/dist/strategy/__tests__/strategy-forge.test.js +0 -190
  203. package/dist/strategy/__tests__/strategy-forge.test.js.map +0 -1
  204. package/dist/strategy/__tests__/strategy-mutator.test.d.ts +0 -1
  205. package/dist/strategy/__tests__/strategy-mutator.test.js +0 -141
  206. package/dist/strategy/__tests__/strategy-mutator.test.js.map +0 -1
  207. package/dist/synapses/__tests__/activation.test.d.ts +0 -1
  208. package/dist/synapses/__tests__/activation.test.js +0 -87
  209. package/dist/synapses/__tests__/activation.test.js.map +0 -1
  210. package/dist/synapses/__tests__/decay.test.d.ts +0 -1
  211. package/dist/synapses/__tests__/decay.test.js +0 -73
  212. package/dist/synapses/__tests__/decay.test.js.map +0 -1
  213. package/dist/synapses/__tests__/hebbian.test.d.ts +0 -1
  214. package/dist/synapses/__tests__/hebbian.test.js +0 -95
  215. package/dist/synapses/__tests__/hebbian.test.js.map +0 -1
  216. package/dist/synapses/__tests__/pathfinder.test.d.ts +0 -1
  217. package/dist/synapses/__tests__/pathfinder.test.js +0 -74
  218. package/dist/synapses/__tests__/pathfinder.test.js.map +0 -1
  219. package/dist/synapses/__tests__/synapse-manager.test.d.ts +0 -1
  220. package/dist/synapses/__tests__/synapse-manager.test.js +0 -94
  221. package/dist/synapses/__tests__/synapse-manager.test.js.map +0 -1
  222. package/dist/teaching/__tests__/teaching.test.d.ts +0 -1
  223. package/dist/teaching/__tests__/teaching.test.js +0 -252
  224. package/dist/teaching/__tests__/teaching.test.js.map +0 -1
  225. package/dist/techradar/__tests__/techradar-engine.test.d.ts +0 -1
  226. package/dist/techradar/__tests__/techradar-engine.test.js +0 -246
  227. package/dist/techradar/__tests__/techradar-engine.test.js.map +0 -1
  228. package/dist/tool-learning/__tests__/tool-learning.test.d.ts +0 -1
  229. package/dist/tool-learning/__tests__/tool-learning.test.js +0 -187
  230. package/dist/tool-learning/__tests__/tool-learning.test.js.map +0 -1
  231. package/dist/user-model/__tests__/user-model.test.d.ts +0 -1
  232. package/dist/user-model/__tests__/user-model.test.js +0 -142
  233. package/dist/user-model/__tests__/user-model.test.js.map +0 -1
  234. package/dist/utils/__tests__/batch-queue.test.d.ts +0 -1
  235. package/dist/utils/__tests__/batch-queue.test.js +0 -85
  236. package/dist/utils/__tests__/batch-queue.test.js.map +0 -1
  237. package/dist/utils/__tests__/events.test.d.ts +0 -1
  238. package/dist/utils/__tests__/events.test.js +0 -38
  239. package/dist/utils/__tests__/events.test.js.map +0 -1
  240. package/dist/utils/__tests__/hash.test.d.ts +0 -1
  241. package/dist/utils/__tests__/hash.test.js +0 -25
  242. package/dist/utils/__tests__/hash.test.js.map +0 -1
  243. package/dist/utils/__tests__/logger.test.d.ts +0 -1
  244. package/dist/utils/__tests__/logger.test.js +0 -55
  245. package/dist/utils/__tests__/logger.test.js.map +0 -1
  246. package/dist/utils/__tests__/paths.test.d.ts +0 -1
  247. package/dist/utils/__tests__/paths.test.js +0 -50
  248. package/dist/utils/__tests__/paths.test.js.map +0 -1
  249. package/dist/utils/__tests__/retry.test.d.ts +0 -1
  250. package/dist/utils/__tests__/retry.test.js +0 -91
  251. package/dist/utils/__tests__/retry.test.js.map +0 -1
  252. package/dist/watchdog/__tests__/watchdog-service.test.d.ts +0 -1
  253. package/dist/watchdog/__tests__/watchdog-service.test.js +0 -113
  254. package/dist/watchdog/__tests__/watchdog-service.test.js.map +0 -1
@@ -1 +0,0 @@
1
- export {};
@@ -1,156 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- vi.mock('../../utils/logger.js', () => ({
4
- getLogger: () => ({
5
- info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn(),
6
- }),
7
- }));
8
- import { FeedbackEngine, runFeedbackMigration } from '../feedback-engine.js';
9
- // ── Helpers ──────────────────────────────────────────────────
10
- function createTestDb() {
11
- return new Database(':memory:');
12
- }
13
- // ── Tests ───────────────────────────────────────────────────
14
- describe('FeedbackEngine', () => {
15
- let db;
16
- let engine;
17
- beforeEach(() => {
18
- db = createTestDb();
19
- engine = new FeedbackEngine(db, { brainName: 'test' });
20
- });
21
- afterEach(() => {
22
- try {
23
- db.close();
24
- }
25
- catch { /* ignore */ }
26
- });
27
- it('creates feedback tables on migration', () => {
28
- const signalTable = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='feedback_signals'").all();
29
- const correctionTable = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='feedback_corrections'").all();
30
- expect(signalTable).toHaveLength(1);
31
- expect(correctionTable).toHaveLength(1);
32
- });
33
- it('migration is idempotent', () => {
34
- runFeedbackMigration(db);
35
- runFeedbackMigration(db);
36
- const signalTable = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='feedback_signals'").all();
37
- expect(signalTable).toHaveLength(1);
38
- });
39
- it('records positive feedback', () => {
40
- const record = engine.recordFeedback('insight', 1, 'positive', 'Great insight');
41
- expect(record.signal).toBe('positive');
42
- expect(record.reward_score).toBe(1.0);
43
- expect(record.target_type).toBe('insight');
44
- expect(record.target_id).toBe(1);
45
- expect(record.detail).toBe('Great insight');
46
- });
47
- it('records negative feedback', () => {
48
- const record = engine.recordFeedback('prediction', 2, 'negative', 'Incorrect prediction');
49
- expect(record.signal).toBe('negative');
50
- expect(record.reward_score).toBe(-1.0);
51
- });
52
- it('records correction feedback', () => {
53
- const record = engine.recordFeedback('rule', 3, 'correction');
54
- expect(record.signal).toBe('correction');
55
- expect(record.reward_score).toBe(-0.5);
56
- expect(record.detail).toBeNull();
57
- });
58
- it('calculates reward score from multiple signals', () => {
59
- engine.recordFeedback('insight', 1, 'positive');
60
- engine.recordFeedback('insight', 1, 'positive');
61
- engine.recordFeedback('insight', 1, 'negative');
62
- const score = engine.getRewardScore('insight', 1);
63
- // (1 + 1 + -1) / 3 = 0.333...
64
- expect(score).toBeCloseTo(1 / 3, 2);
65
- });
66
- it('clamps reward score to [-1, 1]', () => {
67
- // All positive -> should be exactly 1.0
68
- engine.recordFeedback('insight', 1, 'positive');
69
- engine.recordFeedback('insight', 1, 'positive');
70
- engine.recordFeedback('insight', 1, 'positive');
71
- const positiveScore = engine.getRewardScore('insight', 1);
72
- expect(positiveScore).toBe(1.0);
73
- // All negative -> should be exactly -1.0
74
- engine.recordFeedback('prediction', 2, 'negative');
75
- engine.recordFeedback('prediction', 2, 'negative');
76
- const negativeScore = engine.getRewardScore('prediction', 2);
77
- expect(negativeScore).toBe(-1.0);
78
- });
79
- it('returns 0 for target with no feedback', () => {
80
- const score = engine.getRewardScore('nonexistent', 999);
81
- expect(score).toBe(0);
82
- });
83
- it('learns from correction', () => {
84
- const correction = engine.learnFromCorrection('X causes Y', 'X correlates with Y', 'fact', 10);
85
- expect(correction.original).toBe('X causes Y');
86
- expect(correction.correction).toBe('X correlates with Y');
87
- expect(correction.target_type).toBe('fact');
88
- expect(correction.target_id).toBe(10);
89
- expect(correction.applied).toBe(0);
90
- // Should also have created a correction feedback signal
91
- const history = engine.getFeedbackHistory('fact', 10);
92
- expect(history).toHaveLength(1);
93
- expect(history[0].signal).toBe('correction');
94
- });
95
- it('returns correct stats', () => {
96
- engine.recordFeedback('insight', 1, 'positive');
97
- engine.recordFeedback('insight', 2, 'positive');
98
- engine.recordFeedback('prediction', 1, 'negative');
99
- engine.recordFeedback('rule', 1, 'correction');
100
- const stats = engine.getStats();
101
- expect(stats.totalFeedback).toBe(4);
102
- expect(stats.positiveCount).toBe(2);
103
- expect(stats.negativeCount).toBe(1);
104
- expect(stats.correctionCount).toBe(1);
105
- // avg: (1 + 1 + -1 + -0.5) / 4 = 0.125
106
- expect(stats.avgRewardScore).toBeCloseTo(0.125, 2);
107
- });
108
- it('returns feedback history for a target', () => {
109
- engine.recordFeedback('insight', 1, 'positive', 'good');
110
- engine.recordFeedback('insight', 1, 'negative', 'bad');
111
- engine.recordFeedback('insight', 1, 'positive', 'better');
112
- engine.recordFeedback('insight', 2, 'positive', 'other target');
113
- const history = engine.getFeedbackHistory('insight', 1);
114
- expect(history).toHaveLength(3);
115
- // Should not include target_id=2
116
- expect(history.every(h => h.target_id === 1)).toBe(true);
117
- });
118
- it('limits feedback history results', () => {
119
- for (let i = 0; i < 10; i++) {
120
- engine.recordFeedback('insight', 1, 'positive', `feedback ${i}`);
121
- }
122
- const history = engine.getFeedbackHistory('insight', 1, 5);
123
- expect(history).toHaveLength(5);
124
- });
125
- it('handles multiple signals for same target in reward calculation', () => {
126
- // 3 positive, 2 negative, 1 correction
127
- engine.recordFeedback('insight', 1, 'positive');
128
- engine.recordFeedback('insight', 1, 'positive');
129
- engine.recordFeedback('insight', 1, 'positive');
130
- engine.recordFeedback('insight', 1, 'negative');
131
- engine.recordFeedback('insight', 1, 'negative');
132
- engine.recordFeedback('insight', 1, 'correction');
133
- const score = engine.getRewardScore('insight', 1);
134
- // (3*1 + 2*-1 + 1*-0.5) / 6 = 0.5 / 6 = 0.0833...
135
- expect(score).toBeCloseTo(0.5 / 6, 2);
136
- });
137
- it('calls synapse manager strengthen/weaken in applyRewards', () => {
138
- const mockSynapseManager = {
139
- strengthen: vi.fn(),
140
- weaken: vi.fn(),
141
- find: vi.fn().mockReturnValue({ id: 1, weight: 0.5 }),
142
- };
143
- engine.recordFeedback('insight', 1, 'positive');
144
- engine.recordFeedback('prediction', 2, 'negative');
145
- engine.applyRewards(mockSynapseManager);
146
- expect(mockSynapseManager.strengthen).toHaveBeenCalled();
147
- expect(mockSynapseManager.find).toHaveBeenCalled();
148
- expect(mockSynapseManager.weaken).toHaveBeenCalled();
149
- });
150
- it('skips applyRewards without synapse manager', () => {
151
- engine.recordFeedback('insight', 1, 'positive');
152
- // Should not throw
153
- expect(() => engine.applyRewards()).not.toThrow();
154
- });
155
- });
156
- //# sourceMappingURL=feedback-engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feedback-engine.test.js","sourceRoot":"","sources":["../../../src/feedback/__tests__/feedback-engine.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,173 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- vi.mock('../../utils/logger.js', () => ({
4
- getLogger: () => ({ info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }),
5
- }));
6
- import { FeedbackRouter } from '../feedback-router.js';
7
- describe('FeedbackRouter', () => {
8
- let db;
9
- beforeEach(() => { db = new Database(':memory:'); });
10
- afterEach(() => { db.close(); });
11
- it('creates with empty state', () => {
12
- const router = new FeedbackRouter(db);
13
- const status = router.getStatus();
14
- expect(status.sources).toBe(0);
15
- expect(status.totalProcessed).toBe(0);
16
- expect(status.totalActions).toBe(0);
17
- });
18
- it('registers sources', () => {
19
- const router = new FeedbackRouter(db);
20
- router.addSource({ name: 'test', fetch: () => [] });
21
- router.addSource({ name: 'test2', fetch: () => [] });
22
- expect(router.getStatus().sources).toBe(2);
23
- });
24
- it('processes AB test winner', async () => {
25
- const router = new FeedbackRouter(db);
26
- const actions = [];
27
- router.setActionHandler(async (a) => { actions.push(a); });
28
- router.addSource({
29
- name: 'ab-test',
30
- fetch: () => [{
31
- source: 'ab-test',
32
- type: 'ab_winner',
33
- data: { winner: 'b', metric: 'click_rate', testId: 42 },
34
- confidence: 0.85,
35
- }],
36
- });
37
- const result = await router.processAll();
38
- expect(result.items).toBe(1);
39
- expect(result.actions).toBe(1);
40
- expect(actions[0].type).toBe('adjust_parameter');
41
- expect(actions[0].payload.value).toBe('b');
42
- });
43
- it('skips low-confidence AB winners', async () => {
44
- const router = new FeedbackRouter(db);
45
- const actions = [];
46
- router.setActionHandler(async (a) => { actions.push(a); });
47
- router.addSource({
48
- name: 'ab-test',
49
- fetch: () => [{
50
- source: 'ab-test',
51
- type: 'ab_winner',
52
- data: { winner: 'a' },
53
- confidence: 0.3,
54
- }],
55
- });
56
- await router.processAll();
57
- expect(actions).toHaveLength(0);
58
- });
59
- it('processes competitor insights with topic seed', async () => {
60
- const router = new FeedbackRouter(db);
61
- const actions = [];
62
- router.setActionHandler(async (a) => { actions.push(a); });
63
- router.addSource({
64
- name: 'competitor',
65
- fetch: () => [{
66
- source: 'competitor',
67
- type: 'competitor_insight',
68
- data: { verdict: 'Competitor posts more frequently', topicSeed: 'AI trends', competitorId: 5 },
69
- confidence: 0.7,
70
- }],
71
- });
72
- await router.processAll();
73
- expect(actions).toHaveLength(2); // frequency + topic seed
74
- expect(actions[0].type).toBe('adjust_parameter');
75
- expect(actions[1].type).toBe('creative_seed');
76
- });
77
- it('processes user patterns', async () => {
78
- const router = new FeedbackRouter(db);
79
- const actions = [];
80
- router.setActionHandler(async (a) => { actions.push(a); });
81
- router.addSource({
82
- name: 'user-model',
83
- fetch: () => [{
84
- source: 'user-model',
85
- type: 'user_pattern',
86
- data: { activeHours: [9, 10, 14, 15, 16] },
87
- confidence: 0.6,
88
- }],
89
- });
90
- await router.processAll();
91
- expect(actions).toHaveLength(1);
92
- expect(actions[0].payload.parameter).toBe('optimal_posting_hours');
93
- });
94
- it('processes engagement feedback', async () => {
95
- const router = new FeedbackRouter(db);
96
- const actions = [];
97
- router.setActionHandler(async (a) => { actions.push(a); });
98
- router.addSource({
99
- name: 'engagement',
100
- fetch: () => [{
101
- source: 'engagement',
102
- type: 'engagement_feedback',
103
- data: { avgEngagement: 42.5 },
104
- confidence: 0.9,
105
- }],
106
- });
107
- await router.processAll();
108
- expect(actions).toHaveLength(1);
109
- expect(actions[0].payload.value).toBe(42.5);
110
- });
111
- it('handles source errors gracefully', async () => {
112
- const router = new FeedbackRouter(db);
113
- router.addSource({
114
- name: 'broken',
115
- fetch: () => { throw new Error('DB locked'); },
116
- });
117
- const result = await router.processAll();
118
- expect(result.items).toBe(0);
119
- });
120
- it('handles action handler errors gracefully', async () => {
121
- const router = new FeedbackRouter(db);
122
- router.setActionHandler(async () => { throw new Error('handler fail'); });
123
- router.addSource({
124
- name: 'test',
125
- fetch: () => [{ source: 'test', type: 'engagement_feedback', data: { avgEngagement: 10 }, confidence: 0.9 }],
126
- });
127
- const result = await router.processAll();
128
- expect(result.actions).toBe(1); // action counted even if handler fails
129
- });
130
- it('processes multiple sources in one run', async () => {
131
- const router = new FeedbackRouter(db);
132
- const actions = [];
133
- router.setActionHandler(async (a) => { actions.push(a); });
134
- router.addSource({ name: 'src1', fetch: () => [{ source: 'src1', type: 'engagement_feedback', data: { avgEngagement: 10 }, confidence: 0.9 }] });
135
- router.addSource({ name: 'src2', fetch: () => [{ source: 'src2', type: 'user_pattern', data: { activeHours: [8] }, confidence: 0.6 }] });
136
- const result = await router.processAll();
137
- expect(result.items).toBe(2);
138
- expect(result.actions).toBe(2);
139
- });
140
- it('logs items without actions', async () => {
141
- const router = new FeedbackRouter(db);
142
- router.addSource({
143
- name: 'test',
144
- fetch: () => [{ source: 'test', type: 'custom', data: { foo: 'bar' }, confidence: 0.3 }],
145
- });
146
- await router.processAll();
147
- const status = router.getStatus();
148
- expect(status.totalProcessed).toBe(1);
149
- expect(status.totalActions).toBe(0);
150
- });
151
- it('passes custom items with high confidence and actionType', async () => {
152
- const router = new FeedbackRouter(db);
153
- const actions = [];
154
- router.setActionHandler(async (a) => { actions.push(a); });
155
- router.addSource({
156
- name: 'custom',
157
- fetch: () => [{ source: 'custom', type: 'custom', data: { actionType: 'special_action', key: 'val' }, confidence: 0.9 }],
158
- });
159
- await router.processAll();
160
- expect(actions).toHaveLength(1);
161
- expect(actions[0].type).toBe('special_action');
162
- });
163
- it('updates status after processing', async () => {
164
- const router = new FeedbackRouter(db);
165
- router.addSource({ name: 's', fetch: () => [{ source: 's', type: 'engagement_feedback', data: { avgEngagement: 5 }, confidence: 0.8 }] });
166
- router.setActionHandler(async () => { });
167
- await router.processAll();
168
- const status = router.getStatus();
169
- expect(status.totalProcessed).toBeGreaterThan(0);
170
- expect(status.lastRunAt).toBeTruthy();
171
- });
172
- });
173
- //# sourceMappingURL=feedback-router.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feedback-router.test.js","sourceRoot":"","sources":["../../../src/feedback/__tests__/feedback-router.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,203 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- vi.mock('../../utils/logger.js', () => ({
4
- getLogger: () => ({ info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }),
5
- }));
6
- import { GoalEngine, runGoalEngineMigration } from '../goal-engine.js';
7
- describe('GoalEngine', () => {
8
- let db;
9
- beforeEach(() => { db = new Database(':memory:'); });
10
- afterEach(() => { db.close(); });
11
- // ── 1. Creation ────────────────────────────────────────
12
- it('constructs without error and runs migration', () => {
13
- const engine = new GoalEngine(db, { brainName: 'test' });
14
- expect(engine).toBeDefined();
15
- // Tables should exist
16
- const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name IN ('goals', 'goal_progress') ORDER BY name").all();
17
- expect(tables.map(t => t.name)).toEqual(['goal_progress', 'goals']);
18
- });
19
- // ── 2. createGoal ─────────────────────────────────────
20
- it('creates a goal and returns it with an id', () => {
21
- const engine = new GoalEngine(db, { brainName: 'test' });
22
- const goal = engine.createGoal('Hit 80% accuracy', 'accuracy', 0.8, 50, {
23
- description: 'Improve prediction accuracy',
24
- type: 'quality',
25
- baselineValue: 0.4,
26
- currentCycle: 10,
27
- priority: 0.9,
28
- direction: 'higher_is_better',
29
- });
30
- expect(goal.id).toBeGreaterThan(0);
31
- expect(goal.title).toBe('Hit 80% accuracy');
32
- expect(goal.metricName).toBe('accuracy');
33
- expect(goal.targetValue).toBe(0.8);
34
- expect(goal.baselineValue).toBe(0.4);
35
- expect(goal.currentValue).toBe(0.4);
36
- expect(goal.deadlineCycles).toBe(50);
37
- expect(goal.startedCycle).toBe(10);
38
- expect(goal.status).toBe('active');
39
- expect(goal.priority).toBe(0.9);
40
- expect(goal.direction).toBe('higher_is_better');
41
- expect(goal.description).toBe('Improve prediction accuracy');
42
- expect(goal.type).toBe('quality');
43
- });
44
- it('throws when max active goals reached', () => {
45
- const engine = new GoalEngine(db, { brainName: 'test', maxActiveGoals: 2 });
46
- engine.createGoal('G1', 'm1', 10, 50);
47
- engine.createGoal('G2', 'm2', 20, 50);
48
- expect(() => engine.createGoal('G3', 'm3', 30, 50)).toThrow(/Max active goals/);
49
- });
50
- // ── 3. listGoals ──────────────────────────────────────
51
- it('lists goals with optional status filter', () => {
52
- const engine = new GoalEngine(db, { brainName: 'test' });
53
- engine.createGoal('A', 'x', 10, 50);
54
- engine.createGoal('B', 'y', 20, 50);
55
- const all = engine.listGoals();
56
- expect(all).toHaveLength(2);
57
- const active = engine.listGoals('active');
58
- expect(active).toHaveLength(2);
59
- // Pause one and filter
60
- engine.pauseGoal(all[0].id);
61
- expect(engine.listGoals('active')).toHaveLength(1);
62
- expect(engine.listGoals('paused')).toHaveLength(1);
63
- });
64
- // ── 4. getGoal ────────────────────────────────────────
65
- it('gets a goal by id or returns null', () => {
66
- const engine = new GoalEngine(db, { brainName: 'test' });
67
- const created = engine.createGoal('Find me', 'metric', 100, 30);
68
- const found = engine.getGoal(created.id);
69
- expect(found).not.toBeNull();
70
- expect(found.title).toBe('Find me');
71
- const missing = engine.getGoal(9999);
72
- expect(missing).toBeNull();
73
- });
74
- // ── 5. recordProgress ─────────────────────────────────
75
- it('records progress for active goals matching metric names', () => {
76
- const engine = new GoalEngine(db, { brainName: 'test' });
77
- engine.createGoal('Accuracy goal', 'accuracy', 0.9, 50, { baselineValue: 0.5 });
78
- engine.createGoal('Speed goal', 'speed', 100, 50);
79
- const updated = engine.recordProgress(1, { accuracy: 0.6, speed: 20, unknown: 42 });
80
- expect(updated).toBe(2);
81
- // Verify values were stored
82
- const acc = engine.listGoals('active').find(g => g.metricName === 'accuracy');
83
- expect(acc.currentValue).toBe(0.6);
84
- const spd = engine.listGoals('active').find(g => g.metricName === 'speed');
85
- expect(spd.currentValue).toBe(20);
86
- });
87
- // ── 6. checkGoals — achieved ──────────────────────────
88
- it('marks goal as achieved when target is met (higher_is_better)', () => {
89
- const engine = new GoalEngine(db, { brainName: 'test' });
90
- const goal = engine.createGoal('Hit 10', 'score', 10, 50);
91
- engine.recordProgress(1, { score: 10 });
92
- const result = engine.checkGoals(1);
93
- expect(result.achieved).toHaveLength(1);
94
- expect(result.achieved[0].title).toBe('Hit 10');
95
- expect(result.achieved[0].status).toBe('achieved');
96
- expect(result.achieved[0].achievedAt).not.toBeNull();
97
- expect(result.failed).toHaveLength(0);
98
- // Verify persisted
99
- const fetched = engine.getGoal(goal.id);
100
- expect(fetched.status).toBe('achieved');
101
- });
102
- it('marks goal as achieved when target is met (lower_is_better)', () => {
103
- const engine = new GoalEngine(db, { brainName: 'test' });
104
- engine.createGoal('Reduce errors', 'errorRate', 5, 50, {
105
- baselineValue: 20,
106
- direction: 'lower_is_better',
107
- });
108
- engine.recordProgress(1, { errorRate: 4 });
109
- const result = engine.checkGoals(1);
110
- expect(result.achieved).toHaveLength(1);
111
- expect(result.achieved[0].metricName).toBe('errorRate');
112
- expect(result.failed).toHaveLength(0);
113
- });
114
- // ── 7. checkGoals — failed ────────────────────────────
115
- it('marks goal as failed when deadline passes without achievement', () => {
116
- const engine = new GoalEngine(db, { brainName: 'test' });
117
- engine.createGoal('Unreachable', 'metric', 100, 10, { currentCycle: 0, baselineValue: 0 });
118
- // Record some progress but not enough
119
- engine.recordProgress(5, { metric: 30 });
120
- const result = engine.checkGoals(10); // deadline reached (elapsed = 10 - 0 = 10 >= 10)
121
- expect(result.failed).toHaveLength(1);
122
- expect(result.failed[0].title).toBe('Unreachable');
123
- expect(result.failed[0].status).toBe('failed');
124
- expect(result.achieved).toHaveLength(0);
125
- });
126
- // ── 8. pauseGoal / resumeGoal ─────────────────────────
127
- it('pauses and resumes goals', () => {
128
- const engine = new GoalEngine(db, { brainName: 'test' });
129
- const goal = engine.createGoal('Pausable', 'metric', 50, 30);
130
- expect(engine.pauseGoal(goal.id)).toBe(true);
131
- expect(engine.getGoal(goal.id).status).toBe('paused');
132
- // Pausing again fails (not active)
133
- expect(engine.pauseGoal(goal.id)).toBe(false);
134
- // Resume works
135
- expect(engine.resumeGoal(goal.id, 5)).toBe(true);
136
- expect(engine.getGoal(goal.id).status).toBe('active');
137
- // Resuming again fails (not paused)
138
- expect(engine.resumeGoal(goal.id, 5)).toBe(false);
139
- // Pause/resume on non-existent goal
140
- expect(engine.pauseGoal(9999)).toBe(false);
141
- expect(engine.resumeGoal(9999, 0)).toBe(false);
142
- });
143
- // ── 9. getProgress ────────────────────────────────────
144
- it('returns progress report with percent and trend', () => {
145
- const engine = new GoalEngine(db, { brainName: 'test' });
146
- const goal = engine.createGoal('Track me', 'metric', 100, 50, { baselineValue: 0 });
147
- // Record improving data points
148
- engine.recordProgress(1, { metric: 20 });
149
- engine.recordProgress(2, { metric: 40 });
150
- engine.recordProgress(3, { metric: 60 });
151
- const report = engine.getProgress(goal.id);
152
- expect(report).not.toBeNull();
153
- expect(report.goal.title).toBe('Track me');
154
- expect(report.progressPercent).toBe(60); // 60/100 * 100
155
- expect(report.trend).toBe('improving');
156
- expect(report.dataPoints).toBe(3);
157
- // Non-existent goal returns null
158
- expect(engine.getProgress(9999)).toBeNull();
159
- });
160
- it('detects declining trend for higher_is_better', () => {
161
- const engine = new GoalEngine(db, { brainName: 'test' });
162
- const goal = engine.createGoal('Declining', 'metric', 100, 50, { baselineValue: 50 });
163
- engine.recordProgress(1, { metric: 45 });
164
- engine.recordProgress(2, { metric: 40 });
165
- engine.recordProgress(3, { metric: 35 });
166
- const report = engine.getProgress(goal.id);
167
- expect(report.trend).toBe('declining');
168
- // Progress should be 0 because currentValue (35) < baselineValue (50) — negative clamped by formula
169
- expect(report.progressPercent).toBeLessThanOrEqual(0);
170
- });
171
- // ── 10. getStatus ─────────────────────────────────────
172
- it('returns engine status with counts and recent achievements', () => {
173
- const engine = new GoalEngine(db, { brainName: 'test' });
174
- engine.createGoal('Active1', 'a', 10, 50);
175
- engine.createGoal('Active2', 'b', 10, 50);
176
- engine.createGoal('ToAchieve', 'c', 5, 50);
177
- // Achieve one
178
- engine.recordProgress(1, { c: 5 });
179
- engine.checkGoals(1);
180
- // Pause one
181
- engine.pauseGoal(engine.listGoals('active')[0].id);
182
- const status = engine.getStatus();
183
- expect(status.totalGoals).toBe(3);
184
- expect(status.activeGoals).toBe(1);
185
- expect(status.achievedGoals).toBe(1);
186
- expect(status.pausedGoals).toBe(1);
187
- expect(status.failedGoals).toBe(0);
188
- expect(status.recentAchievements).toHaveLength(1);
189
- expect(status.recentAchievements[0].title).toBe('ToAchieve');
190
- expect(status.topActive).toHaveLength(1);
191
- expect(status.uptime).toBeGreaterThanOrEqual(0);
192
- });
193
- // ── 11. runGoalEngineMigration is idempotent ──────────
194
- it('migration is idempotent — can run twice without error', () => {
195
- runGoalEngineMigration(db);
196
- runGoalEngineMigration(db);
197
- // Should still work after double-migration
198
- const engine = new GoalEngine(db, { brainName: 'test' });
199
- const goal = engine.createGoal('After re-migrate', 'x', 10, 20);
200
- expect(goal.id).toBeGreaterThan(0);
201
- });
202
- });
203
- //# sourceMappingURL=goal-engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"goal-engine.test.js","sourceRoot":"","sources":["../../../src/goals/__tests__/goal-engine.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;CACpF,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,EAAqB,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,0DAA0D;IAE1D,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7B,sBAAsB;QACtB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,wGAAwG,CAAC,CAAC,GAAG,EAA6B,CAAC;QACrK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;YACtE,WAAW,EAAE,6BAA6B;YAC1C,IAAI,EAAE,SAAS;YACf,aAAa,EAAE,GAAG;YAClB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEtC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEpC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAE/B,uBAAuB;QACvB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAExB,4BAA4B;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC;QAC3E,MAAM,CAAC,GAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1D,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEtC,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;QACzC,MAAM,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;YACrD,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QAE3F,sCAAsC;QACtC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,iDAAiD;QACvF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE7D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAG,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExD,mCAAmC;QACnC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE/C,eAAe;QACf,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAG,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExD,oCAAoC;QACpC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnD,oCAAoC;QACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpF,+BAA+B;QAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;QACzD,MAAM,CAAC,MAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnC,iCAAiC;QACjC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;QAEtF,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,oGAAoG;QACpG,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAE3C,cAAc;QACd,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAErB,YAAY;QACZ,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,yDAAyD;IAEzD,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAC3B,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAE3B,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};