codex-grok-mcp 0.2.0-beta.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 (56) hide show
  1. package/CONTRIBUTING.md +67 -0
  2. package/LICENSE +21 -0
  3. package/README.md +255 -0
  4. package/SECURITY.md +109 -0
  5. package/dist/bridge-companion.d.ts +61 -0
  6. package/dist/bridge-companion.js +436 -0
  7. package/dist/bridge-companion.js.map +1 -0
  8. package/dist/bridge-pairing.d.ts +30 -0
  9. package/dist/bridge-pairing.js +364 -0
  10. package/dist/bridge-pairing.js.map +1 -0
  11. package/dist/bridge-protocol.d.ts +187 -0
  12. package/dist/bridge-protocol.js +360 -0
  13. package/dist/bridge-protocol.js.map +1 -0
  14. package/dist/bridge-replay.d.ts +10 -0
  15. package/dist/bridge-replay.js +107 -0
  16. package/dist/bridge-replay.js.map +1 -0
  17. package/dist/bridge-runtime.d.ts +11 -0
  18. package/dist/bridge-runtime.js +259 -0
  19. package/dist/bridge-runtime.js.map +1 -0
  20. package/dist/direct-gateway-transport.d.ts +7 -0
  21. package/dist/direct-gateway-transport.js +241 -0
  22. package/dist/direct-gateway-transport.js.map +1 -0
  23. package/dist/grok-bot-client.d.ts +93 -0
  24. package/dist/grok-bot-client.js +475 -0
  25. package/dist/grok-bot-client.js.map +1 -0
  26. package/dist/grok-bot-gateway.d.ts +204 -0
  27. package/dist/grok-bot-gateway.js +741 -0
  28. package/dist/grok-bot-gateway.js.map +1 -0
  29. package/dist/grok-cli.d.ts +31 -0
  30. package/dist/grok-cli.js +338 -0
  31. package/dist/grok-cli.js.map +1 -0
  32. package/dist/index.d.ts +8 -0
  33. package/dist/index.js +228 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/relay-transport.d.ts +9 -0
  36. package/dist/relay-transport.js +278 -0
  37. package/dist/relay-transport.js.map +1 -0
  38. package/dist/schema.d.ts +16 -0
  39. package/dist/schema.js +22 -0
  40. package/dist/schema.js.map +1 -0
  41. package/dist/version.d.ts +4 -0
  42. package/dist/version.js +10 -0
  43. package/dist/version.js.map +1 -0
  44. package/package.json +71 -0
  45. package/plugins/codex-grok-mcp/assets/icon.png +0 -0
  46. package/relay/.dev.vars.example +2 -0
  47. package/relay/README.md +26 -0
  48. package/relay/package-lock.json +3291 -0
  49. package/relay/package.json +17 -0
  50. package/relay/src/index.ts +182 -0
  51. package/relay/test/relay.test.ts +127 -0
  52. package/relay/test/tsconfig.json +13 -0
  53. package/relay/tsconfig.json +15 -0
  54. package/relay/vitest.config.ts +15 -0
  55. package/relay/worker-configuration.d.ts +15362 -0
  56. package/relay/wrangler.jsonc +33 -0
