@pensar/apex 0.0.29 → 0.0.31-canary.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/build/index.js CHANGED
@@ -27102,82 +27102,10 @@ async function render(node, rendererConfig = {}) {
27102
27102
  _render(import_react7.default.createElement(AppContext.Provider, { value: { keyHandler: renderer.keyInput, renderer } }, import_react7.default.createElement(ErrorBoundary, null, node)), renderer.root);
27103
27103
  }
27104
27104
 
27105
- // src/tui/components/ascii-art.tsx
27106
- import sharp from "sharp";
27107
-
27108
27105
  // node_modules/@opentui/react/jsx-dev-runtime.js
27109
27106
  var import_jsx_dev_runtime2 = __toESM(require_jsx_dev_runtime(), 1);
27110
27107
 
27111
- // src/tui/components/ascii-art.tsx
27112
- var ASCII_SETS = {
27113
- simple: " .:-=+*#%@",
27114
- detailed: " .'`^\",:;Il!i><~+_-?][}{1)(|\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$",
27115
- medium: " .,:;i1tfLCG08@",
27116
- blocks: " ░▒▓█",
27117
- default: " .:-=+*#%@"
27118
- };
27119
- var ASCII_CHARS = ASCII_SETS.medium;
27120
- async function convertImageToColoredAscii(path2, scale = 1, maxWidth, aspectRatio = 0.5, invert = false) {
27121
- const metadata = await sharp(path2, { density: 300 }).metadata();
27122
- const originalWidth = metadata.width ?? 100;
27123
- const originalHeight = metadata.height ?? 100;
27124
- let scaledWidth = Math.round(originalWidth * scale);
27125
- let scaledHeight = Math.round(originalHeight * scale);
27126
- scaledHeight = Math.round(scaledHeight * aspectRatio);
27127
- if (maxWidth && scaledWidth > maxWidth) {
27128
- const ratio = maxWidth / scaledWidth;
27129
- scaledWidth = maxWidth;
27130
- scaledHeight = Math.round(scaledHeight * ratio);
27131
- }
27132
- const resizeOptions = {
27133
- width: scaledWidth,
27134
- height: scaledHeight,
27135
- fit: "fill",
27136
- kernel: "lanczos3",
27137
- background: { r: 0, g: 0, b: 0, alpha: 0 }
27138
- };
27139
- const colorBuffer = await sharp(path2, { density: 300 }).resize(resizeOptions).ensureAlpha().raw().toBuffer({ resolveWithObject: true });
27140
- const grayscaleBuffer = await sharp(colorBuffer.data, {
27141
- raw: {
27142
- width: colorBuffer.info.width,
27143
- height: colorBuffer.info.height,
27144
- channels: 4,
27145
- premultiplied: false
27146
- }
27147
- }).grayscale().raw().toBuffer({ resolveWithObject: true });
27148
- const { width: w, height: h2 } = grayscaleBuffer.info;
27149
- const result = [];
27150
- for (let y = 0;y < h2; y++) {
27151
- const row = [];
27152
- for (let x = 0;x < w; x++) {
27153
- const grayIdx = y * w + x;
27154
- const colorIdx = (y * w + x) * 4;
27155
- const alpha = colorBuffer.data[colorIdx + 3] ?? 0;
27156
- if (alpha < 128) {
27157
- row.push({
27158
- char: " ",
27159
- r: 0,
27160
- g: 0,
27161
- b: 0
27162
- });
27163
- continue;
27164
- }
27165
- let brightness = grayscaleBuffer.data[grayIdx] ?? 0;
27166
- if (invert) {
27167
- brightness = 255 - brightness;
27168
- }
27169
- const charIndex = Math.floor(brightness / 255 * (ASCII_CHARS.length - 1));
27170
- row.push({
27171
- char: ASCII_CHARS[charIndex] ?? " ",
27172
- r: colorBuffer.data[colorIdx] ?? 0,
27173
- g: colorBuffer.data[colorIdx + 1] ?? 0,
27174
- b: colorBuffer.data[colorIdx + 2] ?? 0
27175
- });
27176
- }
27177
- result.push(row);
27178
- }
27179
- return result;
27180
- }
27108
+ // src/tui/components/ascii-art-component.tsx
27181
27109
  function ColoredAsciiArt({ ascii, title }) {
27182
27110
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
27183
27111
  position: "absolute",
@@ -64848,6 +64776,21 @@ function createSummarizationStream(messages, opts, model) {
64848
64776
  }
64849
64777
  };
64850
64778
  }
