blitzreels 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,6 +14,10 @@ package for users who prefer scoped installs.
14
14
  After the first real publish:
15
15
 
16
16
  ```bash
17
+ npx blitzreels version
18
+ npx blitzreels doctor
19
+ npx blitzreels prime
20
+ npx blitzreels agent-context --json
17
21
  npx blitzreels auth login
18
22
  ```
19
23
 
@@ -62,25 +66,55 @@ blitzreels media import-youtube --url "https://www.youtube.com/watch?v=..."
62
66
  blitzreels media rename --asset-id ASSET_ID --name "New media name"
63
67
  blitzreels media update --asset-id ASSET_ID --description "B-roll" --folder-id FOLDER_ID
64
68
  blitzreels media move --asset-id ASSET_ID --target-folder-id FOLDER_ID
65
- blitzreels media attach --project-id PROJECT_ID --asset-id ASSET_ID --at 0
69
+ blitzreels media attach --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --duration 4
70
+ blitzreels media attach --project-id PROJECT_ID --asset-id IMAGE_ID --at 6 --duration 1.6 --position-preset center --position-y -230 --width-px 561 --height-px 212 --animation-preset popIn
66
71
  blitzreels media folders list --json
67
72
  blitzreels media folders create --name "B-roll" --icon-type video
68
73
  blitzreels media folders rename --folder-id FOLDER_ID --name "New folder name"
69
74
  blitzreels media folders update --folder-id FOLDER_ID --parent-folder-id root
70
75
  blitzreels media folders delete --folder-id FOLDER_ID --confirm-delete
71
76
 
77
+ blitzreels clips create --source-type youtube --youtube-url "https://www.youtube.com/watch?v=..." --name "MKBHD hero loop" --min-duration 8 --max-duration 12 --qa-mode permissive
78
+ blitzreels clips create --source-type asset --asset-id ASSET_ID --selection-mode time_range --start-seconds 52 --end-seconds 64 --max-duration 12
79
+ blitzreels clips get --clip-id CLIP_ID --json
80
+ blitzreels clips wait --clip-id CLIP_ID --json
81
+ blitzreels clips reselect --clip-id CLIP_ID --selection-mode time_range --start-seconds 52 --end-seconds 64 --min-duration 8 --max-duration 12
82
+ blitzreels clips repair --clip-id CLIP_ID --repair-mode auto
83
+ blitzreels clips export --clip-id CLIP_ID --resolution 1080p --format mp4 --allow-blocking-qa-bypass false
84
+
72
85
  blitzreels project inspect --project-id PROJECT_ID --json
73
86
  blitzreels project timeline --project-id PROJECT_ID --json
74
87
  blitzreels project snapshot --project-id PROJECT_ID --at 00:03
75
88
  blitzreels project snapshots --project-id PROJECT_ID --at 00:01,00:03
76
89
 
90
+ blitzreels timeline transform --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --position-x 0 --position-y -230 --width-px 561 --height-px 212 --keep-aspect-ratio true
91
+ blitzreels timeline move --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --at 00:06 --layer-index 2
92
+ blitzreels timeline delete --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --auto-pack false
93
+
94
+ blitzreels effects zoom add --project-id PROJECT_ID --at 9.8 --duration 1.8 --scale-start 1 --scale-end 1.1 --easing easeInOut
95
+ blitzreels effects zoom update --project-id PROJECT_ID --timeline-item-id EFFECT_TIMELINE_ITEM_ID --scale-end 1.1 --easing easeInOut --duration 1.8
96
+ blitzreels effects mask add --project-id PROJECT_ID --settings-json '{"shape":"rounded","size":{"width":0.8,"height":0.8}}'
97
+ blitzreels effects colorgrade update --project-id PROJECT_ID --timeline-item-id EFFECT_TIMELINE_ITEM_ID --settings-json '{"brightness":1.1,"vignetteEnabled":true}'
98
+
77
99
  blitzreels text add --project-id PROJECT_ID --text "Hook" --at 0 --duration 4