@@ -0,0 +1,475 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { randomUUID } from "node:crypto";
3
+ import { execFileSync } from "node:child_process";
4
+ import { lstatSync, readFileSync, readdirSync, readlinkSync } from "node:fs";
5
+ import { dirname, isAbsolute, join, resolve } from "node:path";
6
+ import { z } from "zod";
7
+ const DEFAULT_SAND_ROOT = "/home/box/sand-data";
8
+ const DEFAULT_TIMEOUT_MS = 10_000;
9
+ const MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
10
+ const MAX_TRANSCRIPT_ENTRIES = 50;
11
+ const MAX_STATUS_ROWS = 500;
12
+ const discoveryFileSchema = z
13
+ .object({
14
+ port: z.number().int().positive(),
15
+ pid: z.number().int().positive(),
16
+ startedAt: z.number().positive().finite(),
17
+ scheme: z.enum(["http", "https"]).optional(),
18
+ host: z.string().optional(),
19
+ token: z.string().min(1).max(4_096).optional(),
20
+ })
21
+ .passthrough();
22
+ const healthSchema = z
23
+ .object({ ok: z.boolean(), isBusy: z.boolean() })
24
+ .passthrough();
25
+ const agentSchema = z
26
+ .object({
27
+ id: z.string().min(1).max(512),
28
+ name: z.string().max(512),
29
+ isGroup: z.boolean(),
30
+ isRunning: z.boolean().optional(),
31
+ isComposingMessage: z.boolean().optional(),
32
+ awaitingUserResponse: z.unknown().optional(),
33
+ lastMessageId: z.string().min(1).max(512).nullable().optional(),
34
+ newestEntryId: z.string().min(1).max(512).nullable().optional(),
35
+ })
36
+ .passthrough();
37
+ const sendResultSchema = z.object({ accepted: z.literal(true) }).passthrough();
38
+ const transcriptTailInputSchema = z
39
+ .object({
40
+ id: z.string().min(1).max(512),
41
+ limit: z.number().int().min(1).max(MAX_TRANSCRIPT_ENTRIES),
42
+ beforeSeq: z.number().int().nonnegative().safe().optional(),
43
+ })
44
+ .strict();
45
+ const transcriptTailSchema = z
46
+ .object({
47
+ entries: z.array(z.unknown()).max(MAX_TRANSCRIPT_ENTRIES),
48
+ nextBeforeSeq: z.number().int().nonnegative().safe().optional(),
49
+ })
50
+ .passthrough();
51
+ const asyncTaskSchema = z
52
+ .object({
53
+ kind: z.enum(["subagent", "shell", "cloud-agent"]),
54
+ id: z.string().min(1).max(512),
55
+ label: z.string().max(4_096),
56
+ status: z.literal("running"),
57
+ startedAtMs: z.number().nonnegative().finite(),
58
+ detail: z.string().max(16_384).optional(),
59
+ subagentType: z.string().max(512).optional(),
60
+ })
61
+ .passthrough();
62
+ const subagentSchema = z
63
+ .object({
64
+ subagentId: z.string().min(1).max(512),
65
+ subagentType: z.string().max(512),
66
+ title: z.string().max(4_096),
67
+ status: z.string().max(512),
68
+ startedAtMs: z.number().nonnegative().finite(),
69
+ })
70
+ .passthrough();
71
+ const agentIdInputSchema = z.object({ id: z.string().min(1).max(512) }).strict();
72
+ export class LocalGatewayError extends Error {
73
+ code;
74
+ status;
75
+ requestId;
76
+ constructor(code, status, requestId) {
77
+ super("Grok Bot gateway request failed.");
78
+ this.name = "LocalGatewayError";
79
+ this.code = code;
80
+ this.status = status;
81
+ this.requestId = requestId;
82
+ }
83
+ }
84
+ function isLoopback(hostname) {
85
+ const host = hostname.toLowerCase().replace(/^\[|\]$/g, "");
86
+ if (host === "localhost" || host === "::1")
87
+ return true;
88
+ const match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
89
+ if (match === null)
90
+ return false;
91
+ const octets = match.slice(1).map(Number);
92
+ return octets.every((octet) => octet <= 255) && octets[0] === 127;
93
+ }
94
+ function readPort(value) {
95
+ if (value === undefined || value.trim() === "")
96
+ return undefined;
97
+ const port = Number(value);
98
+ return Number.isInteger(port) && port > 0 && port <= 65_535 ? port : undefined;
99
+ }
100
+ function sandRoot(env) {
101
+ if (env.SAND_DATA_ROOT !== undefined && isAbsolute(env.SAND_DATA_ROOT)) {
102
+ return env.SAND_DATA_ROOT;
103
+ }
104
+ if (env.SAND_USER_DATA_DIR !== undefined && env.SAND_USER_DATA_DIR.trim() !== "") {
105
+ const root = isAbsolute(env.SAND_USER_DATA_DIR)
106
+ ? env.SAND_USER_DATA_DIR
107
+ : resolve(env.SAND_USER_DATA_DIR);
108
+ return join(root, "sand-data");
109
+ }
110
+ return DEFAULT_SAND_ROOT;
111
+ }
112
+ function readDiscovery(path) {
113
+ try {
114
+ const details = lstatSync(path);
115
+ const parent = lstatSync(dirname(path));
116
+ if (details.isSymbolicLink() ||
117
+ !details.isFile() ||
118
+ details.size > 64 * 1024 ||
119
+ (details.mode & 0o077) !== 0 ||
120
+ parent.isSymbolicLink() ||
121
+ !parent.isDirectory() ||
122
+ (parent.mode & 0o022) !== 0 ||
123
+ (typeof process.getuid === "function" &&
124
+ (details.uid !== process.getuid() || parent.uid !== process.getuid()))) {
125
+ return undefined;
126
+ }
127
+ const raw = readFileSync(path, "utf8");
128
+ if (Buffer.byteLength(raw, "utf8") > 64 * 1024)
129
+ return undefined;
130
+ return discoveryFileSchema.parse(JSON.parse(raw));
131
+ }
132
+ catch {
133
+ return undefined;
134
+ }
135
+ }
136
+ function expectedLinuxAddress(host) {
137
+ if (host === "::1") {
138
+ return {
139
+ table: "/proc/net/tcp6",
140
+ values: new Set(["00000000000000000000000001000000", "00000000000000000000000000000000"]),
141
+ };
142
+ }
143
+ const octets = host.split(".").map(Number);
144
+ if (octets.length !== 4 || octets.some((octet) => !Number.isInteger(octet)))
145
+ return undefined;
146
+ return {
147
+ table: "/proc/net/tcp",
148
+ values: new Set([
149
+ octets
150
+ .reverse()
151
+ .map((octet) => octet.toString(16).padStart(2, "0"))
152
+ .join("")
153
+ .toUpperCase(),
154
+ "00000000",
155
+ ]),
156
+ };
157
+ }
158
+ let cachedLinuxTiming;
159
+ function linuxTiming() {
160
+ if (cachedLinuxTiming !== undefined)
161
+ return cachedLinuxTiming;
162
+ try {
163
+ const bootTime = Number(/^btime\s+(\d+)$/m.exec(readFileSync("/proc/stat", "utf8"))?.[1]);
164
+ const clockTicks = Number(execFileSync("/usr/bin/getconf", ["CLK_TCK"], {
165
+ encoding: "utf8",
166
+ stdio: ["ignore", "pipe", "ignore"],
167
+ timeout: 1_000,
168
+ }).trim());
169
+ if (!Number.isFinite(bootTime) || !Number.isFinite(clockTicks) || clockTicks <= 0) {
170
+ return undefined;
171
+ }
172
+ cachedLinuxTiming = { bootTime, clockTicks };
173
+ return cachedLinuxTiming;
174
+ }
175
+ catch {
176
+ return undefined;
177
+ }
178
+ }
179
+ function linuxProcessStartEpochMs(pid) {
180
+ try {
181
+ const timing = linuxTiming();
182
+ if (timing === undefined)
183
+ return undefined;
184
+ const stat = readFileSync(`/proc/${pid}/stat`, "utf8");
185
+ const fields = stat.slice(stat.lastIndexOf(")") + 2).trim().split(/\s+/);
186
+ const startTicks = Number(fields[19]);
187
+ if (!Number.isFinite(startTicks))
188
+ return undefined;
189
+ return timing.bootTime * 1_000 + (startTicks / timing.clockTicks) * 1_000;
190
+ }
191
+ catch {
192
+ return undefined;
193
+ }
194
+ }
195
+ function linuxPidOwnsListeningPort(pid, port, host, descriptorStartedAt) {
196
+ if (process.platform !== "linux")
197
+ return false;
198
+ try {
199
+ const processStartedAt = linuxProcessStartEpochMs(pid);
200
+ if (processStartedAt === undefined ||
201
+ descriptorStartedAt > Date.now() + 5_000 ||
202
+ processStartedAt > descriptorStartedAt + 5_000) {
203
+ return false;
204
+ }
205
+ const expected = expectedLinuxAddress(host);
206
+ if (expected === undefined)
207
+ return false;
208
+ const socketInodes = new Set();
209
+ for (const descriptor of readdirSync(`/proc/${pid}/fd`)) {
210
+ try {
211
+ const target = readlinkSync(`/proc/${pid}/fd/${descriptor}`);
212
+ const match = /^socket:\[(\d+)\]$/.exec(target);
213
+ if (match?.[1] !== undefined)
214
+ socketInodes.add(match[1]);
215
+ }
216
+ catch {
217
+ // Descriptors may close while the directory is read.
218
+ }
219
+ }
220
+ if (socketInodes.size === 0)
221
+ return false;
222
+ const lines = readFileSync(expected.table, "utf8").trim().split("\n").slice(1);
223
+ for (const line of lines) {
224
+ const fields = line.trim().split(/\s+/);
225
+ const localAddress = fields[1];
226
+ const state = fields[3];
227
+ const inode = fields[9];
228
+ const [addressHex, portHex] = localAddress?.split(":") ?? [];
229
+ if (state === "0A" &&
230
+ inode !== undefined &&
231
+ addressHex !== undefined &&
232
+ expected.values.has(addressHex) &&
233
+ portHex !== undefined &&
234
+ Number.parseInt(portHex, 16) === port &&
235
+ socketInodes.has(inode)) {
236
+ return true;
237
+ }
238
+ }
239
+ }
240
+ catch {
241
+ return false;
242
+ }
243
+ return false;
244
+ }
245
+ function parseLoopbackUrl(value) {
246
+ let url;
247
+ try {
248
+ url = new URL(value);
249
+ }
250
+ catch {
251
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
252
+ }
253
+ if ((url.protocol !== "http:" && url.protocol !== "https:") ||
254
+ !isLoopback(url.hostname) ||
255
+ url.username !== "" ||
256
+ url.password !== "" ||
257
+ (url.pathname !== "" && url.pathname !== "/") ||
258
+ url.search !== "" ||
259
+ url.hash !== "") {
260
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
261
+ }
262
+ return url;
263
+ }
264
+ function resolveGateway(options) {
265
+ const env = options.env ?? process.env;
266
+ const file = readDiscovery(options.discoveryPath ?? join(sandRoot(env), "gateway.json"));
267
+ const override = env.GROKBOT_GATEWAY_URL?.trim() || env.SAND_GATEWAY_URL?.trim();
268
+ const url = override === undefined || override === "" ? undefined : parseLoopbackUrl(override);
269
+ const hostValue = url?.hostname ?? env.SAND_GATEWAY_BIND_HOST?.trim() ?? file?.host?.trim() ?? "127.0.0.1";
270
+ const host = hostValue.toLowerCase() === "localhost" || ["0.0.0.0", "::", "[::]"].includes(hostValue)
271
+ ? "127.0.0.1"
272
+ : hostValue;
273
+ if (!isLoopback(host))
274
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
275
+ const scheme = url !== undefined ? url.protocol.slice(0, -1) : (file?.scheme ?? "http");
276
+ const port = (url === undefined
277
+ ? readPort(env.SAND_HOST_PORT) ?? file?.port
278
+ : readPort(url.port) ?? (url.protocol === "https:" ? 443 : 80));
279
+ if (port === undefined)
280
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
281
+ const authority = host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
282
+ const token = env.SAND_GATEWAY_TOKEN?.trim() || file?.token;
283
+ if (token !== undefined && (token.length > 4_096 || /[\u0000-\u0020\u007f]/.test(token))) {
284
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
285
+ }
286
+ return {
287
+ baseUrl: `${scheme}://${authority}:${port}`,
288
+ connectHost: host,
289
+ startedAt: file?.startedAt ?? 0,
290
+ port,
291
+ pid: file?.pid ?? 0,
292
+ hasToken: token !== undefined && token !== "",
293
+ ...(token === undefined || token === "" ? {} : { token }),
294
+ };
295
+ }
296
+ function sameGateway(left, right) {
297
+ return (left.baseUrl === right.baseUrl &&
298
+ left.connectHost === right.connectHost &&
299
+ left.startedAt === right.startedAt &&
300
+ left.port === right.port &&
301
+ left.pid === right.pid &&
302
+ left.token === right.token);
303
+ }
304
+ export class LocalGrokBotClient {
305
+ #fetch;
306
+ #gatewaySnapshot = new AsyncLocalStorage();
307
+ #gatewayOptions;
308
+ #timeoutMs;
309
+ #verifyServer;
310
+ constructor(options = {}) {
311
+ this.#fetch = options.fetch ?? fetch;
312
+ this.#gatewayOptions = options;
313
+ this.#timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
314
+ this.#verifyServer = options.verifyServer ?? linuxPidOwnsListeningPort;
315
+ this.#resolveVerifiedGateway("");
316
+ }
317
+ discovery() {
318
+ const gateway = this.#resolveVerifiedGateway("");
319
+ return {
320
+ port: gateway.port,
321
+ pid: gateway.pid,
322
+ hasToken: gateway.hasToken,
323
+ };
324
+ }
325
+ async withGatewaySnapshot(operation) {
326
+ const gateway = this.#resolveVerifiedGateway(randomUUID());
327
+ return await this.#gatewaySnapshot.run(gateway, operation);
328
+ }
329
+ async health() {
330
+ return await this.#request("GET", "/health", undefined, false, healthSchema);
331
+ }
332
+ async listAgents() {
333
+ return await this.#request("POST", "/api/listAgents", {}, true, z.array(agentSchema).max(500));
334
+ }
335
+ async sendPrompt(input) {
336
+ return await this.#request("POST", "/api/sendPrompt", {
337
+ agentId: input.agentId,
338
+ prompt: input.prompt,
339
+ clientNonce: input.clientNonce,
340
+ }, true, sendResultSchema);
341
+ }
342
+ async getAgentTranscriptTail(input) {
343
+ const body = transcriptTailInputSchema.safeParse(input);
344
+ if (!body.success)
345
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
346
+ return await this.#request("POST", "/api/getAgentTranscriptTail", body.data, true, transcriptTailSchema);
347
+ }
348
+ async getAsyncTasks(input) {
349
+ const body = agentIdInputSchema.safeParse(input);
350
+ if (!body.success)
351
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
352
+ return await this.#request("POST", "/api/getAsyncTasks", body.data, true, z.array(asyncTaskSchema).max(MAX_STATUS_ROWS));
353
+ }
354
+ async getSubagents(input) {
355
+ const body = agentIdInputSchema.safeParse(input);
356
+ if (!body.success)
357
+ throw new LocalGatewayError("CONFIG_INVALID", 0, "");
358
+ return await this.#request("POST", "/api/getSubagents", body.data, true, z.array(subagentSchema).max(MAX_STATUS_ROWS));
359
+ }
360
+ async #request(method, path, body, authenticated, schema) {
361
+ const requestId = randomUUID();
362
+ const gateway = this.#gatewaySnapshot.getStore() ?? this.#resolveVerifiedGateway(requestId);
363
+ if (authenticated && gateway.token === undefined) {
364
+ throw new LocalGatewayError("AUTH_FAILED", 401, requestId);
365
+ }
366
+ const headers = new Headers({
367
+ "x-sand-request-id": requestId,
368
+ "x-sand-slim-avatars": "1",
369
+ });
370
+ if (authenticated)
371
+ headers.set("authorization", `Bearer ${gateway.token}`);
372
+ let encodedBody;
373
+ if (body !== undefined) {
374
+ headers.set("content-type", "application/json");
375
+ encodedBody = JSON.stringify(body);
376
+ }
377
+ const controller = new AbortController();
378
+ const timer = setTimeout(() => controller.abort(), this.#timeoutMs);
379
+ timer.unref();
380
+ try {
381
+ this.#assertGatewayCurrent(gateway, requestId);
382
+ const response = await this.#fetch(`${gateway.baseUrl}${path}`, {
383
+ method,
384
+ headers,
385
+ ...(encodedBody === undefined ? {} : { body: encodedBody }),
386
+ redirect: "error",
387
+ signal: controller.signal,
388
+ });
389
+ try {
390
+ this.#assertGatewayCurrent(gateway, requestId);
391
+ }
392
+ catch (caught) {
393
+ await response.body?.cancel().catch(() => undefined);
394
+ throw caught;
395
+ }
396
+ if (!response.ok) {
397
+ await response.body?.cancel().catch(() => undefined);
398
+ const code = response.status === 401 || response.status === 403
399
+ ? "AUTH_FAILED"
400
+ : response.status === 429
401
+ ? "RATE_LIMITED"
402
+ : "GATEWAY_REJECTED";
403
+ throw new LocalGatewayError(code, response.status, requestId);
404
+ }
405
+ const contentLength = Number(response.headers.get("content-length"));
406
+ if (Number.isFinite(contentLength) && contentLength > MAX_RESPONSE_BYTES) {
407
+ await response.body?.cancel().catch(() => undefined);
408
+ throw new LocalGatewayError("OUTPUT_LIMIT", 0, requestId);
409
+ }
410
+ const reader = response.body?.getReader();
411
+ const chunks = [];
412
+ let size = 0;
413
+ if (reader !== undefined) {
414
+ while (true) {
415
+ const { done, value } = await reader.read();
416
+ if (done)
417
+ break;
418
+ size += value.byteLength;
419
+ if (size > MAX_RESPONSE_BYTES) {
420
+ await reader.cancel().catch(() => undefined);
421
+ throw new LocalGatewayError("OUTPUT_LIMIT", 0, requestId);
422
+ }
423
+ chunks.push(value);
424
+ }
425
+ }
426
+ const text = Buffer.concat(chunks.map((chunk) => Buffer.from(chunk))).toString("utf8");
427
+ let parsed;
428
+ try {
429
+ parsed = text === "" ? null : JSON.parse(text);
430
+ }
431
+ catch {
432
+ throw new LocalGatewayError("INVALID_RESPONSE", 0, requestId);
433
+ }
434
+ const validated = schema.safeParse(parsed);
435
+ if (!validated.success) {
436
+ throw new LocalGatewayError("INVALID_RESPONSE", 0, requestId);
437
+ }
438
+ this.#assertGatewayCurrent(gateway, requestId);
439
+ return validated.data;
440
+ }
441
+ catch (caught) {
442
+ if (caught instanceof LocalGatewayError)
443
+ throw caught;
444
+ throw new LocalGatewayError(controller.signal.aborted ? "TIMEOUT" : "UNAVAILABLE", 0, requestId);
445
+ }
446
+ finally {
447
+ clearTimeout(timer);
448
+ }
449
+ }
450
+ #resolveGateway(requestId) {
451
+ try {
452
+ return resolveGateway(this.#gatewayOptions);
453
+ }
454
+ catch {
455
+ throw new LocalGatewayError("CONFIG_INVALID", 0, requestId);
456
+ }
457
+ }
458
+ #resolveVerifiedGateway(requestId) {
459
+ const gateway = this.#resolveGateway(requestId);
460
+ this.#assertGatewayCurrent(gateway, requestId);
461
+ return gateway;
462
+ }
463
+ #assertGatewayCurrent(gateway, requestId) {
464
+ this.#verifyGateway(gateway, requestId);
465
+ if (!sameGateway(gateway, this.#resolveGateway(requestId))) {
466
+ throw new LocalGatewayError("CONFIG_INVALID", 0, requestId);
467
+ }
468
+ }
469
+ #verifyGateway(gateway, requestId) {
470
+ if (!this.#verifyServer(gateway.pid, gateway.port, gateway.connectHost, gateway.startedAt)) {
471
+ throw new LocalGatewayError("CONFIG_INVALID", 0, requestId);
472
+ }
473
+ }
474
+ }
475
+ //# sourceMappingURL=grok-bot-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-bot-client.js","sourceRoot":"","sources":["../src/grok-bot-client.ts"],"names":[],"mappings":"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"}