64779
+ async function consumeStream2(stream, {
64780
+ onTextDelta,
64781
+ onToolCall,
64782
+ onToolResult
64783
+ }) {
64784
+ for await (const delta of stream.fullStream) {
64785
+ if (delta.type === "text-delta") {
64786
+ onTextDelta?.(delta);
64787
+ } else if (delta.type === "tool-call") {
64788
+ onToolCall?.(delta);
64789
+ } else if (delta.type === "tool-result") {
64790
+ onToolResult?.(delta);
64791
+ }
64792
+ }
64793
+ }
64851
64794
 
64852
64795
  // src/core/ai/ai.ts
64853
64796
  function wrapStreamWithErrorHandler(originalStream, messagesContainer, opts, model, silent) {
@@ -64911,7 +64854,8 @@ function streamResponse(opts) {
64911
64854
  abortSignal,
64912
64855
  activeTools,
64913
64856
  silent,
64914
- authConfig
64857
+ authConfig,
64858
+ onFinish
64915
64859
  } = opts;
64916
64860
  const messagesContainer = { current: messages || [] };
64917
64861
  const providerModel = getProviderModel(model, authConfig);
@@ -64966,7 +64910,8 @@ function streamResponse(opts) {
64966
64910
  }
64967
64911
  throw repairError;
64968
64912
  }
64969
- }
64913
+ },
64914
+ onFinish
64970
64915
  });
64971
64916
  return wrapStreamWithErrorHandler(response, messagesContainer, opts, providerModel, silent);
64972
64917
  } catch (error46) {
@@ -70040,6 +69985,243 @@ Begin your analysis now.
70040
69985
  };
70041
69986
  }
70042
69987
 
