@oflow-ai/oflow-cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/cli.js +84 -24
  2. package/dist/index.js +42 -11
  3. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -44,7 +44,7 @@ const ora_1 = __importDefault(require("ora"));
44
44
  const core_1 = require("@oflow-ai/core");
45
45
  const commands_1 = require("./commands");
46
46
  let sandboxExecutor = null;
47
- let showThinking = false;
47
+ let currentShowThinking = false;
48
48
  async function startInteractiveMode(options) {
49
49
  const configManager = (0, core_1.getConfigManager)();
50
50
  const auth = configManager.getAuth();
@@ -54,26 +54,39 @@ async function startInteractiveMode(options) {
54
54
  }
55
55
  // 初始化沙箱执行器
56
56
  if (options.sandbox || configManager.get('sandbox')) {
57
- sandboxExecutor = await (0, core_1.createSandboxExecutor)();
58
- console.log(chalk_1.default.gray(`Sandbox mode: ${sandboxExecutor ? 'enabled' : 'unavailable'}`));
57
+ try {
58
+ sandboxExecutor = await (0, core_1.createSandboxExecutor)();
59
+ console.log(chalk_1.default.gray(`Sandbox mode: ${sandboxExecutor ? 'enabled' : 'unavailable'}`));
60
+ }
61
+ catch (error) {
62
+ console.log(chalk_1.default.yellow('Sandbox mode: unavailable'));
63
+ }
59
64
  }
60
65
  // 获取思考过程显示设置
61
- showThinking = options.showThinking ?? configManager.getShowThinking();
66
+ currentShowThinking = options.showThinking ?? configManager.getShowThinking();
62
67
  const model = options.model || configManager.getDefaultModel() || 'gpt-4o';
63
- const provider = (0, core_1.createAIProvider)(auth, model);
64
- const agentFactory = new core_1.AgentFactory(provider, process.cwd());
68
+ let provider;
69
+ try {
70
+ provider = (0, core_1.createAIProvider)(auth, model);
71
+ }
72
+ catch (error) {
73
+ console.log(chalk_1.default.red('Failed to create AI provider:', error instanceof Error ? error.message : String(error)));
74
+ return;
75
+ }
65
76
  const conversation = new core_1.Conversation({
66
77
  provider,
67
78
  workingDirectory: process.cwd(),
68
79
  maxTokens: configManager.get('maxTokens'),
69
80
  temperature: configManager.get('temperature'),
70
- showThinking: showThinking,
81
+ showThinking: currentShowThinking,
71
82
  onContent: (content) => {
72
83
  process.stdout.write(chalk_1.default.white(content));
73
84
  },
74
85
  onThinking: (thinking) => {
75
86
  // 显示思考过程,使用不同的颜色
76
- process.stdout.write(chalk_1.default.magenta(thinking));
87
+ if (currentShowThinking) {
88
+ process.stdout.write(chalk_1.default.magenta(thinking));
89
+ }
77
90
  },
78
91
  onToolCall: (toolCall) => {
79
92
  console.log(chalk_1.default.cyan(`\n🔧 Using tool: ${toolCall.function.name}`));
@@ -88,12 +101,13 @@ async function startInteractiveMode(options) {
88
101
  console.log(chalk_1.default.bold.blue('║ Welcome to oflow CLI ║'));
89
102
  console.log(chalk_1.default.bold.blue('╚═══════════════════════════════════════╝'));
90
103
  console.log('');
104
+ console.log(chalk_1.default.gray(`Provider: ${auth.provider}`));
91
105
  console.log(chalk_1.default.gray(`Model: ${model}`));
92
106
  console.log(chalk_1.default.gray(`Working directory: ${process.cwd()}`));
93
107
  if (sandboxExecutor) {
94
108
  console.log(chalk_1.default.gray(`Sandbox: enabled`));
95
109
  }
96
- console.log(chalk_1.default.gray(`Thinking: ${showThinking ? 'ON' : 'OFF'} (use /thinking to toggle)`));
110
+ console.log(chalk_1.default.gray(`Thinking: ${currentShowThinking ? 'ON' : 'OFF'} (use /thinking to toggle)`));
97
111
  console.log('');
98
112
  console.log(chalk_1.default.gray('Type your message and press Enter to chat.'));
99
113
  console.log(chalk_1.default.gray('Type /help for available commands.'));
@@ -114,6 +128,16 @@ async function startInteractiveMode(options) {
114
128
  }
115
129
  // Check for slash commands
116
130
  if ((0, commands_1.isSlashCommand)(input)) {
131
+ // 特殊处理 /thinking 命令
132
+ if (input.toLowerCase() === '/thinking') {
133
+ currentShowThinking = !currentShowThinking;
134
+ configManager.setShowThinking(currentShowThinking);
135
+ console.log('');
136
+ console.log(chalk_1.default.green(`✓ Thinking process display: ${currentShowThinking ? chalk_1.default.cyan('ON') : chalk_1.default.gray('OFF')}`));
137
+ console.log('');
138
+ rl.prompt();
139
+ return;
140
+ }
117
141
  const shouldContinue = await (0, commands_1.executeSlashCommand)(input, {
118
142
  conversation,
119
143
  rl,
@@ -128,7 +152,7 @@ async function startInteractiveMode(options) {
128
152
  }
129
153
  // Check for agent calls (starting with $)
130
154
  if (input.startsWith('$')) {
131
- await handleAgentCall(input, agentFactory, options);
155
+ await handleAgentCall(input, provider, options);
132
156
  rl.prompt();
133
157
  return;
134
158
  }
@@ -150,7 +174,21 @@ async function startInteractiveMode(options) {
150
174
  }
151
175
  catch (error) {
152
176
  spinner.fail('Error');
153
- console.log(chalk_1.default.red(error instanceof Error ? error.message : String(error)));
177
+ const errorMessage = error instanceof Error ? error.message : String(error);
178
+ console.log(chalk_1.default.red(errorMessage));
179
+ // 提供更详细的错误信息
180
+ if (errorMessage.includes('400')) {
181
+ console.log(chalk_1.default.yellow('\n可能的解决方案:'));
182
+ console.log(chalk_1.default.gray(' 1. 检查API Key是否正确'));
183
+ console.log(chalk_1.default.gray(' 2. 检查模型名称是否正确'));
184
+ console.log(chalk_1.default.gray(' 3. 运行 "oflow auth" 重新配置'));
185
+ }
186
+ else if (errorMessage.includes('401') || errorMessage.includes('Unauthorized')) {
187
+ console.log(chalk_1.default.yellow('\n认证失败,请运行 "oflow auth" 重新配置'));
188
+ }
189
+ else if (errorMessage.includes('429')) {
190
+ console.log(chalk_1.default.yellow('\n请求过于频繁,请稍后再试'));
191
+ }
154
192
  rl.prompt();
155
193
  }
156
194
  });
@@ -164,7 +202,7 @@ async function startInteractiveMode(options) {
164
202
  process.exit(0);
165
203
  });
166
204
  }
167
- async function handleAgentCall(input, agentFactory, options) {
205
+ async function handleAgentCall(input, provider, options) {
168
206
  // Parse agent call: $agent-type "task description"
169
207
  const match = input.match(/^\$(\w+(?:-\w+)*)\s*(.*)$/);
170
208
  if (!match) {
@@ -179,6 +217,7 @@ async function handleAgentCall(input, agentFactory, options) {
179
217
  return;
180
218
  }
181
219
  try {
220
+ const agentFactory = new core_1.AgentFactory(provider, process.cwd());
182
221
  const agent = agentFactory.createAgent(agentType);
183
222
  console.log(chalk_1.default.cyan(`\n🤖 Starting ${agentType} agent...`));
184
223
  console.log(chalk_1.default.gray(`Task: ${task}\n`));
@@ -218,7 +257,12 @@ async function runSingleCommand(prompt, options) {
218
257
  }
219
258
  // 初始化沙箱执行器
220
259
  if (options.sandbox || configManager.get('sandbox')) {
221
- sandboxExecutor = await (0, core_1.createSandboxExecutor)();
260
+ try {
261
+ sandboxExecutor = await (0, core_1.createSandboxExecutor)();
262
+ }
263
+ catch {
264
+ // Ignore sandbox errors for single command
265
+ }
222
266
  }
223
267
  const model = options.model || configManager.getDefaultModel() || 'gpt-4o';
224
268
  const provider = (0, core_1.createAIProvider)(auth, model);
@@ -245,17 +289,22 @@ async function runSingleCommand(prompt, options) {
245
289
  }
246
290
  }
247
291
  async function executeShellCommand(command, sandbox) {
248
- const { spawn } = require('child_modules');
292
+ const { spawn } = require('child_process');
249
293
  if (sandbox && sandbox['config']?.backend !== 'none') {
250
- // Use sandbox execution
251
- const result = await sandbox.execute(command, process.cwd());
252
- if (result.stdout)
253
- console.log(result.stdout);
254
- if (result.stderr)
255
- console.error(result.stderr);
256
- if (result.timedOut)
257
- console.log(chalk_1.default.yellow('Command timed out'));
258
- return;
294
+ try {
295
+ const result = await sandbox.execute(command, process.cwd());
296
+ if (result.stdout)
297
+ console.log(result.stdout);
298
+ if (result.stderr)
299
+ console.error(result.stderr);
300
+ if (result.timedOut)
301
+ console.log(chalk_1.default.yellow('Command timed out'));
302
+ return;
303
+ }
304
+ catch (error) {
305
+ console.log(chalk_1.default.red(error instanceof Error ? error.message : String(error)));
306
+ return;
307
+ }
259
308
  }
260
309
  return new Promise((resolve) => {
261
310
  const isWindows = process.platform === 'win32';
@@ -268,6 +317,10 @@ async function executeShellCommand(command, sandbox) {
268
317
  proc.on('close', () => {
269
318
  resolve();
270
319
  });
320
+ proc.on('error', (err) => {
321
+ console.log(chalk_1.default.red(`Failed to execute command: ${err.message}`));
322
+ resolve();
323
+ });
271
324
  });
272
325
  }
273
326
  async function processFileReferences(input) {
@@ -284,6 +337,7 @@ async function processFileReferences(input) {
284
337
  }
285
338
  catch {
286
339
  // File not found, keep original reference
340
+ console.log(chalk_1.default.yellow(`Warning: Could not read file ${filePath}`));
287
341
  }
288
342
  }
289
343
  return result;
@@ -333,7 +387,13 @@ Your primary goal is to help users safely and efficiently complete programming t
333
387
  6. Verify changes after making them
334
388
  7. Provide actionable suggestions
335
389
 
390
+ # Important Rules
391
+ - When you need to use tools, first explain what you're going to do
392
+ - After using tools, summarize the results
393
+ - If a tool call fails, explain what went wrong and suggest alternatives
394
+ - Always provide clear, actionable responses
395
+
336
396
  Current working directory: ${process.cwd()}
337
397
  `;
338
398
  }
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQSxvREEySUM7QUE0REQsNENBdUNDO0FBelFELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVV3QjtBQUN4Qix5Q0FBaUU7QUFVakUsSUFBSSxlQUFlLEdBQTJCLElBQUksQ0FBQztBQUNuRCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFFbEIsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE9BQW1CO0lBQzVELE1BQU0sYUFBYSxHQUFHLElBQUEsdUJBQWdCLEdBQUUsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFckMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsQ0FBQztRQUNyRSxPQUFPO0lBQ1QsQ0FBQztJQUVELFdBQVc7SUFDWCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3BELGVBQWUsR0FBRyxNQUFNLElBQUEsNEJBQXFCLEdBQUUsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELGFBQWE7SUFDYixZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7SUFFdkUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxhQUFhLENB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Q0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBNENvQixPQUFPLENBQUMsR0FBRyxFQUFFO0NBQ3pDLENBQUM7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAncmVhZGxpbmUnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7XG4gIGdldENvbmZpZ01hbmFnZXIsXG4gIGNyZWF0ZUFJUHJvdmlkZXIsXG4gIENvbnZlcnNhdGlvbixcbiAgTWVzc2FnZSxcbiAgQWdlbnRGYWN0b3J5LFxuICBBZ2VudCxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgcmVuZGVyTWFya2Rvd24gfSBmcm9tICcuL3V0aWxzL21hcmtkb3duJztcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHlvbG8/OiBib29sZWFuO1xuICBzYW5kYm94PzogYm9vbGVhbjtcbiAgc2hvd1RoaW5raW5nPzogYm9vbGVhbjtcbn1cblxubGV0IHNhbmRib3hFeGVjdXRvcjogU2FuZGJveEV4ZWN1dG9yIHwgbnVsbCA9IG51bGw7XG5sZXQgc2hvd1RoaW5raW5nID0gZmFsc2U7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEludGVyYWN0aXZlTW9kZShvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDliJ3lp4vljJbmspnnrrHmiafooYzlmahcbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgU2FuZGJveCBtb2RlOiAke3NhbmRib3hFeGVjdXRvciA/ICdlbmFibGVkJyA6ICd1bmF2YWlsYWJsZSd9YCkpO1xuICB9XG5cbiAgLy8g6I635Y+W5oCd6ICD6L+H56iL5pi+56S66K6+572uXG4gIHNob3dUaGlua2luZyA9IG9wdGlvbnMuc2hvd1RoaW5raW5nID8/IGNvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCk7XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGFnZW50RmFjdG9yeSA9IG5ldyBBZ2VudEZhY3RvcnkocHJvdmlkZXIsIHByb2Nlc3MuY3dkKCkpO1xuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIHNob3dUaGlua2luZzogc2hvd1RoaW5raW5nLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9LFxuICAgIG9uVGhpbmtpbmc6ICh0aGlua2luZykgPT4ge1xuICAgICAgLy8g5pi+56S65oCd6ICD6L+H56iL77yM5L2/55So5LiN5ZCM55qE6aKc6ImyXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay5tYWdlbnRhKHRoaW5raW5nKSk7XG4gICAgfSxcbiAgICBvblRvb2xDYWxsOiAodG9vbENhbGwpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbvCflKcgVXNpbmcgdG9vbDogJHt0b29sQ2FsbC5mdW5jdGlvbi5uYW1lfWApKTtcbiAgICB9LFxuICAgIG9uVG9vbFJlc3VsdDogKHJlc3VsdCkgPT4ge1xuICAgICAgLy8gVG9vbCByZXN1bHQgaXMgaGFuZGxlZCBzaWxlbnRseVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2V0IHN5c3RlbSBwcm9tcHRcbiAgY29udmVyc2F0aW9uLnNldFN5c3RlbVByb21wdChnZXRTeXN0ZW1Qcm9tcHQoKSk7XG5cbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5ibHVlKCdcXG7ilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuYmx1ZSgn4pWRICAgICAgICAgV2VsY29tZSB0byBvZmxvdyBDTEkgICAgICAgICAg4pWRJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmJsdWUoJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnScpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBNb2RlbDogJHttb2RlbH1gKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYFdvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9YCkpO1xuICBpZiAoc2FuZGJveEV4ZWN1dG9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgU2FuZGJveDogZW5hYmxlZGApKTtcbiAgfVxuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBUaGlua2luZzogJHtzaG93VGhpbmtpbmcgPyAnT04nIDogJ09GRid9ICh1c2UgL3RoaW5raW5nIHRvIHRvZ2dsZSlgKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVHlwZSB5b3VyIG1lc3NhZ2UgYW5kIHByZXNzIEVudGVyIHRvIGNoYXQuJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlIC9oZWxwIGZvciBhdmFpbGFibGUgY29tbWFuZHMuJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlICRhZ2VudC1uYW1lIHRvIGNhbGwgYSBzdWItYWdlbnQuJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlIC9leGl0IG9yIHByZXNzIEN0cmwrQyB0byBleGl0LicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgIHByb21wdDogY2hhbGsuZ3JlZW4oJz4gJylcbiAgfSk7XG5cbiAgcmwucHJvbXB0KCk7XG5cbiAgcmwub24oJ2xpbmUnLCBhc3luYyAobGluZSkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbGluZS50cmltKCk7XG4gICAgXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNsYXNoIGNvbW1hbmRzXG4gICAgaWYgKGlzU2xhc2hDb21tYW5kKGlucHV0KSkge1xuICAgICAgY29uc3Qgc2hvdWxkQ29udGludWUgPSBhd2FpdCBleGVjdXRlU2xhc2hDb21tYW5kKGlucHV0LCB7XG4gICAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgICAgcmwsXG4gICAgICAgIGNvbmZpZ01hbmFnZXJcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXNob3VsZENvbnRpbnVlKSB7XG4gICAgICAgIHJsLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGFnZW50IGNhbGxzIChzdGFydGluZyB3aXRoICQpXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgYXdhaXQgaGFuZGxlQWdlbnRDYWxsKGlucHV0LCBhZ2VudEZhY3RvcnksIG9wdGlvbnMpO1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNoZWxsIGNvbW1hbmRzIChzdGFydGluZyB3aXRoICEpXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgYXdhaXQgZXhlY3V0ZVNoZWxsQ29tbWFuZChpbnB1dC5zbGljZSgxKSwgc2FuZGJveEV4ZWN1dG9yKTtcbiAgICAgIHJsLnByb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBmaWxlIHJlZmVyZW5jZSAoc3RhcnRpbmcgd2l0aCBAKVxuICAgIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKGlucHV0KTtcblxuICAgIC8vIFNlbmQgdG8gQUlcbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdUaGlua2luZy4uLicpLnN0YXJ0KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgXG4gICAgICBjb25zb2xlLmxvZygnJyk7IC8vIE5ldyBsaW5lIGFmdGVyIHJlc3BvbnNlXG4gICAgICBybC5wcm9tcHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdFcnJvcicpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgfVxuICB9KTtcblxuICBybC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSEg8J+Ri1xcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBDdHJsK0NcbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkdvb2RieWUhIPCfkYtcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWdlbnRDYWxsKFxuICBpbnB1dDogc3RyaW5nLCBcbiAgYWdlbnRGYWN0b3J5OiBBZ2VudEZhY3RvcnksXG4gIG9wdGlvbnM6IENMSU9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBQYXJzZSBhZ2VudCBjYWxsOiAkYWdlbnQtdHlwZSBcInRhc2sgZGVzY3JpcHRpb25cIlxuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBhZ2VudCBjYWxsIGZvcm1hdC4gVXNlOiAkYWdlbnQtdHlwZSBcInRhc2tcIicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdBdmFpbGFibGUgYWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzayBmb3IgdGhlIGFnZW50LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50ID0gYWdlbnRGYWN0b3J5LmNyZWF0ZUFnZW50KGFnZW50VHlwZSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu8J+kliBTdGFydGluZyAke2FnZW50VHlwZX0gYWdlbnQuLi5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgVGFzazogJHt0YXNrfVxcbmApKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuXFxu4pyTIEFnZW50IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSk7XG4gICAgICBpZiAocmVzdWx0LmZpbGVzTW9kaWZpZWQgJiYgcmVzdWx0LmZpbGVzTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdGaWxlcyBtb2RpZmllZDonKSk7XG4gICAgICAgIHJlc3VsdC5maWxlc01vZGlmaWVkLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIC0gJHtmfWApKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuXFxu4pyXIEFnZW50IGVuY291bnRlcmVkIGVycm9yczonKSk7XG4gICAgICByZXN1bHQuZXJyb3JzPy5mb3JFYWNoKGUgPT4gY29uc29sZS5sb2coY2hhbGsucmVkKGAgIC0gJHtlfWApKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5vdXRwdXQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1xcbk91dHB1dDonKSk7XG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQub3V0cHV0KTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNpbmdsZUNvbW1hbmQocHJvbXB0OiBzdHJpbmcsIG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOWIneWni+WMluaymeeuseaJp+ihjOWZqFxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICBzYW5kYm94RXhlY3V0b3IgPSBhd2FpdCBjcmVhdGVTYW5kYm94RXhlY3V0b3IoKTtcbiAgfVxuXG4gIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpIHx8ICdncHQtNG8nO1xuICBjb25zdCBwcm92aWRlciA9IGNyZWF0ZUFJUHJvdmlkZXIoYXV0aCwgbW9kZWwpO1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBvbkNvbnRlbnQ6IChjb250ZW50KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay53aGl0ZShjb250ZW50KSk7XG4gICAgfVxuICB9KTtcblxuICBjb252ZXJzYXRpb24uc2V0U3lzdGVtUHJvbXB0KGdldFN5c3RlbVByb21wdCgpKTtcblxuICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhwcm9tcHQpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdQcm9jZXNzaW5nLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRXJyb3InKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNoZWxsQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHNhbmRib3g/OiBTYW5kYm94RXhlY3V0b3IgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoJ2NoaWxkX21vZHVsZXMnKTtcbiAgXG4gIGlmIChzYW5kYm94ICYmIHNhbmRib3hbJ2NvbmZpZyddPy5iYWNrZW5kICE9PSAnbm9uZScpIHtcbiAgICAvLyBVc2Ugc2FuZGJveCBleGVjdXRpb25cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWN1dGUoY29tbWFuZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgaWYgKHJlc3VsdC5zdGRvdXQpIGNvbnNvbGUubG9nKHJlc3VsdC5zdGRvdXQpO1xuICAgIGlmIChyZXN1bHQuc3RkZXJyKSBjb25zb2xlLmVycm9yKHJlc3VsdC5zdGRlcnIpO1xuICAgIGlmIChyZXN1bHQudGltZWRPdXQpIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ29tbWFuZCB0aW1lZCBvdXQnKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHNoZWxsID0gaXNXaW5kb3dzID8gJ3Bvd2Vyc2hlbGwuZXhlJyA6ICcvYmluL2Jhc2gnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1dpbmRvd3MgPyBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBjb21tYW5kXSA6IFsnLWMnLCBjb21tYW5kXTtcblxuICAgIGNvbnN0IHByb2MgPSBzcGF3bihzaGVsbCwgYXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKVxuICAgIH0pO1xuXG4gICAgcHJvYy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVSZWZSZWdleCA9IC9AKFteXFxzXSspL2c7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaEFsbChmaWxlUmVmUmVnZXgpO1xuICBcbiAgbGV0IHJlc3VsdCA9IGlucHV0O1xuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBtYXRjaFsxXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShtYXRjaFswXSwgYFxcbltGaWxlOiAke2ZpbGVQYXRofV1cXG4ke2NvbnRlbnR9XFxuW0VuZCBvZiBmaWxlXVxcbmApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmlsZSBub3QgZm91bmQsIGtlZXAgb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0U3lzdGVtUHJvbXB0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgWW91IGFyZSBvZmxvdyBDTEksIGFuIGludGVyYWN0aXZlIENMSSBhZ2VudCBzcGVjaWFsaXppbmcgaW4gc29mdHdhcmUgZW5naW5lZXJpbmcgdGFza3MuXG5cbllvdXIgcHJpbWFyeSBnb2FsIGlzIHRvIGhlbHAgdXNlcnMgc2FmZWx5IGFuZCBlZmZpY2llbnRseSBjb21wbGV0ZSBwcm9ncmFtbWluZyB0YXNrcy5cblxuIyBDb3JlIENhcGFiaWxpdGllc1xuLSBSZWFkLCB3cml0ZSwgYW5kIGVkaXQgZmlsZXNcbi0gRXhlY3V0ZSBzaGVsbCBjb21tYW5kc1xuLSBTZWFyY2ggYW5kIGFuYWx5emUgY29kZVxuLSBXZWIgc2VhcmNoIGFuZCBmZXRjaCBjb250ZW50XG4tIE1hbmFnZSBwcm9qZWN0IHN0cnVjdHVyZVxuLSBMYXVuY2ggc3BlY2lhbGl6ZWQgc3ViLWFnZW50c1xuXG4jIFRvb2xzIEF2YWlsYWJsZVxuLSByZWFkX2ZpbGU6IFJlYWQgZmlsZSBjb250ZW50c1xuLSB3cml0ZV9maWxlOiBXcml0ZSB0byBmaWxlc1xuLSBsaXN0X2RpcmVjdG9yeTogTGlzdCBkaXJlY3RvcnkgY29udGVudHNcbi0gZ2xvYjogRmluZCBmaWxlcyBieSBwYXR0ZXJuXG4tIHNlYXJjaF9maWxlX2NvbnRlbnQ6IFNlYXJjaCB3aXRoaW4gZmlsZXNcbi0gcnVuX3NoZWxsX2NvbW1hbmQ6IEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gd2ViX3NlYXJjaDogU2VhcmNoIHRoZSB3ZWJcbi0gd2ViX2ZldGNoOiBGZXRjaCB3ZWIgY29udGVudFxuLSByZXBsYWNlOiBSZXBsYWNlIHRleHQgaW4gZmlsZXNcbi0gaW1hZ2VfcmVhZDogQW5hbHl6ZSBpbWFnZXNcbi0gcGRmX2V4dHJhY3Q6IEV4dHJhY3QgY29udGVudCBmcm9tIFBERnNcbi0gYXNrX3VzZXJfcXVlc3Rpb246IEFzayB1c2VyIGZvciBpbnB1dFxuLSB0YXNrOiBMYXVuY2ggc3ViLWFnZW50c1xuLSBzYXZlX21lbW9yeTogU2F2ZSBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlIHNlc3Npb25zXG5cbiMgU3ViLUFnZW50cyAodXNlICRhZ2VudC1uYW1lIHRvIGNhbGwpXG4tIGdlbmVyYWwtcHVycG9zZTogQ29tcGxleCBtdWx0aS1zdGVwIHRhc2tzXG4tIHBsYW4tYWdlbnQ6IFBsYW5uaW5nIGFuZCBhbmFseXNpc1xuLSBleHBsb3JlLWFnZW50OiBDb2RlYmFzZSBleHBsb3JhdGlvblxuLSBjb2RlLXJldmlld2VyOiBDb2RlIHJldmlld1xuLSBmcm9udGVuZC10ZXN0ZXI6IFVJIHRlc3RpbmdcblxuIyBHdWlkZWxpbmVzXG4xLiBCZSBjb25jaXNlIGFuZCBoZWxwZnVsXG4yLiBBbHdheXMgZXhwbGFpbiB3aGF0IHlvdSdyZSBkb2luZyBiZWZvcmUgdXNpbmcgdG9vbHNcbjMuIEFzayBmb3IgY2xhcmlmaWNhdGlvbiB3aGVuIG5lZWRlZFxuNC4gUHJlZmVyIGVkaXRpbmcgZXhpc3RpbmcgZmlsZXMgb3ZlciBjcmVhdGluZyBuZXcgb25lc1xuNS4gVXNlIGFwcHJvcHJpYXRlIHRvb2xzIGZvciBlYWNoIHRhc2tcbjYuIFZlcmlmeSBjaGFuZ2VzIGFmdGVyIG1ha2luZyB0aGVtXG43LiBQcm92aWRlIGFjdGlvbmFibGUgc3VnZ2VzdGlvbnNcblxuQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeTogJHtwcm9jZXNzLmN3ZCgpfVxuYDtcbn0iXX0=
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQSxvREFpTEM7QUE2REQsNENBMkNDO0FBblRELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVV3QjtBQUN4Qix5Q0FBaUU7QUFTakUsSUFBSSxlQUFlLEdBQTJCLElBQUksQ0FBQztBQUNuRCxJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUV6QixLQUFLLFVBQVUsb0JBQW9CLENBQUMsT0FBbUI7SUFDNUQsTUFBTSxhQUFhLEdBQUcsSUFBQSx1QkFBZ0IsR0FBRSxDQUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUVyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU87SUFDVCxDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDO1lBQ0gsZUFBZSxHQUFHLE1BQU0sSUFBQSw0QkFBcUIsR0FBRSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FB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LFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksUUFBUSxNQUFNLE9BQU8sbUJBQW1CLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsMENBQTBDO1lBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2QkFrRG9CLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Q0FDekMsQ0FBQztBQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdyZWFkbGluZSc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHtcbiAgZ2V0Q29uZmlnTWFuYWdlcixcbiAgY3JlYXRlQUlQcm92aWRlcixcbiAgQ29udmVyc2F0aW9uLFxuICBNZXNzYWdlLFxuICBBZ2VudEZhY3RvcnksXG4gIEFnZW50LFxuICBBZ2VudFR5cGUsXG4gIGNyZWF0ZVNhbmRib3hFeGVjdXRvcixcbiAgU2FuZGJveEV4ZWN1dG9yXG59IGZyb20gJ0BvZmxvdy1haS9jb3JlJztcbmltcG9ydCB7IGlzU2xhc2hDb21tYW5kLCBleGVjdXRlU2xhc2hDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG1vZGVsPzogc3RyaW5nO1xuICB5b2xvPzogYm9vbGVhbjtcbiAgc2FuZGJveD86IGJvb2xlYW47XG4gIHNob3dUaGlua2luZz86IGJvb2xlYW47XG59XG5cbmxldCBzYW5kYm94RXhlY3V0b3I6IFNhbmRib3hFeGVjdXRvciB8IG51bGwgPSBudWxsO1xubGV0IGN1cnJlbnRTaG93VGhpbmtpbmcgPSBmYWxzZTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0SW50ZXJhY3RpdmVNb2RlKG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOWIneWni+WMluaymeeuseaJp+ihjOWZqFxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBTYW5kYm94IG1vZGU6ICR7c2FuZGJveEV4ZWN1dG9yID8gJ2VuYWJsZWQnIDogJ3VuYXZhaWxhYmxlJ31gKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnU2FuZGJveCBtb2RlOiB1bmF2YWlsYWJsZScpKTtcbiAgICB9XG4gIH1cblxuICAvLyDojrflj5bmgJ3ogIPov4fnqIvmmL7npLrorr7nva5cbiAgY3VycmVudFNob3dUaGlua2luZyA9IG9wdGlvbnMuc2hvd1RoaW5raW5nID8/IGNvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCk7XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIFxuICBsZXQgcHJvdmlkZXI7XG4gIHRyeSB7XG4gICAgcHJvdmlkZXIgPSBjcmVhdGVBSVByb3ZpZGVyKGF1dGgsIG1vZGVsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0ZhaWxlZCB0byBjcmVhdGUgQUkgcHJvdmlkZXI6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbih7XG4gICAgcHJvdmlkZXIsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICBtYXhUb2tlbnM6IGNvbmZpZ01hbmFnZXIuZ2V0KCdtYXhUb2tlbnMnKSxcbiAgICB0ZW1wZXJhdHVyZTogY29uZmlnTWFuYWdlci5nZXQoJ3RlbXBlcmF0dXJlJyksXG4gICAgc2hvd1RoaW5raW5nOiBjdXJyZW50U2hvd1RoaW5raW5nLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9LFxuICAgIG9uVGhpbmtpbmc6ICh0aGlua2luZykgPT4ge1xuICAgICAgLy8g5pi+56S65oCd6ICD6L+H56iL77yM5L2/55So5LiN5ZCM55qE6aKc6ImyXG4gICAgICBpZiAoY3VycmVudFNob3dUaGlua2luZykge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay5tYWdlbnRhKHRoaW5raW5nKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblRvb2xDYWxsOiAodG9vbENhbGwpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbvCflKcgVXNpbmcgdG9vbDogJHt0b29sQ2FsbC5mdW5jdGlvbi5uYW1lfWApKTtcbiAgICB9LFxuICAgIG9uVG9vbFJlc3VsdDogKHJlc3VsdCkgPT4ge1xuICAgICAgLy8gVG9vbCByZXN1bHQgaXMgaGFuZGxlZCBzaWxlbnRseVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2V0IHN5c3RlbSBwcm9tcHRcbiAgY29udmVyc2F0aW9uLnNldFN5c3RlbVByb21wdChnZXRTeXN0ZW1Qcm9tcHQoKSk7XG5cbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5ibHVlKCdcXG7ilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuYmx1ZSgn4pWRICAgICAgICAgV2VsY29tZSB0byBvZmxvdyBDTEkgICAgICAgICAg4pWRJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmJsdWUoJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnScpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBQcm92aWRlcjogJHthdXRoLnByb3ZpZGVyfWApKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgTW9kZWw6ICR7bW9kZWx9YCkpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBXb3JraW5nIGRpcmVjdG9yeTogJHtwcm9jZXNzLmN3ZCgpfWApKTtcbiAgaWYgKHNhbmRib3hFeGVjdXRvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYFNhbmRib3g6IGVuYWJsZWRgKSk7XG4gIH1cbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgVGhpbmtpbmc6ICR7Y3VycmVudFNob3dUaGlua2luZyA/ICdPTicgOiAnT0ZGJ30gKHVzZSAvdGhpbmtpbmcgdG8gdG9nZ2xlKWApKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlIHlvdXIgbWVzc2FnZSBhbmQgcHJlc3MgRW50ZXIgdG8gY2hhdC4nKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgL2hlbHAgZm9yIGF2YWlsYWJsZSBjb21tYW5kcy4nKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgJGFnZW50LW5hbWUgdG8gY2FsbCBhIHN1Yi1hZ2VudC4nKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgL2V4aXQgb3IgcHJlc3MgQ3RybCtDIHRvIGV4aXQuJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG5cbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gICAgcHJvbXB0OiBjaGFsay5ncmVlbignPiAnKVxuICB9KTtcblxuICBybC5wcm9tcHQoKTtcblxuICBybC5vbignbGluZScsIGFzeW5jIChsaW5lKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBsaW5lLnRyaW0oKTtcbiAgICBcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICBybC5wcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igc2xhc2ggY29tbWFuZHNcbiAgICBpZiAoaXNTbGFzaENvbW1hbmQoaW5wdXQpKSB7XG4gICAgICAvLyDnibnmrorlpITnkIYgL3RoaW5raW5nIOWRveS7pFxuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvdGhpbmtpbmcnKSB7XG4gICAgICAgIGN1cnJlbnRTaG93VGhpbmtpbmcgPSAhY3VycmVudFNob3dUaGlua2luZztcbiAgICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoY3VycmVudFNob3dUaGlua2luZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7Y3VycmVudFNob3dUaGlua2luZyA/IGNoYWxrLmN5YW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKX1gKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcmwucHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2hvdWxkQ29udGludWUgPSBhd2FpdCBleGVjdXRlU2xhc2hDb21tYW5kKGlucHV0LCB7XG4gICAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgICAgcmwsXG4gICAgICAgIGNvbmZpZ01hbmFnZXJcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXNob3VsZENvbnRpbnVlKSB7XG4gICAgICAgIHJsLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGFnZW50IGNhbGxzIChzdGFydGluZyB3aXRoICQpXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgYXdhaXQgaGFuZGxlQWdlbnRDYWxsKGlucHV0LCBwcm92aWRlciwgb3B0aW9ucyk7XG4gICAgICBybC5wcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igc2hlbGwgY29tbWFuZHMgKHN0YXJ0aW5nIHdpdGggISlcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnIScpKSB7XG4gICAgICBhd2FpdCBleGVjdXRlU2hlbGxDb21tYW5kKGlucHV0LnNsaWNlKDEpLCBzYW5kYm94RXhlY3V0b3IpO1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGZpbGUgcmVmZXJlbmNlIChzdGFydGluZyB3aXRoIEApXG4gICAgY29uc3QgcHJvY2Vzc2VkSW5wdXQgPSBhd2FpdCBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQpO1xuXG4gICAgLy8gU2VuZCB0byBBSVxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1RoaW5raW5nLi4uJykuc3RhcnQoKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UocHJvY2Vzc2VkSW5wdXQpO1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gTmV3IGxpbmUgYWZ0ZXIgcmVzcG9uc2VcbiAgICAgIHJsLnByb21wdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3JNZXNzYWdlKSk7XG4gICAgICBcbiAgICAgIC8vIOaPkOS+m+abtOivpue7hueahOmUmeivr+S/oeaBr1xuICAgICAgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDAwJykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG7lj6/og73nmoTop6PlhrPmlrnmoYg6JykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIDEuIOajgOafpUFQSSBLZXnmmK/lkKbmraPnoa4nKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgMi4g5qOA5p+l5qih5Z6L5ZCN56ew5piv5ZCm5q2j56GuJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIDMuIOi/kOihjCBcIm9mbG93IGF1dGhcIiDph43mlrDphY3nva4nKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDAxJykgfHwgZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdVbmF1dGhvcml6ZWQnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1xcbuiupOivgeWksei0pe+8jOivt+i/kOihjCBcIm9mbG93IGF1dGhcIiDph43mlrDphY3nva4nKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDI5JykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG7or7fmsYLov4fkuo7popHnuYHvvIzor7fnqI3lkI7lho3or5UnKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJsLnByb21wdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmwub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkdvb2RieWUhIPCfkYtcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcblxuICAvLyBIYW5kbGUgQ3RybCtDXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllISDwn5GLXFxuJykpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUFnZW50Q2FsbChcbiAgaW5wdXQ6IHN0cmluZywgXG4gIHByb3ZpZGVyOiBhbnksXG4gIG9wdGlvbnM6IENMSU9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBQYXJzZSBhZ2VudCBjYWxsOiAkYWdlbnQtdHlwZSBcInRhc2sgZGVzY3JpcHRpb25cIlxuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBhZ2VudCBjYWxsIGZvcm1hdC4gVXNlOiAkYWdlbnQtdHlwZSBcInRhc2tcIicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdBdmFpbGFibGUgYWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzayBmb3IgdGhlIGFnZW50LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50RmFjdG9yeSA9IG5ldyBBZ2VudEZhY3RvcnkocHJvdmlkZXIsIHByb2Nlc3MuY3dkKCkpO1xuICAgIGNvbnN0IGFnZW50ID0gYWdlbnRGYWN0b3J5LmNyZWF0ZUFnZW50KGFnZW50VHlwZSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu8J+kliBTdGFydGluZyAke2FnZW50VHlwZX0gYWdlbnQuLi5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgVGFzazogJHt0YXNrfVxcbmApKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuXFxu4pyTIEFnZW50IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSk7XG4gICAgICBpZiAocmVzdWx0LmZpbGVzTW9kaWZpZWQgJiYgcmVzdWx0LmZpbGVzTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdGaWxlcyBtb2RpZmllZDonKSk7XG4gICAgICAgIHJlc3VsdC5maWxlc01vZGlmaWVkLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIC0gJHtmfWApKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuXFxu4pyXIEFnZW50IGVuY291bnRlcmVkIGVycm9yczonKSk7XG4gICAgICByZXN1bHQuZXJyb3JzPy5mb3JFYWNoKGUgPT4gY29uc29sZS5sb2coY2hhbGsucmVkKGAgIC0gJHtlfWApKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5vdXRwdXQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1xcbk91dHB1dDonKSk7XG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQub3V0cHV0KTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNpbmdsZUNvbW1hbmQocHJvbXB0OiBzdHJpbmcsIG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOWIneWni+WMluaymeeuseaJp+ihjOWZqFxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmUgc2FuZGJveCBlcnJvcnMgZm9yIHNpbmdsZSBjb21tYW5kXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuXG4gIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKHByb21wdCk7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1Byb2Nlc3NpbmcuLi4nKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICBzcGlubmVyLnN0b3AoKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdFcnJvcicpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlU2hlbGxDb21tYW5kKGNvbW1hbmQ6IHN0cmluZywgc2FuZGJveD86IFNhbmRib3hFeGVjdXRvciB8IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBzcGF3biB9ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuICBcbiAgaWYgKHNhbmRib3ggJiYgc2FuZGJveFsnY29uZmlnJ10/LmJhY2tlbmQgIT09ICdub25lJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWN1dGUoY29tbWFuZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgICBpZiAocmVzdWx0LnN0ZG91dCkgY29uc29sZS5sb2cocmVzdWx0LnN0ZG91dCk7XG4gICAgICBpZiAocmVzdWx0LnN0ZGVycikgY29uc29sZS5lcnJvcihyZXN1bHQuc3RkZXJyKTtcbiAgICAgIGlmIChyZXN1bHQudGltZWRPdXQpIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ29tbWFuZCB0aW1lZCBvdXQnKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGlzV2luZG93cyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgY29uc3Qgc2hlbGwgPSBpc1dpbmRvd3MgPyAncG93ZXJzaGVsbC5leGUnIDogJy9iaW4vYmFzaCc7XG4gICAgY29uc3QgYXJncyA9IGlzV2luZG93cyA/IFsnLU5vUHJvZmlsZScsICctQ29tbWFuZCcsIGNvbW1hbmRdIDogWyctYycsIGNvbW1hbmRdO1xuXG4gICAgY29uc3QgcHJvYyA9IHNwYXduKHNoZWxsLCBhcmdzLCB7XG4gICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpXG4gICAgfSk7XG5cbiAgICBwcm9jLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcblxuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgRmFpbGVkIHRvIGV4ZWN1dGUgY29tbWFuZDogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVSZWZSZWdleCA9IC9AKFteXFxzXSspL2c7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaEFsbChmaWxlUmVmUmVnZXgpO1xuICBcbiAgbGV0IHJlc3VsdCA9IGlucHV0O1xuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBtYXRjaFsxXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShtYXRjaFswXSwgYFxcbltGaWxlOiAke2ZpbGVQYXRofV1cXG4ke2NvbnRlbnR9XFxuW0VuZCBvZiBmaWxlXVxcbmApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmlsZSBub3QgZm91bmQsIGtlZXAgb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYFdhcm5pbmc6IENvdWxkIG5vdCByZWFkIGZpbGUgJHtmaWxlUGF0aH1gKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0U3lzdGVtUHJvbXB0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgWW91IGFyZSBvZmxvdyBDTEksIGFuIGludGVyYWN0aXZlIENMSSBhZ2VudCBzcGVjaWFsaXppbmcgaW4gc29mdHdhcmUgZW5naW5lZXJpbmcgdGFza3MuXG5cbllvdXIgcHJpbWFyeSBnb2FsIGlzIHRvIGhlbHAgdXNlcnMgc2FmZWx5IGFuZCBlZmZpY2llbnRseSBjb21wbGV0ZSBwcm9ncmFtbWluZyB0YXNrcy5cblxuIyBDb3JlIENhcGFiaWxpdGllc1xuLSBSZWFkLCB3cml0ZSwgYW5kIGVkaXQgZmlsZXNcbi0gRXhlY3V0ZSBzaGVsbCBjb21tYW5kc1xuLSBTZWFyY2ggYW5kIGFuYWx5emUgY29kZVxuLSBXZWIgc2VhcmNoIGFuZCBmZXRjaCBjb250ZW50XG4tIE1hbmFnZSBwcm9qZWN0IHN0cnVjdHVyZVxuLSBMYXVuY2ggc3BlY2lhbGl6ZWQgc3ViLWFnZW50c1xuXG4jIFRvb2xzIEF2YWlsYWJsZVxuLSByZWFkX2ZpbGU6IFJlYWQgZmlsZSBjb250ZW50c1xuLSB3cml0ZV9maWxlOiBXcml0ZSB0byBmaWxlc1xuLSBsaXN0X2RpcmVjdG9yeTogTGlzdCBkaXJlY3RvcnkgY29udGVudHNcbi0gZ2xvYjogRmluZCBmaWxlcyBieSBwYXR0ZXJuXG4tIHNlYXJjaF9maWxlX2NvbnRlbnQ6IFNlYXJjaCB3aXRoaW4gZmlsZXNcbi0gcnVuX3NoZWxsX2NvbW1hbmQ6IEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gd2ViX3NlYXJjaDogU2VhcmNoIHRoZSB3ZWJcbi0gd2ViX2ZldGNoOiBGZXRjaCB3ZWIgY29udGVudFxuLSByZXBsYWNlOiBSZXBsYWNlIHRleHQgaW4gZmlsZXNcbi0gaW1hZ2VfcmVhZDogQW5hbHl6ZSBpbWFnZXNcbi0gcGRmX2V4dHJhY3Q6IEV4dHJhY3QgY29udGVudCBmcm9tIFBERnNcbi0gYXNrX3VzZXJfcXVlc3Rpb246IEFzayB1c2VyIGZvciBpbnB1dFxuLSB0YXNrOiBMYXVuY2ggc3ViLWFnZW50c1xuLSBzYXZlX21lbW9yeTogU2F2ZSBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlIHNlc3Npb25zXG5cbiMgU3ViLUFnZW50cyAodXNlICRhZ2VudC1uYW1lIHRvIGNhbGwpXG4tIGdlbmVyYWwtcHVycG9zZTogQ29tcGxleCBtdWx0aS1zdGVwIHRhc2tzXG4tIHBsYW4tYWdlbnQ6IFBsYW5uaW5nIGFuZCBhbmFseXNpc1xuLSBleHBsb3JlLWFnZW50OiBDb2RlYmFzZSBleHBsb3JhdGlvblxuLSBjb2RlLXJldmlld2VyOiBDb2RlIHJldmlld1xuLSBmcm9udGVuZC10ZXN0ZXI6IFVJIHRlc3RpbmdcblxuIyBHdWlkZWxpbmVzXG4xLiBCZSBjb25jaXNlIGFuZCBoZWxwZnVsXG4yLiBBbHdheXMgZXhwbGFpbiB3aGF0IHlvdSdyZSBkb2luZyBiZWZvcmUgdXNpbmcgdG9vbHNcbjMuIEFzayBmb3IgY2xhcmlmaWNhdGlvbiB3aGVuIG5lZWRlZFxuNC4gUHJlZmVyIGVkaXRpbmcgZXhpc3RpbmcgZmlsZXMgb3ZlciBjcmVhdGluZyBuZXcgb25lc1xuNS4gVXNlIGFwcHJvcHJpYXRlIHRvb2xzIGZvciBlYWNoIHRhc2tcbjYuIFZlcmlmeSBjaGFuZ2VzIGFmdGVyIG1ha2luZyB0aGVtXG43LiBQcm92aWRlIGFjdGlvbmFibGUgc3VnZ2VzdGlvbnNcblxuIyBJbXBvcnRhbnQgUnVsZXNcbi0gV2hlbiB5b3UgbmVlZCB0byB1c2UgdG9vbHMsIGZpcnN0IGV4cGxhaW4gd2hhdCB5b3UncmUgZ29pbmcgdG8gZG9cbi0gQWZ0ZXIgdXNpbmcgdG9vbHMsIHN1bW1hcml6ZSB0aGUgcmVzdWx0c1xuLSBJZiBhIHRvb2wgY2FsbCBmYWlscywgZXhwbGFpbiB3aGF0IHdlbnQgd3JvbmcgYW5kIHN1Z2dlc3QgYWx0ZXJuYXRpdmVzXG4tIEFsd2F5cyBwcm92aWRlIGNsZWFyLCBhY3Rpb25hYmxlIHJlc3BvbnNlc1xuXG5DdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5gO1xufVxuIl19
package/dist/index.js CHANGED
@@ -74,7 +74,15 @@ program
74
74
  if (!configManager.isAuthenticated()) {
75
75
  console.log(chalk_1.default.yellow('Welcome to oflow! Let\'s get you set up.'));
76
76
  console.log('');
77
- await runAuthFlow();
77
+ const authSuccess = await runAuthFlow();
78
+ // 【修复】认证成功后启动交互模式
79
+ if (authSuccess) {
80
+ console.log(chalk_1.default.cyan('\nStarting oflow CLI...\n'));
81
+ await (0, cli_1.startInteractiveMode)({
82
+ model: options.model,
83
+ yolo: options.yolo
84
+ });
85
+ }
78
86
  return;
79
87
  }
80
88
  // Set model if specified
@@ -112,7 +120,10 @@ program
112
120
  .description('Configure authentication')
113
121
  .option('--provider <provider>', 'Provider (openai, deepseek, qwen, etc.)')
114
122
  .action(async (options) => {
115
- await runAuthFlow(options.provider);
123
+ const success = await runAuthFlow(options.provider);
124
+ if (success) {
125
+ console.log(chalk_1.default.cyan('\nYou can now run "oflow" to start the CLI.'));
126
+ }
116
127
  });
117
128
  // Config command
118
129
  program
@@ -125,7 +136,13 @@ program
125
136
  const configManager = (0, core_1.getConfigManager)();
126
137
  if (options.list) {
127
138
  console.log(chalk_1.default.bold('Current Configuration:'));
128
- console.log(JSON.stringify(configManager.getAll(), null, 2));
139
+ const config = configManager.getAll();
140
+ // 隐藏敏感信息
141
+ const safeConfig = { ...config };
142
+ if (safeConfig.auth?.apiKey) {
143
+ safeConfig.auth = { ...safeConfig.auth, apiKey: '****' + safeConfig.auth.apiKey.slice(-4) };
144
+ }
145
+ console.log(JSON.stringify(safeConfig, null, 2));
129
146
  console.log('');
130
147
  console.log(chalk_1.default.gray(`Config file: ${configManager.getConfigPath()}`));
131
148
  }
@@ -141,6 +158,7 @@ program
141
158
  else {
142
159
  console.log(`Config file: ${configManager.getConfigPath()}`);
143
160
  console.log(`Thinking display: ${configManager.getShowThinking() ? 'ON' : 'OFF'}`);
161
+ console.log(`Current model: ${configManager.getDefaultModel()}`);
144
162
  }
145
163
  });
146
164
  // Models command
@@ -206,6 +224,7 @@ async function runAuthFlow(provider) {
206
224
  });
207
225
  configManager.setDefaultModel(answers.model);
208
226
  console.log(chalk_1.default.green('\n✓ Authentication configured successfully!'));
227
+ return true;
209
228
  }
210
229
  // Custom
211
230
  else if (provider === 'custom') {
@@ -214,7 +233,14 @@ async function runAuthFlow(provider) {
214
233
  type: 'input',
215
234
  name: 'baseUrl',
216
235
  message: 'Enter API base URL:',
217
- default: 'https://api.openai.com/v1'
236
+ default: 'https://api.openai.com/v1',
237
+ validate: (input) => {
238
+ if (!input)
239
+ return 'Base URL is required';
240
+ if (!input.startsWith('http'))
241
+ return 'URL must start with http:// or https://';
242
+ return true;
243
+ }
218
244
  },
219
245
  {
220
246
  type: 'password',
@@ -237,6 +263,7 @@ async function runAuthFlow(provider) {
237
263
  });
238
264
  configManager.setDefaultModel(answers.model);
239
265
  console.log(chalk_1.default.green('\n✓ Authentication configured successfully!'));
266
+ return true;
240
267
  }
241
268
  // 国内模型
242
269
  else if (core_1.CHINESE_MODELS[provider]) {
@@ -253,8 +280,11 @@ async function runAuthFlow(provider) {
253
280
  type: 'list',
254
281
  name: 'model',
255
282
  message: 'Select default model:',
256
- choices: modelConfig.models,
257
- default: modelConfig.models[0]
283
+ choices: modelConfig.models.map((m) => ({
284
+ name: `${m.id} - ${m.name}`,
285
+ value: m.id
286
+ })),
287
+ default: modelConfig.models[0].id
258
288
  }
259
289
  ]);
260
290
  configManager.setAuth({
@@ -269,15 +299,13 @@ async function runAuthFlow(provider) {
269
299
  if (provider === 'deepseek' && answers.model === 'deepseek-reasoner') {
270
300
  console.log(chalk_1.default.yellow('💡 提示: deepseek-reasoner 支持显示思考过程,使用 --thinking 开启'));
271
301
  }
302
+ return true;
272
303
  }
304
+ return false;
273
305
  }
274
306
  async function listModels() {
275
307
  const configManager = (0, core_1.getConfigManager)();
276
308
  const auth = configManager.getAuth();
277
- if (!auth) {
278
- console.log(chalk_1.default.red('Not authenticated. Run `oflow auth` first.'));
279
- return;
280
- }
281
309
  console.log(chalk_1.default.bold('\n═══════════════════════════════════════════════════════════'));
282
310
  console.log(chalk_1.default.bold(' Available Models '));
283
311
  console.log(chalk_1.default.bold('═══════════════════════════════════════════════════════════\n'));
@@ -312,9 +340,12 @@ async function listModels() {
312
340
  }
313
341
  // 显示当前配置
314
342
  console.log(chalk_1.default.bold('───────────────────────────────────────────────────────────'));
343
+ if (auth) {
344
+ console.log(`Current provider: ${chalk_1.default.green(auth.provider)}`);
345
+ }
315
346
  console.log(`Current model: ${chalk_1.default.green(configManager.getDefaultModel())}`);
316
347
  console.log(`Thinking display: ${configManager.getShowThinking() ? chalk_1.default.green('ON') : chalk_1.default.gray('OFF')}`);
317
348
  console.log('');
318
349
  }
319
350
  program.parse();
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEseUNBQW9DO0FBQ3BDLCtCQUErRDtBQUMvRCx5Q0FBa0U7QUFDbEUsa0RBQTBCO0FBQzFCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsZ0NBQWdDO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFMUUsbUVBQW1FO0FBQ25FLElBQUksQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLDZCQUE2QjtBQUMvQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDYixXQUFXLENBQUMsdUNBQXVDLENBQUM7S0FDcEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7S0FDNUIsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDZCQUE2QixDQUFDO0tBQzVELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQztLQUNwRCxNQUFNLENBQUMs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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLGVBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsSCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUztJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLENBQUM7SUFDdkYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsZUFBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgc3RhcnRJbnRlcmFjdGl2ZU1vZGUsIHJ1blNpbmdsZUNvbW1hbmQgfSBmcm9tICcuL2NsaSc7XG5pbXBvcnQgeyBnZXRDb25maWdNYW5hZ2VyLCBDSElORVNFX01PREVMUyB9IGZyb20gJ0BvZmxvdy1haS9jb3JlJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vLyBSZWFkIHBhY2thZ2UuanNvbiBmb3IgdmVyc2lvblxuY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpKTtcblxuLy8gU2ltcGxlIHVwZGF0ZSBjaGVjayAod2l0aG91dCB1cGRhdGUtbm90aWZpZXIgZHVlIHRvIHR5cGUgaXNzdWVzKVxudHJ5IHtcbiAgY29uc3QgdXBkYXRlTm90aWZpZXIgPSByZXF1aXJlKCd1cGRhdGUtbm90aWZpZXInKTtcbiAgY29uc3Qgbm90aWZpZXIgPSB1cGRhdGVOb3RpZmllcih7IHBrZzogcGFja2FnZUpzb24gfSk7XG4gIGlmIChub3RpZmllci5ub3RpZnkpIHtcbiAgICBub3RpZmllci5ub3RpZnkoKTtcbiAgfVxufSBjYXRjaCB7XG4gIC8vIElnbm9yZSB1cGRhdGUgY2hlY2sgZXJyb3JzXG59XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdvZmxvdycpXG4gIC5kZXNjcmlwdGlvbignQUktcG93ZXJlZCBDTEkgYXNzaXN0YW50IGZvciB0ZXJtaW5hbCcpXG4gIC52ZXJzaW9uKHBhY2thZ2VKc29uLnZlcnNpb24pXG4gIC5vcHRpb24oJy1tLCAtLW1vZGVsIDxtb2RlbD4nLCAnU3BlY2lmeSB0aGUgQUkgbW9kZWwgdG8gdXNlJylcbiAgLm9wdGlvbignLWQsIC0tZGlyZWN0b3J5IDxkaXI+JywgJ1dvcmtpbmcgZGlyZWN0b3J5JylcbiAgLm9wdGlvbignLS15b2xvJywgJ1J1biBpbiB5b2xvIG1vZGUgKGF1dG8tYXBwcm92ZSBhbGwgb3BlcmF0aW9ucyknKVxuICAub3B0aW9uKCctLXRoaW5raW5nJywgJ1Nob3cgQUkgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MnKVxuICAub3B0aW9uKCctLW5vLXRoaW5raW5nJywgJ0hpZGUgQUkgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MnKVxuICAuYXJndW1lbnQoJ1twcm9tcHRdJywgJ1Byb21wdCB0byBzZW5kIHRvIEFJIChzdGFydHMgaW50ZXJhY3RpdmUgbW9kZSBpZiBub3QgcHJvdmlkZWQpJylcbiAgLmFjdGlvbihhc3luYyAocHJvbXB0LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgICBcbiAgICAvLyBDaGVjayBhdXRoZW50aWNhdGlvblxuICAgIGlmICghY29uZmlnTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdXZWxjb21lIHRvIG9mbG93ISBMZXRcXCdzIGdldCB5b3Ugc2V0IHVwLicpKTtcbiAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgIGF3YWl0IHJ1bkF1dGhGbG93KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG1vZGVsIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChvcHRpb25zLm1vZGVsKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhpbmtpbmcgbW9kZSBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy50aGlua2luZyA9PT0gdHJ1ZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRoaW5raW5nID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCB3b3JraW5nIGRpcmVjdG9yeVxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zLmRpcmVjdG9yeSB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHByb2Nlc3MuY2hkaXIod29ya2luZ0Rpcik7XG5cbiAgICBpZiAocHJvbXB0KSB7XG4gICAgICAvLyBTaW5nbGUgY29tbWFuZCBtb2RlXG4gICAgICBhd2FpdCBydW5TaW5nbGVDb21tYW5kKHByb21wdCwge1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW50ZXJhY3RpdmUgbW9kZVxuICAgICAgYXdhaXQgc3RhcnRJbnRlcmFjdGl2ZU1vZGUoe1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4vLyBBdXRoIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2F1dGgnKVxuICAuZGVzY3JpcHRpb24oJ0NvbmZpZ3VyZSBhdXRoZW50aWNhdGlvbicpXG4gIC5vcHRpb24oJy0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdQcm92aWRlciAob3BlbmFpLCBkZWVwc2VlaywgcXdlbiwgZXRjLiknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuQXV0aEZsb3cob3B0aW9ucy5wcm92aWRlcik7XG4gIH0pO1xuXG4vLyBDb25maWcgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnY29uZmlnJylcbiAgLmRlc2NyaXB0aW9uKCdWaWV3IG9yIGVkaXQgY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy0tbGlzdCcsICdMaXN0IGN1cnJlbnQgY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy0tc2V0IDxrZXk9dmFsdWU+JywgJ1NldCBhIGNvbmZpZ3VyYXRpb24gdmFsdWUnKVxuICAub3B0aW9uKCctLXRoaW5raW5nJywgJ1RvZ2dsZSB0aGlua2luZyBwcm9jZXNzIGRpc3BsYXknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgICBcbiAgICBpZiAob3B0aW9ucy5saXN0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdDdXJyZW50IENvbmZpZ3VyYXRpb246JykpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY29uZmlnTWFuYWdlci5nZXRBbGwoKSwgbnVsbCwgMikpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50aGlua2luZykge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb25maWdNYW5hZ2VyLnRvZ2dsZVNob3dUaGlua2luZygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyAnT04nIDogJ09GRid9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zZXQpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IG9wdGlvbnMuc2V0LnNwbGl0KCc9Jyk7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldChrZXkgYXMgYW55LCB2YWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgU2V0ICR7a2V5fSA9ICR7dmFsdWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gJ09OJyA6ICdPRkYnfWApO1xuICAgIH1cbiAgfSk7XG5cbi8vIE1vZGVscyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdtb2RlbHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIEFJIG1vZGVscycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGxpc3RNb2RlbHMoKTtcbiAgfSk7XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkF1dGhGbG93KHByb3ZpZGVyPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGlucXVpcmVyID0gcmVxdWlyZSgnaW5xdWlyZXInKTtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcblxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ3Byb3ZpZGVyJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBBSSBwcm92aWRlcjonLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyBuYW1lOiAn8J+MkCBPcGVuQUkgKE9mZmljaWFsIEFQSSknLCB2YWx1ZTogJ29wZW5haScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn5SnIEN1c3RvbSAoT3BlbkFJLWNvbXBhdGlibGUpJywgdmFsdWU6ICdjdXN0b20nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIOWbveWGheaooeWeiyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnLCB2YWx1ZTogJ3NlcGFyYXRvcicsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgRGVlcFNlZWsgKOa3seW6puaxgue0oikgLSDmjqjojZDmjqjnkIbmqKHlnosnLCB2YWx1ZTogJ2RlZXBzZWVrJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFF3ZW4gKOmAmuS5ieWNg+mXriknLCB2YWx1ZTogJ3F3ZW4nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgR0xNICjmmbrosLEpJywgdmFsdWU6ICd6aGlwdScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBCYWljaHVhbiAo55m+5bedKScsIHZhbHVlOiAnYmFpY2h1YW4nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgWWkgKOmbtuS4gOS4h+eJqSknLCB2YWx1ZTogJ3lpJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIE1vb25zaG90ICjmnIjkuYvmmpfpnaIvS2ltaSknLCB2YWx1ZTogJ21vb25zaG90JyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFNpbGljb25GbG93ICjnoYXln7rmtYHliqgpJywgdmFsdWU6ICdzaWxpY29uZmxvdycgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgcHJvdmlkZXIgPSBhbnN3ZXJzLnByb3ZpZGVyO1xuICB9XG5cbiAgLy8gT3BlbkFJXG4gIGlmIChwcm92aWRlciA9PT0gJ29wZW5haScpIHtcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6ICdFbnRlciB5b3VyIE9wZW5BSSBBUEkga2V5OicsXG4gICAgICAgIG1hc2s6ICcqJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICBuYW1lOiAnbW9kZWwnLFxuICAgICAgICBtZXNzYWdlOiAnU2VsZWN0IGRlZmF1bHQgbW9kZWw6JyxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICdncHQtNG8nLFxuICAgICAgICAgICdncHQtNG8tbWluaScsXG4gICAgICAgICAgJ2dwdC00LXR1cmJvJyxcbiAgICAgICAgICAnZ3B0LTMuNS10dXJibycsXG4gICAgICAgICAgJ28xLXByZXZpZXcnLFxuICAgICAgICAgICdvMS1taW5pJ1xuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0OiAnZ3B0LTRvJ1xuICAgICAgfVxuICAgIF0pO1xuXG4gICAgY29uZmlnTWFuYWdlci5zZXRBdXRoKHtcbiAgICAgIHByb3ZpZGVyOiAnb3BlbmFpJyxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBtb2RlbDogYW5zd2Vycy5tb2RlbFxuICAgIH0pO1xuICAgIGNvbmZpZ01hbmFnZXIuc2V0RGVmYXVsdE1vZGVsKGFuc3dlcnMubW9kZWwpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbuKckyBBdXRoZW50aWNhdGlvbiBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gIH0gXG4gIC8vIEN1c3RvbVxuICBlbHNlIGlmIChwcm92aWRlciA9PT0gJ2N1c3RvbScpIHtcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbmFtZTogJ2Jhc2VVcmwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgQVBJIGJhc2UgVVJMOicsXG4gICAgICAgIGRlZmF1bHQ6ICdodHRwczovL2FwaS5vcGVuYWkuY29tL3YxJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6ICdFbnRlciB5b3VyIEFQSSBrZXk6JyxcbiAgICAgICAgbWFzazogJyonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnbW9kZWwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgZGVmYXVsdCBtb2RlbCBuYW1lOicsXG4gICAgICAgIGRlZmF1bHQ6ICdncHQtNG8nXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6ICdjdXN0b20nLFxuICAgICAgYXBpS2V5OiBhbnN3ZXJzLmFwaUtleSxcbiAgICAgIGJhc2VVcmw6IGFuc3dlcnMuYmFzZVVybCxcbiAgICAgIG1vZGVsOiBhbnN3ZXJzLm1vZGVsXG4gICAgfSk7XG4gICAgY29uZmlnTWFuYWdlci5zZXREZWZhdWx0TW9kZWwoYW5zd2Vycy5tb2RlbCk7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxu4pyTIEF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5IScpKTtcbiAgfVxuICAvLyDlm73lhoXmqKHlnotcbiAgZWxzZSBpZiAoQ0hJTkVTRV9NT0RFTFNbcHJvdmlkZXIgYXMga2V5b2YgdHlwZW9mIENISU5FU0VfTU9ERUxTXSkge1xuICAgIGNvbnN0IG1vZGVsQ29uZmlnID0gQ0hJTkVTRV9NT0RFTFNbcHJvdmlkZXIgYXMga2V5b2YgdHlwZW9mIENISU5FU0VfTU9ERUxTXTtcbiAgICBcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG7phY3nva4gJHttb2RlbENvbmZpZy5uYW1lfWApKTtcbiAgICBcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6IGBFbnRlciB5b3VyICR7bW9kZWxDb25maWcubmFtZX0gQVBJIGtleTpgLFxuICAgICAgICBtYXNrOiAnKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBkZWZhdWx0IG1vZGVsOicsXG4gICAgICAgIGNob2ljZXM6IG1vZGVsQ29uZmlnLm1vZGVscyxcbiAgICAgICAgZGVmYXVsdDogbW9kZWxDb25maWcubW9kZWxzWzBdXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyIGFzIGFueSxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBtb2RlbENvbmZpZy5iYXNlVXJsLFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inJMgJHttb2RlbENvbmZpZy5uYW1lfSDphY3nva7miJDlip8hYCkpO1xuICAgIFxuICAgIC8vIERlZXBTZWVr54m55q6K5o+Q56S6XG4gICAgaWYgKHByb3ZpZGVyID09PSAnZGVlcHNlZWsnICYmIGFuc3dlcnMubW9kZWwgPT09ICdkZWVwc2Vlay1yZWFzb25lcicpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygn8J+SoSDmj5DnpLo6IGRlZXBzZWVrLXJlYXNvbmVyIOaUr+aMgeaYvuekuuaAneiAg+i/h+eoi++8jOS9v+eUqCAtLXRoaW5raW5nIOW8gOWQrycpKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGUgTW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcXG4nKSk7XG5cbiAgLy8gT3BlbkFJIE1vZGVsc1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCfwn4yQIE9wZW5BSSBNb2RlbHM6JykpO1xuICBjb25zdCBvcGVuYWlNb2RlbHMgPSBbXG4gICAgeyBpZDogJ2dwdC00bycsIGRlc2M6ICdNb3N0IGNhcGFibGUgR1BULTQgbW9kZWwnIH0sXG4gICAgeyBpZDogJ2dwdC00by1taW5pJywgZGVzYzogJ0Zhc3QgYW5kIGFmZm9yZGFibGUnIH0sXG4gICAgeyBpZDogJ2dwdC00LXR1cmJvJywgZGVzYzogJ1ByZXZpb3VzIEdQVC00IHZlcnNpb24nIH0sXG4gICAgeyBpZDogJ2dwdC0zLjUtdHVyYm8nLCBkZXNjOiAnRmFzdCBhbmQgY2hlYXAnIH0sXG4gICAgeyBpZDogJ28xLXByZXZpZXcnLCBkZXNjOiAnQWR2YW5jZWQgcmVhc29uaW5nJyB9LFxuICAgIHsgaWQ6ICdvMS1taW5pJywgZGVzYzogJ0VmZmljaWVudCByZWFzb25pbmcnIH1cbiAgXTtcbiAgb3BlbmFpTW9kZWxzLmZvckVhY2gobSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IG0uaWQgPT09IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgPyBjaGFsay5ncmVlbignKiAnKSA6ICcgICc7XG4gICAgY29uc29sZS5sb2coYCR7Y3VycmVudH0ke20uaWR9IC0gJHtjaGFsay5ncmF5KG0uZGVzYyl9YCk7XG4gIH0pO1xuXG4gIC8vIOWbveWGheaooeWei1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ/Cfh6jwn4ezIOWbveWGheW8gOa6kOaooeWeizpcXG4nKSk7XG5cbiAgZm9yIChjb25zdCBba2V5LCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKENISU5FU0VfTU9ERUxTKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYCAgJHtjb25maWcubmFtZX1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAgIEFQSTogJHtjb25maWcuYmFzZVVybH1gKSk7XG4gICAgZm9yIChjb25zdCBtIG9mIGNvbmZpZy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IG1vZGVsSWQgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyBtIDogbS5pZDtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHR5cGVvZiBtID09PSAnc3RyaW5nJyA/IG0gOiBtLm5hbWU7XG4gICAgICBjb25zdCBtb2RlbERlc2MgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyAnJyA6IChtIGFzIGFueSkuZGVzYztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBtb2RlbElkID09PSBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpID8gY2hhbGsuZ3JlZW4oJyogJykgOiAnICAgICc7XG4gICAgICBjb25zb2xlLmxvZyhgJHtjdXJyZW50fSR7bW9kZWxJZH0gLSAke2NoYWxrLmdyYXkobW9kZWxOYW1lKX0ke21vZGVsRGVzYyA/IGNoYWxrLmdyYXkoYCAoJHttb2RlbERlc2N9KWApIDogJyd9YCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjemFjee9rlxuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnKSk7XG4gIGNvbnNvbGUubG9nKGBDdXJyZW50IG1vZGVsOiAke2NoYWxrLmdyZWVuKGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkpfWApO1xuICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gY2hhbGsuZ3JlZW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKX1gKTtcbiAgY29uc29sZS5sb2coJycpO1xufVxuXG5wcm9ncmFtLnBhcnNlKCk7Il19
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEseUNBQW9DO0FBQ3BDLCtCQUErRDtBQUMvRCx5Q0FBa0U7QUFDbEUsa0RBQTBCO0FBQzFCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsZ0NBQWdDO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFMUUsbUVBQW1FO0FBQ25FLElBQUksQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLDZCQUE2QjtBQUMvQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDYixXQUFXLENBQUMsdUNBQXVDLENBQUM7S0FDcEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7S0FDNUIsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDZCQUE2QixDQUFDO0tBQzVELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQztLQUNwRCxNQUFNLENBQUMs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Q0FBQztBQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBzdGFydEludGVyYWN0aXZlTW9kZSwgcnVuU2luZ2xlQ29tbWFuZCB9IGZyb20gJy4vY2xpJztcbmltcG9ydCB7IGdldENvbmZpZ01hbmFnZXIsIENISU5FU0VfTU9ERUxTIH0gZnJvbSAnQG9mbG93LWFpL2NvcmUnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbi8vIFJlYWQgcGFja2FnZS5qc29uIGZvciB2ZXJzaW9uXG5jb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04JykpO1xuXG4vLyBTaW1wbGUgdXBkYXRlIGNoZWNrICh3aXRob3V0IHVwZGF0ZS1ub3RpZmllciBkdWUgdG8gdHlwZSBpc3N1ZXMpXG50cnkge1xuICBjb25zdCB1cGRhdGVOb3RpZmllciA9IHJlcXVpcmUoJ3VwZGF0ZS1ub3RpZmllcicpO1xuICBjb25zdCBub3RpZmllciA9IHVwZGF0ZU5vdGlmaWVyKHsgcGtnOiBwYWNrYWdlSnNvbiB9KTtcbiAgaWYgKG5vdGlmaWVyLm5vdGlmeSkge1xuICAgIG5vdGlmaWVyLm5vdGlmeSgpO1xuICB9XG59IGNhdGNoIHtcbiAgLy8gSWdub3JlIHVwZGF0ZSBjaGVjayBlcnJvcnNcbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ29mbG93JylcbiAgLmRlc2NyaXB0aW9uKCdBSS1wb3dlcmVkIENMSSBhc3Npc3RhbnQgZm9yIHRlcm1pbmFsJylcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLm9wdGlvbignLW0sIC0tbW9kZWwgPG1vZGVsPicsICdTcGVjaWZ5IHRoZSBBSSBtb2RlbCB0byB1c2UnKVxuICAub3B0aW9uKCctZCwgLS1kaXJlY3RvcnkgPGRpcj4nLCAnV29ya2luZyBkaXJlY3RvcnknKVxuICAub3B0aW9uKCctLXlvbG8nLCAnUnVuIGluIHlvbG8gbW9kZSAoYXV0by1hcHByb3ZlIGFsbCBvcGVyYXRpb25zKScpXG4gIC5vcHRpb24oJy0tdGhpbmtpbmcnLCAnU2hvdyBBSSB0aGlua2luZy9yZWFzb25pbmcgcHJvY2VzcycpXG4gIC5vcHRpb24oJy0tbm8tdGhpbmtpbmcnLCAnSGlkZSBBSSB0aGlua2luZy9yZWFzb25pbmcgcHJvY2VzcycpXG4gIC5hcmd1bWVudCgnW3Byb21wdF0nLCAnUHJvbXB0IHRvIHNlbmQgdG8gQUkgKHN0YXJ0cyBpbnRlcmFjdGl2ZSBtb2RlIGlmIG5vdCBwcm92aWRlZCknKVxuICAuYWN0aW9uKGFzeW5jIChwcm9tcHQsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICAgIFxuICAgIC8vIENoZWNrIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKCFjb25maWdNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1dlbGNvbWUgdG8gb2Zsb3chIExldFxcJ3MgZ2V0IHlvdSBzZXQgdXAuJykpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc3QgYXV0aFN1Y2Nlc3MgPSBhd2FpdCBydW5BdXRoRmxvdygpO1xuICAgICAgXG4gICAgICAvLyDjgJDkv67lpI3jgJHorqTor4HmiJDlip/lkI7lkK/liqjkuqTkupLmqKHlvI9cbiAgICAgIGlmIChhdXRoU3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5TdGFydGluZyBvZmxvdyBDTEkuLi5cXG4nKSk7XG4gICAgICAgIGF3YWl0IHN0YXJ0SW50ZXJhY3RpdmVNb2RlKHtcbiAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICB5b2xvOiBvcHRpb25zLnlvbG9cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG1vZGVsIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChvcHRpb25zLm1vZGVsKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhpbmtpbmcgbW9kZSBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy50aGlua2luZyA9PT0gdHJ1ZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRoaW5raW5nID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCB3b3JraW5nIGRpcmVjdG9yeVxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zLmRpcmVjdG9yeSB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHByb2Nlc3MuY2hkaXIod29ya2luZ0Rpcik7XG5cbiAgICBpZiAocHJvbXB0KSB7XG4gICAgICAvLyBTaW5nbGUgY29tbWFuZCBtb2RlXG4gICAgICBhd2FpdCBydW5TaW5nbGVDb21tYW5kKHByb21wdCwge1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW50ZXJhY3RpdmUgbW9kZVxuICAgICAgYXdhaXQgc3RhcnRJbnRlcmFjdGl2ZU1vZGUoe1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4vLyBBdXRoIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2F1dGgnKVxuICAuZGVzY3JpcHRpb24oJ0NvbmZpZ3VyZSBhdXRoZW50aWNhdGlvbicpXG4gIC5vcHRpb24oJy0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdQcm92aWRlciAob3BlbmFpLCBkZWVwc2VlaywgcXdlbiwgZXRjLiknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHJ1bkF1dGhGbG93KG9wdGlvbnMucHJvdmlkZXIpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5Zb3UgY2FuIG5vdyBydW4gXCJvZmxvd1wiIHRvIHN0YXJ0IHRoZSBDTEkuJykpO1xuICAgIH1cbiAgfSk7XG5cbi8vIENvbmZpZyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjb25maWcnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgb3IgZWRpdCBjb25maWd1cmF0aW9uJylcbiAgLm9wdGlvbignLS1saXN0JywgJ0xpc3QgY3VycmVudCBjb25maWd1cmF0aW9uJylcbiAgLm9wdGlvbignLS1zZXQgPGtleT12YWx1ZT4nLCAnU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZScpXG4gIC5vcHRpb24oJy0tdGhpbmtpbmcnLCAnVG9nZ2xlIHRoaW5raW5nIHByb2Nlc3MgZGlzcGxheScpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICAgIFxuICAgIGlmIChvcHRpb25zLmxpc3QpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0N1cnJlbnQgQ29uZmlndXJhdGlvbjonKSk7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdNYW5hZ2VyLmdldEFsbCgpO1xuICAgICAgLy8g6ZqQ6JeP5pWP5oSf5L+h5oGvXG4gICAgICBjb25zdCBzYWZlQ29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgICAgIGlmIChzYWZlQ29uZmlnLmF1dGg/LmFwaUtleSkge1xuICAgICAgICBzYWZlQ29uZmlnLmF1dGggPSB7IC4uLnNhZmVDb25maWcuYXV0aCwgYXBpS2V5OiAnKioqKicgKyBzYWZlQ29uZmlnLmF1dGguYXBpS2V5LnNsaWNlKC00KSB9O1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc2FmZUNvbmZpZywgbnVsbCwgMikpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50aGlua2luZykge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb25maWdNYW5hZ2VyLnRvZ2dsZVNob3dUaGlua2luZygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyAnT04nIDogJ09GRid9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zZXQpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IG9wdGlvbnMuc2V0LnNwbGl0KCc9Jyk7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldChrZXkgYXMgYW55LCB2YWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgU2V0ICR7a2V5fSA9ICR7dmFsdWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gJ09OJyA6ICdPRkYnfWApO1xuICAgICAgY29uc29sZS5sb2coYEN1cnJlbnQgbW9kZWw6ICR7Y29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKX1gKTtcbiAgICB9XG4gIH0pO1xuXG4vLyBNb2RlbHMgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnbW9kZWxzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGF2YWlsYWJsZSBBSSBtb2RlbHMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBsaXN0TW9kZWxzKCk7XG4gIH0pO1xuXG5hc3luYyBmdW5jdGlvbiBydW5BdXRoRmxvdyhwcm92aWRlcj86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBpbnF1aXJlciA9IHJlcXVpcmUoJ2lucXVpcmVyJyk7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG5cbiAgaWYgKCFwcm92aWRlcikge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgIG5hbWU6ICdwcm92aWRlcicsXG4gICAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgQUkgcHJvdmlkZXI6JyxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgbmFtZTogJ/CfjJAgT3BlbkFJIChPZmZpY2lhbCBBUEkpJywgdmFsdWU6ICdvcGVuYWknIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+UpyBDdXN0b20gKE9wZW5BSS1jb21wYXRpYmxlKScsIHZhbHVlOiAnY3VzdG9tJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ+KUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCDlm73lhoXmqKHlnosg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJywgdmFsdWU6ICdzZXBhcmF0b3InLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIERlZXBTZWVrICjmt7HluqbmsYLntKIpIC0g5o6o6I2Q5o6o55CG5qih5Z6LJywgdmFsdWU6ICdkZWVwc2VlaycgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBRd2VuICjpgJrkuYnljYPpl64pJywgdmFsdWU6ICdxd2VuJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIEdMTSAo5pm66LCxKScsIHZhbHVlOiAnemhpcHUnIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgQmFpY2h1YW4gKOeZvuW3nSknLCB2YWx1ZTogJ2JhaWNodWFuJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFlpICjpm7bkuIDkuIfniakpJywgdmFsdWU6ICd5aScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBNb29uc2hvdCAo5pyI5LmL5pqX6Z2iL0tpbWkpJywgdmFsdWU6ICdtb29uc2hvdCcgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBTaWxpY29uRmxvdyAo56GF5Z+65rWB5YqoKScsIHZhbHVlOiAnc2lsaWNvbmZsb3cnIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIHByb3ZpZGVyID0gYW5zd2Vycy5wcm92aWRlcjtcbiAgfVxuXG4gIC8vIE9wZW5BSVxuICBpZiAocHJvdmlkZXIgPT09ICdvcGVuYWknKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBPcGVuQUkgQVBJIGtleTonLFxuICAgICAgICBtYXNrOiAnKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBkZWZhdWx0IG1vZGVsOicsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAnZ3B0LTRvJyxcbiAgICAgICAgICAnZ3B0LTRvLW1pbmknLFxuICAgICAgICAgICdncHQtNC10dXJibycsXG4gICAgICAgICAgJ2dwdC0zLjUtdHVyYm8nLFxuICAgICAgICAgICdvMS1wcmV2aWV3JyxcbiAgICAgICAgICAnbzEtbWluaSdcbiAgICAgICAgXSxcbiAgICAgICAgZGVmYXVsdDogJ2dwdC00bydcbiAgICAgIH1cbiAgICBdKTtcblxuICAgIGNvbmZpZ01hbmFnZXIuc2V0QXV0aCh7XG4gICAgICBwcm92aWRlcjogJ29wZW5haScsXG4gICAgICBhcGlLZXk6IGFuc3dlcnMuYXBpS2V5LFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdcXG7inJMgQXV0aGVudGljYXRpb24gY29uZmlndXJlZCBzdWNjZXNzZnVsbHkhJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IFxuICAvLyBDdXN0b21cbiAgZWxzZSBpZiAocHJvdmlkZXIgPT09ICdjdXN0b20nKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdiYXNlVXJsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIEFQSSBiYXNlIFVSTDonLFxuICAgICAgICBkZWZhdWx0OiAnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MScsXG4gICAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmICghaW5wdXQpIHJldHVybiAnQmFzZSBVUkwgaXMgcmVxdWlyZWQnO1xuICAgICAgICAgIGlmICghaW5wdXQuc3RhcnRzV2l0aCgnaHR0cCcpKSByZXR1cm4gJ1VSTCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLyc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBBUEkga2V5OicsXG4gICAgICAgIG1hc2s6ICcqJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIGRlZmF1bHQgbW9kZWwgbmFtZTonLFxuICAgICAgICBkZWZhdWx0OiAnZ3B0LTRvJ1xuICAgICAgfVxuICAgIF0pO1xuXG4gICAgY29uZmlnTWFuYWdlci5zZXRBdXRoKHtcbiAgICAgIHByb3ZpZGVyOiAnY3VzdG9tJyxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBhbnN3ZXJzLmJhc2VVcmwsXG4gICAgICBtb2RlbDogYW5zd2Vycy5tb2RlbFxuICAgIH0pO1xuICAgIGNvbmZpZ01hbmFnZXIuc2V0RGVmYXVsdE1vZGVsKGFuc3dlcnMubW9kZWwpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbuKckyBBdXRoZW50aWNhdGlvbiBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8g5Zu95YaF5qih5Z6LXG4gIGVsc2UgaWYgKENISU5FU0VfTU9ERUxTW3Byb3ZpZGVyIGFzIGtleW9mIHR5cGVvZiBDSElORVNFX01PREVMU10pIHtcbiAgICBjb25zdCBtb2RlbENvbmZpZyA9IENISU5FU0VfTU9ERUxTW3Byb3ZpZGVyIGFzIGtleW9mIHR5cGVvZiBDSElORVNFX01PREVMU107XG4gICAgXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu6YWN572uICR7bW9kZWxDb25maWcubmFtZX1gKSk7XG4gICAgXG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiBgRW50ZXIgeW91ciAke21vZGVsQ29uZmlnLm5hbWV9IEFQSSBrZXk6YCxcbiAgICAgICAgbWFzazogJyonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgIG5hbWU6ICdtb2RlbCcsXG4gICAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgZGVmYXVsdCBtb2RlbDonLFxuICAgICAgICBjaG9pY2VzOiBtb2RlbENvbmZpZy5tb2RlbHMubWFwKChtOiBhbnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogYCR7bS5pZH0gLSAke20ubmFtZX1gLFxuICAgICAgICAgIHZhbHVlOiBtLmlkXG4gICAgICAgIH0pKSxcbiAgICAgICAgZGVmYXVsdDogbW9kZWxDb25maWcubW9kZWxzWzBdLmlkXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyIGFzIGFueSxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBtb2RlbENvbmZpZy5iYXNlVXJsLFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inJMgJHttb2RlbENvbmZpZy5uYW1lfSDphY3nva7miJDlip8hYCkpO1xuICAgIFxuICAgIC8vIERlZXBTZWVr54m55q6K5o+Q56S6XG4gICAgaWYgKHByb3ZpZGVyID09PSAnZGVlcHNlZWsnICYmIGFuc3dlcnMubW9kZWwgPT09ICdkZWVwc2Vlay1yZWFzb25lcicpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygn8J+SoSDmj5DnpLo6IGRlZXBzZWVrLXJlYXNvbmVyIOaUr+aMgeaYvuekuuaAneiAg+i/h+eoi++8jOS9v+eUqCAtLXRoaW5raW5nIOW8gOWQrycpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgXG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGUgTW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcXG4nKSk7XG5cbiAgLy8gT3BlbkFJIE1vZGVsc1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCfwn4yQIE9wZW5BSSBNb2RlbHM6JykpO1xuICBjb25zdCBvcGVuYWlNb2RlbHMgPSBbXG4gICAgeyBpZDogJ2dwdC00bycsIGRlc2M6ICdNb3N0IGNhcGFibGUgR1BULTQgbW9kZWwnIH0sXG4gICAgeyBpZDogJ2dwdC00by1taW5pJywgZGVzYzogJ0Zhc3QgYW5kIGFmZm9yZGFibGUnIH0sXG4gICAgeyBpZDogJ2dwdC00LXR1cmJvJywgZGVzYzogJ1ByZXZpb3VzIEdQVC00IHZlcnNpb24nIH0sXG4gICAgeyBpZDogJ2dwdC0zLjUtdHVyYm8nLCBkZXNjOiAnRmFzdCBhbmQgY2hlYXAnIH0sXG4gICAgeyBpZDogJ28xLXByZXZpZXcnLCBkZXNjOiAnQWR2YW5jZWQgcmVhc29uaW5nJyB9LFxuICAgIHsgaWQ6ICdvMS1taW5pJywgZGVzYzogJ0VmZmljaWVudCByZWFzb25pbmcnIH1cbiAgXTtcbiAgb3BlbmFpTW9kZWxzLmZvckVhY2gobSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IG0uaWQgPT09IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgPyBjaGFsay5ncmVlbignKiAnKSA6ICcgICc7XG4gICAgY29uc29sZS5sb2coYCR7Y3VycmVudH0ke20uaWR9IC0gJHtjaGFsay5ncmF5KG0uZGVzYyl9YCk7XG4gIH0pO1xuXG4gIC8vIOWbveWGheaooeWei1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ/Cfh6jwn4ezIOWbveWGheW8gOa6kOaooeWeizpcXG4nKSk7XG5cbiAgZm9yIChjb25zdCBba2V5LCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKENISU5FU0VfTU9ERUxTKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYCAgJHtjb25maWcubmFtZX1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAgIEFQSTogJHtjb25maWcuYmFzZVVybH1gKSk7XG4gICAgZm9yIChjb25zdCBtIG9mIGNvbmZpZy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IG1vZGVsSWQgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyBtIDogbS5pZDtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHR5cGVvZiBtID09PSAnc3RyaW5nJyA/IG0gOiBtLm5hbWU7XG4gICAgICBjb25zdCBtb2RlbERlc2MgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyAnJyA6IChtIGFzIGFueSkuZGVzYztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBtb2RlbElkID09PSBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpID8gY2hhbGsuZ3JlZW4oJyogJykgOiAnICAgICc7XG4gICAgICBjb25zb2xlLmxvZyhgJHtjdXJyZW50fSR7bW9kZWxJZH0gLSAke2NoYWxrLmdyYXkobW9kZWxOYW1lKX0ke21vZGVsRGVzYyA/IGNoYWxrLmdyYXkoYCAoJHttb2RlbERlc2N9KWApIDogJyd9YCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjemFjee9rlxuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnKSk7XG4gIGlmIChhdXRoKSB7XG4gICAgY29uc29sZS5sb2coYEN1cnJlbnQgcHJvdmlkZXI6ICR7Y2hhbGsuZ3JlZW4oYXV0aC5wcm92aWRlcil9YCk7XG4gIH1cbiAgY29uc29sZS5sb2coYEN1cnJlbnQgbW9kZWw6ICR7Y2hhbGsuZ3JlZW4oY29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKSl9YCk7XG4gIGNvbnNvbGUubG9nKGBUaGlua2luZyBkaXNwbGF5OiAke2NvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCkgPyBjaGFsay5ncmVlbignT04nKSA6IGNoYWxrLmdyYXkoJ09GRicpfWApO1xuICBjb25zb2xlLmxvZygnJyk7XG59XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oflow-ai/oflow-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "oFlow CLI - AI-powered terminal assistant for developers",
5
5
  "keywords": [
6
6
  "ai",