dotdo 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/cli/README.md +238 -0
  2. package/cli/agent.ts +72 -0
  3. package/cli/bin.js +44 -0
  4. package/cli/bin.ts +38 -0
  5. package/cli/build.ts +157 -0
  6. package/cli/commands/auth/login.ts +14 -0
  7. package/cli/commands/auth/logout.ts +6 -0
  8. package/cli/commands/auth/whoami.ts +16 -0
  9. package/cli/commands/deploy-multi.ts +245 -0
  10. package/cli/commands/dev/deploy.ts +100 -0
  11. package/cli/commands/dev/dev.ts +95 -0
  12. package/cli/commands/dev/logs.ts +91 -0
  13. package/cli/commands/dev-local.ts +88 -0
  14. package/cli/commands/do-ops.ts +314 -0
  15. package/cli/commands/index.ts +100 -0
  16. package/cli/commands/init.ts +247 -0
  17. package/cli/commands/introspect/emitter.ts +315 -0
  18. package/cli/commands/introspect/index.ts +193 -0
  19. package/cli/commands/link.ts +598 -0
  20. package/cli/commands/snippets.ts +415 -0
  21. package/cli/commands/tunnel.ts +239 -0
  22. package/cli/device-auth.ts +289 -0
  23. package/cli/fallback.ts +12 -0
  24. package/cli/index.ts +121 -0
  25. package/cli/main.ts +246 -0
  26. package/cli/mcp-stdio.ts +790 -0
  27. package/cli/package.json +62 -0
  28. package/cli/runtime/do-registry.ts +193 -0
  29. package/cli/runtime/embedded-db.ts +344 -0
  30. package/cli/runtime/index.ts +9 -0
  31. package/cli/runtime/miniflare-adapter.ts +162 -0
  32. package/cli/sandbox.ts +82 -0
  33. package/cli/src/args.ts +174 -0
  34. package/cli/src/auth.ts +55 -0
  35. package/cli/src/commands/call.ts +84 -0
  36. package/cli/src/commands/charge.ts +96 -0
  37. package/cli/src/commands/config.ts +115 -0
  38. package/cli/src/commands/email.ts +112 -0
  39. package/cli/src/commands/llm.ts +115 -0
  40. package/cli/src/commands/queue.ts +134 -0
  41. package/cli/src/commands/text.ts +86 -0
  42. package/cli/src/config.ts +185 -0
  43. package/cli/src/output.ts +246 -0
  44. package/cli/src/rpc.ts +192 -0
  45. package/cli/utils/config.ts +282 -0
  46. package/cli/utils/detect.ts +73 -0
  47. package/cli/utils/index.ts +15 -0
  48. package/cli/utils/logger.ts +232 -0
  49. package/dist/ai/template-literals.js +2 -2
  50. package/dist/ai/template-literals.js.map +1 -1
  51. package/dist/api/middleware/auth.js +3 -2
  52. package/dist/api/middleware/auth.js.map +1 -1
  53. package/dist/db/iceberg/inverted-index.js +1 -1
  54. package/dist/db/iceberg/inverted-index.js.map +1 -1
  55. package/dist/db/iceberg/puffin.js.map +1 -1
  56. package/dist/db/json-indexes.js.map +1 -1
  57. package/dist/db/objects.js.map +1 -1
  58. package/dist/db/primitives/dag-scheduler/index.js +1 -1
  59. package/dist/db/primitives/dag-scheduler/index.js.map +1 -1
  60. package/dist/db/primitives/observability.js.map +1 -1
  61. package/dist/db/primitives/schema-evolution.js.map +1 -1
  62. package/dist/db/primitives/temporal-store.js.map +1 -1
  63. package/dist/db/primitives/typed-column-store.js.map +1 -1
  64. package/dist/db/primitives/utils/duration.js.map +1 -1
  65. package/dist/db/primitives/utils/murmur3.js +12 -14
  66. package/dist/db/primitives/utils/murmur3.js.map +1 -1
  67. package/dist/db/primitives/window-manager.js.map +1 -1
  68. package/dist/db/stores.js.map +1 -1
  69. package/dist/db/things.js.map +1 -1
  70. package/dist/lib/DODispatcher.js +2 -2
  71. package/dist/lib/DODispatcher.js.map +1 -1
  72. package/dist/lib/auto-wiring.js.map +1 -1
  73. package/dist/lib/channels/email.js +1 -1
  74. package/dist/lib/channels/email.js.map +1 -1
  75. package/dist/lib/channels/slack-blockkit.js.map +1 -1
  76. package/dist/lib/cloudflare/ai.js +1 -1
  77. package/dist/lib/cloudflare/ai.js.map +1 -1
  78. package/dist/lib/cloudflare/kv.js +1 -1
  79. package/dist/lib/cloudflare/kv.js.map +1 -1
  80. package/dist/lib/cloudflare/r2.js +3 -3
  81. package/dist/lib/cloudflare/r2.js.map +1 -1
  82. package/dist/lib/cloudflare/vectorize.js.map +1 -1
  83. package/dist/lib/cloudflare/workflows.js.map +1 -1
  84. package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -1
  85. package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -1
  86. package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -1
  87. package/dist/lib/executors/HumanFunctionExecutor.js +1 -1
  88. package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -1
  89. package/dist/lib/executors/ParallelStepExecutor.js.map +1 -1
  90. package/dist/lib/experiments.js.map +1 -1
  91. package/dist/lib/flags/store.js.map +1 -1
  92. package/dist/lib/functions/FunctionComposition.js.map +1 -1
  93. package/dist/lib/functions/FunctionMiddleware.js.map +1 -1
  94. package/dist/lib/functions/FunctionRegistry.js.map +1 -1
  95. package/dist/lib/humans/templates.js.map +1 -1
  96. package/dist/lib/identity.js +2 -2
  97. package/dist/lib/identity.js.map +1 -1
  98. package/dist/lib/logging/index.js.map +1 -1
  99. package/dist/lib/mixins/bash.js +1 -73
  100. package/dist/lib/mixins/bash.js.map +1 -1
  101. package/dist/lib/mixins/git.js +0 -5
  102. package/dist/lib/mixins/git.js.map +1 -1
  103. package/dist/lib/mixins/npm.js.map +1 -1
  104. package/dist/lib/noun-id.js.map +1 -1
  105. package/dist/lib/rate-limit/sliding-window.js.map +1 -1
  106. package/dist/lib/rpc/bindings.js.map +1 -1
  107. package/dist/lib/safe-stringify.js.map +1 -1
  108. package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -1
  109. package/dist/lib/sqids.js.map +1 -1
  110. package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -1
  111. package/dist/lib/sql/adapters/pgsql-parser.js +19 -18
  112. package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -1
  113. package/dist/metrics/hunch.js.map +1 -1
  114. package/dist/objects/API.js +1 -1
  115. package/dist/objects/API.js.map +1 -1
  116. package/dist/objects/Agent.js.map +1 -1
  117. package/dist/objects/Browser.js.map +1 -1
  118. package/dist/objects/CLI.js.map +1 -1
  119. package/dist/objects/DOBase.js.map +1 -1
  120. package/dist/objects/DOCache.js +153 -0
  121. package/dist/objects/DOCache.js.map +1 -0
  122. package/dist/objects/DOFull.js.map +1 -1
  123. package/dist/objects/Entity.js.map +1 -1
  124. package/dist/objects/Human.js.map +1 -1
  125. package/dist/objects/IcebergMetadataDO.js.map +1 -1
  126. package/dist/objects/IntegrationsDO.js.map +1 -1
  127. package/dist/objects/ObservabilityBroadcaster.js.map +1 -1
  128. package/dist/objects/Package.js.map +1 -1
  129. package/dist/objects/Product.js +1 -1
  130. package/dist/objects/Product.js.map +1 -1
  131. package/dist/objects/SaaS.js.map +1 -1
  132. package/dist/objects/SandboxDO.js.map +1 -1
  133. package/dist/objects/Service.js.map +1 -1
  134. package/dist/objects/VectorShardDO.js +9 -7
  135. package/dist/objects/VectorShardDO.js.map +1 -1
  136. package/dist/objects/Workflow.js.map +1 -1
  137. package/dist/objects/WorkflowFactory.js.map +1 -1
  138. package/dist/objects/WorkflowRuntime.js.map +1 -1
  139. package/dist/objects/lifecycle/Branch.js.map +1 -1
  140. package/dist/objects/lifecycle/Clone.js +1 -1
  141. package/dist/objects/lifecycle/Clone.js.map +1 -1
  142. package/dist/objects/lifecycle/Compact.js.map +1 -1
  143. package/dist/objects/lifecycle/Shard.js.map +1 -1
  144. package/dist/objects/persistence/checkpoint-manager.js.map +1 -1
  145. package/dist/objects/persistence/migration-runner.js.map +1 -1
  146. package/dist/objects/persistence/replication-manager.js +2 -2
  147. package/dist/objects/persistence/replication-manager.js.map +1 -1
  148. package/dist/objects/persistence/tiered-storage-manager.js.map +1 -1
  149. package/dist/objects/persistence/wal-manager.js.map +1 -1
  150. package/dist/objects/transport/auth-layer.js.map +1 -1
  151. package/dist/objects/transport/chain.js.map +1 -1
  152. package/dist/objects/transport/mcp-server.js +7 -6
  153. package/dist/objects/transport/mcp-server.js.map +1 -1
  154. package/dist/objects/transport/rest-autowire.js +3 -2
  155. package/dist/objects/transport/rest-autowire.js.map +1 -1
  156. package/dist/objects/transport/rest-router.js.map +1 -1
  157. package/dist/objects/transport/rpc-server.js +18 -15
  158. package/dist/objects/transport/rpc-server.js.map +1 -1
  159. package/dist/objects/transport/shared.js +2 -1
  160. package/dist/objects/transport/shared.js.map +1 -1
  161. package/dist/snippets/artifacts-ingest.js.map +1 -1
  162. package/dist/snippets/artifacts-serve.js.map +1 -1
  163. package/dist/snippets/search.js.map +1 -1
  164. package/dist/workflows/ScheduleManager.js.map +1 -1
  165. package/dist/workflows/StepResultStorage.js.map +1 -1
  166. package/dist/workflows/WaitForEventManager.js.map +1 -1
  167. package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -1
  168. package/dist/workflows/compat/inngest/index.js.map +1 -1
  169. package/dist/workflows/compat/qstash/index.js.map +1 -1
  170. package/dist/workflows/compat/temporal/client.js.map +1 -1
  171. package/dist/workflows/compat/temporal/index.js.map +1 -1
  172. package/dist/workflows/compat/trigger/index.js.map +1 -1
  173. package/dist/workflows/compat/utils/index.js.map +1 -1
  174. package/dist/workflows/context/correlation.js +2 -2
  175. package/dist/workflows/context/correlation.js.map +1 -1
  176. package/dist/workflows/context/experiment.js +1 -1
  177. package/dist/workflows/context/experiment.js.map +1 -1
  178. package/dist/workflows/context/flag.js +1 -1
  179. package/dist/workflows/context/flag.js.map +1 -1
  180. package/dist/workflows/context/measure.js +1 -1
  181. package/dist/workflows/context/measure.js.map +1 -1
  182. package/dist/workflows/context/rate-limit.js.map +1 -1
  183. package/dist/workflows/data/entity-events/entity-events.js.map +1 -1
  184. package/dist/workflows/data/experiment/index.js.map +1 -1
  185. package/dist/workflows/data/goal/context.js +1 -1
  186. package/dist/workflows/data/goal/context.js.map +1 -1
  187. package/dist/workflows/data/measure/index.js +1 -1
  188. package/dist/workflows/data/measure/index.js.map +1 -1
  189. package/dist/workflows/data/stream/index.js +10 -76
  190. package/dist/workflows/data/stream/index.js.map +1 -1
  191. package/dist/workflows/data/track/context.js.map +1 -1
  192. package/dist/workflows/data/view/context.js.map +1 -1
  193. package/dist/workflows/domain.js.map +1 -1
  194. package/dist/workflows/flags.js +1 -1
  195. package/dist/workflows/flags.js.map +1 -1
  196. package/dist/workflows/hash.js.map +1 -1
  197. package/dist/workflows/on.js +1 -1
  198. package/dist/workflows/on.js.map +1 -1
  199. package/dist/workflows/schedule-builder.js.map +1 -1
  200. package/dist/workflows/visibility/index.js +0 -2
  201. package/dist/workflows/visibility/index.js.map +1 -1
  202. package/dist/workflows/visibility/query-parser.js.map +1 -1
  203. package/package.json +18 -3
  204. package/dist/api/analytics/router.js +0 -601
  205. package/dist/api/analytics/router.js.map +0 -1
  206. package/dist/api/index.js +0 -158
  207. package/dist/api/index.js.map +0 -1
  208. package/dist/api/middleware/error-handling.js +0 -176
  209. package/dist/api/middleware/error-handling.js.map +0 -1
  210. package/dist/api/middleware/request-id.js +0 -21
  211. package/dist/api/middleware/request-id.js.map +0 -1
  212. package/dist/api/pages.js +0 -1180
  213. package/dist/api/pages.js.map +0 -1
  214. package/dist/api/routes/api.js +0 -612
  215. package/dist/api/routes/api.js.map +0 -1
  216. package/dist/api/routes/browsers.js +0 -471
  217. package/dist/api/routes/browsers.js.map +0 -1
  218. package/dist/api/routes/do.js +0 -188
  219. package/dist/api/routes/do.js.map +0 -1
  220. package/dist/api/routes/mcp.js +0 -459
  221. package/dist/api/routes/mcp.js.map +0 -1
  222. package/dist/api/routes/obs.js +0 -445
  223. package/dist/api/routes/obs.js.map +0 -1
  224. package/dist/api/routes/openapi.js +0 -794
  225. package/dist/api/routes/openapi.js.map +0 -1
  226. package/dist/api/routes/rpc.js +0 -1103
  227. package/dist/api/routes/rpc.js.map +0 -1
  228. package/dist/api/routes/sandboxes.js +0 -389
  229. package/dist/api/routes/sandboxes.js.map +0 -1
  230. package/dist/api/test-do.js +0 -38
  231. package/dist/api/test-do.js.map +0 -1
  232. package/dist/api/types.js +0 -11
  233. package/dist/api/types.js.map +0 -1
  234. package/dist/cli/bin.js +0 -2
  235. package/dist/cli/main.js +0 -52342
  236. package/dist/do/bash.js +0 -35
  237. package/dist/do/bash.js.map +0 -1
  238. package/dist/do/fs.js +0 -25
  239. package/dist/do/fs.js.map +0 -1
  240. package/dist/do/full.js +0 -61
  241. package/dist/do/full.js.map +0 -1
  242. package/dist/do/git.js +0 -28
  243. package/dist/do/git.js.map +0 -1
  244. package/dist/do/index.js +0 -52
  245. package/dist/do/index.js.map +0 -1
  246. package/dist/lib/agent/tools/bash.js +0 -336
  247. package/dist/lib/agent/tools/bash.js.map +0 -1
  248. package/dist/lib/agent/tools/edit.js +0 -157
  249. package/dist/lib/agent/tools/edit.js.map +0 -1
  250. package/dist/lib/agent/tools/glob.js +0 -137
  251. package/dist/lib/agent/tools/glob.js.map +0 -1
  252. package/dist/lib/agent/tools/grep.js +0 -315
  253. package/dist/lib/agent/tools/grep.js.map +0 -1
  254. package/dist/lib/agent/tools/index.js +0 -71
  255. package/dist/lib/agent/tools/index.js.map +0 -1
  256. package/dist/lib/agent/tools/read.js +0 -212
  257. package/dist/lib/agent/tools/read.js.map +0 -1
  258. package/dist/lib/agent/tools/types.js +0 -197
  259. package/dist/lib/agent/tools/types.js.map +0 -1
  260. package/dist/lib/agent/tools/write.js +0 -159
  261. package/dist/lib/agent/tools/write.js.map +0 -1
  262. package/dist/lib/mixins/index.js +0 -29
  263. package/dist/lib/mixins/index.js.map +0 -1
  264. package/dist/primitives/bashx/src/ast/analyze.js +0 -1472
  265. package/dist/primitives/bashx/src/ast/analyze.js.map +0 -1
  266. package/dist/primitives/bashx/src/ast/parser.js +0 -1488
  267. package/dist/primitives/bashx/src/ast/parser.js.map +0 -1
  268. package/dist/primitives/bashx/src/do/commands/crypto.js +0 -1954
  269. package/dist/primitives/bashx/src/do/commands/crypto.js.map +0 -1
  270. package/dist/primitives/bashx/src/do/commands/data-processing.js +0 -1812
  271. package/dist/primitives/bashx/src/do/commands/data-processing.js.map +0 -1
  272. package/dist/primitives/bashx/src/do/commands/extended-utils.js +0 -804
  273. package/dist/primitives/bashx/src/do/commands/extended-utils.js.map +0 -1
  274. package/dist/primitives/bashx/src/do/commands/math-control.js +0 -1122
  275. package/dist/primitives/bashx/src/do/commands/math-control.js.map +0 -1
  276. package/dist/primitives/bashx/src/do/commands/posix-utils.js +0 -1015
  277. package/dist/primitives/bashx/src/do/commands/posix-utils.js.map +0 -1
  278. package/dist/primitives/bashx/src/do/commands/system-utils.js +0 -687
  279. package/dist/primitives/bashx/src/do/commands/system-utils.js.map +0 -1
  280. package/dist/primitives/bashx/src/do/commands/test-command.js +0 -523
  281. package/dist/primitives/bashx/src/do/commands/test-command.js.map +0 -1
  282. package/dist/primitives/bashx/src/do/commands/text-processing.js +0 -1550
  283. package/dist/primitives/bashx/src/do/commands/text-processing.js.map +0 -1
  284. package/dist/primitives/bashx/src/do/container-executor.js +0 -429
  285. package/dist/primitives/bashx/src/do/container-executor.js.map +0 -1
  286. package/dist/primitives/bashx/src/do/index.js +0 -668
  287. package/dist/primitives/bashx/src/do/index.js.map +0 -1
  288. package/dist/primitives/bashx/src/do/tiered-executor.js +0 -2647
  289. package/dist/primitives/bashx/src/do/tiered-executor.js.map +0 -1
  290. package/dist/primitives/bashx/src/do/worker.js +0 -352
  291. package/dist/primitives/bashx/src/do/worker.js.map +0 -1
  292. package/dist/primitives/bashx/src/types.js +0 -10
  293. package/dist/primitives/bashx/src/types.js.map +0 -1
  294. package/dist/primitives/fsx/core/backend.js +0 -480
  295. package/dist/primitives/fsx/core/backend.js.map +0 -1
  296. package/dist/primitives/fsx/core/constants.js +0 -140
  297. package/dist/primitives/fsx/core/constants.js.map +0 -1
  298. package/dist/primitives/fsx/core/fsx.js +0 -1184
  299. package/dist/primitives/fsx/core/fsx.js.map +0 -1
  300. package/dist/primitives/fsx/core/glob/glob.js +0 -438
  301. package/dist/primitives/fsx/core/glob/glob.js.map +0 -1
  302. package/dist/primitives/fsx/core/glob/index.js +0 -8
  303. package/dist/primitives/fsx/core/glob/index.js.map +0 -1
  304. package/dist/primitives/fsx/core/glob/match.js +0 -392
  305. package/dist/primitives/fsx/core/glob/match.js.map +0 -1
  306. package/dist/primitives/fsx/core/types.js +0 -307
  307. package/dist/primitives/fsx/core/types.js.map +0 -1
  308. package/dist/sdk/capnweb-compat.js +0 -42
  309. package/dist/sdk/capnweb-compat.js.map +0 -1
  310. package/dist/sdk/client.js +0 -20
  311. package/dist/sdk/client.js.map +0 -1
  312. package/dist/sdk/index.js +0 -17
  313. package/dist/sdk/index.js.map +0 -1