69988
+ // src/core/messages/index.ts
69989
+ import fs3 from "fs";
69990
+
69991
+ // src/core/messages/types.ts
69992
+ var ToolMessageObject = exports_external.object({
69993
+ role: exports_external.literal("tool"),
69994
+ status: exports_external.enum(["pending", "completed"]),
69995
+ toolCallId: exports_external.string(),
69996
+ content: exports_external.string(),
69997
+ args: exports_external.record(exports_external.string(), exports_external.any()),
69998
+ toolName: exports_external.string(),
69999
+ createdAt: exports_external.coerce.date()
70000
+ });
70001
+ var SystemModelMessageObject = exports_external.object({
70002
+ role: exports_external.literal("system"),
70003
+ content: exports_external.string(),
70004
+ createdAt: exports_external.coerce.date(),
70005
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
70006
+ });
70007
+ var TextPartObject = exports_external.object({
70008
+ type: exports_external.literal("text"),
70009
+ text: exports_external.string(),
70010
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
70011
+ });
70012
+ var FilePartObject = exports_external.object({
70013
+ type: exports_external.literal("file"),
70014
+ data: exports_external.union([
70015
+ exports_external.string(),
70016
+ exports_external.instanceof(Uint8Array),
70017
+ exports_external.instanceof(ArrayBuffer),
70018
+ exports_external.instanceof(Buffer),
70019
+ exports_external.url()
70020
+ ]),
70021
+ filename: exports_external.string().optional(),
70022
+ mediaType: exports_external.string(),
70023
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
70024
+ });
70025
+ var ReasoningPartObject = exports_external.object({
70026
+ type: exports_external.literal("reasoning"),
70027
+ text: exports_external.string(),
70028
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
70029
+ });
70030
+ var ToolCallPartObject = exports_external.object({
70031
+ type: exports_external.literal("tool-call"),
70032
+ toolCallId: exports_external.string(),
70033
+ toolName: exports_external.string(),
70034
+ input: exports_external.unknown(),
70035
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
70036
+ providerExecuted: exports_external.boolean().optional()
70037
+ });
70038
+ var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
70039
+ exports_external.object({
70040
+ type: exports_external.literal("text"),
70041
+ value: exports_external.string()
70042
+ }),
70043
+ exports_external.object({
70044
+ type: exports_external.literal("json"),
70045
+ value: exports_external.any()
70046
+ }),
70047
+ exports_external.object({
70048
+ type: exports_external.literal("error-text"),
70049
+ value: exports_external.string()
70050
+ }),
70051
+ exports_external.object({
70052
+ type: exports_external.literal("error-json"),
70053
+ value: exports_external.any()
70054
+ }),
70055
+ exports_external.object({
70056
+ type: exports_external.literal("content"),
70057
+ value: exports_external.array(exports_external.discriminatedUnion("type", [
70058
+ exports_external.object({
70059
+ type: exports_external.literal("text"),
70060
+ text: exports_external.string()
70061
+ }),
70062
+ exports_external.object({
70063
+ type: exports_external.literal("media"),
70064
+ data: exports_external.string(),
70065
+ mediaType: exports_external.string()
70066
+ })
70067
+ ]))
70068
+ })
70069
+ ]);
70070
+ var ToolResultPartObject = exports_external.object({
70071
+ type: exports_external.literal("tool-result"),
70072
+ toolCallId: exports_external.string(),
70073
+ toolName: exports_external.string(),
70074
+ output: ToolResultOutputObject,
70075
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
70076
+ });
70077
+ var AssistantModelMessageObject = exports_external.object({
70078
+ role: exports_external.literal("assistant"),
70079
+ content: exports_external.union([
70080
+ exports_external.string(),
70081
+ exports_external.array(exports_external.discriminatedUnion("type", [
70082
+ TextPartObject,
70083
+ FilePartObject,
70084
+ ReasoningPartObject,
70085
+ ToolCallPartObject,
70086
+ ToolResultPartObject
70087
+ ]))
70088
+ ]),
70089
+ createdAt: exports_external.coerce.date(),
70090
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
70091
+ });
70092
+ var UserModelMessageObject = exports_external.object({
70093
+ role: exports_external.literal("user"),
70094
+ content: exports_external.union([
70095
+ exports_external.string(),
70096
+ exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
70097
+ ]),
70098
+ createdAt: exports_external.coerce.date(),
70099
+ providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
70100
+ });
70101
+ var ModelMessageObject = exports_external.discriminatedUnion("role", [
70102
+ SystemModelMessageObject,
70103
+ UserModelMessageObject,
70104
+ AssistantModelMessageObject,
70105
+ ToolMessageObject
70106
+ ]);
70107
+
70108
+ // src/core/messages/index.ts
70109
+ function getMessages(session) {
70110
+ const messages = fs3.readFileSync(session.rootPath + "/messages.json", "utf8");
70111
+ return ModelMessageObject.array().parse(JSON.parse(messages));
70112
+ }
70113
+ function saveMessages(session, messages) {
70114
+ fs3.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
70115
+ }
70116
+ function saveSubagentMessages(orchestratorSession, subagentId, messages) {
70117
+ const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
70118
+ if (!fs3.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
70119
+ fs3.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
70120
+ recursive: true
70121
+ });
70122
+ }
70123
+ if (!fs3.existsSync(subagentDir)) {
70124
+ fs3.mkdirSync(subagentDir, { recursive: true });
70125
+ }
70126
+ fs3.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
70127
+ }
70128
+ function mapMessages(messages) {
70129
+ const result = [];
70130
+ const toolResults = new Map;
70131
+ for (const message of messages) {
70132
+ if (message.role === "tool") {
70133
+ const content = message.content;
70134
+ if (Array.isArray(content)) {
70135
+ for (const part of content) {
70136
+ if (part.type === "tool-result") {
70137
+ toolResults.set(part.toolCallId, part.output);
70138
+ }
70139
+ }
70140
+ }
70141
+ }
70142
+ }
70143
+ for (const message of messages) {
70144
+ if (message.role === "system") {
70145
+ result.push({
70146
+ role: "system",
70147
+ content: message.content,
70148
+ createdAt: new Date,
70149
+ ...message.providerOptions && {
70150
+ providerOptions: message.providerOptions
70151
+ }
70152
+ });
70153
+ continue;
70154
+ }
70155
+ if (message.role === "user") {
70156
+ const content = typeof message.content === "string" ? message.content : message.content.map((part) => part.type === "text" ? part.text : "").join("");
70157
+ result.push({
70158
+ role: "user",
70159
+ content,
70160
+ createdAt: new Date,
70161
+ ...message.providerOptions && {
70162
+ providerOptions: message.providerOptions
70163
+ }
70164
+ });
70165
+ continue;
70166
+ }
70167
+ if (message.role === "tool") {
70168
+ continue;
70169
+ }
70170
+ if (message.role === "assistant") {
70171
+ const content = message.content;
70172
+ if (typeof content === "string") {
70173
+ result.push({
70174
+ role: "assistant",
70175
+ content,
70176
+ createdAt: new Date,
70177
+ ...message.providerOptions && {
70178
+ providerOptions: message.providerOptions
70179
+ }
70180
+ });
70181
+ continue;
70182
+ }
70183
+ const textParts = [];
70184
+ const toolCalls = [];
70185
+ for (const part of content) {
70186
+ if (part.type === "text") {
70187
+ textParts.push(part.text);
70188
+ } else if (part.type === "tool-call") {
70189
+ toolCalls.push({
70190
+ toolCallId: part.toolCallId,
70191
+ toolName: part.toolName,
70192
+ input: part.input
70193
+ });
70194
+ }
70195
+ }
70196
+ if (textParts.length > 0) {
70197
+ result.push({
70198
+ role: "assistant",
70199
+ content: textParts.join(""),
70200
+ createdAt: new Date,
70201
+ ...message.providerOptions && {
70202
+ providerOptions: message.providerOptions
70203
+ }
70204
+ });
70205
+ }
70206
+ for (const toolCall of toolCalls) {
70207
+ const input = toolCall.input;
70208
+ const toolCallDescription = input?.toolCallDescription || `Executing ${toolCall.toolName}`;
70209
+ const hasResult = toolResults.has(toolCall.toolCallId);
70210
+ result.push({
70211
+ role: "tool",
70212
+ status: hasResult ? "completed" : "pending",
70213
+ toolCallId: toolCall.toolCallId,
70214
+ content: hasResult ? `✓ ${toolCallDescription}` : toolCallDescription,
70215
+ args: input || {},
70216
+ toolName: toolCall.toolName,
70217
+ createdAt: new Date
70218
+ });
70219
+ }
70220
+ }
70221
+ }
70222
+ return result;
70223
+ }
70224
+
70043
70225
  // src/core/agent/pentestAgent/agent.ts
