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/lib/launch.js CHANGED
@@ -1,13 +1,15 @@
1
1
  /**
2
- * `npx openzoo claude [args...]` — launch Claude Code (or any Anthropic-shaped
3
- * harness) already pointed at the local zoo, so its inference is paid per turn
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: ANTHROPIC_BASE_URL is an official env var
7
- * Claude Code reads at startup. No DNS games, no TLS interception — the proxy
8
- * serves POST /v1/messages (see lib/anthropic.js) and this just spawns the
9
- * harness with the two env vars set. The proxy must already be running
10
- * (`npx openzoo` in another terminal); we check first and say so if not.
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
- /** Resolve the Claude Code TERMINAL CLI. */
38
- function resolveClaudeCli() {
39
- for (const dir of (process.env.PATH || '').split(path.delimiter)) {
40
- const f = path.join(dir, 'claude' + (process.platform === 'win32' ? '.cmd' : ''));
41
- try { fs.accessSync(f, fs.constants.X_OK); return f; } catch { /* next */ }
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
- * `npx openzoo claude [dir] [--terminal]` launch Claude on the zoo.
48
- * DEFAULT is the desktop app; `--terminal` (or `-t`) runs the Claude Code CLI.
49
- * Both get ANTHROPIC_BASE_URL so inference pays x402.
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 = { ...process.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 cli = resolveClaudeCli();
210
- if (!cli) { console.error('openzoo: `claude` CLI not found on PATH — install Claude Code, or drop --terminal for the desktop app'); process.exit(1); }
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 Claude Code session routes through the zoo');
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(cli, rest, { stdio: 'inherit', env });
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 = { ...process.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]}