100
+ blitzreels text add --project-id PROJECT_ID --text "SERVEURS MCP" --at 24.33 --duration 2.8 --font-family Pacifico --font-size 82 --color "#17FFA6" --background-color "rgba(3,7,18,0.82)" --top "24%"
78
101
  blitzreels text list --project-id PROJECT_ID --json
79
- blitzreels text update --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID --text "New hook"
102
+ blitzreels text update --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID --text "New hook" --font-family Inter --font-size 64 --color "#FFFFFF"
80
103
  blitzreels text remove --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID
81
104
 
105
+ blitzreels audio search --query "ambient riser" --license cc0 --json
106
+ blitzreels audio import --provider openverse --external-id AUDIO_ID --project-id PROJECT_ID --at 0 --duration 12 --volume 0.5
82
107
  blitzreels audio add --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --volume 0.6
83
108
 
109
+ blitzreels captions words list --project-id PROJECT_ID --match-text "Supabase" --json
110
+ blitzreels captions words text --project-id PROJECT_ID --word-id WORD_ID --text "Supabase"
111
+ blitzreels captions words batch-text --project-id PROJECT_ID --updates-json '[{"word_id":"WORD_ID","new_text":"Supabase"}]'
112
+ blitzreels captions words style --project-id PROJECT_ID --word-id WORD_ID --font-family Pacifico --color "#17FFA6" --scale 1.45
113
+ blitzreels captions words emphasis --project-id PROJECT_ID --match-text "MCP" --emphasis true
114
+ blitzreels captions words delete --project-id PROJECT_ID --word-id WORD_ID
115
+ blitzreels captions words merge --project-id PROJECT_ID --word-ids WORD_ID_1,WORD_ID_2 --text "serveurs MCP"
116
+ blitzreels captions words split --project-id PROJECT_ID --word-id WORD_ID --words "serveurs,MCP"
117
+
84
118
  blitzreels silence plan --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --json
85
119
  blitzreels silence apply --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --confirm-preview
86
120
 