70044
70226
  var execAsync3 = promisify3(exec3);
70045
70227
  function runAgent(opts) {
@@ -70056,6 +70238,7 @@ function runAgent(opts) {
70056
70238
  sessionConfig
70057
70239
  } = opts;
70058
70240
  const session = opts.session || createSession(target, objective, undefined, sessionConfig);
70241
+ const subagentId = `pentest-${nanoid3(6)}`;
70059
70242
  const pocsPath = join4(session.rootPath, "pocs");
70060
70243
  if (!existsSync9(pocsPath)) {
70061
70244
  mkdirSync4(pocsPath, { recursive: true });
@@ -70211,10 +70394,13 @@ You are only authorized to perform testing against the specific target endpoint
70211
70394
  onStepFinish,
70212
70395
  abortSignal,
70213
70396
  silent,
70214
- authConfig
70397
+ authConfig,
70398
+ onFinish: ({ response }) => {
70399
+ saveSubagentMessages(session, subagentId, mapMessages(response.messages));
70400
+ }
70215
70401
  });
70216
70402
  streamResult.session = session;
70217
- return { streamResult, session };
70403
+ return { streamResult, session, subagentId };
70218
70404
  }
70219
70405
 
70220
70406
  // src/tui/components/agent-display.tsx
@@ -71459,13 +71645,13 @@ var Qt = b.parse;
71459
71645
  var Ut = x.lex;
71460
71646
 
71461
71647
  // src/tui/components/agent-display.tsx
71462
- import fs3 from "fs";
71648
+ import fs4 from "fs";
71463
71649
  var LOG_FILE = "/tmp/apex-debug.log";
71464
71650
  function logToFile(message, data) {
71465
71651
  const timestamp = new Date().toISOString();
71466
71652
  const logLine = `[${timestamp}] ${message} ${data ? JSON.stringify(data, null, 2) : ""}
71467
71653
  `;
71468
- fs3.appendFileSync(LOG_FILE, logLine);
71654
+ fs4.appendFileSync(LOG_FILE, logLine);
71469
71655
  }
