openzoo 0.49.7 → 0.49.9
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 +39 -1
- package/bin/openzoo.js +3 -2
- package/lib/claudecode.js +847 -0
- package/lib/grokui.mjs +1351 -226
- package/lib/launch.js +244 -152
- package/lib/livestatus.js +6 -4
- package/lib/modelroute/README.md +1 -0
- package/lib/modelroute/catalog.json +1 -0
- package/lib/modelroute/outcomes.json +1566 -0
- package/lib/modelroute/router.json +1 -0
- package/lib/modelroute.js +737 -0
- package/lib/models.js +221 -44
- package/lib/package.json +3 -0
- package/lib/pay.js +67 -3
- package/lib/podagent.mjs +84 -28
- package/lib/proxy.js +144 -56
- package/lib/racesettle.js +127 -0
- package/lib/relay.js +275 -0
- package/lib/runguard.js +31 -0
- package/lib/spill.js +9 -1
- package/lib/think.js +126 -0
- package/package.json +5 -4
- package/vendor/modelroute/CURRENT_STATE.md +132 -0
- package/vendor/modelroute/HANDOFF.md +159 -0
- package/vendor/modelroute/catalog.json +1 -0
- package/vendor/modelroute/holographic_modelroute.py +809 -0
- package/vendor/modelroute/outcomes.json +1566 -0
- package/vendor/modelroute/router.json +1 -0
package/lib/launch.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `npx openzoo claude [args...]` —
|
|
3
|
-
*
|
|
4
|
-
* over x402 instead of hitting Anthropic directly.
|
|
2
|
+
* `npx openzoo claude [args...]` — install and/or launch `openzoo-claude`
|
|
3
|
+
* (the staccDOTsol fork of open-claude-code) already pointed at the local zoo.
|
|
5
4
|
*
|
|
6
|
-
* This is the supported front door
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* This is the supported front door. We exec that package's binary
|
|
6
|
+
* (`openzoo-claude` / `occ` / its `claude` bin), never Anthropic's bun
|
|
7
|
+
* `~/.local/bin/claude`. First run prefers `npx -y openzoo-claude` so there
|
|
8
|
+
* is no global-install dance and no official Anthropic installer.
|
|
9
|
+
*
|
|
10
|
+
* ANTHROPIC_BASE_URL is the env the harness reads at startup. The proxy
|
|
11
|
+
* serves POST /v1/messages (see lib/anthropic.js). We boot :8402 first if
|
|
12
|
+
* needed, then spawn with the same zoo env pair — no second key/url pair.
|
|
11
13
|
*/
|
|
12
14
|
import { spawn, spawnSync } from 'node:child_process';
|
|
13
15
|
import fs from 'node:fs';
|
|
@@ -15,6 +17,30 @@ import os from 'node:os';
|
|
|
15
17
|
import path from 'node:path';
|
|
16
18
|
import { config } from './config.js';
|
|
17
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Claude Code ≥2.1.129 only reads GET /v1/models when gateway discovery is
|
|
22
|
+
* opted in. Without this flag the picker stays the built-in opus-5 / tiny
|
|
23
|
+
* claude-* set instead of the zoo catalog the proxy publishes.
|
|
24
|
+
* CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC (even "0") blocks that GET.
|
|
25
|
+
*
|
|
26
|
+
* Do NOT invent ANTHROPIC_MODEL=openzoo-claude-sonnet-5. That pin hid the
|
|
27
|
+
* live OpenRouter catalog behind one Anthropic-native row. Only alias a
|
|
28
|
+
* model the caller already chose (OPENZOO_CLAUDE_ALIAS or ANTHROPIC_MODEL).
|
|
29
|
+
*/
|
|
30
|
+
export function applyClaudeCodeCatalogEnv(env) {
|
|
31
|
+
if (env.OPENZOO_NO_GATEWAY_DISCOVERY !== '1') {
|
|
32
|
+
env.CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY = env.CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY || '1';
|
|
33
|
+
delete env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC;
|
|
34
|
+
}
|
|
35
|
+
if (env.OPENZOO_NO_ALIAS === '1') return env;
|
|
36
|
+
const want = env.OPENZOO_CLAUDE_ALIAS || env.ANTHROPIC_MODEL;
|
|
37
|
+
if (!want) return env;
|
|
38
|
+
const bare = String(want).replace(/^openzoo-/, '').replace(/^[^/]+\//, '');
|
|
39
|
+
const SAFE = /^claude-(opus|sonnet|fable)-/;
|
|
40
|
+
if (SAFE.test(bare)) env.ANTHROPIC_MODEL = `openzoo-${bare}`;
|
|
41
|
+
return env;
|
|
42
|
+
}
|
|
43
|
+
|
|
18
44
|
/** Resolve the Claude DESKTOP app binary, platform-agnostically. Spawn the
|
|
19
45
|
* binary directly (not `open -a`) so the env — ANTHROPIC_BASE_URL — survives;
|
|
20
46
|
* macOS `open` hands off to launchd and drops it. */
|
|
@@ -34,19 +60,207 @@ function resolveClaudeDesktop() {
|
|
|
34
60
|
return null;
|
|
35
61
|
}
|
|
36
62
|
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
for
|
|
40
|
-
|
|
41
|
-
|
|
63
|
+
/** Extra bin dirs (Homebrew, ~/.local/bin, npm-global-ish). Finder-launched
|
|
64
|
+
* grokui has no ~/.zshrc PATH, so PATH-only lookup misses user bins. We
|
|
65
|
+
* still scan these for `openzoo-claude` / `occ` — not for Anthropic bun. */
|
|
66
|
+
export function claudeCodeBinDirs(home = os.homedir()) {
|
|
67
|
+
return [
|
|
68
|
+
path.join(home, '.local', 'bin'),
|
|
69
|
+
'/opt/homebrew/bin',
|
|
70
|
+
'/usr/local/bin',
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export const OPENZOO_CLAUDE_PACKAGE = 'openzoo-claude';
|
|
75
|
+
|
|
76
|
+
function exeName(name) {
|
|
77
|
+
return name + (process.platform === 'win32' ? '.cmd' : '');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function isExecutable(file) {
|
|
81
|
+
try { fs.accessSync(file, fs.constants.X_OK); return true; } catch { return false; }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function readHeadBytes(file, n = 8192) {
|
|
85
|
+
const fd = fs.openSync(file, 'r');
|
|
86
|
+
try {
|
|
87
|
+
const buf = Buffer.alloc(n);
|
|
88
|
+
const got = fs.readSync(fd, buf, 0, n, 0);
|
|
89
|
+
return buf.subarray(0, got);
|
|
90
|
+
} finally {
|
|
91
|
+
fs.closeSync(fd);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function isNativeBinary(buf) {
|
|
96
|
+
if (!buf || buf.length < 2) return false;
|
|
97
|
+
if (buf[0] === 0x7f && buf[1] === 0x45 && buf[2] === 0x4c && buf[3] === 0x46) return true; // ELF
|
|
98
|
+
if (buf[0] === 0x4d && buf[1] === 0x5a) return true; // PE
|
|
99
|
+
if (buf.length >= 4) {
|
|
100
|
+
const mag = buf.readUInt32BE(0);
|
|
101
|
+
// Mach-O 32/64 + fat (incl. byte-swapped).
|
|
102
|
+
if (mag === 0xfeedface || mag === 0xfeedfacf || mag === 0xcafebabe
|
|
103
|
+
|| mag === 0xcffaedfe || mag === 0xcefaedfe) return true;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** True for Anthropic's bun `claude` (install.sh standalone or bun shebang). */
|
|
109
|
+
export function isAnthropicBunClaude(filePath) {
|
|
110
|
+
try {
|
|
111
|
+
const buf = readHeadBytes(filePath, 512);
|
|
112
|
+
if (isNativeBinary(buf)) return true;
|
|
113
|
+
const shebang = buf.toString('utf8').split(/\r?\n/, 1)[0] || '';
|
|
114
|
+
return shebang.startsWith('#!') && /\bbun\b/i.test(shebang);
|
|
115
|
+
} catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** True when this file is the openzoo-claude package (name, realpath, or shim). */
|
|
121
|
+
export function isOpenzooClaudeBin(filePath) {
|
|
122
|
+
try {
|
|
123
|
+
const real = fs.realpathSync(filePath);
|
|
124
|
+
if (/(?:^|[\\/])openzoo-claude(?:[\\/]|$)/i.test(real)) return true;
|
|
125
|
+
if (isAnthropicBunClaude(real)) return false;
|
|
126
|
+
const buf = readHeadBytes(real, 8192);
|
|
127
|
+
if (isNativeBinary(buf)) return false;
|
|
128
|
+
return buf.toString('utf8').includes('openzoo-claude');
|
|
129
|
+
} catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function pathSearchDirs(env = process.env) {
|
|
135
|
+
const extras = env.OPENZOO_CLAUDE_PATH_ONLY === '1'
|
|
136
|
+
? []
|
|
137
|
+
: claudeCodeBinDirs(env.HOME || os.homedir());
|
|
138
|
+
const pathDirs = String(env.PATH || '').split(path.delimiter).filter(Boolean);
|
|
139
|
+
return [...new Set([...extras, ...pathDirs])].filter(Boolean);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function findNamedBin(name, env, { requireOpenzoo = false } = {}) {
|
|
143
|
+
const bin = exeName(name);
|
|
144
|
+
for (const dir of pathSearchDirs(env)) {
|
|
145
|
+
const f = path.join(dir, bin);
|
|
146
|
+
if (!isExecutable(f)) continue;
|
|
147
|
+
if (requireOpenzoo && !isOpenzooClaudeBin(f)) continue;
|
|
148
|
+
return f;
|
|
42
149
|
}
|
|
43
150
|
return null;
|
|
44
151
|
}
|
|
45
152
|
|
|
153
|
+
export function resolveNpx(env = process.env) {
|
|
154
|
+
return findNamedBin('npx', env);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Resolve the openzoo-claude TERMINAL CLI.
|
|
159
|
+
* Prefers `openzoo-claude`, then package `occ`, then that package's `claude`
|
|
160
|
+
* bin. Never returns Anthropic bun `~/.local/bin/claude`.
|
|
161
|
+
*/
|
|
162
|
+
export function resolveClaudeCli(env = process.env) {
|
|
163
|
+
const named = findNamedBin('openzoo-claude', env);
|
|
164
|
+
if (named) return named;
|
|
165
|
+
const occ = findNamedBin('occ', env, { requireOpenzoo: true });
|
|
166
|
+
if (occ) return occ;
|
|
167
|
+
const pkgClaude = findNamedBin('claude', env, { requireOpenzoo: true });
|
|
168
|
+
if (pkgClaude) return pkgClaude;
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Path hit or `npx -y openzoo-claude` fallback. Null only when neither the
|
|
174
|
+
* package nor npx is available.
|
|
175
|
+
*/
|
|
176
|
+
export function resolveOpenzooClaude(env = process.env) {
|
|
177
|
+
const cli = resolveClaudeCli(env);
|
|
178
|
+
if (cli) return { command: cli, prefixArgs: [], via: 'path' };
|
|
179
|
+
const npx = resolveNpx(env);
|
|
180
|
+
if (npx) return { command: npx, prefixArgs: ['-y', OPENZOO_CLAUDE_PACKAGE], via: 'npx' };
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Spawn argv for `openzoo claude [args]` — `--help` execs openzoo-claude. */
|
|
185
|
+
export function claudeSpawnSpec(argv = [], env = process.env) {
|
|
186
|
+
const rest = argv.filter((a) => !['--terminal', '-t', '--desktop'].includes(a));
|
|
187
|
+
const resolved = resolveOpenzooClaude(env);
|
|
188
|
+
if (!resolved) return null;
|
|
189
|
+
return {
|
|
190
|
+
command: resolved.command,
|
|
191
|
+
args: [...resolved.prefixArgs, ...rest],
|
|
192
|
+
via: resolved.via,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function zooAuthToken(baseEnv) {
|
|
197
|
+
if (baseEnv.ANTHROPIC_AUTH_TOKEN) return baseEnv.ANTHROPIC_AUTH_TOKEN;
|
|
198
|
+
const envKey = String(baseEnv.OPENZOO_SUBSCRIPTION_KEY || '').trim();
|
|
199
|
+
if (envKey) return envKey;
|
|
200
|
+
const file = baseEnv.OPENZOO_SUBSCRIPTION_PATH
|
|
201
|
+
|| path.join(baseEnv.HOME || os.homedir(), '.openzoo', 'subscription.json');
|
|
202
|
+
try {
|
|
203
|
+
const key = String(JSON.parse(fs.readFileSync(file, 'utf8'))?.key || '').trim();
|
|
204
|
+
if (key) return key;
|
|
205
|
+
} catch { /* no subscription file */ }
|
|
206
|
+
return 'sk-openzoo';
|
|
207
|
+
}
|
|
208
|
+
|
|
46
209
|
/**
|
|
47
|
-
* `
|
|
48
|
-
*
|
|
49
|
-
*
|
|
210
|
+
* The same env `openzoo claude` writes: gateway auth at the local proxy,
|
|
211
|
+
* Anthropic API key UNSET (it would bill api.anthropic.com), catalog
|
|
212
|
+
* discovery on, compact off because the proxy already spills.
|
|
213
|
+
*
|
|
214
|
+
* grokui Auto and the CLI share this. Do not invent a second key/url pair.
|
|
215
|
+
*/
|
|
216
|
+
export function claudeZooEnv(baseEnv = process.env, { base, port } = {}) {
|
|
217
|
+
const url = base || `http://localhost:${port ?? config.port}/v1`;
|
|
218
|
+
const env = { ...baseEnv };
|
|
219
|
+
delete env.ANTHROPIC_API_KEY;
|
|
220
|
+
env.ANTHROPIC_BASE_URL = url;
|
|
221
|
+
env.ANTHROPIC_AUTH_TOKEN = zooAuthToken(baseEnv);
|
|
222
|
+
const extras = claudeCodeBinDirs(baseEnv.HOME || os.homedir()).filter((d) => {
|
|
223
|
+
try { return fs.existsSync(d); } catch { return false; }
|
|
224
|
+
});
|
|
225
|
+
const pathDirs = String(env.PATH || '').split(path.delimiter).filter(Boolean);
|
|
226
|
+
env.PATH = [...new Set([...extras, ...pathDirs])].join(path.delimiter);
|
|
227
|
+
applyClaudeCodeCatalogEnv(env);
|
|
228
|
+
// ANTHROPIC_MODEL is only aliased (never invented) in applyClaudeCodeCatalogEnv.
|
|
229
|
+
// A default pin to openzoo-claude-sonnet-5 hid the live zoo catalog.
|
|
230
|
+
// THE ACTUAL SWITCHES. Three earlier attempts missed these entirely:
|
|
231
|
+
// autoCompactEnabled in settings (global, trapped a session), a raised
|
|
232
|
+
// CLAUDE_CODE_MAX_CONTEXT_TOKENS (clamped to 200k by the model table), and an
|
|
233
|
+
// unrecognised model alias (resolves fine, still compacted). DISABLE_COMPACT
|
|
234
|
+
// and DISABLE_AUTO_COMPACT are in the binary and are the direct controls.
|
|
235
|
+
//
|
|
236
|
+
// Correct here for the same reason as everything else in this block: the
|
|
237
|
+
// proxy binds the prefix and forwards a bounded tail, so the request that
|
|
238
|
+
// leaves this machine stays small no matter how long the conversation runs.
|
|
239
|
+
if (baseEnv.OPENZOO_KEEP_COMPACT !== '1') {
|
|
240
|
+
env.DISABLE_COMPACT = baseEnv.DISABLE_COMPACT || '1';
|
|
241
|
+
env.DISABLE_AUTO_COMPACT = baseEnv.DISABLE_AUTO_COMPACT || '1';
|
|
242
|
+
}
|
|
243
|
+
// RAISE THE CEILING, because the proxy already removed it.
|
|
244
|
+
//
|
|
245
|
+
// Claude Code counts the WHOLE local transcript against the model's window and
|
|
246
|
+
// hard-stops with "Context limit reached - /compact or /clear to continue". It
|
|
247
|
+
// cannot know the proxy binds the old prefix into leCore and forwards only the
|
|
248
|
+
// system block plus a bounded tail - MEASURED live, 8 of 166 turns actually
|
|
249
|
+
// sent. Disabling auto-compact WITHOUT raising this made it worse: it used to
|
|
250
|
+
// compact and carry on, and instead it just stopped.
|
|
251
|
+
//
|
|
252
|
+
// Safe only because spillTranscript is real: OPENZOO_TAIL_MAX_CHARS bounds what
|
|
253
|
+
// leaves this machine however long the conversation gets.
|
|
254
|
+
if (baseEnv.OPENZOO_KEEP_COMPACT !== '1' && !baseEnv.CLAUDE_CODE_MAX_CONTEXT_TOKENS) {
|
|
255
|
+
env.CLAUDE_CODE_MAX_CONTEXT_TOKENS = baseEnv.OPENZOO_CLAUDE_CONTEXT_TOKENS || '1000000';
|
|
256
|
+
}
|
|
257
|
+
return env;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* `npx openzoo claude [args]` — launch openzoo-claude on the zoo.
|
|
262
|
+
* Terminal (openzoo-claude) is the default; `--desktop` opens the Anthropic app.
|
|
263
|
+
* Both get the same zoo env pair so inference pays x402 / subscription.
|
|
50
264
|
*/
|
|
51
265
|
export async function launchClaude(argv) {
|
|
52
266
|
// let, not const: startProxy can heal onto a different port and every URL
|
|
@@ -138,76 +352,17 @@ export async function launchClaude(argv) {
|
|
|
138
352
|
// api.anthropic.com and it TAKES PRECEDENCE over ANTHROPIC_BASE_URL — observed:
|
|
139
353
|
// "Both ... set · auth may not work" + "API Usage Billing", never hitting the
|
|
140
354
|
// zoo. A custom gateway uses BASE_URL + AUTH_TOKEN only; API_KEY must be UNSET
|
|
141
|
-
// (including any inherited one) or it wins.
|
|
142
|
-
const env =
|
|
143
|
-
delete env.ANTHROPIC_API_KEY;
|
|
144
|
-
env.ANTHROPIC_BASE_URL = base;
|
|
145
|
-
env.ANTHROPIC_AUTH_TOKEN = process.env.ANTHROPIC_AUTH_TOKEN || 'sk-openzoo';
|
|
146
|
-
// STOP CLAUDE CODE COMPACTING ON A WINDOW THAT IS NOT REAL.
|
|
147
|
-
//
|
|
148
|
-
// It counts the WHOLE local transcript and compacts against a window it looks
|
|
149
|
-
// up from the MODEL NAME — hardcoded 200k for a recognised Claude id, which is
|
|
150
|
-
// why `/autocompact 1m` answered "capped to 200k by model" and why raising
|
|
151
|
-
// CLAUDE_CODE_MAX_CONTEXT_TOKENS alone did nothing. It never sees that the
|
|
152
|
-
// proxy binds the prefix and forwards ~8 of 166 turns.
|
|
153
|
-
//
|
|
154
|
-
// An `openzoo-` alias is the same model upstream (models.js resolves by
|
|
155
|
-
// SUFFIX, so openzoo-claude-sonnet-5 -> anthropic/claude-sonnet-5) but is not
|
|
156
|
-
// in that table, so the client falls back to the advertised context_length —
|
|
157
|
-
// which this gateway publishes as 128,000,000.
|
|
158
|
-
//
|
|
159
|
-
// OPENZOO_NO_ALIAS=1 opts out. Worth knowing: model-specific client behaviour
|
|
160
|
-
// (thinking budget, tool formats) also keys off the name, so if a session
|
|
161
|
-
// behaves oddly this is the first thing to turn off.
|
|
162
|
-
// Applies to WHATEVER model you are on — opus, fable, sonnet, haiku. The
|
|
163
|
-
// 200k table is keyed by name, so every recognised Claude id hits it; the
|
|
164
|
-
// alias is minted from the requested model rather than pinned to sonnet.
|
|
165
|
-
if (process.env.OPENZOO_NO_ALIAS !== '1') {
|
|
166
|
-
const want = process.env.OPENZOO_CLAUDE_ALIAS
|
|
167
|
-
|| process.env.ANTHROPIC_MODEL
|
|
168
|
-
|| 'claude-sonnet-5';
|
|
169
|
-
// idempotent: never openzoo-openzoo-…; strip a vendor prefix so the SUFFIX
|
|
170
|
-
// resolver in models.js gets the bare family name it matches on.
|
|
171
|
-
const bare = String(want).replace(/^openzoo-/, '').replace(/^[^/]+\//, '');
|
|
172
|
-
// ONLY families whose alias was VERIFIED to resolve back to themselves.
|
|
173
|
-
// openzoo-claude-haiku-4-5 resolved to deepseek/deepseek-v4-pro-0813 — the
|
|
174
|
-
// suffix scorer found no haiku in the catalog and picked a neighbour, so
|
|
175
|
-
// aliasing it would silently swap the user's model. A compaction fix is
|
|
176
|
-
// never worth answering as a different model than the one asked for.
|
|
177
|
-
const SAFE = /^claude-(opus|sonnet|fable)-/;
|
|
178
|
-
if (SAFE.test(bare)) env.ANTHROPIC_MODEL = `openzoo-${bare}`;
|
|
179
|
-
}
|
|
180
|
-
// THE ACTUAL SWITCHES. Three earlier attempts missed these entirely:
|
|
181
|
-
// autoCompactEnabled in settings (global, trapped a session), a raised
|
|
182
|
-
// CLAUDE_CODE_MAX_CONTEXT_TOKENS (clamped to 200k by the model table), and an
|
|
183
|
-
// unrecognised model alias (resolves fine, still compacted). DISABLE_COMPACT
|
|
184
|
-
// and DISABLE_AUTO_COMPACT are in the binary and are the direct controls.
|
|
185
|
-
//
|
|
186
|
-
// Correct here for the same reason as everything else in this block: the
|
|
187
|
-
// proxy binds the prefix and forwards a bounded tail, so the request that
|
|
188
|
-
// leaves this machine stays small no matter how long the conversation runs.
|
|
189
|
-
if (process.env.OPENZOO_KEEP_COMPACT !== '1') {
|
|
190
|
-
env.DISABLE_COMPACT = process.env.DISABLE_COMPACT || '1';
|
|
191
|
-
env.DISABLE_AUTO_COMPACT = process.env.DISABLE_AUTO_COMPACT || '1';
|
|
192
|
-
}
|
|
193
|
-
// RAISE THE CEILING, because the proxy already removed it.
|
|
194
|
-
//
|
|
195
|
-
// Claude Code counts the WHOLE local transcript against the model's window and
|
|
196
|
-
// hard-stops with "Context limit reached - /compact or /clear to continue". It
|
|
197
|
-
// cannot know the proxy binds the old prefix into leCore and forwards only the
|
|
198
|
-
// system block plus a bounded tail - MEASURED live, 8 of 166 turns actually
|
|
199
|
-
// sent. Disabling auto-compact WITHOUT raising this made it worse: it used to
|
|
200
|
-
// compact and carry on, and instead it just stopped.
|
|
201
|
-
//
|
|
202
|
-
// Safe only because spillTranscript is real: OPENZOO_TAIL_MAX_CHARS bounds what
|
|
203
|
-
// leaves this machine however long the conversation gets.
|
|
204
|
-
if (process.env.OPENZOO_KEEP_COMPACT !== '1' && !process.env.CLAUDE_CODE_MAX_CONTEXT_TOKENS) {
|
|
205
|
-
env.CLAUDE_CODE_MAX_CONTEXT_TOKENS = process.env.OPENZOO_CLAUDE_CONTEXT_TOKENS || '1000000';
|
|
206
|
-
}
|
|
355
|
+
// (including any inherited one) or it wins. claudeZooEnv is the one writer.
|
|
356
|
+
const env = claudeZooEnv(process.env, { base });
|
|
207
357
|
|
|
208
358
|
if (terminal) {
|
|
209
|
-
const
|
|
210
|
-
if (!
|
|
359
|
+
const spec = claudeSpawnSpec(argv, env);
|
|
360
|
+
if (!spec) {
|
|
361
|
+
console.error('openzoo: openzoo-claude not found and npx is unavailable.');
|
|
362
|
+
console.error(' install: npx -y openzoo-claude');
|
|
363
|
+
console.error(' or: npm i -g openzoo-claude');
|
|
364
|
+
process.exit(1);
|
|
365
|
+
}
|
|
211
366
|
// ALWAYS-ON HUD via Claude Code's NATIVE status line (the title bar is owned
|
|
212
367
|
// by Claude Code and gets overwritten, so OSC there is useless). We write a
|
|
213
368
|
// tiny status script that reads the proxy's /v1/info, and merge a statusLine
|
|
@@ -317,16 +472,17 @@ export async function launchClaude(argv) {
|
|
|
317
472
|
let wallet = '';
|
|
318
473
|
try { const { PayClient } = await import('./pay.js'); wallet = new PayClient().address; } catch { /* optional */ }
|
|
319
474
|
console.error('');
|
|
320
|
-
console.error(' \x1b[38;5;208m●\x1b[0m openzoo — this
|
|
475
|
+
console.error(' \x1b[38;5;208m●\x1b[0m openzoo — this openzoo-claude session routes through the zoo');
|
|
321
476
|
console.error(` endpoint : ${base}`);
|
|
477
|
+
console.error(' models : GET /v1/models (quoteable catalog — Claude /model includes OpenRouter ids + Auto)');
|
|
322
478
|
console.error(' auth : gateway token (ANTHROPIC_API_KEY unset — no api.anthropic.com billing)');
|
|
323
479
|
if (wallet) console.error(` wallet : ${wallet}`);
|
|
324
480
|
console.error(' spend : live in the status line below (bottom of screen); receipts in ~/.openzoo/proxy.log');
|
|
325
481
|
console.error(' every turn pays x402.');
|
|
326
482
|
console.error('');
|
|
327
|
-
const child = spawn(
|
|
483
|
+
const child = spawn(spec.command, spec.args, { stdio: 'inherit', env });
|
|
328
484
|
child.on('exit', (c) => { try { restoreStatus?.(); } catch { /* ignore */ } process.exit(c ?? 0); });
|
|
329
|
-
child.on('error', (e) => { console.error(`openzoo: could not launch claude: ${e.message}`); process.exit(1); });
|
|
485
|
+
child.on('error', (e) => { console.error(`openzoo: could not launch openzoo-claude: ${e.message}`); process.exit(1); });
|
|
330
486
|
return;
|
|
331
487
|
}
|
|
332
488
|
|
|
@@ -421,71 +577,7 @@ export async function launchHarness(cmd, args) {
|
|
|
421
577
|
process.exit(1);
|
|
422
578
|
}
|
|
423
579
|
|
|
424
|
-
const env =
|
|
425
|
-
delete env.ANTHROPIC_API_KEY; // conflicts with the gateway auth-token path
|
|
426
|
-
env.ANTHROPIC_BASE_URL = base;
|
|
427
|
-
env.ANTHROPIC_AUTH_TOKEN = process.env.ANTHROPIC_AUTH_TOKEN || 'sk-openzoo';
|
|
428
|
-
// STOP CLAUDE CODE COMPACTING ON A WINDOW THAT IS NOT REAL.
|
|
429
|
-
//
|
|
430
|
-
// It counts the WHOLE local transcript and compacts against a window it looks
|
|
431
|
-
// up from the MODEL NAME — hardcoded 200k for a recognised Claude id, which is
|
|
432
|
-
// why `/autocompact 1m` answered "capped to 200k by model" and why raising
|
|
433
|
-
// CLAUDE_CODE_MAX_CONTEXT_TOKENS alone did nothing. It never sees that the
|
|
434
|
-
// proxy binds the prefix and forwards ~8 of 166 turns.
|
|
435
|
-
//
|
|
436
|
-
// An `openzoo-` alias is the same model upstream (models.js resolves by
|
|
437
|
-
// SUFFIX, so openzoo-claude-sonnet-5 -> anthropic/claude-sonnet-5) but is not
|
|
438
|
-
// in that table, so the client falls back to the advertised context_length —
|
|
439
|
-
// which this gateway publishes as 128,000,000.
|
|
440
|
-
//
|
|
441
|
-
// OPENZOO_NO_ALIAS=1 opts out. Worth knowing: model-specific client behaviour
|
|
442
|
-
// (thinking budget, tool formats) also keys off the name, so if a session
|
|
443
|
-
// behaves oddly this is the first thing to turn off.
|
|
444
|
-
// Applies to WHATEVER model you are on — opus, fable, sonnet, haiku. The
|
|
445
|
-
// 200k table is keyed by name, so every recognised Claude id hits it; the
|
|
446
|
-
// alias is minted from the requested model rather than pinned to sonnet.
|
|
447
|
-
if (process.env.OPENZOO_NO_ALIAS !== '1') {
|
|
448
|
-
const want = process.env.OPENZOO_CLAUDE_ALIAS
|
|
449
|
-
|| process.env.ANTHROPIC_MODEL
|
|
450
|
-
|| 'claude-sonnet-5';
|
|
451
|
-
// idempotent: never openzoo-openzoo-…; strip a vendor prefix so the SUFFIX
|
|
452
|
-
// resolver in models.js gets the bare family name it matches on.
|
|
453
|
-
const bare = String(want).replace(/^openzoo-/, '').replace(/^[^/]+\//, '');
|
|
454
|
-
// ONLY families whose alias was VERIFIED to resolve back to themselves.
|
|
455
|
-
// openzoo-claude-haiku-4-5 resolved to deepseek/deepseek-v4-pro-0813 — the
|
|
456
|
-
// suffix scorer found no haiku in the catalog and picked a neighbour, so
|
|
457
|
-
// aliasing it would silently swap the user's model. A compaction fix is
|
|
458
|
-
// never worth answering as a different model than the one asked for.
|
|
459
|
-
const SAFE = /^claude-(opus|sonnet|fable)-/;
|
|
460
|
-
if (SAFE.test(bare)) env.ANTHROPIC_MODEL = `openzoo-${bare}`;
|
|
461
|
-
}
|
|
462
|
-
// THE ACTUAL SWITCHES. Three earlier attempts missed these entirely:
|
|
463
|
-
// autoCompactEnabled in settings (global, trapped a session), a raised
|
|
464
|
-
// CLAUDE_CODE_MAX_CONTEXT_TOKENS (clamped to 200k by the model table), and an
|
|
465
|
-
// unrecognised model alias (resolves fine, still compacted). DISABLE_COMPACT
|
|
466
|
-
// and DISABLE_AUTO_COMPACT are in the binary and are the direct controls.
|
|
467
|
-
//
|
|
468
|
-
// Correct here for the same reason as everything else in this block: the
|
|
469
|
-
// proxy binds the prefix and forwards a bounded tail, so the request that
|
|
470
|
-
// leaves this machine stays small no matter how long the conversation runs.
|
|
471
|
-
if (process.env.OPENZOO_KEEP_COMPACT !== '1') {
|
|
472
|
-
env.DISABLE_COMPACT = process.env.DISABLE_COMPACT || '1';
|
|
473
|
-
env.DISABLE_AUTO_COMPACT = process.env.DISABLE_AUTO_COMPACT || '1';
|
|
474
|
-
}
|
|
475
|
-
// RAISE THE CEILING, because the proxy already removed it.
|
|
476
|
-
//
|
|
477
|
-
// Claude Code counts the WHOLE local transcript against the model's window and
|
|
478
|
-
// hard-stops with "Context limit reached - /compact or /clear to continue". It
|
|
479
|
-
// cannot know the proxy binds the old prefix into leCore and forwards only the
|
|
480
|
-
// system block plus a bounded tail - MEASURED live, 8 of 166 turns actually
|
|
481
|
-
// sent. Disabling auto-compact WITHOUT raising this made it worse: it used to
|
|
482
|
-
// compact and carry on, and instead it just stopped.
|
|
483
|
-
//
|
|
484
|
-
// Safe only because spillTranscript is real: OPENZOO_TAIL_MAX_CHARS bounds what
|
|
485
|
-
// leaves this machine however long the conversation gets.
|
|
486
|
-
if (process.env.OPENZOO_KEEP_COMPACT !== '1' && !process.env.CLAUDE_CODE_MAX_CONTEXT_TOKENS) {
|
|
487
|
-
env.CLAUDE_CODE_MAX_CONTEXT_TOKENS = process.env.OPENZOO_CLAUDE_CONTEXT_TOKENS || '1000000';
|
|
488
|
-
}
|
|
580
|
+
const env = claudeZooEnv(process.env, { base });
|
|
489
581
|
console.error(`openzoo: launching \`${cmd}\` on the zoo (ANTHROPIC_BASE_URL=${base}) — every turn pays x402`);
|
|
490
582
|
const child = spawn(cmd, args, { stdio: 'inherit', env });
|
|
491
583
|
child.on('exit', (code) => process.exit(code ?? 0));
|
package/lib/livestatus.js
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* tool) and abort a reader that has gone silent.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { stripThinkTags } from './think.js';
|
|
10
|
+
|
|
9
11
|
export const STREAM_IDLE_MS = Number(process.env.OZ_STREAM_IDLE_MS || 180_000);
|
|
10
12
|
export const STALE_THINKING_MS = Number(process.env.OZ_STALE_THINKING_MS || 240_000);
|
|
11
13
|
export const MODEL_WAIT_TICK_MS = 1000;
|
|
@@ -107,7 +109,7 @@ export function shortModelName(id) {
|
|
|
107
109
|
|
|
108
110
|
/** Compact spectator preview — opening lines, not the whole answer. */
|
|
109
111
|
export function clipRacePreview(text, maxLines = 8, maxChars = 420) {
|
|
110
|
-
const s = String(text || '').replace(/\r/g, '');
|
|
112
|
+
const s = stripThinkTags(String(text || '')).replace(/\r/g, '');
|
|
111
113
|
if (!s) return '';
|
|
112
114
|
const lines = s.split('\n');
|
|
113
115
|
let out = lines.length > maxLines ? lines.slice(0, maxLines).join('\n') + '\n…' : s;
|
|
@@ -118,7 +120,7 @@ export function clipRacePreview(text, maxLines = 8, maxChars = 420) {
|
|
|
118
120
|
/** Race-level failure when no countable answer exists. Never a single model name. */
|
|
119
121
|
export const RACE_EVERY_FAILED = '(race: every model failed — no reply)';
|
|
120
122
|
|
|
121
|
-
const RACE_HTTP_NOTE = /^\((?:upstream error|request failed|payment failed|rate limited|stream timed out|stream stalled)/i;
|
|
123
|
+
const RACE_HTTP_NOTE = /^\((?:upstream error|request failed|payment failed|payment required|rate limited|stream timed out|stream stalled)/i;
|
|
122
124
|
const RACE_MODEL_FAILED = /^\([^)]+ (?:failed:|returned nothing)/i;
|
|
123
125
|
const RACE_FETCH_FAILED = /^(?:typeerror:\s*)?fetch failed$/i;
|
|
124
126
|
|
|
@@ -133,7 +135,7 @@ export function isRaceCountable(textOrArrival) {
|
|
|
133
135
|
? textOrArrival
|
|
134
136
|
: { text: textOrArrival };
|
|
135
137
|
if (arrival.error) return false;
|
|
136
|
-
const s = String(arrival.text || '').trim();
|
|
138
|
+
const s = stripThinkTags(String(arrival.text || '')).trim();
|
|
137
139
|
if (!s) return false;
|
|
138
140
|
if (RACE_FETCH_FAILED.test(s)) return false;
|
|
139
141
|
if (RACE_HTTP_NOTE.test(s)) return false;
|
|
@@ -159,7 +161,7 @@ export function raceFailKind(arrival) {
|
|
|
159
161
|
const s = `${err} ${text}`.trim();
|
|
160
162
|
if (!s) return 'empty body';
|
|
161
163
|
if (/timeout|STREAM_IDLE|aborted|AbortError/i.test(s)) return 'timeout';
|
|
162
|
-
if (/402|payment failed/i.test(s)) return 'pay';
|
|
164
|
+
if (/402|payment failed|payment required/i.test(s)) return 'pay';
|
|
163
165
|
if (/fetch failed/i.test(s)) return 'fetch failed';
|
|
164
166
|
const http = /HTTP\s+(\d{3})/i.exec(s);
|
|
165
167
|
if (http) return `HTTP ${http[1]}`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Measured route table. catalog.json + router.json + outcomes.json. Regenerated from leCore bench_ledger_hard.jsonl. Do not edit by hand.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"stamp":"2026-08-20T10:58:45Z","ids":["aion-labs/aion-2.0","aion-labs/aion-3.0","aion-labs/aion-3.0-mini","aion-labs/aion-rp-llama-3.1-8b","allenai/olmo-3-32b-think","amazon/nova-2-lite-v1","amazon/nova-lite-v1","amazon/nova-micro-v1","amazon/nova-premier-v1","amazon/nova-pro-v1","anthracite-org/magnum-v4-72b","anthropic/claude-3-haiku","anthropic/claude-fable-5","anthropic/claude-fable-5:batch","anthropic/claude-haiku-4.5","anthropic/claude-haiku-4.5:batch","anthropic/claude-opus-4","anthropic/claude-opus-4.1","anthropic/claude-opus-4.1:batch","anthropic/claude-opus-4.5","anthropic/claude-opus-4.5:batch","anthropic/claude-opus-4.6","anthropic/claude-opus-4.6:batch","anthropic/claude-opus-4.7","anthropic/claude-opus-4.7-fast","anthropic/claude-opus-4.7:batch","anthropic/claude-opus-4.8","anthropic/claude-opus-4.8-fast","anthropic/claude-opus-4.8:batch","anthropic/claude-opus-5","anthropic/claude-opus-5-fast","anthropic/claude-opus-5:batch","anthropic/claude-sonnet-4","anthropic/claude-sonnet-4.5","anthropic/claude-sonnet-4.5:batch","anthropic/claude-sonnet-4.6","anthropic/claude-sonnet-4.6:batch","anthropic/claude-sonnet-5","anthropic/claude-sonnet-5:batch","arcee-ai/trinity-large-thinking","arcee-ai/virtuoso-large","baidu/ernie-4.5-vl-424b-a47b","bytedance-seed/seed-1.6","bytedance-seed/seed-1.6-flash","bytedance-seed/seed-2-1-turbo","bytedance-seed/seed-2.0-code","bytedance-seed/seed-2.0-lite","bytedance-seed/seed-2.0-mini","bytedance/ui-tars-1.5-7b","cognitivecomputations/dolphin-mistral-24b-venice-edition","cohere/command-a","cohere/command-r-08-2024","cohere/command-r-plus-08-2024","cohere/command-r7b-12-2024","cohere/north-mini-code:free","deepcogito/cogito-v2.1-671b","deepseek/deepseek-chat","deepseek/deepseek-chat-v3-0324","deepseek/deepseek-chat-v3.1","deepseek/deepseek-r1","deepseek/deepseek-r1-0528","deepseek/deepseek-r1-distill-llama-70b","deepseek/deepseek-v3.1-terminus","deepseek/deepseek-v3.2","deepseek/deepseek-v3.2-exp","deepseek/deepseek-v4-flash","deepseek/deepseek-v4-flash-0731","deepseek/deepseek-v4-pro","deepseek/deepseek-v4-pro-0813","dots-studio/dots-3-note-preview:free","google/gemini-2.5-flash","google/gemini-2.5-flash-image","google/gemini-2.5-flash-lite","google/gemini-2.5-flash-lite:batch","google/gemini-2.5-flash:batch","google/gemini-2.5-pro","google/gemini-2.5-pro-preview","google/gemini-2.5-pro-preview-05-06","google/gemini-2.5-pro:batch","google/gemini-3-flash-preview","google/gemini-3-flash-preview:batch","google/gemini-3-pro-image","google/gemini-3-pro-image-preview","google/gemini-3.1-flash-image","google/gemini-3.1-flash-image-preview","google/gemini-3.1-flash-lite","google/gemini-3.1-flash-lite-image","google/gemini-3.1-flash-lite-preview","google/gemini-3.1-flash-lite:batch","google/gemini-3.1-pro-preview","google/gemini-3.1-pro-preview-customtools","google/gemini-3.1-pro-preview:batch","google/gemini-3.5-flash","google/gemini-3.5-flash-lite","google/gemini-3.5-flash-lite:batch","google/gemini-3.5-flash:batch","google/gemini-3.6-flash","google/gemini-3.6-flash:batch","google/gemini-3.7-flash","google/gemini-3.7-flash:batch","google/gemma-2-27b-it","google/gemma-3-12b-it","google/gemma-3-27b-it","google/gemma-3-4b-it","google/gemma-3n-e4b-it","google/gemma-4-26b-a4b-it","google/gemma-4-26b-a4b-it:free","google/gemma-4-31b-it","google/gemma-4-31b-it:free","google/lyria-3-clip-preview","google/lyria-3-pro-preview","gryphe/mythomax-l2-13b","ibm-granite/granite-4.0-h-micro","ibm-granite/granite-4.1-8b","inception/mercury-2","inclusionai/ling-2.6-1t","inclusionai/ling-2.6-flash","inclusionai/ling-3.0-flash","inclusionai/ring-2.6-1t","kwaipilot/kat-coder-air-v2.5","kwaipilot/kat-coder-pro-v2","kwaipilot/kat-coder-pro-v2.5","liquid/lfm-2.5-2.6b:free","meituan/longcat-2.0","meta-llama/llama-3.1-70b-instruct","meta-llama/llama-3.1-8b-instruct","meta-llama/llama-3.2-1b-instruct","meta-llama/llama-3.2-3b-instruct","meta-llama/llama-3.3-70b-instruct","meta-llama/llama-4-maverick","meta-llama/llama-4-scout","meta-llama/llama-guard-4-12b","meta/muse-glimmer-30b","meta/muse-spark-1.1","meta/muse-spark-1.2","microsoft/phi-4","microsoft/wizardlm-2-8x22b","minimax/minimax-01","minimax/minimax-m1","minimax/minimax-m2","minimax/minimax-m2-her","minimax/minimax-m2.1","minimax/minimax-m2.5","minimax/minimax-m2.7","minimax/minimax-m3","minimax/minimax-m3:batch","mistralai/codestral-2508","mistralai/ministral-14b-2512","mistralai/ministral-3b-2512","mistralai/ministral-8b-2512","mistralai/mistral-large","mistralai/mistral-large-2407","mistralai/mistral-large-2512","mistralai/mistral-medium-3","mistralai/mistral-medium-3-5","mistralai/mistral-medium-3.1","mistralai/mistral-nemo","mistralai/mistral-saba","mistralai/mistral-small-24b-instruct-2501","mistralai/mistral-small-2603","mistralai/mistral-small-3.1-24b-instruct","mistralai/mistral-small-3.2-24b-instruct","mistralai/mixtral-8x22b-instruct","mistralai/voxtral-small-24b-2507","moonshotai/kimi-k2","moonshotai/kimi-k2-0905","moonshotai/kimi-k2-thinking","moonshotai/kimi-k2.5","moonshotai/kimi-k2.6","moonshotai/kimi-k2.7-code","moonshotai/kimi-k2.7-code:batch","moonshotai/kimi-k3","morph/morph-v3-fast","morph/morph-v3-large","nex-agi/nex-n2-mini","nex-agi/nex-n2-pro","nousresearch/hermes-3-llama-3.1-405b","nousresearch/hermes-3-llama-3.1-70b","nousresearch/hermes-4-405b","nousresearch/hermes-4-70b","nvidia/nemotron-3-nano-30b-a3b","nvidia/nemotron-3-nano-30b-a3b:free","nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free","nvidia/nemotron-3-super-120b-a12b","nvidia/nemotron-3-super-120b-a12b:free","nvidia/nemotron-3-ultra-550b-a55b","nvidia/nemotron-3-ultra-550b-a55b:batch","nvidia/nemotron-3-ultra-550b-a55b:free","nvidia/nemotron-3.5-content-safety:free","nvidia/nemotron-3.5-lightning","nvidia/nemotron-3.5-lightning:free","nvidia/nemotron-nano-12b-v2-vl:free","nvidia/nemotron-nano-9b-v2:free","openai/gpt-3.5-turbo","openai/gpt-3.5-turbo-0613","openai/gpt-3.5-turbo-16k","openai/gpt-3.5-turbo-instruct","openai/gpt-3.5-turbo:batch","openai/gpt-4","openai/gpt-4-turbo","openai/gpt-4-turbo-preview","openai/gpt-4-turbo:batch","openai/gpt-4.1","openai/gpt-4.1-mini","openai/gpt-4.1-mini:batch","openai/gpt-4.1-nano","openai/gpt-4.1-nano:batch","openai/gpt-4.1:batch","openai/gpt-4o","openai/gpt-4o-2024-05-13","openai/gpt-4o-2024-08-06","openai/gpt-4o-2024-11-20","openai/gpt-4o-mini","openai/gpt-4o-mini-2024-07-18","openai/gpt-4o-mini:batch","openai/gpt-4o:batch","openai/gpt-5","openai/gpt-5-codex:batch","openai/gpt-5-image","openai/gpt-5-image-mini","openai/gpt-5-mini","openai/gpt-5-mini:batch","openai/gpt-5-nano","openai/gpt-5-nano:batch","openai/gpt-5-pro","openai/gpt-5-pro:batch","openai/gpt-5.1","openai/gpt-5.1-codex","openai/gpt-5.1-codex-max","openai/gpt-5.1-codex-mini","openai/gpt-5.1:batch","openai/gpt-5.2","openai/gpt-5.2-chat","openai/gpt-5.2-codex","openai/gpt-5.2-pro","openai/gpt-5.2-pro:batch","openai/gpt-5.2:batch","openai/gpt-5.3-codex","openai/gpt-5.4","openai/gpt-5.4-image-2","openai/gpt-5.4-mini","openai/gpt-5.4-mini:batch","openai/gpt-5.4-nano","openai/gpt-5.4-nano:batch","openai/gpt-5.4-pro","openai/gpt-5.4-pro:batch","openai/gpt-5.4:batch","openai/gpt-5.5","openai/gpt-5.5-pro","openai/gpt-5.5-pro:batch","openai/gpt-5.5:batch","openai/gpt-5.6-luna","openai/gpt-5.6-luna-pro","openai/gpt-5.6-luna-pro:batch","openai/gpt-5.6-luna:batch","openai/gpt-5.6-sol","openai/gpt-5.6-sol-pro","openai/gpt-5.6-sol-pro:batch","openai/gpt-5.6-sol:batch","openai/gpt-5.6-terra","openai/gpt-5.6-terra-pro","openai/gpt-5.6-terra-pro:batch","openai/gpt-5.6-terra:batch","openai/gpt-5:batch","openai/gpt-audio","openai/gpt-audio-mini","openai/gpt-chat-latest","openai/gpt-oss-120b","openai/gpt-oss-20b","openai/gpt-oss-20b:free","openai/gpt-oss-safeguard-20b","openai/o1","openai/o1-pro","openai/o1-pro:batch","openai/o1:batch","openai/o3","openai/o3-mini","openai/o3-mini-high","openai/o3-mini-high:batch","openai/o3-mini:batch","openai/o3-pro","openai/o3-pro:batch","openai/o3:batch","openai/o4-mini","openai/o4-mini-high","openai/o4-mini-high:batch","openai/o4-mini:batch","openrouter/auto","openrouter/auto-beta","openrouter/bodybuilder","openrouter/free","openrouter/fusion","openrouter/pareto-code","perceptron/perceptron-mk1","perplexity/sonar","perplexity/sonar-deep-research","perplexity/sonar-pro","perplexity/sonar-pro-search","perplexity/sonar-reasoning-pro","poolside/laguna-s-2.1","poolside/laguna-s-2.1:free","poolside/laguna-xs-2.1","poolside/laguna-xs-2.1:free","qwen/qwen-2.5-72b-instruct","qwen/qwen-2.5-7b-instruct","qwen/qwen-2.5-coder-32b-instruct","qwen/qwen-plus","qwen/qwen-plus-2025-07-28","qwen/qwen-plus-2025-07-28:thinking","qwen/qwen2.5-vl-72b-instruct","qwen/qwen3-14b","qwen/qwen3-235b-a22b","qwen/qwen3-235b-a22b-2507","qwen/qwen3-235b-a22b-thinking-2507","qwen/qwen3-30b-a3b","qwen/qwen3-30b-a3b-instruct-2507","qwen/qwen3-30b-a3b-thinking-2507","qwen/qwen3-32b","qwen/qwen3-8b","qwen/qwen3-coder","qwen/qwen3-coder-30b-a3b-instruct","qwen/qwen3-coder-flash","qwen/qwen3-coder-next","qwen/qwen3-coder-plus","qwen/qwen3-max","qwen/qwen3-max-thinking","qwen/qwen3-next-80b-a3b-instruct","qwen/qwen3-next-80b-a3b-thinking","qwen/qwen3-vl-235b-a22b-instruct","qwen/qwen3-vl-235b-a22b-thinking","qwen/qwen3-vl-30b-a3b-instruct","qwen/qwen3-vl-30b-a3b-thinking","qwen/qwen3-vl-32b-instruct","qwen/qwen3-vl-8b-instruct","qwen/qwen3-vl-8b-thinking","qwen/qwen3.5-122b-a10b","qwen/qwen3.5-27b","qwen/qwen3.5-35b-a3b","qwen/qwen3.5-397b-a17b","qwen/qwen3.5-9b","qwen/qwen3.5-flash-02-23","qwen/qwen3.5-plus-02-15","qwen/qwen3.5-plus-20260420","qwen/qwen3.6-27b","qwen/qwen3.6-35b-a3b","qwen/qwen3.6-flash","qwen/qwen3.6-max-preview","qwen/qwen3.6-plus","qwen/qwen3.7-flash","qwen/qwen3.7-max","qwen/qwen3.7-plus","qwen/qwen3.8-2.4t-a95b","qwen/qwen3.8-27b","qwen/qwen3.8-max","rekaai/reka-edge","rekaai/reka-flash-3","relace/relace-apply-3","relace/relace-search","sakana/fugu-ultra","sakana/sakana-namazu","sao10k/l3-lunaris-8b","sao10k/l3.1-euryale-70b","sao10k/l3.3-euryale-70b","stepfun/step-3.5-flash","stepfun/step-3.7-flash","tencent/hunyuan-a13b-instruct","tencent/hy3","tencent/hy3-preview","thedrummer/cydonia-24b-v4.1","thedrummer/rocinante-12b","thedrummer/skyfall-36b-v2","thedrummer/unslopnemo-12b","thinkingmachines/inkling","thinkingmachines/inkling-small","thinkingmachines/inkling:batch","undi95/remm-slerp-l2-13b","upstage/solar-pro-3","upstage/solar-pro4","writer/palmyra-x5","x-ai/grok-4.20","x-ai/grok-4.20-multi-agent","x-ai/grok-4.3","x-ai/grok-4.5","x-ai/grok-4.6","x-ai/grok-build-0.1","xiaomi/mimo-v2.5","xiaomi/mimo-v2.5-pro","z-ai/glm-4.5","z-ai/glm-4.5-air","z-ai/glm-4.5v","z-ai/glm-4.6","z-ai/glm-4.6v","z-ai/glm-4.7","z-ai/glm-4.7-flash","z-ai/glm-5","z-ai/glm-5-turbo","z-ai/glm-5.1","z-ai/glm-5.2","z-ai/glm-5.2:batch","z-ai/glm-5.2:free","z-ai/glm-5.3","z-ai/glm-5v-turbo","~anthropic/claude-fable-latest","~anthropic/claude-haiku-latest","~anthropic/claude-opus-latest","~anthropic/claude-sonnet-latest","~deepseek/deepseek-v4-flash-latest","~google/gemini-flash-latest","~google/gemini-pro-latest","~moonshotai/kimi-latest","~openai/gpt-latest","~openai/gpt-mini-latest","~x-ai/grok-latest","~z-ai/glm-latest"],"ctx":[131072,131072,131072,32768,65536,1000000,300000,128000,1000000,300000,32768,200000,1000000,1000000,200000,200000,200000,200000,200000,200000,200000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,262144,131072,123000,262144,262144,262144,262144,262144,262144,128000,128000,256000,128000,128000,128000,256000,128000,163840,163840,163840,64000,163840,8192,163840,163840,163840,1048576,1310720,1048576,1048576,512000,1048576,32768,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,0,65536,131072,65536,1048576,65536,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,8192,131072,262144,131072,32768,262144,262144,262144,262144,1048576,1048576,8192,131000,131072,128000,262144,262144,262144,262144,256000,262144,256000,128000,1048756,131072,131072,60000,131072,131072,1048576,1310720,1048576,131072,1048576,1048576,16384,65535,1000192,1000000,204800,65536,204800,204800,204800,1048576,524288,256000,262144,131072,262144,128000,131072,262144,131072,262144,131072,131072,32768,32768,262144,128000,256000,65536,32000,131072,262144,262144,262144,262144,262144,262144,1048576,81920,262144,262144,262144,131072,131072,131072,131072,262144,256000,256000,1000000,262144,512288,512288,1000000,128000,1000000,1000000,128000,128000,16385,4095,16385,4095,16385,8191,128000,128000,128000,1047576,1047576,1047576,1047576,1047576,1047576,128000,128000,128000,128000,128000,128000,128000,128000,400000,400000,400000,400000,400000,400000,400000,400000,400000,400000,400000,400000,400000,400000,400000,400000,128000,400000,400000,400000,400000,400000,1050000,272000,400000,400000,400000,400000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,1050000,400000,128000,128000,400000,131072,131072,131072,131072,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,2000000,2000000,128000,200000,1000000,2000000,32768,127072,128000,200000,200000,128000,1048576,262144,262144,262144,32768,32768,32768,1000000,1000000,1000000,128000,131072,131072,262144,262144,131072,262144,81920,131072,131072,262144,262144,1000000,262144,1000000,262144,262144,262144,262144,262144,131072,262144,262144,131072,262144,131072,262144,262144,262144,262144,262144,1000000,1000000,1000000,262144,262144,1000000,262144,1000000,1000000,1000000,1000000,1048576,1000000,1000000,16384,65536,256000,256000,1000000,262144,8192,131072,131072,262144,262144,131072,262144,262144,131072,65536,32768,1024000,1048576,524288,524288,6144,131072,524288,1040000,2000000,2000000,1000000,500000,500000,256000,1050000,1050000,131072,131072,65536,204800,131072,204800,202752,204800,202752,204800,1048576,512000,256000,1048576,202752,1000000,200000,1000000,1000000,1310720,1048576,1048576,1048576,1050000,400000,500000,1048576],"price_in":[2.4000000953674316,9.0,2.0999999046325684,2.4000000953674316,0.44999998807907104,0.8999999761581421,0.18000000715255737,0.10499999672174454,7.5,2.4000000953674316,9.0,0.75,30.0,15.0,3.0,1.5,45.0,45.0,22.5,15.0,7.5,15.0,7.5,15.0,90.0,7.5,15.0,30.0,7.5,15.0,30.0,7.5,9.0,9.0,4.5,9.0,4.5,6.0,3.0,0.6600000262260437,2.25,1.2599999904632568,0.75,0.22499999403953552,1.5,1.5,0.75,0.30000001192092896,0.30000001192092896,0.6000000238418579,7.5,0.44999998807907104,7.5,0.11249999701976776,0.0,3.75,0.7721999883651733,0.75,0.75,2.0999999046325684,1.5,2.4000000953674316,0.8100000023841858,0.8069999814033508,0.8100000023841858,0.2658179998397827,0.41999998688697815,4.800000190734863,3.563999891281128,0.0,0.8999999761581421,0.8999999761581421,0.30000001192092896,0.15000000596046448,0.44999998807907104,3.75,3.75,3.75,1.875,1.5,0.75,NaN,6.0,1.5,1.5,0.75,0.75,0.75,0.375,6.0,6.0,3.0,4.5,0.8999999761581421,0.44999998807907104,2.25,2.25,1.125,1.125,0.5625,1.9500000476837158,0.15000000596046448,0.23999999463558197,0.15000000596046448,0.18000000715255737,0.20999999344348907,0.0,0.27000001072883606,0.0,0.0,0.0,0.18000000715255737,0.050999999046325684,0.15000000596046448,0.75,0.22499999403953552,0.029999999329447746,0.06300000101327896,0.22499999403953552,0.44999998807907104,0.8999999761581421,2.2200000286102295,0.0,0.8999999761581421,1.2000000476837158,0.15000000596046448,0.08100000023841858,0.15000000596046448,0.30000001192092896,0.6000000238418579,0.30000001192092896,0.5400000214576721,1.0499999523162842,3.75,3.75,0.20999999344348907,1.8600000143051147,0.6000000238418579,1.649999976158142,0.7649999856948853,0.8999999761581421,0.8999999761581421,0.675000011920929,0.8999999761581421,0.8999999761581421,0.8999999761581421,0.8999999761581421,0.6000000238418579,0.30000001192092896,0.44999998807907104,6.0,6.0,1.5,1.2000000476837158,4.5,1.2000000476837158,0.05700000002980232,0.6000000238418579,0.15000000596046448,0.44999998807907104,1.0529999732971191,0.28125,6.0,0.30000001192092896,1.7100000381469727,1.7999999523162842,1.7999999523162842,1.350000023841858,2.8499999046325684,2.130000114440918,2.8499999046325684,9.0,2.4000000953674316,2.700000047683716,0.07500000298023224,0.75,3.0,2.0999999046325684,3.0,0.38999998569488525,0.15000000596046448,0.0,0.0,0.2549999952316284,0.0,1.7999999523162842,1.7999999523162842,0.0,0.0,0.23999999463558197,0.0,0.0,0.0,1.5,3.0,9.0,4.5,0.75,90.0,30.0,30.0,15.0,6.0,1.2000000476837158,0.6000000238418579,0.30000001192092896,0.15000000596046448,3.0,7.5,15.0,7.5,7.5,0.44999998807907104,0.44999998807907104,0.22499999403953552,3.75,3.75,1.875,30.0,7.5,0.75,0.375,0.15000000596046448,0.07500000298023224,45.0,22.5,3.75,3.75,3.75,0.75,1.875,5.25,5.25,5.25,63.0,31.5,2.625,5.25,7.5,24.0,2.25,1.125,0.6000000238418579,0.30000001192092896,90.0,45.0,3.75,15.0,90.0,45.0,7.5,0.6000000238418579,0.6000000238418579,0.30000001192092896,0.30000001192092896,7.5,7.5,3.75,3.75,6.0,6.0,3.0,3.0,1.875,7.5,1.7999999523162842,15.0,0.09000000357627869,0.09000000357627869,0.0,0.22499999403953552,45.0,450.0,225.0,22.5,6.0,3.299999952316284,3.299999952316284,1.649999976158142,1.649999976158142,60.0,30.0,3.0,3.299999952316284,3.299999952316284,1.649999976158142,1.649999976158142,NaN,NaN,NaN,0.0,NaN,NaN,0.44999998807907104,3.0,6.0,9.0,9.0,6.0,0.27000001072883606,0.0,0.18000000715255737,0.0,1.0800000429153442,0.30000001192092896,1.9800000190734863,0.7799999713897705,0.7799999713897705,0.7799999713897705,2.4000000953674316,0.36000001430511475,1.3650000095367432,0.27000001072883606,0.6899999976158142,0.38999998569488525,0.14444999396800995,0.6000000238418579,0.23999999463558197,0.35100001096725464,0.8999999761581421,0.20999999344348907,0.5849999785423279,0.36000001430511475,1.9500000476837158,2.3399999141693115,2.3399999141693115,0.27000001072883606,0.44999998807907104,0.6299999952316284,1.2000000476837158,0.38999998569488525,0.6000000238418579,0.31200000643730164,0.35100001096725464,0.5400000214576721,0.7799999713897705,0.5849999785423279,0.75,1.1699999570846558,0.30000001192092896,0.19499999284744263,0.7799999713897705,0.8999999761581421,1.7999999523162842,0.41999998688697815,0.5625,3.0810000896453857,0.9750000238418579,0.09000000357627869,4.425000190734863,0.9599999785423279,6.0,1.350000023841858,6.0,0.30000001192092896,0.30000001192092896,2.549999952316284,3.0,15.0,2.8499999046325684,0.11999999731779099,2.549999952316284,1.9500000476837158,0.30000001192092896,0.6000000238418579,0.41999998688697815,0.3959999978542328,0.5400000214576721,0.8999999761581421,0.75,1.649999976158142,1.2000000476837158,2.8499999046325684,1.350000023841858,3.0,1.350000023841858,0.44999998807907104,0.09000000357627869,1.7999999523162842,3.75,3.75,3.75,6.0,6.0,3.0,0.41999998688697815,1.3049999475479126,1.7999999523162842,0.38999998569488525,1.7999999523162842,1.5,0.8999999761581421,1.2000000476837158,0.18000000715255737,1.7999999523162842,3.5999999046325684,2.8980000019073486,2.8980000019073486,4.199999809265137,0.0,4.199999809265137,3.5999999046325684,30.0,3.0,15.0,6.0,0.19499999284744263,1.125,6.0,7.800000190734863,7.5,2.25,6.0,4.199999809265137],"price_out":[4.800000190734863,18.0,4.199999809265137,4.800000190734863,1.5,7.5,0.7200000286102295,0.41999998688697815,37.5,9.600000381469727,15.0,3.75,150.0,75.0,15.0,7.5,225.0,225.0,112.5,75.0,37.5,75.0,37.5,75.0,450.0,37.5,75.0,150.0,37.5,75.0,150.0,37.5,45.0,45.0,22.5,45.0,22.5,30.0,15.0,2.549999952316284,3.5999999046325684,3.75,6.0,0.8999999761581421,7.5,9.0,6.0,1.2000000476837158,0.6000000238418579,2.700000047683716,30.0,1.7999999523162842,30.0,0.44999998807907104,0.0,3.75,3.0861001014709473,3.0,2.8499999046325684,7.5,6.449999809265137,2.4000000953674316,3.0,1.2000000476837158,1.2300000190734863,0.5316359996795654,0.8399999737739563,9.600000381469727,10.692000389099121,0.0,7.5,7.5,1.2000000476837158,0.6000000238418579,3.75,30.0,30.0,30.0,15.0,9.0,4.5,NaN,36.0,9.0,9.0,4.5,4.5,4.5,2.25,36.0,36.0,18.0,27.0,7.5,3.75,13.5,11.25,5.625,5.625,2.8125,1.9500000476837158,0.44999998807907104,1.350000023841858,0.30000001192092896,0.36000001430511475,1.0199999809265137,0.0,1.0199999809265137,0.0,0.0,0.0,0.18000000715255737,0.335999995470047,0.30000001192092896,2.25,1.875,0.09000000357627869,0.1889999955892563,1.875,1.7999999523162842,3.5999999046325684,8.880000114440918,0.0,3.5999999046325684,1.2000000476837158,0.23999999463558197,0.6029999852180481,0.9900000095367432,0.9599999785423279,2.4000000953674316,0.8999999761581421,0.5400000214576721,4.5,12.75,12.75,0.41999998688697815,1.8600000143051147,3.299999952316284,6.599999904632568,3.059999942779541,3.5999999046325684,3.5999999046325684,2.700000047683716,3.5999999046325684,3.5999999046325684,3.5999999046325684,2.700000047683716,0.6000000238418579,0.30000001192092896,0.44999998807907104,18.0,18.0,4.5,6.0,22.5,6.0,0.09000000357627869,1.7999999523162842,0.23999999463558197,1.7999999523162842,1.6649999618530273,0.75,18.0,0.8999999761581421,6.900000095367432,7.5,7.5,6.75,12.0,10.5,12.0,45.0,3.5999999046325684,5.699999809265137,0.30000001192092896,3.0,3.0,2.0999999046325684,9.0,1.2000000476837158,0.6000000238418579,0.0,0.0,1.2000000476837158,0.0,10.800000190734863,10.800000190734863,0.0,0.0,0.6000000238418579,0.0,0.0,0.0,4.5,6.0,12.0,6.0,2.25,180.0,90.0,90.0,45.0,24.0,4.800000190734863,2.4000000953674316,1.2000000476837158,0.6000000238418579,12.0,30.0,45.0,30.0,30.0,1.7999999523162842,1.7999999523162842,0.8999999761581421,15.0,30.0,15.0,30.0,6.0,6.0,3.0,1.2000000476837158,0.6000000238418579,360.0,180.0,30.0,30.0,30.0,6.0,15.0,42.0,42.0,42.0,504.0,252.0,21.0,42.0,45.0,45.0,13.5,6.75,3.75,1.875,540.0,270.0,22.5,90.0,540.0,270.0,45.0,3.5999999046325684,3.5999999046325684,1.7999999523162842,1.7999999523162842,45.0,45.0,22.5,22.5,36.0,36.0,18.0,18.0,15.0,30.0,7.199999809265137,90.0,0.5099999904632568,0.38999998569488525,0.0,0.8999999761581421,180.0,1800.0,900.0,90.0,24.0,13.199999809265137,13.199999809265137,6.599999904632568,6.599999904632568,240.0,120.0,12.0,13.199999809265137,13.199999809265137,6.599999904632568,6.599999904632568,NaN,NaN,NaN,0.0,NaN,NaN,4.5,3.0,24.0,45.0,45.0,24.0,0.5400000214576721,0.0,0.36000001430511475,0.0,1.2000000476837158,0.6000000238418579,3.0,2.3399999141693115,2.3399999141693115,2.3399999141693115,3.0,0.7200000286102295,5.460000038146973,1.649999976158142,6.900000095367432,1.559999942779541,0.5791500210762024,7.199999809265137,0.8399999737739563,1.3650000095367432,3.0,0.8399999737739563,2.924999952316284,2.4000000953674316,9.75,11.699999809265137,11.699999809265137,3.299999952316284,3.5999999046325684,5.699999809265137,12.0,1.559999942779541,7.199999809265137,1.2480000257492065,1.3650000095367432,6.300000190734863,6.239999771118164,4.679999828338623,3.75,7.019999980926514,0.44999998807907104,0.7799999713897705,4.679999828338623,5.400000095367432,10.800000190734863,3.0,3.375,18.486000061035156,5.849999904632568,0.38999998569488525,13.274999618530273,3.8399999141693115,18.0,9.600000381469727,18.0,0.30000001192092896,0.6000000238418579,3.75,9.0,90.0,12.0,0.15000000596046448,2.549999952316284,2.25,0.8999999761581421,3.450000047683716,1.7100000381469727,1.5839999914169312,1.7999999523162842,1.5,1.5,2.4000000953674316,1.2000000476837158,12.149999618530273,3.5999999046325684,12.149999618530273,1.9500000476837158,1.7999999523162842,0.36000001430511475,18.0,7.5,7.5,7.5,18.0,18.0,6.0,0.8399999737739563,2.609999895095825,6.599999904632568,2.549999952316284,5.400000095367432,6.0,2.700000047683716,5.25,1.2000000476837158,5.760000228881836,12.0,9.107999801635742,9.107999801635742,13.199999809265137,0.0,13.199999809265137,12.0,150.0,15.0,75.0,30.0,0.41999998688697815,5.625,36.0,39.0,45.0,13.5,18.0,13.199999809265137],"modality":[1,1,1,1,1,11,3,1,3,3,1,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,1,1,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,15,3,15,15,15,15,15,15,15,15,15,3,3,3,3,15,3,15,15,15,15,15,15,15,15,15,15,15,15,15,1,3,3,3,1,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,15,15,1,1,3,1,1,1,1,1,1,3,3,9,3,3,3,9,9,11,11,11,11,1,9,1,3,3,3,9,13,1,1,1,3,3,3,3,3,1,1,3,3,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,3,1,1,1,1,1,1,1,3,1,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,11,11,11,11,3,3,3,11,11,11,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,1,1,1,1,11,11,11,11,11,9,9,9,9,11,11,11,11,11,11,11,15,15,1,3,1,1,3,3,1,3,3,3,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,1,3,1,3,3,3,1,1,1,3,11,1,1,1,1,3,1,1,1,1,1,1,1,7,7,7,1,1,1,1,11,11,11,11,11,11,7,1,1,1,3,1,3,1,1,1,1,1,1,1,1,1,3,11,11,11,11,1,15,15,3,11,11,11,1],"tools":[true,true,true,false,false,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,false,false,false,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,false,false,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,false,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,false,false,false,false,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,false,true,false,true,true,false,true,true,false,false,false,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],"jsonmode":[true,true,true,false,true,false,false,false,false,false,true,false,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,false,false,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,false,false,true,true,true,true,false,false,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,false,false,true,false,false,false,true,false,false,false,false,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],"reasoning":[true,true,true,false,true,true,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,false,false,false,false,false,true,false,false,true,true,false,false,false,true,true,false,false,false,false,false,false,false,false,true,true,true,false,false,false,true,true,false,true,true,true,true,true,false,false,false,false,false,false,false,false,true,false,false,false,false,true,false,false,false,false,false,false,true,true,true,true,true,true,false,false,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,false,false,true,false,true,false,true,true,true,true,true,true,false,false,false,false,true,true,false,true,true,false,true,true,false,true,true,true,false,false,false,false,true,true,true,false,true,false,true,false,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,false,false,false,true,true,true,true,true,false,false,false,false,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],"moderated":[false,false,false,false,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,true,true,false,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,true,true,false,false,false,false,true,true,false,false],"created":[1771881306,1783443095,1783443096,1738696718,1763758276,1764696672,1733437363,1733437237,1761950332,1733436303,1729555200,1710288000,1781007515,1781007515,1760547638,1760547638,1747931245,1754411591,1754411591,1764010580,1764010580,1770219050,1770219050,1776351100,1778613011,1776351100,1779905091,1779913703,1779905091,1784912544,1784912546,1784912544,1747930371,1759161676,1759161676,1771342990,1771342990,1782843083,1782843083,1775058318,1746478885,1751300903,1766504997,1766505011,1786552176,1786550701,1773157231,1772131107,1753205056,1752094966,1741894342,1724976000,1724976000,1734158152,1781723748,1763071233,1735241320,1742824755,1755779628,1737381095,1748455170,1737663169,1758548275,1764594642,1759150481,1777000666,1785478908,1777000679,1786549364,1786680361,1750172488,1759870431,1753200276,1753200276,1750172488,1750169544,1749137257,1746578513,1750169544,1765987078,1765987078,1781754054,1763653797,1781754065,1772119558,1778168828,1782837225,1772512673,1778168828,1771509627,1772045923,1771509627,1779193800,1784646726,1784646726,1779193800,1784646733,1784646733,1786640581,1786640581,1720828800,1741902625,1741756359,1741905510,1747776824,1775227989,1775227989,1775148486,1775148486,1774907255,1774907286,1688256000,1760927695,1777577071,1772636275,1776948238,1776795886,1784818580,1778247440,1783714590,1774649310,1783714589,1786470519,1784554658,1721692800,1721692800,1727222400,1727222400,1733506137,1743881822,1743881519,1745975193,1786302394,1784215741,1785959287,1736489872,1713225600,1736915462,1750200414,1761252093,1769177239,1766454997,1770908502,1773836697,1780245374,1780245374,1754079630,1764681735,1764681560,1764681654,1708905600,1731978415,1764624472,1746627341,1777570439,1755095639,1721347200,1739803239,1738255409,1773695685,1742238937,1750443016,1713312000,1761835144,1752263252,1757021147,1762440622,1769487076,1776699402,1781266361,1781266361,1784215858,1751910002,1751910858,1782312964,1780937140,1723766400,1723939200,1756235463,1756236182,1765731275,1765731275,1777393095,1773245239,1773245239,1780551208,1780551208,1780551208,1780581864,1786452751,1786452751,1761675565,1757106807,1685232000,1706140800,1693180800,1695859200,1685232000,1685232000,1712620800,1706140800,1712620800,1744651385,1744651381,1744651381,1744651369,1744651369,1744651385,1715558400,1715558400,1722902400,1732127594,1721260800,1721260800,1721260800,1715558400,1754587413,1758643403,1760447986,1760624583,1754587407,1754587407,1754587402,1754587402,1759776663,1759776663,1763060305,1763060298,1764878934,1763057820,1763060305,1765389775,1765389783,1768409315,1765389780,1765389780,1765389775,1771959164,1772734352,1776797528,1773748178,1773748178,1773748187,1773748187,1772734366,1772734366,1772734352,1777051893,1777051896,1777051896,1777051893,1783590864,1783590867,1783590867,1783590864,1783590850,1783590854,1783590854,1783590850,1783590857,1783590861,1783590861,1783590857,1754587413,1768862569,1768859419,1778000212,1754414231,1754414229,1754414229,1761752836,1734459999,1742423211,1742423211,1734459999,1744823457,1738351721,1739372611,1739372611,1738351721,1749598352,1749598352,1744823457,1744820942,1744824212,1744824212,1744820942,1699401600,1784311165,1764903653,1769917427,1781371647,1776747900,1778597029,1738013808,1741311246,1741312423,1761854366,1741313308,1784652683,1784652683,1783002429,1783002429,1726704000,1729036800,1731368400,1738409840,1757347599,1757347599,1738410311,1745876478,1745875757,1753119555,1753449557,1745878604,1753806965,1756399192,1745875945,1745876632,1753230546,1753972379,1758115536,1770164101,1758662707,1758662808,1770671901,1757612213,1757612284,1758668687,1758668690,1759794476,1759794479,1761231332,1760463308,1760463746,1772053789,1772053810,1772053822,1771223018,1773152396,1772053776,1771229416,1777261368,1777255064,1777260255,1777261362,1777260242,1775133557,1785190561,1779376861,1780491783,1786551702,1786722910,1785731612,1774026965,1741812813,1758891572,1765213560,1782276303,1786410129,1723507200,1724803200,1734535928,1769728337,1779985069,1751987664,1783344048,1776878150,1758931878,1727654400,1741636566,1731103448,1784325956,1785443117,1784325956,1689984000,1769481200,1786371636,1769003823,1774979019,1774979158,1777591821,1783523154,1786548957,1779298123,1776874269,1776874273,1753471347,1753471258,1754922288,1759235576,1765207462,1766378014,1768833913,1770829182,1773583573,1775578025,1781631930,1781631930,1781631930,1787086655,1775061458,1781029944,1777318492,1776795361,1777318368,1785606009,1777318398,1777318451,1777318428,1777318334,1777318471,1783519360,1787151053],"ranks":[[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,19,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[17,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,17,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[11,10,12,0,0,0,14,0,0,0,13,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,18,0,18,0,0,13,8,10,0,9,20],[0,0,0,0,0,0,0,0,0,0,0,0],[18,13,17,0,0,0,6,19,18,0,19,17],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,3,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[9,6,4,2,1,4,2,2,2,1,1,1],[2,2,1,1,2,2,1,1,1,2,2,2],[7,7,8,7,16,15,9,0,8,4,17,11],[12,19,14,0,0,0,0,0,0,12,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,13,14,17,15,12,11,18,12,15],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,5,8,8,10,9,15,6,6,7],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,19,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,16,16,16,11,3,4,7,12,10,7,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,14,6,0,18,6,19,0,18,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,13,0,0,14,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,12,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,18,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[6,1,0,0,0,0,0,0,0,0,0,18],[0,0,0,0,0,0,0,0,0,0,0,0],[13,12,10,12,13,11,16,17,16,14,8,12],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,6],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,8,10,19,0,14,17,9,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,15,9,16,0,0,6,7,14,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,20,0,0,0],[0,0,0,0,4,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[8,8,11,0,0,18,11,0,0,0,0,10],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,17,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,12,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[10,15,13,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[15,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,12,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,17,0,0,11,0,0,16,14],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,17,0,5,0,13,0,0,0,13],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,19,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,18,20,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,7,0,0,0,0,0,0,19],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[4,3,3,3,3,1,5,4,4,13,5,5],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[16,20,15,20,0,9,20,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[20,0,20,19,0,0,0,20,0,0,15,4],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,11,0,6,0,3,0,15,3,3],[0,0,0,0,0,0,0,18,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,5,0,0,0,0,0,0,8],[0,0,0,0,0,0,19,0,0,0,0,0],[0,0,0,0,0,0,0,16,7,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,17,9,0,0,0,0,0,13,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[5,4,2,4,0,14,8,15,9,20,4,9],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,14,7,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[19,0,0,0,0,10,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[1,11,5,9,15,0,7,10,3,5,20,0],[14,0,0,0,0,0,0,0,0,8,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,16,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[3,5,6,6,20,7,3,5,5,11,11,16],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0]],"categories":["programming","technology","science","academia","translation","legal","finance","health","trivia","roleplay","marketing","marketing/seo"],"bind_ctx":[128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,0,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000,128000000]}
|