@@ -100,3 +134,73 @@ blitzreels api spec
100
134
  ```
101
135
 
102
136
  Use `--json` for script and AI-agent workflows.
137
+ Use `--fields id,name` with `--json` to trim large responses.
138
+
139
+ ## Agent Workflows
140
+
141
+ ```bash
142
+ blitzreels prime
143
+ blitzreels prime --command "media attach"
144
+ blitzreels agent-context --json
145
+ blitzreels agent-context --command "media attach" --json
146
+ blitzreels schema --command "captions words style" --json
147
+ blitzreels media attach --project-id PROJECT_ID --asset-id ASSET_ID --at 6 --dry-run
148
+ ```
149
+
150
+ `prime` prints plain-language instructions that coding agents should read before
151
+ editing BlitzReels projects. It is inspired by agent-first CLIs like Beans'
152
+ `prime` command. `llms` is an alias.
153
+
154
+ `agent-context` is the machine-readable command contract for agents. It includes
155
+ command metadata, typed flags, examples, read/write markers, destructive markers,
156
+ and known error categories.
157
+
158
+ When the CLI detects an agent environment, command help also points agents to
159
+ `prime` and `agent-context` for the focused command.
160
+
161
+ `--dry-run` is available on mutating commands and prints the API request that
162
+ would be made without making the write request. Destructive dry-runs still require
163
+ the same explicit confirmation flags as real destructive commands.
164
+
165
+ ## Updates
166
+
167
+ The CLI checks `https://www.blitzreels.com/api/cli/releases` at most once per
168
+ day and prints a short update notice to stderr when a newer version is
169
+ available. The notice is skipped for `--json`, CI, non-interactive shells, and
170
+ commands where it would be noisy.
171
+
172
+ ```bash
173
+ blitzreels version
174
+ blitzreels doctor
175
+ npm i -g blitzreels@latest
176
+ ```
177
+
178
+ Set `BLITZREELS_NO_UPDATE_NOTIFIER=1` to disable passive update notices.
179
+
180
+ ## Faulty Commands
181
+
182
+ The CLI validates commands and flags before making API calls. Faulty commands
183
+ print the closest known command or flag, then the command-specific usage.
184
+
185
+ ```bash
186
+ blitzreels caption words list --project-id PROJECT_ID
187
+ # Unknown command: caption words list
188
+ # Did you mean?
189
+ # blitzreels captions words list --project-id ID ...
190
+ ```
191
+
192
+ With `--json`, errors are structured on stderr:
193
+
194
+ ```json
195
+ {
196
+ "error": {
197
+ "code": "unknown_flag",
198
+ "message": "Unknown flag --poject-id for `projects get`.",
199
+ "suggestions": ["--project-id"],
200
+ "usage": "blitzreels projects get --project-id ID [--json]"
201
+ }
202
+ }
203
+ ```
204
+
205
+ Use `blitzreels <command> --help` for command-specific flags without requiring
206
+ auth.
@@ -0,0 +1,25 @@
1
+ import { BlitzReelsClient } from "@blitzreels/sdk";
2
+ import type { Flags, StoredConfig } from "./cli-types.js";
3
+ export declare const CLI_VERSION = "0.1.4";
4
+ export declare const DEFAULT_BASE_URL = "https://www.blitzreels.com/api/v1";
5
+ export declare const CONFIG_PATH: string;
6
+ export declare function loadConfig(): Promise<StoredConfig>;
7
+ export declare function resolveRuntimeConfig({ flags, storedConfig, }: {
8
+ flags: Flags;
9
+ storedConfig: StoredConfig;
10
+ }): StoredConfig;
11
+ export declare function createCliClient({ config, }: {
12
+ config: StoredConfig;
13
+ }): BlitzReelsClient;
14
+ export declare function storeApiKey({ apiKey, baseUrl, }: {
15
+ apiKey: string;
16
+ baseUrl: string | undefined;
17
+ }): Promise<{
18
+ configPath: string;
19
+ keyStorage: StoredConfig["keyStorage"];
20
+ }>;
21
+ export declare function persistLoggedInApiKey({ apiKey, baseUrl, }: {
22
+ apiKey: string;
23
+ baseUrl: string | undefined;
24
+ }): Promise<void>;
25
+ //# sourceMappingURL=cli-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runtime.d.ts","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAA+B,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1D,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,gBAAgB,sCAAsC,CAAC;AACpE,eAAO,MAAM,WAAW,QAAgD,CAAC;AAKzE,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAiBxD;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,YAAY,GACb,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,YAAY,CAYf;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,GACP,EAAE;IACD,MAAM,EAAE,YAAY,CAAC;CACtB,GAAG,gBAAgB,CAQnB;AAED,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CAAE,CAAC,CAW1E;AAED,wBAAsB,qBAAqB,CAAC,EAC1C,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhB"}
@@ -0,0 +1,125 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { BlitzReelsClient } from "@blitzreels/sdk";
6
+ export const CLI_VERSION = "0.1.4";
7
+ export const DEFAULT_BASE_URL = "https://www.blitzreels.com/api/v1";
8
+ export const CONFIG_PATH = join(homedir(), ".blitzreels", "config.json");
9
+ const KEYCHAIN_SERVICE = "BlitzReels CLI";
10
+ const KEYCHAIN_ACCOUNT = "api-key";
11
+ export async function loadConfig() {
12
+ try {
13
+ const raw = await readFile(CONFIG_PATH, "utf8");
14
+ const value = JSON.parse(raw);
15
+ const keyStorage = value.keyStorage === "keychain" ? "keychain" : "config";
16
+ const keychainApiKey = keyStorage === "keychain" ? await readKeychainApiKey() : "";
17
+ return {
18
+ apiKey: keychainApiKey ||
19
+ (typeof value.apiKey === "string" ? value.apiKey : ""),
20
+ baseUrl: typeof value.baseUrl === "string" ? value.baseUrl : undefined,
21
+ keyStorage,
22
+ };
23
+ }
24
+ catch {
25
+ return { apiKey: "", baseUrl: undefined, keyStorage: undefined };
26
+ }
27
+ }
28
+ export function resolveRuntimeConfig({ flags, storedConfig, }) {
29
+ return {
30
+ apiKey: getStringFlag({ flags, name: "api-key" }) ??
31
+ process.env.BLITZREELS_API_KEY ??
32
+ storedConfig.apiKey,
33
+ baseUrl: getStringFlag({ flags, name: "base-url" }) ??
34
+ process.env.BLITZREELS_BASE_URL ??
35
+ storedConfig.baseUrl,
36
+ keyStorage: storedConfig.keyStorage,
37
+ };
38
+ }
39
+ export function createCliClient({ config, }) {
40
+ const clientConfig = {
41
+ apiKey: config.apiKey,
42
+ baseUrl: config.baseUrl,
43
+ fetchFn: undefined,
44
+ userAgent: `blitzreels-cli/${CLI_VERSION}`,
45
+ };
46
+ return new BlitzReelsClient(clientConfig);
47
+ }
48
+ export async function storeApiKey({ apiKey, baseUrl, }) {
49
+ const savedToKeychain = await saveApiKey({ apiKey });
50
+ const keyStorage = savedToKeychain ? "keychain" : "config";
51
+ await writeConfig({
52
+ config: {
53
+ apiKey: savedToKeychain ? "" : apiKey,
54
+ baseUrl,
55
+ keyStorage,
56
+ },
57
+ });
58
+ return { configPath: CONFIG_PATH, keyStorage };
59
+ }
60
+ export async function persistLoggedInApiKey({ apiKey, baseUrl, }) {
61
+ await storeApiKey({ apiKey, baseUrl });
62
+ }
63
+ function getStringFlag({ flags, name, }) {
64
+ const value = flags[name];
65
+ return typeof value === "string" ? value : undefined;
66
+ }
67
+ async function writeConfig({ config, }) {
68
+ await mkdir(dirname(CONFIG_PATH), { recursive: true });
69
+ await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2), {
70
+ mode: 0o600,
71
+ });
72
+ }
73
+ function canUseKeychain() {
74
+ return (process.platform === "darwin" &&
75
+ process.env.BLITZREELS_DISABLE_KEYCHAIN !== "1");
76
+ }
77
+ function runSecurity({ args, }) {
78
+ return new Promise((resolveCommand) => {
79
+ const child = spawn("security", args, {
80
+ stdio: ["ignore", "pipe", "ignore"],
81
+ });
82
+ const chunks = [];
83
+ child.stdout.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
84
+ child.on("error", () => resolveCommand({ stdout: "", ok: false }));
85
+ child.on("close", (code) => resolveCommand({
86
+ stdout: Buffer.concat(chunks).toString("utf8").trim(),
87
+ ok: code === 0,
88
+ }));
89
+ });
90
+ }
91
+ async function saveApiKey({ apiKey }) {
92
+ if (!canUseKeychain()) {
93
+ return false;
94
+ }
95
+ const result = await runSecurity({
96
+ args: [
97
+ "add-generic-password",
98
+ "-a",
99
+ KEYCHAIN_ACCOUNT,
100
+ "-s",
101
+ KEYCHAIN_SERVICE,
102
+ "-w",
103
+ apiKey,
104
+ "-U",
105
+ ],
106
+ });
107
+ return result.ok;
108
+ }
109
+ async function readKeychainApiKey() {
110
+ if (!canUseKeychain()) {
111
+ return "";
112
+ }
113
+ const result = await runSecurity({
114
+ args: [
115
+ "find-generic-password",
116
+ "-a",
117
+ KEYCHAIN_ACCOUNT,
118
+ "-s",
119
+ KEYCHAIN_SERVICE,
120
+ "-w",
121
+ ],
122
+ });
123
+ return result.ok ? result.stdout : "";
124
+ }
125
+ //# sourceMappingURL=cli-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runtime.js","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { BlitzReelsClient } from "@blitzreels/sdk";
2
+ export type Flags = Record<string, string | boolean>;
3
+ export type ParsedArgs = {
4
+ command: string[];
5
+ flags: Flags;
6
+ };
7
+ export type StoredConfig = {
8
+ apiKey: string;
9
+ baseUrl: string | undefined;
10
+ keyStorage: "config" | "keychain" | undefined;
11
+ };
12
+ export type CliContext = {
13
+ args: ParsedArgs;
14
+ json: boolean;
15
+ dryRun: boolean;
16
+ fields: string[] | undefined;
17
+ client: BlitzReelsClient;
18
+ config: StoredConfig;
19
+ };
20
+ //# sourceMappingURL=cli-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-types.d.ts","sourceRoot":"","sources":["../src/cli-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-types.js","sourceRoot":"","sources":["../src/cli-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ export type CommandSpec = {
2
+ command: string[];
3
+ usage: string;
4
+ description: string;
5
+ flags: readonly FlagSpec[];
6
+ examples: readonly string[];
7
+ mutates: boolean;
8
+ destructive: boolean;
9
+ requiresAuth: boolean;
10
+ dryRunSupported: boolean;
11
+ };
12
+ export type FlagType = "string" | "number" | "boolean" | "json" | "csv" | "time";
13
+ export type FlagSpec = {
14
+ name: string;
15
+ type: FlagType;
16
+ required: boolean;
17
+ default: string | number | boolean | null | undefined;
18
+ enum: readonly string[] | undefined;
19
+ description: string;
20
+ };
21
+ export type FlagInput = string | (Partial<FlagSpec> & {
22
+ name: string;
23
+ });
24
+ export declare const GLOBAL_FLAGS: readonly ["api-key", "base-url", "json", "help", "dry-run", "fields"];
25
+ export declare const TEXT_STYLE_FLAGS: readonly ["spec-json", "font-family", "font-size", "font-weight", "color", "background-color", "padding-x", "padding-y", "border-radius", "top", "left", "text-align", "text-shadow", "no-background"];
26
+ export declare const CAPTION_WORD_SELECTOR_FLAGS: readonly ["word-id", "word-ids", "timeline-item-id", "match-text", "match-pattern", "all", "from", "to"];
27
+ export declare const CAPTION_WORD_STYLE_FLAGS: readonly ["style-json", "font-family", "font-weight", "font-style", "color", "active-color", "background-color", "active-animation", "text-transform", "text-shadow", "glow-color", "glow-blur-px", "scale", "offset-x", "offset-y", "rotation-deg", "letter-spacing", "opacity", "clear-existing"];
28
+ export declare function commandSpec({ command, usage, flags, description, examples, mutates, destructive, requiresAuth, dryRunSupported, }: {
29
+ command: string[];
30
+ usage: string;
31
+ flags?: readonly FlagInput[];
32
+ description?: string;
33
+ examples?: readonly string[];
34
+ mutates?: boolean;
35
+ destructive?: boolean;
36
+ requiresAuth?: boolean;
37
+ dryRunSupported?: boolean;
38
+ }): CommandSpec;
39
+ export declare function commandLabel({ command }: {
40
+ command: string[];
41
+ }): string;
42
+ export declare function commandsEqual(left: string[], right: string[]): boolean;
43
+ export declare function flagsForCommand({ spec }: {
44
+ spec: CommandSpec;
45
+ }): FlagSpec[];
46
+ export declare function suggestCommandSpecs({ command, specs, }: {
47
+ command: string[];
48
+ specs: CommandSpec[];
49
+ }): CommandSpec[];
50
+ export declare function suggestValues({ value, candidates, }: {
51
+ value: string;
52
+ candidates: string[];
53
+ }): string[];
54
+ //# sourceMappingURL=command-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-metadata.d.ts","sourceRoot":"","sources":["../src/command-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,MAAM,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE,eAAO,MAAM,YAAY,uEAOf,CAAC;AAEX,eAAO,MAAM,gBAAgB,wMAenB,CAAC;AAEX,eAAO,MAAM,2BAA2B,0GAS9B,CAAC;AAEX,eAAO,MAAM,wBAAwB,qSAoB3B,CAAC;AAEX,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,KAAU,EACV,WAAW,EACX,QAAQ,EACR,OAAO,EACP,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,EAAE;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,WAAW,CAed;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAEvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAKtE;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG,QAAQ,EAAE,CAgB3E;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB,GAAG,WAAW,EAAE,CAqBhB;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,UAAU,GACX,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,MAAM,EAAE,CAUX"}