@@ -1,601 +0,0 @@
1
- /**
2
- * Analytics Query Router
3
- *
4
- * Entry point for all analytics queries. Routes requests to the appropriate
5
- * execution path based on query type and complexity.
6
- *
7
- * Endpoints:
8
- * - POST /v1/search - Vector similarity search
9
- * - GET /v1/lookup/:table/:key - Point lookup (Iceberg)
10
- * - POST /v1/query - SQL query (browser or server execution)
11
- *
12
- * @module api/analytics/router
13
- * @see docs/plans/unified-analytics-architecture.md
14
- */
15
- import { Hono } from 'hono';
16
- // ============================================================================
17
- // ROUTER SETUP
18
- // ============================================================================
19
- export const analyticsRouter = new Hono();
20
- // ============================================================================
21
- // VALIDATION HELPERS
22
- // ============================================================================
23
- /**
24
- * Validate vector search request
25
- */
26
- function validateVectorSearchRequest(body) {
27
- const errors = [];
28
- if (!body || typeof body !== 'object') {
29
- return { valid: false, errors: ['Request body must be a JSON object'] };
30
- }
31
- const req = body;
32
- // Validate query vector (required)
33
- if (!req.query) {
34
- errors.push('query vector is required');
35
- }
36
- else if (!Array.isArray(req.query)) {
37
- errors.push('query must be an array of numbers');
38
- }
39
- else if (req.query.length === 0) {
40
- errors.push('query vector cannot be empty');
41
- }
42
- else if (!req.query.every((v) => typeof v === 'number' && !isNaN(v))) {
43
- errors.push('query must contain only valid numbers');
44
- }
45
- // Validate k (optional, default: 10)
46
- if (req.k !== undefined) {
47
- if (typeof req.k !== 'number' || !Number.isInteger(req.k)) {
48
- errors.push('k must be an integer');
49
- }
50
- else if (req.k < 1 || req.k > 1000) {
51
- errors.push('k must be between 1 and 1000');
52
- }
53
- }
54
- // Validate metric (optional, default: cosine)
55
- if (req.metric !== undefined) {
56
- const validMetrics = ['cosine', 'euclidean', 'dot_product'];
57
- if (!validMetrics.includes(req.metric)) {
58
- errors.push(`metric must be one of: ${validMetrics.join(', ')}`);
59
- }
60
- }
61
- // Validate filters (optional)
62
- if (req.filters !== undefined) {
63
- if (!Array.isArray(req.filters)) {
64
- errors.push('filters must be an array');
65
- }
66
- else {
67
- for (let i = 0; i < req.filters.length; i++) {
68
- const filter = req.filters[i];
69
- if (!filter.field || typeof filter.field !== 'string') {
70
- errors.push(`filters[${i}].field must be a string`);
71
- }
72
- if (!filter.operator || typeof filter.operator !== 'string') {
73
- errors.push(`filters[${i}].operator must be a string`);
74
- }
75
- if (filter.value === undefined) {
76
- errors.push(`filters[${i}].value is required`);
77
- }
78
- }
79
- }
80
- }
81
- // Validate nprobe (optional, default: 20)
82
- if (req.nprobe !== undefined) {
83
- if (typeof req.nprobe !== 'number' || !Number.isInteger(req.nprobe)) {
84
- errors.push('nprobe must be an integer');
85
- }
86
- else if (req.nprobe < 1 || req.nprobe > 100) {
87
- errors.push('nprobe must be between 1 and 100');
88
- }
89
- }
90
- if (errors.length > 0) {
91
- return { valid: false, errors };
92
- }
93
- return {
94
- valid: true,
95
- data: {
96
- query: req.query,
97
- k: req.k ?? 10,
98
- metric: req.metric ?? 'cosine',
99
- filters: req.filters,
100
- namespace: req.namespace,
101
- includeVectors: req.includeVectors ?? false,
102
- includeMetadata: req.includeMetadata ?? true,
103
- nprobe: req.nprobe ?? 20,
104
- },
105
- };
106
- }
107
- /**
108
- * Validate SQL query request
109
- */
110
- function validateSQLQueryRequest(body) {
111
- const errors = [];
112
- if (!body || typeof body !== 'object') {
113
- return { valid: false, errors: ['Request body must be a JSON object'] };
114
- }
115
- const req = body;
116
- // Validate SQL (required)
117
- if (!req.sql) {
118
- errors.push('sql is required');
119
- }
120
- else if (typeof req.sql !== 'string') {
121
- errors.push('sql must be a string');
122
- }
123
- else if (req.sql.trim().length === 0) {
124
- errors.push('sql cannot be empty');
125
- }
126
- // Validate executionHint (optional)
127
- if (req.executionHint !== undefined) {
128
- const validHints = ['client', 'server', 'auto'];
129
- if (!validHints.includes(req.executionHint)) {
130
- errors.push(`executionHint must be one of: ${validHints.join(', ')}`);
131
- }
132
- }
133
- // Validate limit (optional, default: 10000)
134
- if (req.limit !== undefined) {
135
- if (typeof req.limit !== 'number' || !Number.isInteger(req.limit)) {
136
- errors.push('limit must be an integer');
137
- }
138
- else if (req.limit < 1 || req.limit > 100000) {
139
- errors.push('limit must be between 1 and 100000');
140
- }
141
- }
142
- // Validate timeout (optional, default: 30000)
143
- if (req.timeout !== undefined) {
144
- if (typeof req.timeout !== 'number' || !Number.isInteger(req.timeout)) {
145
- errors.push('timeout must be an integer');
146
- }
147
- else if (req.timeout < 1000 || req.timeout > 300000) {
148
- errors.push('timeout must be between 1000 and 300000 ms');
149
- }
150
- }
151
- if (errors.length > 0) {
152
- return { valid: false, errors };
153
- }
154
- return {
155
- valid: true,
156
- data: {
157
- sql: req.sql,
158
- executionHint: req.executionHint ?? 'auto',
159
- clientCapabilities: req.clientCapabilities,
160
- params: req.params,
161
- limit: req.limit ?? 10000,
162
- timeout: req.timeout ?? 30000,
163
- },
164
- };
165
- }
166
- // ============================================================================
167
- // QUERY CLASSIFICATION
168
- // ============================================================================
169
- /**
170
- * Classify a SQL query to determine execution path
171
- */
172
- function classifyQuery(sql) {
173
- const normalizedSql = sql.toLowerCase().trim();
174
- // Point lookup: SELECT with WHERE on primary key
175
- const isPointLookup = normalizedSql.includes('select') &&
176
- normalizedSql.includes('where') &&
177
- (normalizedSql.includes('= ') || normalizedSql.includes('= \'')) &&
178
- !normalizedSql.includes('join') &&
179
- !normalizedSql.includes('group by') &&
180
- !normalizedSql.includes('order by');
181
- // Analytics: Aggregations, GROUP BY, window functions
182
- const isAnalytics = normalizedSql.includes('group by') ||
183
- normalizedSql.includes('count(') ||
184
- normalizedSql.includes('sum(') ||
185
- normalizedSql.includes('avg(') ||
186
- normalizedSql.includes('max(') ||
187
- normalizedSql.includes('min(') ||
188
- normalizedSql.includes('over(');
189
- // Federated: JOINs or UNION
190
- const isFederated = normalizedSql.includes('join') || normalizedSql.includes('union');
191
- let type;
192
- let executionPath;
193
- let estimatedCost;
194
- if (isPointLookup) {
195
- type = 'point_lookup';
196
- executionPath = 'point_lookup';
197
- estimatedCost = {
198
- computeMs: 100,
199
- dataSizeBytes: 1024,
200
- monetaryCost: 0.00014,
201
- };
202
- }
203
- else if (isFederated) {
204
- type = 'federated';
205
- executionPath = 'federated_query';
206
- estimatedCost = {
207
- computeMs: 400,
208
- dataSizeBytes: 10 * 1024 * 1024, // 10MB estimate
209
- monetaryCost: 0.002,
210
- };
211
- }
212
- else if (isAnalytics) {
213
- type = 'analytics';
214
- executionPath = 'browser_execute'; // Prefer browser for analytics
215
- estimatedCost = {
216
- computeMs: 3000,
217
- dataSizeBytes: 50 * 1024 * 1024, // 50MB estimate
218
- monetaryCost: 0.009, // Just egress
219
- };
220
- }
221
- else {
222
- // Default to browser execution for simple queries
223
- type = 'analytics';
224
- executionPath = 'browser_execute';
225
- estimatedCost = {
226
- computeMs: 1000,
227
- dataSizeBytes: 10 * 1024 * 1024,
228
- monetaryCost: 0.009,
229
- };
230
- }
231
- return { type, executionPath, estimatedCost };
232
- }
233
- // ============================================================================
234
- // ERROR HELPERS
235
- // ============================================================================
236
- /**
237
- * Create an analytics error response
238
- */
239
- function analyticsError(code, message, details) {
240
- return { code, message, details };
241
- }
242
- // ============================================================================
243
- // VECTOR SEARCH ENDPOINT
244
- // ============================================================================
245
- /**
246
- * POST /v1/search - Vector similarity search
247
- *
248
- * Routes queries to VectorSearchCoordinatorDO for execution.
249
- * Supports filtering, multiple distance metrics, and configurable recall.
250
- */
251
- analyticsRouter.post('/v1/search', async (c) => {
252
- const startTime = Date.now();
253
- // Parse and validate request
254
- let body;
255
- try {
256
- body = await c.req.json();
257
- }
258
- catch {
259
- return c.json({ error: analyticsError('INVALID_QUERY', 'Invalid JSON body') }, 400);
260
- }
261
- const validation = validateVectorSearchRequest(body);
262
- if (!validation.valid) {
263
- return c.json({
264
- error: analyticsError('INVALID_VECTOR', 'Validation failed', {
265
- errors: validation.errors,
266
- }),
267
- }, 400);
268
- }
269
- const request = validation.data;
270
- // TODO: Route to VectorSearchCoordinatorDO when implemented
271
- // For now, return a mock response structure
272
- // Check if VECTORS binding is available (Cloudflare Vectorize)
273
- if (c.env.VECTORS) {
274
- try {
275
- // Use Vectorize as fallback/primary engine
276
- const results = await c.env.VECTORS.query(new Float32Array(request.query), {
277
- topK: request.k,
278
- returnMetadata: request.includeMetadata ? 'all' : 'none',
279
- returnValues: request.includeVectors,
280
- });
281
- const searchResults = results.matches.map((match) => ({
282
- id: match.id,
283
- score: match.score,
284
- metadata: match.metadata,
285
- vector: match.values ? Array.from(match.values) : undefined,
286
- }));
287
- const response = {
288
- results: searchResults,
289
- timing: {
290
- total: Date.now() - startTime,
291
- },
292
- stats: {
293
- clustersSearched: 1, // Vectorize handles internally
294
- vectorsScanned: results.count,
295
- cacheHitRate: 0, // Not available from Vectorize
296
- },
297
- };
298
- return c.json(response);
299
- }
300
- catch (error) {
301
- return c.json({
302
- error: analyticsError('INTERNAL_ERROR', 'Vector search failed', {
303
- message: error instanceof Error ? error.message : 'Unknown error',
304
- }),
305
- }, 500);
306
- }
307
- }
308
- // Return placeholder response when VectorSearchCoordinatorDO is not available
309
- const response = {
310
- results: [],
311
- timing: {
312
- total: Date.now() - startTime,
313
- centroidSearch: 0,
314
- clusterLoad: 0,
315
- rerank: 0,
316
- },
317
- stats: {
318
- clustersSearched: 0,
319
- vectorsScanned: 0,
320
- cacheHitRate: 0,
321
- },
322
- };
323
- return c.json(response);
324
- });
325
- // ============================================================================
326
- // POINT LOOKUP ENDPOINT
327
- // ============================================================================
328
- /**
329
- * GET /v1/lookup/:table/:key - Point lookup
330
- *
331
- * Routes to IcebergMetadataDO for partition planning, then fetches from R2.
332
- * Optimized for single-record retrieval with partition hints.
333
- */
334
- analyticsRouter.get('/v1/lookup/:table/:key', async (c) => {
335
- const startTime = Date.now();
336
- const table = c.req.param('table');
337
- const key = c.req.param('key');
338
- // Parse optional partition hints from query params
339
- const partition = {};
340
- const ns = c.req.query('ns');
341
- const type = c.req.query('type');
342
- const date = c.req.query('date');
343
- if (ns)
344
- partition.ns = ns;
345
- if (type)
346
- partition.type = type;
347
- if (date)
348
- partition.date = date;
349
- // Validate table name
350
- if (!table || !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {
351
- return c.json({ error: analyticsError('INVALID_QUERY', 'Invalid table name') }, 400);
352
- }
353
- // Validate key
354
- if (!key || key.length === 0) {
355
- return c.json({ error: analyticsError('INVALID_QUERY', 'Key is required') }, 400);
356
- }
357
- // TODO: Route to IcebergMetadataDO when implemented
358
- // For now, check if R2 is available and attempt direct lookup
359
- const metadataLookupStart = Date.now();
360
- const metadataLookupTime = Date.now() - metadataLookupStart;
361
- const partitionPruneStart = Date.now();
362
- const partitionPruneTime = Date.now() - partitionPruneStart;
363
- const dataFetchStart = Date.now();
364
- // Try R2 lookup if binding available
365
- if (c.env.R2) {
366
- try {
367
- // Construct path based on table and key
368
- // Convention: data/{table}/{partition_path}/{key}.parquet or data/{table}/{key}.json
369
- const basePath = `data/${table}`;
370
- let objectPath = `${basePath}/${key}.json`;
371
- // Apply partition path if available
372
- if (Object.keys(partition).length > 0) {
373
- const partitionPath = Object.entries(partition)
374
- .filter(([, v]) => v !== undefined)
375
- .map(([k, v]) => `${k}=${v}`)
376
- .join('/');
377
- objectPath = `${basePath}/${partitionPath}/${key}.json`;
378
- }
379
- const object = await c.env.R2.get(objectPath);
380
- if (object) {
381
- const data = await object.json();
382
- const dataFetchTime = Date.now() - dataFetchStart;
383
- const response = {
384
- found: true,
385
- data,
386
- timing: {
387
- total: Date.now() - startTime,
388
- metadataLookup: metadataLookupTime,
389
- partitionPrune: partitionPruneTime,
390
- dataFetch: dataFetchTime,
391
- },
392
- source: {
393
- table,
394
- partition: Object.entries(partition)
395
- .filter(([, v]) => v !== undefined)
396
- .map(([k, v]) => `${k}=${v}`)
397
- .join('/') || 'default',
398
- file: objectPath,
399
- },
400
- };
401
- return c.json(response);
402
- }
403
- }
404
- catch (error) {
405
- // Fall through to not found
406
- }
407
- }
408
- // Record not found
409
- const dataFetchTime = Date.now() - dataFetchStart;
410
- const response = {
411
- found: false,
412
- timing: {
413
- total: Date.now() - startTime,
414
- metadataLookup: metadataLookupTime,
415
- partitionPrune: partitionPruneTime,
416
- dataFetch: dataFetchTime,
417
- },
418
- source: {
419
- table,
420
- partition: Object.entries(partition)
421
- .filter(([, v]) => v !== undefined)
422
- .map(([k, v]) => `${k}=${v}`)
423
- .join('/') || 'default',
424
- file: '',
425
- },
426
- };
427
- return c.json(response, 404);
428
- });
429
- // ============================================================================
430
- // SQL QUERY ENDPOINT
431
- // ============================================================================
432
- /**
433
- * POST /v1/query - SQL query
434
- *
435
- * Parses SQL, generates query plan, and either:
436
- * - Returns plan for client-side DuckDB-WASM execution
437
- * - Executes server-side for complex queries
438
- */
439
- analyticsRouter.post('/v1/query', async (c) => {
440
- const startTime = Date.now();
441
- // Parse and validate request
442
- let body;
443
- try {
444
- body = await c.req.json();
445
- }
446
- catch {
447
- return c.json({ error: analyticsError('INVALID_QUERY', 'Invalid JSON body') }, 400);
448
- }
449
- const validation = validateSQLQueryRequest(body);
450
- if (!validation.valid) {
451
- return c.json({
452
- error: analyticsError('INVALID_QUERY', 'Validation failed', {
453
- errors: validation.errors,
454
- }),
455
- }, 400);
456
- }
457
- const request = validation.data;
458
- const planningStart = Date.now();
459
- // Classify the query
460
- const classification = classifyQuery(request.sql);
461
- const planningTime = Date.now() - planningStart;
462
- // Determine execution path
463
- const shouldExecuteOnClient = request.executionHint === 'client' ||
464
- (request.executionHint === 'auto' &&
465
- classification.executionPath === 'browser_execute' &&
466
- request.clientCapabilities?.duckdbWasm);
467
- if (shouldExecuteOnClient) {
468
- // Generate query plan for client-side execution
469
- const plan = {
470
- type: 'client_execute',
471
- dataFiles: [], // TODO: Generate presigned URLs from Iceberg manifests
472
- optimizedSql: request.sql, // TODO: Apply pushdown optimizations
473
- estimates: {
474
- rowCount: 1000, // Placeholder
475
- dataSizeBytes: classification.estimatedCost.dataSizeBytes,
476
- executionTimeMs: classification.estimatedCost.computeMs,
477
- },
478
- pushdownFilters: [], // TODO: Extract from WHERE clause
479
- };
480
- // If R2 is available, we could generate presigned URLs here
481
- // For now, return the plan structure
482
- const response = {
483
- plan,
484
- timing: {
485
- total: Date.now() - startTime,
486
- planning: planningTime,
487
- },
488
- };
489
- return c.json(response);
490
- }
491
- // Server-side execution
492
- const executionStart = Date.now();
493
- // TODO: Execute via D1 or federated query engine
494
- // For now, attempt D1 execution if available
495
- if (c.env.DB || c.env.ANALYTICS_DB) {
496
- const db = c.env.ANALYTICS_DB || c.env.DB;
497
- try {
498
- const stmt = db.prepare(request.sql);
499
- const boundStmt = request.params ? stmt.bind(...request.params) : stmt;
500
- const result = await boundStmt.all();
501
- const executionTime = Date.now() - executionStart;
502
- const serializationStart = Date.now();
503
- const data = result.results;
504
- const serializationTime = Date.now() - serializationStart;
505
- // Extract column metadata from first row
506
- const columns = data.length > 0
507
- ? Object.keys(data[0]).map((name) => ({
508
- name,
509
- type: typeof data[0][name],
510
- }))
511
- : [];
512
- const limit = request.limit ?? 10000;
513
- const response = {
514
- data: data.slice(0, limit),
515
- columns,
516
- rowCount: Math.min(data.length, limit),
517
- truncated: data.length > limit,
518
- timing: {
519
- total: Date.now() - startTime,
520
- planning: planningTime,
521
- execution: executionTime,
522
- serialization: serializationTime,
523
- },
524
- };
525
- return c.json(response);
526
- }
527
- catch (error) {
528
- return c.json({
529
- error: analyticsError('INVALID_QUERY', 'Query execution failed', {
530
- message: error instanceof Error ? error.message : 'Unknown error',
531
- }),
532
- }, 400);
533
- }
534
- }
535
- // No execution engine available - return plan for client execution
536
- const plan = {
537
- type: 'client_execute',
538
- dataFiles: [],
539
- optimizedSql: request.sql,
540
- estimates: {
541
- rowCount: 0,
542
- dataSizeBytes: 0,
543
- executionTimeMs: 0,
544
- },
545
- };
546
- const response = {
547
- plan,
548
- timing: {
549
- total: Date.now() - startTime,
550
- planning: planningTime,
551
- },
552
- };
553
- return c.json(response);
554
- });
555
- // ============================================================================
556
- // UTILITY ENDPOINTS
557
- // ============================================================================
558
- /**
559
- * GET /v1/health - Health check
560
- */
561
- analyticsRouter.get('/v1/health', (c) => {
562
- return c.json({
563
- status: 'ok',
564
- timestamp: new Date().toISOString(),
565
- capabilities: {
566
- vectorSearch: !!c.env.VECTORS,
567
- r2Storage: !!c.env.R2,
568
- d1Database: !!(c.env.DB || c.env.ANALYTICS_DB),
569
- },
570
- });
571
- });
572
- /**
573
- * GET /v1/classify - Classify a query without executing
574
- */
575
- analyticsRouter.post('/v1/classify', async (c) => {
576
- let body;
577
- try {
578
- body = await c.req.json();
579
- }
580
- catch {
581
- return c.json({ error: analyticsError('INVALID_QUERY', 'Invalid JSON body') }, 400);
582
- }
583
- const req = body;
584
- if (!req.sql || typeof req.sql !== 'string') {
585
- return c.json({ error: analyticsError('INVALID_QUERY', 'sql is required') }, 400);
586
- }
587
- const classification = classifyQuery(req.sql);
588
- return c.json(classification);
589
- });
590
- // ============================================================================
591
- // ERROR HANDLING
592
- // ============================================================================
593
- /**
594
- * Catch-all for unknown routes
595
- */
596
- analyticsRouter.all('*', (c) => {
597
- return c.json({
598
- error: analyticsError('INVALID_QUERY', `Not found: ${c.req.path}`),
599
- }, 404);
600
- });
601
- //# sourceMappingURL=router.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../api/analytics/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAwB3B,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,IAAI,EAAqB,CAAA;AAE5D,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,2BAA2B,CAAC,IAAa;IAChD,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,oCAAoC,CAAC,EAAE,CAAA;IACzE,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAA;IAE3C,mCAAmC;IACnC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACzC,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAClD,CAAC;SAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;IAC7C,CAAC;SAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;IACtD,CAAC;IAED,qCAAqC;IACrC,IAAI,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACrC,CAAC;aAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;QAC7E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAwB,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,0BAA0B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QACzC,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAA4B,CAAA;gBACxD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACtD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAA;gBACrD,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC5D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAA;gBACxD,CAAC;gBACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAA;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAC1C,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IACjC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,IAAI,EAAE;YACJ,KAAK,EAAE,GAAG,CAAC,KAAiB;YAC5B,CAAC,EAAG,GAAG,CAAC,CAAY,IAAI,EAAE;YAC1B,MAAM,EAAG,GAAG,CAAC,MAAyB,IAAI,QAAQ;YAClD,OAAO,EAAE,GAAG,CAAC,OAAqC;YAClD,SAAS,EAAE,GAAG,CAAC,SAA+B;YAC9C,cAAc,EAAG,GAAG,CAAC,cAA0B,IAAI,KAAK;YACxD,eAAe,EAAG,GAAG,CAAC,eAA2B,IAAI,IAAI;YACzD,MAAM,EAAG,GAAG,CAAC,MAAiB,IAAI,EAAE;SACrC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,IAAa;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,oCAAoC,CAAC,EAAE,CAAA;IACzE,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAA;IAE3C,0BAA0B;IAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAChC,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;SAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;IAED,oCAAoC;IACpC,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAuB,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QACzC,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC3C,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI,IAAI,GAAG,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IACjC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,IAAI,EAAE;YACJ,GAAG,EAAE,GAAG,CAAC,GAAa;YACtB,aAAa,EAAG,GAAG,CAAC,aAA8C,IAAI,MAAM;YAC5E,kBAAkB,EAAE,GAAG,CAAC,kBAAoD;YAC5E,MAAM,EAAE,GAAG,CAAC,MAA0D;YACtE,KAAK,EAAG,GAAG,CAAC,KAAgB,IAAI,KAAK;YACrC,OAAO,EAAG,GAAG,CAAC,OAAkB,IAAI,KAAK;SAC1C;KACF,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAE9C,iDAAiD;IACjD,MAAM,aAAa,GACjB,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC/B,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/B,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;QACnC,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAErC,sDAAsD;IACtD,MAAM,WAAW,GACf,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;QAClC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9B,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9B,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9B,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9B,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAEjC,4BAA4B;IAC5B,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAErF,IAAI,IAAe,CAAA;IACnB,IAAI,aAA4B,CAAA;IAChC,IAAI,aAAmD,CAAA;IAEvD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,GAAG,cAAc,CAAA;QACrB,aAAa,GAAG,cAAc,CAAA;QAC9B,aAAa,GAAG;YACd,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,OAAO;SACtB,CAAA;IACH,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,IAAI,GAAG,WAAW,CAAA;QAClB,aAAa,GAAG,iBAAiB,CAAA;QACjC,aAAa,GAAG;YACd,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,gBAAgB;YACjD,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,IAAI,GAAG,WAAW,CAAA;QAClB,aAAa,GAAG,iBAAiB,CAAA,CAAC,+BAA+B;QACjE,aAAa,GAAG;YACd,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,gBAAgB;YACjD,YAAY,EAAE,KAAK,EAAE,cAAc;SACpC,CAAA;IACH,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,IAAI,GAAG,WAAW,CAAA;QAClB,aAAa,GAAG,iBAAiB,CAAA;QACjC,aAAa,GAAG;YACd,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC/B,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,CAAA;AAC/C,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,cAAc,CACrB,IAAwB,EACxB,OAAe,EACf,OAAiC;IAEjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AACnC,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;GAKG;AACH,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAE5B,6BAA6B;IAC7B,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,EAC/D,GAAG,CACJ,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAA;IACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,IAAI,CACX;YACE,KAAK,EAAE,cAAc,CAAC,gBAAgB,EAAE,mBAAmB,EAAE;gBAC3D,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC;SACH,EACD,GAAG,CACJ,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAK,CAAA;IAEhC,4DAA4D;IAC5D,4CAA4C;IAE5C,+DAA+D;IAC/D,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,2CAA2C;YAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACzE,IAAI,EAAE,OAAO,CAAC,CAAC;gBACf,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;gBACxD,YAAY,EAAE,OAAO,CAAC,cAAc;aACrC,CAAC,CAAA;YAEF,MAAM,aAAa,GAAyB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC1E,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAA+C;gBAC/D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;aAC5D,CAAC,CAAC,CAAA;YAEH,MAAM,QAAQ,GAAyB;gBACrC,OAAO,EAAE,aAAa;gBACtB,MAAM,EAAE;oBACN,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBAC9B;gBACD,KAAK,EAAE;oBACL,gBAAgB,EAAE,CAAC,EAAE,+BAA+B;oBACpD,cAAc,EAAE,OAAO,CAAC,KAAK;oBAC7B,YAAY,EAAE,CAAC,EAAE,+BAA+B;iBACjD;aACF,CAAA;YAED,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,cAAc,CAAC,gBAAgB,EAAE,sBAAsB,EAAE;oBAC9D,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAClE,CAAC;aACH,EACD,GAAG,CACJ,CAAA;QACH,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,MAAM,QAAQ,GAAyB;QACrC,OAAO,EAAE,EAAE;QACX,MAAM,EAAE;YACN,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAC7B,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,CAAC;SACV;QACD,KAAK,EAAE;YACL,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;SAChB;KACF,CAAA;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEF,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;GAKG;AACH,eAAe,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE9B,mDAAmD;IACnD,MAAM,SAAS,GAAoB,EAAE,CAAA;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAEhC,IAAI,EAAE;QAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACzB,IAAI,IAAI;QAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAA;IAC/B,IAAI,IAAI;QAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAA;IAE/B,sBAAsB;IACtB,IAAI,CAAC,KAAK,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,oBAAoB,CAAC,EAAE,EAChE,GAAG,CACJ,CAAA;IACH,CAAC;IAED,eAAe;IACf,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAE,EAC7D,GAAG,CACJ,CAAA;IACH,CAAC;IAED,oDAAoD;IACpD,8DAA8D;IAE9D,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAA;IAE3D,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAA;IAE3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEjC,qCAAqC;IACrC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACb,IAAI,CAAC;YACH,wCAAwC;YACxC,qFAAqF;YACrF,MAAM,QAAQ,GAAG,QAAQ,KAAK,EAAE,CAAA;YAChC,IAAI,UAAU,GAAG,GAAG,QAAQ,IAAI,GAAG,OAAO,CAAA;YAE1C,oCAAoC;YACpC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;qBAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;qBAClC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;qBAC5B,IAAI,CAAC,GAAG,CAAC,CAAA;gBACZ,UAAU,GAAG,GAAG,QAAQ,IAAI,aAAa,IAAI,GAAG,OAAO,CAAA;YACzD,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YAE7C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAA6B,CAAA;gBAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAA;gBAEjD,MAAM,QAAQ,GAAwB;oBACpC,KAAK,EAAE,IAAI;oBACX,IAAI;oBACJ,MAAM,EAAE;wBACN,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAC7B,cAAc,EAAE,kBAAkB;wBAClC,cAAc,EAAE,kBAAkB;wBAClC,SAAS,EAAE,aAAa;qBACzB;oBACD,MAAM,EAAE;wBACN,KAAK;wBACL,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;6BACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;6BAClC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;6BAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;wBACzB,IAAI,EAAE,UAAU;qBACjB;iBACF,CAAA;gBAED,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAA;IAEjD,MAAM,QAAQ,GAAwB;QACpC,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE;YACN,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAC7B,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,kBAAkB;YAClC,SAAS,EAAE,aAAa;SACzB;QACD,MAAM,EAAE;YACN,KAAK;YACL,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;iBACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;iBAClC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;YACzB,IAAI,EAAE,EAAE;SACT;KACF,CAAA;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AAC9B,CAAC,CAAC,CAAA;AAEF,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;;;;;GAMG;AACH,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAE5B,6BAA6B;IAC7B,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,EAC/D,GAAG,CACJ,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,IAAI,CACX;YACE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,EAAE;gBAC1D,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC;SACH,EACD,GAAG,CACJ,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAK,CAAA;IAChC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEhC,qBAAqB;IACrB,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAA;IAE/C,2BAA2B;IAC3B,MAAM,qBAAqB,GACzB,OAAO,CAAC,aAAa,KAAK,QAAQ;QAClC,CAAC,OAAO,CAAC,aAAa,KAAK,MAAM;YAC/B,cAAc,CAAC,aAAa,KAAK,iBAAiB;YAClD,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAA;IAE3C,IAAI,qBAAqB,EAAE,CAAC;QAC1B,gDAAgD;QAChD,MAAM,IAAI,GAAc;YACtB,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,EAAE,EAAE,uDAAuD;YACtE,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,qCAAqC;YAChE,SAAS,EAAE;gBACT,QAAQ,EAAE,IAAI,EAAE,cAAc;gBAC9B,aAAa,EAAE,cAAc,CAAC,aAAa,CAAC,aAAa;gBACzD,eAAe,EAAE,cAAc,CAAC,aAAa,CAAC,SAAS;aACxD;YACD,eAAe,EAAE,EAAE,EAAE,kCAAkC;SACxD,CAAA;QAED,4DAA4D;QAC5D,qCAAqC;QAErC,MAAM,QAAQ,GAAsB;YAClC,IAAI;YACJ,MAAM,EAAE;gBACN,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAC7B,QAAQ,EAAE,YAAY;aACvB;SACF,CAAA;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACzB,CAAC;IAED,wBAAwB;IACxB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEjC,iDAAiD;IACjD,6CAA6C;IAE7C,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAEtE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAA;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAA;YAEjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAoC,CAAA;YACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAA;YAEzD,yCAAyC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBAC7B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAClC,IAAI;oBACJ,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;iBAC3B,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAA;YAEN,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAA;YACpC,MAAM,QAAQ,GAAqB;gBACjC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;gBAC1B,OAAO;gBACP,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;gBACtC,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK;gBAC9B,MAAM,EAAE;oBACN,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAC7B,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE,aAAa;oBACxB,aAAa,EAAE,iBAAiB;iBACjC;aACF,CAAA;YAED,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,wBAAwB,EAAE;oBAC/D,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAClE,CAAC;aACH,EACD,GAAG,CACJ,CAAA;QACH,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,MAAM,IAAI,GAAc;QACtB,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,OAAO,CAAC,GAAG;QACzB,SAAS,EAAE;YACT,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,CAAC;SACnB;KACF,CAAA;IAED,MAAM,QAAQ,GAAsB;QAClC,IAAI;QACJ,MAAM,EAAE;YACN,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAC7B,QAAQ,EAAE,YAAY;SACvB;KACF,CAAA;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEF,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;IACtC,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,YAAY,EAAE;YACZ,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO;YAC7B,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACrB,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;SAC/C;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC/C,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,EAC/D,GAAG,CACJ,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAA;IAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAE,EAC7D,GAAG,CACJ,CAAA;IACH,CAAC;IAED,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,GAAa,CAAC,CAAA;IACvD,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;AAC/B,CAAC,CAAC,CAAA;AAEF,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;IAC7B,OAAO,CAAC,CAAC,IAAI,CACX;QACE,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;KACnE,EACD,GAAG,CACJ,CAAA;AACH,CAAC,CAAC,CAAA"}