@db-lyon/flowkit 0.17.2 → 0.18.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.
- package/README.md +53 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/config/index.d.ts +4 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +4 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +1486 -79
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +125 -8
- package/dist/config/schema.js.map +1 -1
- package/dist/config/strict.d.ts +40 -0
- package/dist/config/strict.d.ts.map +1 -0
- package/dist/config/strict.js +146 -0
- package/dist/config/strict.js.map +1 -0
- package/dist/flow/index.d.ts +2 -2
- package/dist/flow/index.d.ts.map +1 -1
- package/dist/flow/index.js +1 -1
- package/dist/flow/index.js.map +1 -1
- package/dist/flow/runner.d.ts +279 -6
- package/dist/flow/runner.d.ts.map +1 -1
- package/dist/flow/runner.js +845 -40
- package/dist/flow/runner.js.map +1 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/task/base-task.d.ts +55 -1
- package/dist/task/base-task.d.ts.map +1 -1
- package/dist/task/base-task.js +39 -0
- package/dist/task/base-task.js.map +1 -1
- package/dist/task/composite.d.ts +66 -0
- package/dist/task/composite.d.ts.map +1 -0
- package/dist/task/composite.js +21 -0
- package/dist/task/composite.js.map +1 -0
- package/dist/task/index.d.ts +7 -1
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +3 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/options-schema.d.ts +51 -0
- package/dist/task/options-schema.d.ts.map +1 -0
- package/dist/task/options-schema.js +102 -0
- package/dist/task/options-schema.js.map +1 -0
- package/dist/task/registry.d.ts +39 -1
- package/dist/task/registry.d.ts.map +1 -1
- package/dist/task/registry.js +44 -2
- package/dist/task/registry.js.map +1 -1
- package/dist/task/warnings.d.ts +25 -0
- package/dist/task/warnings.d.ts.map +1 -0
- package/dist/task/warnings.js +30 -0
- package/dist/task/warnings.js.map +1 -0
- package/docs/api-reference.md +273 -0
- package/docs/configuration.md +262 -1
- package/docs/custom-tasks.md +155 -0
- package/docs/releases.md +47 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -248,6 +248,23 @@ release:
|
|
|
248
248
|
2: { task: deploy }
|
|
249
249
|
```
|
|
250
250
|
|
|
251
|
+
### Step-scoped runtime options
|
|
252
|
+
|
|
253
|
+
Runtime `params` reach every step by default. Opt in with `options_scope: step`
|
|
254
|
+
(on the flow, the runner, or the run) to address them per step, by task name or
|
|
255
|
+
by step path:
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
await runner.run({
|
|
259
|
+
flowName: 'release',
|
|
260
|
+
optionsScope: 'step',
|
|
261
|
+
params: { deploy: { environment: 'prod' }, '2/1': { coverage: 90 } },
|
|
262
|
+
});
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
A selector that matches no step fails the run before anything starts. See
|
|
266
|
+
[docs/configuration.md](docs/configuration.md#step-scoped-runtime-options).
|
|
267
|
+
|
|
251
268
|
### Conditional steps (`when`)
|
|
252
269
|
|
|
253
270
|
A step runs only when its `when` is truthy. It accepts a boolean, or a string
|
|
@@ -270,6 +287,23 @@ new FlowRunner({
|
|
|
270
287
|
});
|
|
271
288
|
```
|
|
272
289
|
|
|
290
|
+
### Preflight checks
|
|
291
|
+
|
|
292
|
+
Flows and steps can declare `checks` evaluated by the same condition evaluator.
|
|
293
|
+
A fired check errors (before the step starts), skips, or warns:
|
|
294
|
+
|
|
295
|
+
```yaml
|
|
296
|
+
steps:
|
|
297
|
+
1:
|
|
298
|
+
task: import
|
|
299
|
+
checks:
|
|
300
|
+
- { when: "editor.has_modal_dialog", action: error, message: A modal dialog is open. }
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
`runner.preflight(flowName, params)` evaluates every check without running
|
|
304
|
+
anything and reports each step as `run`, `skip`, `error` or `unknown`. See
|
|
305
|
+
[docs/configuration.md](docs/configuration.md#preflight-checks).
|
|
306
|
+
|
|
273
307
|
### Continue on failure (`ignore_failure`)
|
|
274
308
|
|
|
275
309
|
By default any failed step aborts the flow. Mark a step `ignore_failure: true`
|
|
@@ -296,7 +330,7 @@ Or mark a step as permanently skipped in YAML:
|
|
|
296
330
|
```yaml
|
|
297
331
|
steps:
|
|
298
332
|
3:
|
|
299
|
-
task: None
|
|
333
|
+
task: None # or `flow: None` for a step that ran a flow
|
|
300
334
|
```
|
|
301
335
|
|
|
302
336
|
### Plan mode
|
|
@@ -317,6 +351,24 @@ their child steps, each annotated with a hierarchical `path` (e.g. `2/1`):
|
|
|
317
351
|
await runner.run({ flowName: 'release', plan: true, expandNestedFlows: true });
|
|
318
352
|
```
|
|
319
353
|
|
|
354
|
+
### Composite tasks
|
|
355
|
+
|
|
356
|
+
A task whose children depend on its input runs each child with `this.step()`.
|
|
357
|
+
Children go through the runner like flow steps (recorded under the parent,
|
|
358
|
+
retried, validated, rolled back), under a flow or on their own via `runTask`.
|
|
359
|
+
An optional static `expand()` lists the children for plans without running
|
|
360
|
+
them. See [docs/custom-tasks.md](docs/custom-tasks.md#composite-tasks).
|
|
361
|
+
|
|
362
|
+
```typescript
|
|
363
|
+
async execute() {
|
|
364
|
+
for (const file of this.options.files) {
|
|
365
|
+
const r = await this.step('asset.import', { file });
|
|
366
|
+
if (!r.success) return r;
|
|
367
|
+
}
|
|
368
|
+
return { success: true };
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
320
372
|
### Lifecycle hooks
|
|
321
373
|
|
|
322
374
|
Attach hooks to observe or react to flow execution:
|
package/dist/.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/index.ts","../src/logger.ts","../src/references.ts","../src/config/deep-merge.ts","../src/config/index.ts","../src/config/loader.ts","../src/config/schema.ts","../src/dag/index.ts","../src/dag/resolver.ts","../src/flow/index.ts","../src/flow/runner.ts","../src/guard/index.ts","../src/guard/pipeline.ts","../src/guard/registry.ts","../src/guard/task-guards.ts","../src/guard/types.ts","../src/task/agent-prompt-task.ts","../src/task/agent-task.ts","../src/task/base-task.ts","../src/task/concurrency.ts","../src/task/index.ts","../src/task/json-schema.ts","../src/task/llm-provider.ts","../src/task/llm-runner.ts","../src/task/redact.ts","../src/task/registry.ts","../src/task/shell-task.ts","../src/task/shell-termination.ts","../src/task/task-resolution.ts","../src/task/token-ledger.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../src/index.ts","../src/logger.ts","../src/references.ts","../src/config/deep-merge.ts","../src/config/index.ts","../src/config/loader.ts","../src/config/schema.ts","../src/config/strict.ts","../src/dag/index.ts","../src/dag/resolver.ts","../src/flow/index.ts","../src/flow/runner.ts","../src/guard/index.ts","../src/guard/pipeline.ts","../src/guard/registry.ts","../src/guard/task-guards.ts","../src/guard/types.ts","../src/task/agent-prompt-task.ts","../src/task/agent-task.ts","../src/task/base-task.ts","../src/task/composite.ts","../src/task/concurrency.ts","../src/task/index.ts","../src/task/json-schema.ts","../src/task/llm-provider.ts","../src/task/llm-runner.ts","../src/task/options-schema.ts","../src/task/redact.ts","../src/task/registry.ts","../src/task/shell-task.ts","../src/task/shell-termination.ts","../src/task/task-resolution.ts","../src/task/token-ledger.ts","../src/task/warnings.ts"],"version":"5.9.3"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { deepMerge } from './deep-merge.js';
|
|
2
|
-
export { TaskOptionsSchema, TaskDefinitionSchema, FlowStepSchema, FlowDefinitionSchema, AgentToolSchema, AgentBudgetSchema, AgentDefinitionSchema, EngineConfigSchema, } from './schema.js';
|
|
3
|
-
export type { TaskOptions, TaskDefinition, FlowStep, FlowDefinition, AgentTool, AgentBudget, AgentDefinition, EngineConfig, } from './schema.js';
|
|
2
|
+
export { TaskOptionsSchema, OptionSpecSchema, OptionSpecsSchema, OutputSpecSchema, OutputSpecsSchema, TaskDefinitionSchema, FlowStepSchema, StepCheckSchema, FlowStepObjectSchema, FlowStepsSchema, refineFlowStep, FlowDefinitionSchema, AgentToolSchema, AgentBudgetSchema, AgentDefinitionSchema, EngineConfigSchema, } from './schema.js';
|
|
3
|
+
export type { TaskOptions, OptionSpec, OptionSpecs, OutputSpec, OutputSpecs, TaskDefinition, FlowStep, StepCheck, FlowDefinition, AgentTool, AgentBudget, AgentDefinition, EngineConfig, } from './schema.js';
|
|
4
4
|
export { loadConfig, loadRawYaml, findConfigFile } from './loader.js';
|
|
5
5
|
export type { LoadConfigOptions, LoadedConfig } from './loader.js';
|
|
6
|
+
export { findUnknownKeys, assertKnownKeys, UnknownConfigKeyError } from './strict.js';
|
|
7
|
+
export type { UnknownConfigKey, FindUnknownKeysOptions } from './strict.js';
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,cAAc,EACd,SAAS,EACT,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { deepMerge } from './deep-merge.js';
|
|
2
|
-
export { TaskOptionsSchema, TaskDefinitionSchema, FlowStepSchema, FlowDefinitionSchema, AgentToolSchema, AgentBudgetSchema, AgentDefinitionSchema, EngineConfigSchema, } from './schema.js';
|
|
2
|
+
export { TaskOptionsSchema, OptionSpecSchema, OptionSpecsSchema, OutputSpecSchema, OutputSpecsSchema, TaskDefinitionSchema, FlowStepSchema, StepCheckSchema, FlowStepObjectSchema, FlowStepsSchema, refineFlowStep, FlowDefinitionSchema, AgentToolSchema, AgentBudgetSchema, AgentDefinitionSchema, EngineConfigSchema, } from './schema.js';
|
|
3
3
|
export { loadConfig, loadRawYaml, findConfigFile } from './loader.js';
|
|
4
|
+
export { findUnknownKeys, assertKnownKeys, UnknownConfigKeyError } from './strict.js';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAkBrB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { z } from 'zod';
|
|
2
|
+
import { type FindUnknownKeysOptions } from './strict.js';
|
|
2
3
|
/**
|
|
3
4
|
* Walk up parent directories looking for `filename`.
|
|
4
5
|
*/
|
|
@@ -17,6 +18,16 @@ export interface LoadConfigOptions<T extends z.ZodType> {
|
|
|
17
18
|
envVar?: string;
|
|
18
19
|
/** Directory to search for config files (default: cwd) */
|
|
19
20
|
configDir?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Reject keys the schema does not declare, anywhere in the merged config,
|
|
23
|
+
* with an `UnknownConfigKeyError` naming each one by path. Off by default:
|
|
24
|
+
* zod's usual behaviour is to drop them silently.
|
|
25
|
+
*
|
|
26
|
+
* Pass an object to name top-level sections the check should leave alone
|
|
27
|
+
* (`{ passthroughKeys: ['bridge', 'editor'] }`). A section the host declares
|
|
28
|
+
* in its own schema is checked like the engine's, and needs no listing.
|
|
29
|
+
*/
|
|
30
|
+
strict?: boolean | FindUnknownKeysOptions;
|
|
20
31
|
}
|
|
21
32
|
export interface LoadedConfig<T> {
|
|
22
33
|
config: T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO;IACpD,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,MAAM,EAAE,CAAC,CAAC;IACV,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAC5C,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAqC1B"}
|
package/dist/config/loader.js
CHANGED
|
@@ -2,6 +2,7 @@ import * as fs from 'node:fs';
|
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as yaml from 'js-yaml';
|
|
4
4
|
import { deepMerge } from './deep-merge.js';
|
|
5
|
+
import { assertKnownKeys } from './strict.js';
|
|
5
6
|
/**
|
|
6
7
|
* Walk up parent directories looking for `filename`.
|
|
7
8
|
*/
|
|
@@ -53,6 +54,9 @@ export function loadConfig(options) {
|
|
|
53
54
|
if (fs.existsSync(localPath)) {
|
|
54
55
|
config = deepMerge(config, loadRawYaml(localPath));
|
|
55
56
|
}
|
|
57
|
+
if (options.strict) {
|
|
58
|
+
assertKnownKeys(options.schema, config, options.strict === true ? {} : options.strict);
|
|
59
|
+
}
|
|
56
60
|
return { config: options.schema.parse(config), configDir };
|
|
57
61
|
}
|
|
58
62
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAA+B,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,QAAiB;IAChE,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAElC,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,0BAA0B,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAgCD;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,OAA6B;IAE7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,4BAA4B;IAC5B,IAAI,MAAM,GAAY,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAE7C,wBAAwB;IACxB,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE1C,+BAA+B;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC"}
|