71470
71656
  function getStableKey(item, contextId = "root") {
71471
71657
  if ("messages" in item) {
@@ -71808,149 +71994,6 @@ function ToolArgs({ message }) {
71808
71994
 
71809
71995
  // src/tui/components/commands/pentest-agent-display.tsx
71810
71996
  import fs5 from "fs";
71811
-
71812
- // src/core/messages/index.ts
71813
- import fs4 from "fs";
71814
-
71815
- // src/core/messages/types.ts
71816
- var ToolMessageObject = exports_external.object({
71817
- role: exports_external.literal("tool"),
71818
- status: exports_external.enum(["pending", "completed"]),
71819
- toolCallId: exports_external.string(),
71820
- content: exports_external.string(),
71821
- args: exports_external.record(exports_external.string(), exports_external.any()),
71822
- toolName: exports_external.string(),
71823
- createdAt: exports_external.coerce.date()
71824
- });
71825
- var SystemModelMessageObject = exports_external.object({
71826
- role: exports_external.literal("system"),
71827
- content: exports_external.string(),
71828
- createdAt: exports_external.coerce.date(),
71829
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
71830
- });
71831
- var TextPartObject = exports_external.object({
71832
- type: exports_external.literal("text"),
71833
- text: exports_external.string(),
71834
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
71835
- });
71836
- var FilePartObject = exports_external.object({
71837
- type: exports_external.literal("file"),
71838
- data: exports_external.union([
71839
- exports_external.string(),
71840
- exports_external.instanceof(Uint8Array),
71841
- exports_external.instanceof(ArrayBuffer),
71842
- exports_external.instanceof(Buffer),
71843
- exports_external.url()
71844
- ]),
71845
- filename: exports_external.string().optional(),
71846
- mediaType: exports_external.string(),
71847
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
71848
- });
71849
- var ReasoningPartObject = exports_external.object({
71850
- type: exports_external.literal("reasoning"),
71851
- text: exports_external.string(),
71852
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
71853
- });
71854
- var ToolCallPartObject = exports_external.object({
71855
- type: exports_external.literal("tool-call"),
71856
- toolCallId: exports_external.string(),
71857
- toolName: exports_external.string(),
71858
- input: exports_external.unknown(),
71859
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
71860
- providerExecuted: exports_external.boolean().optional()
71861
- });
71862
- var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
71863
- exports_external.object({
71864
- type: exports_external.literal("text"),
71865
- value: exports_external.string()
71866
- }),
71867
- exports_external.object({
71868
- type: exports_external.literal("json"),
71869
- value: exports_external.any()
71870
- }),
71871
- exports_external.object({
71872
- type: exports_external.literal("error-text"),
71873
- value: exports_external.string()
71874
- }),
71875
- exports_external.object({
71876
- type: exports_external.literal("error-json"),
71877
- value: exports_external.any()
71878
- }),
71879
- exports_external.object({
71880
- type: exports_external.literal("content"),
71881
- value: exports_external.array(exports_external.discriminatedUnion("type", [
71882
- exports_external.object({
71883
- type: exports_external.literal("text"),
71884
- text: exports_external.string()
71885
- }),
71886
- exports_external.object({
71887
- type: exports_external.literal("media"),
71888
- data: exports_external.string(),
71889
- mediaType: exports_external.string()
71890
- })
71891
- ]))
71892
- })
71893
- ]);
71894
- var ToolResultPartObject = exports_external.object({
71895
- type: exports_external.literal("tool-result"),
71896
- toolCallId: exports_external.string(),
71897
- toolName: exports_external.string(),
71898
- output: ToolResultOutputObject,
71899
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
71900
- });
71901
- var AssistantModelMessageObject = exports_external.object({
71902
- role: exports_external.literal("assistant"),
71903
- content: exports_external.union([
71904
- exports_external.string(),
71905
- exports_external.array(exports_external.discriminatedUnion("type", [
71906
- TextPartObject,
71907
- FilePartObject,
71908
- ReasoningPartObject,
71909
- ToolCallPartObject,
71910
- ToolResultPartObject
71911
- ]))
71912
- ]),
71913
- createdAt: exports_external.coerce.date(),
71914
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
71915
- });
71916
- var UserModelMessageObject = exports_external.object({
71917
- role: exports_external.literal("user"),
71918
- content: exports_external.union([
71919
- exports_external.string(),
71920
- exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
71921
- ]),
71922
- createdAt: exports_external.coerce.date(),
71923
- providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
71924
- });
71925
- var ModelMessageObject = exports_external.discriminatedUnion("role", [
71926
- SystemModelMessageObject,
71927
- UserModelMessageObject,
71928
- AssistantModelMessageObject,
71929
- ToolMessageObject
71930
- ]);
71931
-
71932
- // src/core/messages/index.ts
71933
- function getMessages(session) {
71934
- const messages = fs4.readFileSync(session.rootPath + "/messages.json", "utf8");
71935
- return ModelMessageObject.array().parse(JSON.parse(messages));
71936
- }
71937
- function saveMessages(session, messages) {
71938
- fs4.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
71939
- }
71940
- function saveSubagentMessages(orchestratorSession, subagentId, messages) {
71941
- const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
71942
- if (!fs4.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
71943
- fs4.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
71944
- recursive: true
71945
- });
71946
- }
71947
- if (!fs4.existsSync(subagentDir)) {
71948
- fs4.mkdirSync(subagentDir, { recursive: true });
71949
- }
71950
- fs4.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
71951
- }
71952
-
71953
- // src/tui/components/commands/pentest-agent-display.tsx
71954
71997
  function PentestAgentDisplay() {
71955
71998
  const [focusedIndex, setFocusedIndex] = import_react20.useState(0);
71956
71999
  const [target, setTarget] = import_react20.useState("");
@@ -73152,7 +73195,14 @@ Remember: You are the orchestrator, not a testing agent. Your value is in strate
73152
73195
 
73153
73196
  // src/core/agent/thoroughPentestAgent/agent.ts
73154
73197
  import { join as join6 } from "path";
73155
- import { readFileSync as readFileSync5, existsSync as existsSync11, writeFileSync as writeFileSync6, copyFileSync, readdirSync as readdirSync4, mkdirSync as mkdirSync6 } from "fs";
73198
+ import {
73199
+ readFileSync as readFileSync5,
73200
+ existsSync as existsSync11,
73201
+ writeFileSync as writeFileSync6,
73202
+ copyFileSync,
73203
+ readdirSync as readdirSync4,
73204
+ mkdirSync as mkdirSync6
73205
+ } from "fs";
73156
73206
 
73157
73207
  // src/core/agent/attackSurfaceAgent/prompts.ts
73158
73208
  var SYSTEM3 = `You are an expert attack surface analysis agent specializing in comprehensive reconnaissance and asset discovery. Your role is to AUTONOMOUSLY map the entire attack surface of a target and identify specific targets for deeper penetration testing.
@@ -74454,6 +74504,7 @@ import { writeFileSync as writeFileSync5, mkdirSync as mkdirSync5, existsSync as
74454
74504
  function runAgent2(opts) {
74455
74505
  const { target, model, onStepFinish, abortSignal } = opts;
74456
74506
  const session = opts.session || createSession(target);
74507
+ const subagentId = `attack-surface-${nanoid3(6)}`;
74457
74508
  console.log(`Created attack surface session: ${session.id}`);
74458
74509
  console.log(`Session path: ${session.rootPath}`);
74459
74510
  const assetsPath = join5(session.rootPath, "assets");
@@ -74600,10 +74651,13 @@ You MUST provide the details final report using create_attack_surface_report too
74600
74651
  stopWhen: stepCountIs(1e4),
74601
74652
  toolChoice: "auto",
74602
74653
  onStepFinish,
74603
- abortSignal
74654
+ abortSignal,
74655
+ onFinish: ({ response }) => {
74656
+ saveSubagentMessages(session, subagentId, mapMessages(response.messages));
74657
+ }
74604
74658
  });
74605
74659
  streamResult.session = session;
74606
- return { streamResult, session };
74660
+ return { streamResult, session, subagentId };
74607
74661
  }
74608
74662
 
74609
74663
  // node_modules/yocto-queue/index.js
@@ -74788,7 +74842,10 @@ Begin by using the get_attack_surface tool to map the complete attack surface of
74788
74842
  stopWhen: stepCountIs(1e4),
74789
74843
  toolChoice: "auto",
74790
74844
  onStepFinish,
74791
- abortSignal
74845
+ abortSignal,
74846
+ onFinish: ({ response }) => {
74847
+ saveMessages(session, mapMessages(response.messages));
74848
+ }
74792
74849
  });
74793
74850
  streamResult.session = session;
74794
74851
  return { streamResult, session };
@@ -74820,14 +74877,13 @@ Use this as the FIRST step in your thorough penetration test.`,
74820
74877
  execute: async ({ target, objective }) => {
74821
74878
  try {
74822
74879
  logger?.log(`[Orchestrator] Spawning attack surface agent for: ${target}`);
74823
- const { streamResult: result } = runAgent2({
74880
+ const { streamResult: result, subagentId } = runAgent2({
74824
74881
  session,
74825
74882
  target,
74826
74883
  objective,
74827
74884
  model,
74828
74885
  abortSignal
74829
74886
  });
74830
- const subagentId = `attack-surface-${result.session.id}`;
74831
74887
  const allMessages = [];
74832
74888
  let currentAssistantText = "";
74833
74889
  if (onSubagentSpawn) {
@@ -74852,8 +74908,8 @@ Objective: ${objective}`,
74852
74908
  if (onSubagentMessage) {
74853
74909
  onSubagentMessage(subagentId, initialMessage);
74854
74910
  }
74855
- for await (const delta of result.fullStream) {
74856
- if (delta.type === "text-delta") {
74911
+ await consumeStream2(result, {
74912
+ onTextDelta: (delta) => {
74857
74913
  currentAssistantText += delta.text;
74858
74914
  const lastMessage = allMessages[allMessages.length - 1];
74859
74915
  if (lastMessage && lastMessage.role === "assistant") {
@@ -74876,7 +74932,8 @@ Objective: ${objective}`,
74876
74932
  onSubagentMessage(subagentId, newMessage);
74877
74933
  }
74878
74934
  }
74879
- } else if (delta.type === "tool-call") {
74935
+ },
74936
+ onToolCall: (delta) => {
74880
74937
  if (currentAssistantText) {
74881
74938
  currentAssistantText = "";
74882
74939
  }
@@ -74893,7 +74950,8 @@ Objective: ${objective}`,
74893
74950
  if (onSubagentMessage) {
74894
74951
  onSubagentMessage(subagentId, toolMessage);
74895
74952
  }
74896
- } else if (delta.type === "tool-result") {
74953
+ },
74954
+ onToolResult: (delta) => {
74897
74955
  const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
74898
74956
  if (existingToolMessageIndex !== -1) {
74899
74957
  const existingMessage = allMessages[existingToolMessageIndex];
@@ -74908,11 +74966,10 @@ Objective: ${objective}`,
74908
74966
  }
74909
74967
  }
74910
74968
  }
74911
- }
74969
+ });
74912
74970
  if (onSubagentComplete) {
74913
74971
  onSubagentComplete(subagentId, true);
74914
74972
  }
