feihong-code 7.0.0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/.github/workflows/ci.yml +180 -140
  2. package/.github/workflows/release.yml +200 -0
  3. package/CHANGELOG.md +94 -65
  4. package/README.md +609 -586
  5. package/dist/agent/browser-agent.js +354 -0
  6. package/dist/agent/browser-agent.js.map +1 -0
  7. package/dist/agent/change-manager.js +433 -0
  8. package/dist/agent/change-manager.js.map +1 -0
  9. package/dist/agent/code-rag.js +293 -0
  10. package/dist/agent/code-rag.js.map +1 -0
  11. package/dist/agent/code-writer.js +13 -1
  12. package/dist/agent/code-writer.js.map +1 -1
  13. package/dist/agent/completion-engine.js +553 -0
  14. package/dist/agent/completion-engine.js.map +1 -0
  15. package/dist/agent/completion-postprocess.js +109 -0
  16. package/dist/agent/completion-postprocess.js.map +1 -0
  17. package/dist/agent/context-budget.js +121 -0
  18. package/dist/agent/context-budget.js.map +1 -0
  19. package/dist/agent/context-compactor.js +235 -10
  20. package/dist/agent/context-compactor.js.map +1 -1
  21. package/dist/agent/custom-agent.js +368 -0
  22. package/dist/agent/custom-agent.js.map +1 -0
  23. package/dist/agent/design-to-code.js +218 -0
  24. package/dist/agent/design-to-code.js.map +1 -0
  25. package/dist/agent/event-driven-agent.js +359 -0
  26. package/dist/agent/event-driven-agent.js.map +1 -0
  27. package/dist/agent/git-integration.js +324 -0
  28. package/dist/agent/git-integration.js.map +1 -0
  29. package/dist/agent/layered-memory.js +329 -0
  30. package/dist/agent/layered-memory.js.map +1 -0
  31. package/dist/agent/lint.js +121 -0
  32. package/dist/agent/lint.js.map +1 -0
  33. package/dist/agent/multi-agent.js +359 -0
  34. package/dist/agent/multi-agent.js.map +1 -0
  35. package/dist/agent/orchestrator.js +136 -25
  36. package/dist/agent/orchestrator.js.map +1 -1
  37. package/dist/agent/prompts.js +54 -54
  38. package/dist/agent/quality-gate.js +139 -0
  39. package/dist/agent/quality-gate.js.map +1 -1
  40. package/dist/agent/self-correction.js +274 -0
  41. package/dist/agent/self-correction.js.map +1 -0
  42. package/dist/agent/self-heal.js +47 -17
  43. package/dist/agent/self-heal.js.map +1 -1
  44. package/dist/agent/solo-agent.js +321 -0
  45. package/dist/agent/solo-agent.js.map +1 -0
  46. package/dist/agent/symbol-index.js +258 -28
  47. package/dist/agent/symbol-index.js.map +1 -1
  48. package/dist/agent/team-collaboration.js +252 -0
  49. package/dist/agent/team-collaboration.js.map +1 -0
  50. package/dist/agent/type-checker.js +229 -0
  51. package/dist/agent/type-checker.js.map +1 -0
  52. package/dist/cli/commands.js +9 -0
  53. package/dist/cli/commands.js.map +1 -1
  54. package/dist/cli/index.js +9 -0
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/multi-pane-tui.js +217 -0
  57. package/dist/cli/multi-pane-tui.js.map +1 -0
  58. package/dist/cli/run.js +130 -40
  59. package/dist/cli/run.js.map +1 -1
  60. package/dist/cli/tui-run.js +79 -0
  61. package/dist/cli/tui-run.js.map +1 -0
  62. package/dist/cli/tui.js.map +1 -1
  63. package/dist/cli/version.js +1 -1
  64. package/dist/integrations/collaboration.js +219 -0
  65. package/dist/integrations/collaboration.js.map +1 -0
  66. package/dist/integrations/figma.js +307 -0
  67. package/dist/integrations/figma.js.map +1 -0
  68. package/dist/integrations/sso.js +327 -0
  69. package/dist/integrations/sso.js.map +1 -0
  70. package/dist/knowledge/library.js +301 -0
  71. package/dist/knowledge/library.js.map +1 -0
  72. package/dist/lsp/lsp-client.js +183 -0
  73. package/dist/lsp/lsp-client.js.map +1 -0
  74. package/dist/lsp/lsp-service.js +159 -0
  75. package/dist/lsp/lsp-service.js.map +1 -0
  76. package/dist/plugins/manager.js +380 -0
  77. package/dist/plugins/manager.js.map +1 -0
  78. package/dist/runtime/event-log.js.map +1 -1
  79. package/dist/shared/i18n.js +108 -100
  80. package/dist/shared/i18n.js.map +1 -1
  81. package/dist/tools/browser/browser.tool.js +217 -0
  82. package/dist/tools/browser/browser.tool.js.map +1 -0
  83. package/dist/tools/generator/code-generator.js +40 -40
  84. package/dist/tools/generator/test-generator.js +9 -9
  85. package/dist/tools/index.js +2 -0
  86. package/dist/tools/index.js.map +1 -1
  87. package/dist/tools/shell/exec.js +73 -11
  88. package/dist/tools/shell/exec.js.map +1 -1
  89. package/dist/tools/shell/run-shell.tool.js +8 -2
  90. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  91. package/dist/training/completion-evaluator.js +213 -0
  92. package/dist/training/completion-evaluator.js.map +1 -0
  93. package/dist/training/fim-data.js +248 -0
  94. package/dist/training/fim-data.js.map +1 -0
  95. package/dist/voice/voice-programming.js +223 -0
  96. package/dist/voice/voice-programming.js.map +1 -0
  97. package/dist/web/extra-apis.js +440 -0
  98. package/dist/web/extra-apis.js.map +1 -0
  99. package/dist/web/public/css/style.css +1729 -1671
  100. package/dist/web/public/index.html +1242 -990
  101. package/dist/web/public/js/api.js +555 -382
  102. package/dist/web/public/js/app.js +2210 -2210
  103. package/dist/web/public/js/mock-api.js +234 -0
  104. package/dist/web/public/js/monaco-editor.js +363 -0
  105. package/dist/web/public/js/ui.js +2251 -1059
  106. package/dist/web/public/js/utils.js +214 -214
  107. package/dist/web/public/manifest.json +59 -0
  108. package/dist/web/public/service-worker.js +173 -0
  109. package/dist/web/server.js +1116 -45
  110. package/dist/web/server.js.map +1 -1
  111. package/dist/web/task-queue.js +22 -2
  112. package/dist/web/task-queue.js.map +1 -1
  113. package/docs/BENCHMARK_REPORT_en.md +386 -329
  114. package/docs/BENCHMARK_REPORT_zh.md +386 -329
  115. package/docs/DPA.md +63 -0
  116. package/docs/DPA/346/225/260/346/215/256/345/244/204/347/220/206/345/215/217/350/256/256/346/250/241/346/235/277_v1.0.md +67 -0
  117. package/docs/SECURITY_WHITEPAPER.md +74 -0
  118. package/docs/SWE_BENCH_REPORT.md +55 -0
  119. package/docs/TECHNICAL_SPEC_en.md +292 -292
  120. package/docs/TECHNICAL_SPEC_zh.md +292 -292
  121. package/docs/UPDATE_NOTES_en.md +159 -159
  122. package/docs/UPDATE_NOTES_zh.md +159 -159
  123. package/docs/UPGRADE_7.2.0.md +309 -0
  124. package/docs/UPGRADE_GUIDE_7_5.md +86 -0
  125. package/docs/geo-feihong-code.html +391 -0
  126. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_50/350/275/256/346/267/261/345/272/246/345/256/241/350/256/241_v7.2.0.md +208 -0
  127. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_6/351/241/271/351/207/215/347/202/271/346/240/270/346/237/245_v7.2.0.md +152 -0
  128. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_/350/277/220/350/241/214/346/227/266/345/256/236/346/265/213/347/211/210_v7.2.0.md +271 -0
  129. package/docs//345/220/210/350/247/204/350/256/244/350/257/201/345/207/206/345/244/207/346/270/205/345/215/225_v7.2.0.md +59 -0
  130. package/docs//345/256/211/345/205/250/347/231/275/347/232/256/344/271/246_v7.2.0.md +82 -0
  131. package/electron/main.js +404 -404
  132. package/package.json +175 -167
  133. package/templates/skills/api-design/SKILL.md +27 -0
  134. package/templates/skills/code-review/SKILL.md +35 -0
  135. package/templates/skills/dependency-upgrade/SKILL.md +29 -0
  136. package/templates/skills/doc-gen/SKILL.md +29 -0
  137. package/templates/skills/git-flow/SKILL.md +26 -0
  138. package/templates/skills/onboarding/SKILL.md +27 -0
  139. package/templates/skills/performance/SKILL.md +29 -0
  140. package/templates/skills/refactor/SKILL.md +28 -0
  141. package/templates/skills/security-audit/SKILL.md +28 -0
  142. package/templates/skills/test-gen/SKILL.md +30 -0
  143. package/tool-schema.json +197 -197
  144. package/dist/hello.js +0 -14
  145. package/dist/hello.js.map +0 -1
  146. package/dist/self-evolve/hook.ts +0 -80
  147. package/dist/self-evolve/manager.d.ts +0 -8
  148. package/dist/web/web-config.js +0 -143
  149. package/dist/web/web-config.js.map +0 -1
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LspClient = void 0;
4
+ /**
5
+ * 飞虹 Code (Muse Code 参照复刻)
6
+ * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
7
+ *
8
+ * P1-1 LSP 客户端:对接真实 LSP 服务器(typescript-language-server),
9
+ * 使 lsp-service 从"自建语义层"升级为"编译器级代码理解"(对标 OpenCode)。
10
+ *
11
+ * 实现:
12
+ * - spawn typescript-language-server --stdio,通过 stdin/stdout 通信
13
+ * - JSON-RPC 2.0 over stdio(Content-Length 帧编解码)
14
+ * - initialize → initialized → didOpen → hover / definition
15
+ * - 请求/响应按 id 匹配,带超时;非 TTY 可单测
16
+ */
17
+ const child_process_1 = require("child_process");
18
+ /** 轻量 LSP 客户端(JSON-RPC 2.0 over stdio) */
19
+ class LspClient {
20
+ proc = null;
21
+ buffer = Buffer.alloc(0);
22
+ pending = new Map();
23
+ nextId = 1;
24
+ started = false;
25
+ stderrTail = [];
26
+ get isRunning() {
27
+ return this.started;
28
+ }
29
+ get lastStderr() {
30
+ return this.stderrTail.slice(-3).join('\n');
31
+ }
32
+ /** 启动并完成 initialize 握手(真实 LSP 服务器) */
33
+ async start(projectRoot, opts = {}) {
34
+ const timeoutMs = opts.timeoutMs ?? 15000;
35
+ // 用 node 直接执行 tls 入口(require.resolve 定位,跨平台稳定,不依赖 npx/全局 PATH)
36
+ let cliPath;
37
+ try {
38
+ cliPath = opts.bin ?? require.resolve('typescript-language-server/lib/cli.mjs');
39
+ }
40
+ catch {
41
+ this.started = false;
42
+ return false;
43
+ }
44
+ this.proc = (0, child_process_1.spawn)(process.execPath, [cliPath, '--stdio'], {
45
+ cwd: projectRoot,
46
+ stdio: ['pipe', 'pipe', 'pipe'],
47
+ });
48
+ if (!this.proc.stdout || !this.proc.stdin) {
49
+ this.started = false;
50
+ return false;
51
+ }
52
+ this.proc.stdout.on('data', (d) => this.onData(d));
53
+ this.proc.stderr.on('data', (d) => {
54
+ this.stderrTail.push(d.toString());
55
+ if (this.stderrTail.length > 20)
56
+ this.stderrTail.shift();
57
+ });
58
+ this.proc.on('exit', () => {
59
+ this.started = false;
60
+ for (const [, p] of this.pending) {
61
+ clearTimeout(p.timer);
62
+ p.reject(new Error('LSP server exited'));
63
+ }
64
+ this.pending.clear();
65
+ });
66
+ try {
67
+ const rootUri = 'file:///' + projectRoot.replace(/\\/g, '/').replace(/^\/+/, '');
68
+ await this.request('initialize', {
69
+ processId: null,
70
+ rootUri,
71
+ capabilities: {},
72
+ workspaceFolders: [{ uri: rootUri, name: projectRoot.split(/[\\/]/).pop() || 'ws' }],
73
+ }, timeoutMs);
74
+ this.sendNotification('initialized', {});
75
+ this.started = true;
76
+ return true;
77
+ }
78
+ catch (e) {
79
+ this.close();
80
+ return false;
81
+ }
82
+ }
83
+ /** 打开文档(服务端建立诊断/语义上下文) */
84
+ didOpen(uri, text, languageId = 'typescript') {
85
+ this.sendNotification('textDocument/didOpen', {
86
+ textDocument: { uri, languageId, version: 1, text },
87
+ });
88
+ }
89
+ /** hover:编译器级类型签名信息(对标 LSP textDocument/hover) */
90
+ async hover(uri, line, character, timeoutMs = 10000) {
91
+ try {
92
+ return (await this.request('textDocument/hover', {
93
+ textDocument: { uri },
94
+ position: { line, character },
95
+ }, timeoutMs));
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ }
101
+ /** definition:符号精确定位(对标 LSP textDocument/definition) */
102
+ async definition(uri, line, character, timeoutMs = 10000) {
103
+ try {
104
+ return (await this.request('textDocument/definition', {
105
+ textDocument: { uri },
106
+ position: { line, character },
107
+ }, timeoutMs));
108
+ }
109
+ catch {
110
+ return null;
111
+ }
112
+ }
113
+ close() {
114
+ try {
115
+ this.proc?.stdin?.end();
116
+ this.proc?.kill();
117
+ }
118
+ catch {
119
+ /* ignore */
120
+ }
121
+ this.proc = null;
122
+ this.started = false;
123
+ }
124
+ onData(chunk) {
125
+ this.buffer = Buffer.concat([this.buffer, chunk]);
126
+ for (;;) {
127
+ const headerEnd = this.buffer.indexOf('\r\n\r\n');
128
+ if (headerEnd < 0)
129
+ return;
130
+ const header = this.buffer.slice(0, headerEnd).toString();
131
+ const m = /Content-Length:\s*(\d+)/i.exec(header);
132
+ if (!m)
133
+ return;
134
+ const len = Number(m[1]);
135
+ const bodyStart = headerEnd + 4;
136
+ if (this.buffer.length < bodyStart + len)
137
+ return;
138
+ const body = this.buffer.slice(bodyStart, bodyStart + len).toString();
139
+ this.buffer = this.buffer.slice(bodyStart + len);
140
+ try {
141
+ this.handleMessage(JSON.parse(body));
142
+ }
143
+ catch {
144
+ /* 非 JSON 帧忽略 */
145
+ }
146
+ }
147
+ }
148
+ handleMessage(msg) {
149
+ const id = msg.id;
150
+ if (id !== undefined && this.pending.has(id)) {
151
+ const p = this.pending.get(id);
152
+ this.pending.delete(id);
153
+ clearTimeout(p.timer);
154
+ if (msg.error)
155
+ p.reject(new Error(JSON.stringify(msg.error)));
156
+ else
157
+ p.resolve(msg.result);
158
+ }
159
+ }
160
+ request(method, params, timeoutMs) {
161
+ const id = this.nextId++;
162
+ return new Promise((resolve, reject) => {
163
+ const timer = setTimeout(() => {
164
+ if (this.pending.has(id)) {
165
+ this.pending.delete(id);
166
+ reject(new Error(`LSP timeout: ${method}`));
167
+ }
168
+ }, timeoutMs);
169
+ this.pending.set(id, { resolve, reject, timer });
170
+ this.send({ jsonrpc: '2.0', id, method, params });
171
+ });
172
+ }
173
+ sendNotification(method, params) {
174
+ this.send({ jsonrpc: '2.0', method, params });
175
+ }
176
+ send(obj) {
177
+ const body = JSON.stringify(obj);
178
+ const header = `Content-Length: ${Buffer.byteLength(body)}\r\n\r\n`;
179
+ this.proc?.stdin?.write(header + body);
180
+ }
181
+ }
182
+ exports.LspClient = LspClient;
183
+ //# sourceMappingURL=lsp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../../src/lsp/lsp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LspService = void 0;
4
+ exports.createLspService = createLspService;
5
+ exports.readFileContent = readFileContent;
6
+ /**
7
+ * 飞虹 Code v7.2.0 LSP 语义服务层(P0-2 修复)
8
+ *
9
+ * 补齐"标准 LSP 服务层"缺口:复用项目已有的语义底座(symbol-index 代码图 +
10
+ * type-checker 类型诊断),对外提供 LSP 风格接口,供 agent 循环 / Web API / IDE 使用:
11
+ * - diagnostics:文件级语义诊断(对标 LSP textDocument/publishDiagnostics)
12
+ * - symbols:文件符号列表(对标 LSP documentSymbol)
13
+ * - definition:符号定义定位(对标 LSP definition)
14
+ * - hover:符号签名信息(对标 LSP hover)
15
+ * - graph / search:代码图谱与跨文件符号搜索(对标全仓库语义检索)
16
+ */
17
+ const fs_1 = require("fs");
18
+ const path_1 = require("path");
19
+ const symbol_index_1 = require("../agent/symbol-index");
20
+ const type_checker_1 = require("../agent/type-checker");
21
+ const DEFAULT_OPTS = {
22
+ enableDiagnostics: true,
23
+ diagTimeoutMs: 20000,
24
+ };
25
+ class LspService {
26
+ opts;
27
+ _graph = null;
28
+ _graphCwd = '';
29
+ constructor(opts = {}) {
30
+ this.opts = { ...DEFAULT_OPTS, ...opts };
31
+ }
32
+ /** 获取(并缓存)代码图谱,带增量更新 */
33
+ getGraph(cwd, forceRefresh = false) {
34
+ if (!this._graph || this._graphCwd !== cwd || forceRefresh) {
35
+ this._graph = (0, symbol_index_1.loadCachedCodeGraph)(cwd) ?? (0, symbol_index_1.buildCodeGraph)(cwd, { maxFiles: 3000 });
36
+ try {
37
+ (0, symbol_index_1.cacheCodeGraph)(this._graph);
38
+ }
39
+ catch { /* 缓存失败不影响主流程 */ }
40
+ this._graphCwd = cwd;
41
+ }
42
+ return this._graph;
43
+ }
44
+ /** 增量刷新图谱(文件写入后调用,保持语义最新) */
45
+ refreshGraph(cwd) {
46
+ const current = this.getGraph(cwd);
47
+ this._graph = (0, symbol_index_1.incrementalUpdate)(current, cwd, { maxFiles: 3000 });
48
+ try {
49
+ (0, symbol_index_1.cacheCodeGraph)(this._graph);
50
+ }
51
+ catch { /* ignore */ }
52
+ return this._graph;
53
+ }
54
+ /** 文件级语义诊断(LSP publishDiagnostics 风格)。非 .ts/.tsx 返回空。 */
55
+ getDiagnostics(cwd, filePath) {
56
+ if (!this.opts.enableDiagnostics)
57
+ return [];
58
+ const ext = (0, path_1.extname)(filePath).toLowerCase();
59
+ if (ext !== '.ts' && ext !== '.tsx')
60
+ return [];
61
+ let errors = [];
62
+ try {
63
+ const result = (0, type_checker_1.checkFileTypes)(cwd, filePath);
64
+ errors = result.errors;
65
+ }
66
+ catch {
67
+ return [];
68
+ }
69
+ return errors.map((e) => ({
70
+ file: e.file,
71
+ line: e.line,
72
+ column: e.column,
73
+ message: e.message,
74
+ severity: e.severity,
75
+ source: 'typescript',
76
+ relative: this.relative(cwd, e.file),
77
+ }));
78
+ }
79
+ /** 文件符号列表(LSP documentSymbol) */
80
+ getSymbols(cwd, filePath) {
81
+ const graph = this.getGraph(cwd);
82
+ const symbols = (0, symbol_index_1.symbolsForFile)(graph, this.toGraphKey(cwd, filePath));
83
+ return this.toLspSymbols(symbols);
84
+ }
85
+ /** 全仓库符号搜索(LSP workspace/symbol) */
86
+ search(cwd, query, limit = 20) {
87
+ const graph = this.getGraph(cwd);
88
+ return this.toLspSymbols((0, symbol_index_1.searchSymbols)(graph, query, limit));
89
+ }
90
+ /** 定义定位(LSP definition):找目标文件中指定行附近的符号 */
91
+ getDefinition(cwd, filePath, line) {
92
+ const graph = this.getGraph(cwd);
93
+ const symbols = (0, symbol_index_1.symbolsForFile)(graph, this.toGraphKey(cwd, filePath));
94
+ const hit = symbols
95
+ .filter((s) => Math.abs(s.line - line) <= 2)
96
+ .sort((a, b) => Math.abs(a.line - line) - Math.abs(b.line - line))[0];
97
+ if (!hit)
98
+ return null;
99
+ return { name: hit.name, file: hit.file, line: hit.line, signature: hit.signature };
100
+ }
101
+ /** 悬停信息(LSP hover) */
102
+ getHover(cwd, filePath, line) {
103
+ const def = this.getDefinition(cwd, filePath, line);
104
+ if (!def)
105
+ return null;
106
+ return { name: def.name, kind: 'symbol', line: def.line, signature: def.signature, file: def.file };
107
+ }
108
+ /** 图谱摘要 */
109
+ getGraphSummary(cwd) {
110
+ const graph = this.getGraph(cwd);
111
+ const files = graph.files ?? {};
112
+ const edgeCount = Object.values(files).reduce((n, f) => n + (f.imports ?? []).length, 0);
113
+ return {
114
+ fileCount: Object.keys(files).length,
115
+ symbolCount: (0, symbol_index_1.getAllSymbols)(graph).length,
116
+ edgeCount,
117
+ root: cwd,
118
+ };
119
+ }
120
+ toGraphKey(cwd, file) {
121
+ const f = file.replace(/\\/g, '/');
122
+ const c = cwd.replace(/\\/g, '/').replace(/\/$/, '');
123
+ if (f.startsWith(c + '/'))
124
+ return f.slice(c.length + 1);
125
+ return f;
126
+ }
127
+ toLspSymbols(symbols) {
128
+ return symbols.map((s) => ({
129
+ name: s.name,
130
+ kind: s.kind,
131
+ file: s.file,
132
+ line: s.line,
133
+ signature: s.signature,
134
+ }));
135
+ }
136
+ relative(cwd, file) {
137
+ try {
138
+ const rel = file.startsWith(cwd) ? file.slice(cwd.length).replace(/^[\\/]+/, '') : file;
139
+ return rel;
140
+ }
141
+ catch {
142
+ return file;
143
+ }
144
+ }
145
+ }
146
+ exports.LspService = LspService;
147
+ function createLspService(opts) {
148
+ return new LspService(opts);
149
+ }
150
+ /** 便捷函数:读取文件内容(供诊断/符号上下文展示) */
151
+ function readFileContent(filePath) {
152
+ try {
153
+ return (0, fs_1.readFileSync)(filePath, 'utf8');
154
+ }
155
+ catch {
156
+ return null;
157
+ }
158
+ }
159
+ //# sourceMappingURL=lsp-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-service.js","sourceRoot":"","sources":["../../src/lsp/lsp-service.ts"],"names":[],"mappings":"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"}