ask-cli-ai 1.1.0 → 1.2.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.
- package/README.md +9 -1
- package/dist/app.js +9 -3
- package/dist/commands/ask.js +70 -41
- package/dist/commands/config.js +6 -10
- package/dist/commands/connect.js +112 -0
- package/dist/commands/selectModel.js +11 -17
- package/dist/components/command.js +9 -6
- package/dist/components/commands.js +3 -3
- package/dist/components/provider.js +81 -22
- package/dist/components/providers.js +21 -19
- package/dist/components/selectModel.js +62 -26
- package/dist/components/testProvider.js +14 -0
- package/dist/components/textField.js +7 -29
- package/dist/components/textInput.js +136 -0
- package/dist/components/welcome.js +3 -9
- package/dist/hooks/useExit.js +17 -0
- package/dist/hooks/useField.js +20 -0
- package/dist/hooks/useTestProvider.js +63 -0
- package/dist/install.js +5 -2
- package/dist/migrations/1-settings-1.1.0.js +56 -0
- package/dist/migrations/2-add-providers-1.2.0.js +60 -0
- package/dist/stores/config.js +35 -6
- package/dist/templates/instructions.js +5 -4
- package/dist/utils/defaultConfig.js +41 -13
- package/dist/utils/validateUrl.js +10 -0
- package/package.json +74 -72
- package/dist/components/apiKeyField.js +0 -8
- package/dist/migrations/settings-1.1.0.js +0 -23
- package/dist/providers.js +0 -35
package/package.json
CHANGED
|
@@ -1,72 +1,74 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ask-cli-ai",
|
|
3
|
-
"description": "AI CLI to help you with commands, coding, apps, and more from your terminal.",
|
|
4
|
-
"version": "1.1
|
|
5
|
-
"license": "ISC",
|
|
6
|
-
"author": "David Minaya",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"main": "./dist/app.js",
|
|
9
|
-
"homepage": "https://github.com/david-minaya/ask",
|
|
10
|
-
"engines": {
|
|
11
|
-
"node": ">=22"
|
|
12
|
-
},
|
|
13
|
-
"repository": {
|
|
14
|
-
"type": "git",
|
|
15
|
-
"url": "git+https://github.com/david-minaya/ask.git"
|
|
16
|
-
},
|
|
17
|
-
"keywords": [
|
|
18
|
-
"cli",
|
|
19
|
-
"ai",
|
|
20
|
-
"terminal",
|
|
21
|
-
"commands",
|
|
22
|
-
"productivity",
|
|
23
|
-
"help",
|
|
24
|
-
"ask"
|
|
25
|
-
],
|
|
26
|
-
"bin": {
|
|
27
|
-
"ask": "dist/app.js",
|
|
28
|
-
"how": "dist/app.js",
|
|
29
|
-
"what": "dist/app.js",
|
|
30
|
-
"que": "dist/app.js",
|
|
31
|
-
"como": "dist/app.js",
|
|
32
|
-
"cual": "dist/app.js"
|
|
33
|
-
},
|
|
34
|
-
"scripts": {
|
|
35
|
-
"build": "tsc",
|
|
36
|
-
"dev": "tsc --incremental && node --enable-source-maps .",
|
|
37
|
-
"lint": "eslint .",
|
|
38
|
-
"typelint": "npm run lint && tsc --noEmit",
|
|
39
|
-
"postinstall": "node ./dist/install.js"
|
|
40
|
-
},
|
|
41
|
-
"dependencies": {
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
-
"@langchain/
|
|
45
|
-
"@langchain/
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"ink
|
|
52
|
-
"ink-
|
|
53
|
-
"ink-
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"@
|
|
64
|
-
"@types/
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "ask-cli-ai",
|
|
3
|
+
"description": "AI CLI to help you with commands, coding, apps, and more from your terminal.",
|
|
4
|
+
"version": "1.2.1",
|
|
5
|
+
"license": "ISC",
|
|
6
|
+
"author": "David Minaya",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/app.js",
|
|
9
|
+
"homepage": "https://github.com/david-minaya/ask",
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=22"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/david-minaya/ask.git"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"cli",
|
|
19
|
+
"ai",
|
|
20
|
+
"terminal",
|
|
21
|
+
"commands",
|
|
22
|
+
"productivity",
|
|
23
|
+
"help",
|
|
24
|
+
"ask"
|
|
25
|
+
],
|
|
26
|
+
"bin": {
|
|
27
|
+
"ask": "dist/app.js",
|
|
28
|
+
"how": "dist/app.js",
|
|
29
|
+
"what": "dist/app.js",
|
|
30
|
+
"que": "dist/app.js",
|
|
31
|
+
"como": "dist/app.js",
|
|
32
|
+
"cual": "dist/app.js"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc",
|
|
36
|
+
"dev": "tsc --incremental && node --enable-source-maps .",
|
|
37
|
+
"lint": "eslint .",
|
|
38
|
+
"typelint": "npm run lint && tsc --noEmit",
|
|
39
|
+
"postinstall": "node ./dist/install.js"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@anthropic-ai/sdk": "^0.71.2",
|
|
43
|
+
"@google/genai": "^1.38.0",
|
|
44
|
+
"@langchain/anthropic": "^1.3.7",
|
|
45
|
+
"@langchain/core": "^1.1.12",
|
|
46
|
+
"@langchain/google-genai": "^2.1.7",
|
|
47
|
+
"@langchain/openai": "^1.2.1",
|
|
48
|
+
"chalk": "^5.6.2",
|
|
49
|
+
"dotenv": "^17.2.3",
|
|
50
|
+
"find-process": "^2.0.0",
|
|
51
|
+
"ink": "^6.6.0",
|
|
52
|
+
"ink-scroll-list": "^0.4.1",
|
|
53
|
+
"ink-scroll-view": "^0.3.5",
|
|
54
|
+
"ink-spinner": "^5.0.0",
|
|
55
|
+
"langchain": "^1.2.7",
|
|
56
|
+
"openai": "^6.16.0",
|
|
57
|
+
"react": "^19.2.3",
|
|
58
|
+
"yargs": "^18.0.0"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@eslint/js": "^9.39.2",
|
|
62
|
+
"@stylistic/eslint-plugin": "^5.6.1",
|
|
63
|
+
"@tsconfig/node20": "^20.1.8",
|
|
64
|
+
"@types/node": "^25.0.3",
|
|
65
|
+
"@types/react": "^19.2.7",
|
|
66
|
+
"@types/yargs": "^17.0.35",
|
|
67
|
+
"eslint": "^9.39.2",
|
|
68
|
+
"eslint-plugin-react": "^7.37.5",
|
|
69
|
+
"globals": "^17.0.0",
|
|
70
|
+
"ts-node": "^10.9.2",
|
|
71
|
+
"typescript": "^5.9.3",
|
|
72
|
+
"typescript-eslint": "^8.51.0"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
3
|
-
import { TextField } from "./textField.js";
|
|
4
|
-
export function ApiKeyField(props) {
|
|
5
|
-
const { title, value, onChange } = props;
|
|
6
|
-
return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(Text, { bold: true, children: title }), _jsx(Box, { flexShrink: 0 }), _jsxs(Box, { flexDirection: 'row', gap: 1, borderStyle: 'single', borderLeftColor: 'cyan', borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, paddingLeft: 1, marginTop: 1, children: [_jsx(Box, { flexShrink: 0, children: _jsx(Text, { children: "Api key:" }) }), _jsx(TextField, { value: value, placeholder: 'Enter api key', onChange: onChange })] })] }));
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpS2V5RmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9hcGlLZXlGaWVsZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBaUIsQ0FBQztBQVE1QyxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVk7SUFFdEMsTUFBTSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsUUFBUSxFQUNULEdBQUcsS0FBSyxDQUFDO0lBRVYsT0FBTyxDQUNMLE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBQyxRQUFRLGFBQ3pCLEtBQUMsSUFBSSxJQUFDLElBQUksa0JBQUUsS0FBSyxHQUFRLEVBQ3pCLEtBQUMsR0FBRyxJQUFDLFVBQVUsRUFBRSxDQUFDLEdBQ1osRUFDTixNQUFDLEdBQUcsSUFDRixhQUFhLEVBQUMsS0FBSyxFQUNuQixHQUFHLEVBQUUsQ0FBQyxFQUNOLFdBQVcsRUFBQyxRQUFRLEVBQ3BCLGVBQWUsRUFBQyxNQUFNLEVBQ3RCLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLFlBQVksRUFBRSxLQUFLLEVBQ25CLFdBQVcsRUFBRSxDQUFDLEVBQ2QsU0FBUyxFQUFFLENBQUMsYUFDWixLQUFDLEdBQUcsSUFBQyxVQUFVLEVBQUUsQ0FBQyxZQUNoQixLQUFDLElBQUksMkJBQWdCLEdBQ2pCLEVBQ04sS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFFLEtBQUssRUFDWixXQUFXLEVBQUMsZUFBZSxFQUMzQixRQUFRLEVBQUUsUUFBUSxHQUFHLElBQ25CLElBQ0YsQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { configPath, dataDir, historyDir } from "../utils/paths.js";
|
|
4
|
-
import { configStore } from "../stores/config.js";
|
|
5
|
-
import { defaultConfig } from "../utils/defaultConfig.js";
|
|
6
|
-
if (!fs.existsSync(dataDir)) {
|
|
7
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
8
|
-
}
|
|
9
|
-
if (fs.existsSync(path.join(dataDir, 'chats'))) {
|
|
10
|
-
fs.renameSync(path.join(dataDir, 'chats'), path.join(dataDir, 'history'));
|
|
11
|
-
}
|
|
12
|
-
if (!fs.existsSync(historyDir)) {
|
|
13
|
-
fs.mkdirSync(historyDir, { recursive: true });
|
|
14
|
-
}
|
|
15
|
-
if (!fs.existsSync(configPath)) {
|
|
16
|
-
await configStore.save(defaultConfig);
|
|
17
|
-
}
|
|
18
|
-
const config = await configStore.get();
|
|
19
|
-
if (config.settings === undefined) {
|
|
20
|
-
config.settings = defaultConfig.settings;
|
|
21
|
-
await configStore.save(config);
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MtMS4xLjAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9ucy9zZXR0aW5ncy0xLjEuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM1QixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUMvQixFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQy9CLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFdkMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUN6QyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsQ0FBQyJ9
|
package/dist/providers.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export const providers = [
|
|
2
|
-
{
|
|
3
|
-
id: 'gemini',
|
|
4
|
-
name: 'Gemini',
|
|
5
|
-
models: [
|
|
6
|
-
{ title: 'Gemini 3 Flash Preview', name: 'gemini-3-flash-preview', config: { thinkingConfig: { thinkingLevel: 'LOW' } } },
|
|
7
|
-
{ title: 'Gemini 3 Pro Preview', name: 'gemini-3-pro-preview', config: { thinkingConfig: { thinkingLevel: 'LOW' } } },
|
|
8
|
-
{ title: 'Gemini 2.5 Flash', name: 'gemini-2.5-flash', config: { thinkingBudget: 500 } },
|
|
9
|
-
{ title: 'Gemini 2.5 Flash Lite', name: 'gemini-2.5-flash-lite', config: { thinkingBudget: 512 } },
|
|
10
|
-
{ title: 'Gemini 2.5 Pro', name: 'gemini-2.5-pro', config: { thinkingBudget: 500 } }
|
|
11
|
-
]
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
id: 'openai',
|
|
15
|
-
name: 'OpenAI',
|
|
16
|
-
models: [
|
|
17
|
-
{ title: 'GPT-5 Mini', name: 'gpt-5-mini', config: { effort: 'low' } },
|
|
18
|
-
{ title: 'GPT-5 Nano', name: 'gpt-5-nano', config: { effort: 'low' } },
|
|
19
|
-
{ title: 'GPT-5', name: 'gpt-5', config: { effort: 'low' } },
|
|
20
|
-
{ title: 'GPT-5.2', name: 'gpt-5.2', config: { effort: 'low' } },
|
|
21
|
-
{ title: 'GPT-5.2 Pro', name: 'gpt-5.2-pro', config: { effort: 'low' } },
|
|
22
|
-
{ title: 'GPT-4.1', name: 'gpt-4.1' },
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
id: 'anthropic',
|
|
27
|
-
name: 'Anthropic',
|
|
28
|
-
models: [
|
|
29
|
-
{ title: 'Claude Haiku 4.5', name: 'claude-haiku-4-5' },
|
|
30
|
-
{ title: 'Claude Sonnet 4.5', name: 'claude-sonnet-4-5' },
|
|
31
|
-
{ title: 'Claude Opus 4.5', name: 'claude-opus-4-5' }
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
];
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWU7SUFDbkM7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFO1lBQ04sRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3pILEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNySCxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hGLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbEcsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsRUFBRTtTQUNyRjtLQUNGO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFO1lBQ04sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3RFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0RSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDNUQsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN4RSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtTQUN0QztLQUNGO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsV0FBVztRQUNmLElBQUksRUFBRSxXQUFXO1FBQ2pCLE1BQU0sRUFBRTtZQUNOLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUN2RCxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDekQsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1NBQ3REO0tBQ0Y7Q0FDRixDQUFDIn0=
|