74915
- saveSubagentMessages(session, subagentId, allMessages);
74916
74973
  const subagentMetadata = {
74917
74974
  type: "attack-surface",
74918
74975
  subagentId,
@@ -74995,14 +75052,13 @@ You can spawn multiple agents in parallel - they will run concurrently.`,
74995
75052
  const limit = pLimit(5);
74996
75053
  const promises = targets.map((targetInfo, index) => limit(async () => {
74997
75054
  try {
74998
- const { streamResult: result } = runAgent({
75055
+ const { streamResult: result, subagentId } = runAgent({
74999
75056
  session,
75000
75057
  target: targetInfo.target,
75001
75058
  objective: targetInfo.objective,
75002
75059
  model,
75003
75060
  abortSignal
75004
75061
  });
75005
- const subagentId = `pentest-${index + 1}-${result.session.id}`;
75006
75062
  const allMessages = [];
75007
75063
  let currentAssistantText = "";
75008
75064
  const startTime = new Date().toISOString();
@@ -75028,8 +75084,8 @@ Objective: ${targetInfo.objective}`,
75028
75084
  if (onSubagentMessage) {
75029
75085
  onSubagentMessage(subagentId, initialMessage);
75030
75086
  }
75031
- for await (const delta of result.fullStream) {
75032
- if (delta.type === "text-delta") {
75087
+ await consumeStream2(result, {
75088
+ onTextDelta: (delta) => {
75033
75089
  currentAssistantText += delta.text;
75034
75090
  const lastMessage = allMessages[allMessages.length - 1];
75035
75091
  if (lastMessage && lastMessage.role === "assistant") {
@@ -75052,7 +75108,8 @@ Objective: ${targetInfo.objective}`,
75052
75108
  onSubagentMessage(subagentId, newMessage);
75053
75109
  }
75054
75110
  }
75055
- } else if (delta.type === "tool-call") {
75111
+ },
75112
+ onToolCall: (delta) => {
75056
75113
  if (currentAssistantText) {
75057
75114
  currentAssistantText = "";
75058
75115
  }
@@ -75069,7 +75126,8 @@ Objective: ${targetInfo.objective}`,
75069
75126
  if (onSubagentMessage) {
75070
75127
  onSubagentMessage(subagentId, toolMessage);
75071
75128
  }
75072
- } else if (delta.type === "tool-result") {
75129
+ },
75130
+ onToolResult: (delta) => {
75073
75131
  const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
75074
75132
  if (existingToolMessageIndex !== -1) {
75075
75133
  const existingMessage = allMessages[existingToolMessageIndex];
@@ -75084,12 +75142,11 @@ Objective: ${targetInfo.objective}`,
75084
75142
  }
75085
75143
  }
75086
75144
  }
75087
- }
75088
- const endTime = new Date().toISOString();
75145
+ });
75089
75146
  if (onSubagentComplete) {
75090
75147
  onSubagentComplete(subagentId, true);
75091
75148
  }
75092
- saveSubagentMessages(session, subagentId, allMessages);
75149
+ const endTime = new Date().toISOString();
75093
75150
  const subagentMetadata = {
75094
75151
  type: "pentest",
75095
75152
  subagentId,
@@ -75474,8 +75531,8 @@ Mode: Pentest (Orchestrator)`,
75474
75531
  };
75475
75532
  const allMessages = [userMessage];
75476
75533
  let currentAssistantText = "";
75477
- for await (const delta of result.fullStream) {
75478
- if (delta.type === "text-delta") {
75534
+ await consumeStream2(result, {
75535
+ onTextDelta: (delta) => {
75479
75536
  currentAssistantText += delta.text;
75480
75537
  addTokens(1);
75481
75538
  const lastMessage = allMessages[allMessages.length - 1];
@@ -75489,7 +75546,8 @@ Mode: Pentest (Orchestrator)`,
75489
75546
  });
75490
75547
  }
75491
75548
  setMessages([...allMessages]);
75492
- } else if (delta.type === "tool-call") {
75549
+ },
75550
+ onToolCall: (delta) => {
75493
75551
  if (currentAssistantText) {
75494
75552
  currentAssistantText = "";
75495
75553
  }
@@ -75505,7 +75563,8 @@ Mode: Pentest (Orchestrator)`,
75505
75563
  createdAt: new Date
75506
75564
  });
75507
75565
  setMessages([...allMessages]);
75508
- } else if (delta.type === "tool-result") {
75566
+ },
75567
+ onToolResult: (delta) => {
75509
75568
  setThinking(true);
75510
75569
  const toolName = delta.toolName;
75511
75570
  const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
@@ -75519,8 +75578,7 @@ Mode: Pentest (Orchestrator)`,
75519
75578
  }
75520
75579
  setMessages([...allMessages]);
75521
75580
  }
75522
- saveMessages(result.session, allMessages);
75523
- }
75581
+ });
75524
75582
  if (fs6.existsSync(result.session.rootPath + "/comprehensive-pentest-report.md")) {
75525
75583
  setIsCompleted(true);
75526
75584
  }
@@ -76744,33 +76802,11 @@ function ModelsDisplay({
76744
76802
  }, undefined, false, undefined, this);
76745
76803
  }
76746
76804
 
76805
+ // src/tui/generated-ascii-art.json
76806
+ var generated_ascii_art_default = [[{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 31, g: 194, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 193, b: 91 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 203, b: 95 }, { char: ";", r: 33, g: 198, b: 94 }, { char: ";", r: 32, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 204, b: 96 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: ";", r: 30, g: 195, b: 90 }, { char: ";", r: 35, g: 207, b: 98 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 35, g: 207, b: 98 }, { char: ";", r: 31, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 197, b: 91 }, { char: ";", r: 34, g: 202, b: 96 }, { char: ";", r: 32, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 202, b: 95 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 198, b: 94 }, { char: ";", r: 33, g: 197, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 193, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 30, g: 194, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 201, b: 95 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 200, b: 94 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 90 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 34, g: 202, b: 95 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 34, g: 204, b: 96 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 209, b: 99 }, { char: ";", r: 32, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 90 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 207, b: 98 }, { char: ";", r: 32, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 194, b: 91 }, { char: ";", r: 33, g: 199, b: 94 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 34, g: 203, b: 96 }, { char: ";", r: 30, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 31, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 198, b: 93 }, { char: ";", r: 31, g: 194, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 200, b: 94 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 31, g: 194, b: 92 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 197, b: 91 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 202, b: 95 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 33, g: 199, b: 93 }, { char: ";", r: 34, g: 202, b: 95 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 194, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 33, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 31, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 31, g: 197, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 33, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 194, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 194, b: 92 }, { char: ";", r: 32, g: 197, b: 93 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 31, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: ";", r: 31, g: 194, b: 90 }, { char: ";", r: 34, g: 204, b: 96 }, { char: ";", r: 33, g: 198, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 193, b: 90 }, { char: ";", r: 34, g: 200, b: 94 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 207, b: 98 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 199, b: 94 }, { char: ";", r: 31, g: 193, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 207, b: 98 }, { char: ";", r: 30, g: 195, b: 90 }], [{ char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 30, g: 194, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 204, b: 96 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 34, g: 202, b: 96 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 194, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 199, b: 94 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 89 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 200, b: 95 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 198, b: 94 }, { char: ";", r: 33, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 92 }], [{ char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 35, g: 207, b: 98 }, { char: ";", r: 32, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 32, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 34, g: 203, b: 96 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 206, b: 97 }, { char: ";", r: 31, g: 195, b: 91 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 194, b: 91 }, { char: ";", r: 33, g: 200, b: 95 }, { char: ";", r: 33, g: 202, b: 95 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 206, b: 97 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 194, b: 92 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 202, b: 95 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 32, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 31, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 30, g: 194, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }]];
76807
+
76747
76808
  // src/tui/index.tsx
76748
- import { fileURLToPath as fileURLToPath2 } from "url";
76749
- import { dirname as dirname2, join as join8 } from "path";
76750
- import { existsSync as existsSync13 } from "fs";
76751
- var __filename2 = fileURLToPath2(import.meta.url);
76752
- var __dirname2 = dirname2(__filename2);
76753
- function findImagePath() {
76754
- const bundledPath = join8(__dirname2, "..", "pensar.svg");
76755
- if (existsSync13(bundledPath)) {
76756
- return bundledPath;
76757
- }
76758
- const devPath = join8(__dirname2, "..", "..", "pensar.svg");
76759
- if (existsSync13(devPath)) {
76760
- return devPath;
76761
- }
76762
- throw new Error("Could not find pensar.svg");
76763
- }
76764
- var CONFIG = {
76765
- imagePath: findImagePath(),
76766
- scale: 1,
76767
- maxWidth: 50,
76768
- aspectRatio: 0.5,
76769
- invert: true,
76770
- title: "Pensar Logo"
76771
- };
76772
- var coloredAscii = await convertImageToColoredAscii(CONFIG.imagePath, CONFIG.scale, CONFIG.maxWidth, CONFIG.aspectRatio, CONFIG.invert);
76773
- console.log(`Generated colored ASCII: ${coloredAscii.length} rows x ${coloredAscii[0]?.length || 0} columns (scale: ${CONFIG.scale * 100}%)`);
76809
+ var coloredAscii = generated_ascii_art_default;
76774
76810
  function App() {
76775
76811
  const [appConfig, setAppConfig] = import_react30.useState(null);
76776
76812
  const [focusIndex, setFocusIndex] = import_react30.useState(0);