webforai 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +22 -0
  2. package/dist/bin.js +1895 -74
  3. package/dist/cjs/extract-mdast.js +58 -0
  4. package/dist/cjs/extractors/index.js +5 -0
  5. package/dist/cjs/extractors/lib/block-features.js +465 -0
  6. package/dist/cjs/extractors/lib/block-model.generated.js +45 -0
  7. package/dist/cjs/extractors/lib/block-model.js +72 -0
  8. package/dist/cjs/extractors/lib/blocks.js +212 -0
  9. package/dist/cjs/extractors/lib/code-tabs.js +191 -0
  10. package/dist/cjs/extractors/lib/constants.js +1 -1
  11. package/dist/cjs/extractors/lib/layout-tables.js +123 -0
  12. package/dist/cjs/extractors/lib/sanitize.js +144 -28
  13. package/dist/cjs/extractors/lib/takumi-signal.js +76 -0
  14. package/dist/cjs/extractors/lib/ui-chrome.js +7 -0
  15. package/dist/cjs/extractors/presets/auto.js +3 -3
  16. package/dist/cjs/extractors/presets/kiwame.js +231 -0
  17. package/dist/cjs/extractors/presets/takumi.js +34 -3
  18. package/dist/cjs/html-to-markdown.js +58 -4
  19. package/dist/cjs/html-to-mdast.js +2 -2
  20. package/dist/cjs/index.js +4 -0
  21. package/dist/cjs/mdast-handlers/custom-code-handler.js +16 -4
  22. package/dist/cjs/mdast-handlers/custom-div-handler.js +3 -3
  23. package/dist/cjs/mdast-handlers/custom-img-handler.js +10 -1
  24. package/dist/cjs/mdast-handlers/custom-table-handler.js +18 -1
  25. package/dist/cjs/mdast-handlers/table-cell-flatten.js +195 -0
  26. package/dist/cjs/mdast-handlers/twoslash.js +71 -0
  27. package/dist/cjs/metadata/index.js +4 -3
  28. package/dist/cjs/utils/hast-fast.js +1 -1
  29. package/dist/cjs/utils/parse-html.js +113 -0
  30. package/dist/cjs/utils/pre-text.js +104 -0
  31. package/dist/extract-mdast.js +58 -0
  32. package/dist/extractors/index.js +3 -0
  33. package/dist/extractors/lib/block-features.js +437 -0
  34. package/dist/extractors/lib/block-model.generated.js +21 -0
  35. package/dist/extractors/lib/block-model.js +48 -0
  36. package/dist/extractors/lib/blocks.js +185 -0
  37. package/dist/extractors/lib/code-tabs.js +168 -0
  38. package/dist/extractors/lib/constants.js +1 -1
  39. package/dist/extractors/lib/layout-tables.js +99 -0
  40. package/dist/extractors/lib/sanitize.js +142 -28
  41. package/dist/extractors/lib/takumi-signal.js +53 -0
  42. package/dist/extractors/lib/ui-chrome.js +5 -0
  43. package/dist/extractors/presets/auto.js +3 -3
  44. package/dist/extractors/presets/kiwame.js +206 -0
  45. package/dist/extractors/presets/takumi.js +34 -3
  46. package/dist/html-to-markdown.js +57 -4
  47. package/dist/html-to-mdast.js +2 -2
  48. package/dist/index.js +4 -0
  49. package/dist/mdast-handlers/custom-code-handler.js +15 -4
  50. package/dist/mdast-handlers/custom-div-handler.js +4 -4
  51. package/dist/mdast-handlers/custom-img-handler.js +10 -1
  52. package/dist/mdast-handlers/custom-table-handler.js +19 -2
  53. package/dist/mdast-handlers/table-cell-flatten.js +170 -0
  54. package/dist/mdast-handlers/twoslash.js +48 -0
  55. package/dist/metadata/index.js +4 -3
  56. package/dist/types/cli/commands/jobs/options.d.ts +2 -2
  57. package/dist/types/cli/commands/jobs/options.js.map +1 -1
  58. package/dist/types/cli/commands/webforai/options.js.map +1 -1
  59. package/dist/types/cli/commands/webforai/run.js.map +1 -1
  60. package/dist/types/cli/constants.d.ts +3 -1
  61. package/dist/types/cli/constants.js.map +1 -1
  62. package/dist/types/extract-mdast.js.map +1 -1
  63. package/dist/types/extractors/index.d.ts +1 -0
  64. package/dist/types/extractors/index.js.map +1 -1
  65. package/dist/types/extractors/lib/block-features.d.ts +43 -0
  66. package/dist/types/extractors/lib/block-features.js.map +1 -0
  67. package/dist/types/extractors/lib/block-model.d.ts +28 -0
  68. package/dist/types/extractors/lib/block-model.generated.d.ts +5 -0
  69. package/dist/types/extractors/lib/block-model.generated.js.map +1 -0
  70. package/dist/types/extractors/lib/block-model.js.map +1 -0
  71. package/dist/types/extractors/lib/blocks.d.ts +53 -0
  72. package/dist/types/extractors/lib/blocks.js.map +1 -0
  73. package/dist/types/extractors/lib/code-tabs.d.ts +30 -0
  74. package/dist/types/extractors/lib/code-tabs.js.map +1 -0
  75. package/dist/types/extractors/lib/constants.js.map +1 -1
  76. package/dist/types/extractors/lib/layout-tables.d.ts +17 -0
  77. package/dist/types/extractors/lib/layout-tables.js.map +1 -0
  78. package/dist/types/extractors/lib/sanitize.d.ts +33 -3
  79. package/dist/types/extractors/lib/sanitize.js.map +1 -1
  80. package/dist/types/extractors/lib/takumi-signal.d.ts +12 -0
  81. package/dist/types/extractors/lib/takumi-signal.js.map +1 -0
  82. package/dist/types/extractors/lib/ui-chrome.d.ts +8 -0
  83. package/dist/types/extractors/lib/ui-chrome.js.map +1 -1
  84. package/dist/types/extractors/presets/auto.d.ts +6 -1
  85. package/dist/types/extractors/presets/auto.js.map +1 -1
  86. package/dist/types/extractors/presets/kiwame.d.ts +31 -0
  87. package/dist/types/extractors/presets/kiwame.js.map +1 -0
  88. package/dist/types/extractors/presets/takumi.js.map +1 -1
  89. package/dist/types/html-to-markdown.d.ts +9 -0
  90. package/dist/types/html-to-markdown.js.map +1 -1
  91. package/dist/types/html-to-mdast.js.map +1 -1
  92. package/dist/types/index.d.ts +1 -1
  93. package/dist/types/index.js.map +1 -1
  94. package/dist/types/mdast-handlers/custom-code-handler.d.ts +7 -0
  95. package/dist/types/mdast-handlers/custom-code-handler.js.map +1 -1
  96. package/dist/types/mdast-handlers/custom-div-handler.js.map +1 -1
  97. package/dist/types/mdast-handlers/custom-img-handler.js.map +1 -1
  98. package/dist/types/mdast-handlers/custom-table-handler.js.map +1 -1
  99. package/dist/types/mdast-handlers/table-cell-flatten.d.ts +18 -0
  100. package/dist/types/mdast-handlers/table-cell-flatten.js.map +1 -0
  101. package/dist/types/mdast-handlers/twoslash.d.ts +14 -0
  102. package/dist/types/mdast-handlers/twoslash.js.map +1 -0
  103. package/dist/types/metadata/index.js.map +1 -1
  104. package/dist/types/utils/hast-fast.d.ts +1 -1
  105. package/dist/types/utils/hast-fast.js.map +1 -1
  106. package/dist/types/utils/parse-html.d.ts +33 -0
  107. package/dist/types/utils/parse-html.js.map +1 -0
  108. package/dist/types/utils/pre-text.d.ts +12 -0
  109. package/dist/types/utils/pre-text.js.map +1 -0
  110. package/dist/utils/hast-fast.js +1 -1
  111. package/dist/utils/parse-html.js +87 -0
  112. package/dist/utils/pre-text.js +81 -0
  113. package/package.json +3 -1
package/dist/bin.js CHANGED
@@ -6,7 +6,7 @@ import { CommanderError, program } from "commander";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "webforai",
9
- version: "4.0.0",
9
+ version: "4.1.0",
10
10
  description: "Convert web pages and local HTML to clean, LLM-ready Markdown: library, CLI (npx webforai) and hosted-API client.",
11
11
  author: "inaridiy",
12
12
  license: "Apache-2.0",
@@ -132,6 +132,7 @@ var package_default = {
132
132
  boxen: "^8.0.1",
133
133
  commander: "^12.1.0",
134
134
  "hast-util-from-html": "^2.0.3",
135
+ "hast-util-from-parse5": "^8.0.1",
135
136
  "hast-util-select": "^6.0.2",
136
137
  "hast-util-to-html": "^9.0.3",
137
138
  "hast-util-to-mdast": "^10.1.0",
@@ -141,6 +142,7 @@ var package_default = {
141
142
  "mdast-util-gfm": "^3.0.0",
142
143
  "mdast-util-math": "^3.0.0",
143
144
  "mdast-util-to-markdown": "^2.1.0",
145
+ parse5: "^7.1.2",
144
146
  picocolors: "^1.0.1",
145
147
  "trim-trailing-lines": "^2.1.0",
146
148
  "unist-util-filter": "^5.0.1"
@@ -376,7 +378,8 @@ import fs3 from "node:fs";
376
378
  var DEFAULT_PATH = "https://example.com";
377
379
  var LOADERS = ["fetch", "playwright", "platform"];
378
380
  var MODES = ["default", "ai"];
379
- var EXTRACTORS = ["auto", "takumi", "minimal", "none"];
381
+ var EXTRACTORS = ["auto", "kiwame", "takumi", "minimal", "none"];
382
+ var PLATFORM_EXTRACTORS = ["auto", "takumi", "minimal", "none"];
380
383
  var API_KEY_ENV = "WEBFORAI_API_KEY";
381
384
  var PLATFORM_URL_ENV = "WEBFORAI_PLATFORM_URL";
382
385
 
@@ -527,6 +530,9 @@ var resolveRunOptions = (source, flags, env = process.env) => {
527
530
  respectRobotsTxt: flags.respectRobots ?? false
528
531
  };
529
532
  if (resolved.loader === "platform") {
533
+ if (resolved.extractor === "kiwame") {
534
+ throw new UsageError("--extractor kiwame is only available for local conversion");
535
+ }
530
536
  applyPlatformFields(resolved, flags, env);
531
537
  } else if (flags.screenshot) {
532
538
  throw new UsageError("--screenshot is only available with the platform loader (browser engines)");
@@ -620,7 +626,7 @@ var resolveJobOptions = (kind, sources, flags, env = process.env, readFile = def
620
626
  outputDir: flags.output,
621
627
  engine: flags.engine ? oneOf2("engine", flags.engine, REQUESTED_ENGINES) : void 0,
622
628
  region: flags.region ? oneOf2("region", flags.region, REGIONS) : void 0,
623
- extractor: flags.extractor ? oneOf2("extractor", flags.extractor, EXTRACTORS) : "auto",
629
+ extractor: flags.extractor ? oneOf2("extractor", flags.extractor, PLATFORM_EXTRACTORS) : "auto",
624
630
  frontmatter: flags.frontmatter ?? false,
625
631
  respectRobotsTxt: flags.respectRobots,
626
632
  apiKey,
@@ -1031,8 +1037,8 @@ npx webforai https://example.com --json # machine-readable envelope
1031
1037
  \`npx playwright install chromium\`). \`platform\` uses the hosted API (below).
1032
1038
  - \`-m, --mode <default|ai>\` \u2014 \`ai\` strips links/tables/images down to plain text
1033
1039
  (local conversion only).
1034
- - \`--extractor <auto|takumi|minimal|none>\` \u2014 main-content extraction preset
1035
- (\`none\` converts the whole page).
1040
+ - \`--extractor <auto|kiwame|takumi|minimal|none>\` \u2014 main-content extraction preset
1041
+ (\`kiwame\` is the learned block classifier, \`takumi\` the heuristic; \`none\` converts the whole page).
1036
1042
  - \`--frontmatter\` \u2014 prepend YAML front matter (title, author, canonical URL, ...).
1037
1043
  - \`--json\` \u2014 print a JSON envelope to stdout instead of raw Markdown.
1038
1044
  - \`--engine <auto|fetch|browser|proxy-fetch|proxy-browser>\` \u2014 platform acquisition engine
@@ -1344,11 +1350,89 @@ var selectLoader = async () => {
1344
1350
  import fs9 from "node:fs/promises";
1345
1351
  import path5 from "node:path";
1346
1352
 
1347
- // src/html-to-markdown.ts
1348
- import { fromHtml as fromHtml2 } from "hast-util-from-html";
1353
+ // src/utils/parse-html.ts
1354
+ import { fromParse5 } from "hast-util-from-parse5";
1355
+ import { parse, parseFragment } from "parse5";
1356
+ var MAX_ELEMENT_DEPTH = 256;
1357
+ var isParent = (node) => "childNodes" in node;
1358
+ var LINE_ELEMENTS = /* @__PURE__ */ new Set([
1359
+ "p",
1360
+ "div",
1361
+ "li",
1362
+ "tr",
1363
+ "td",
1364
+ "th",
1365
+ "h1",
1366
+ "h2",
1367
+ "h3",
1368
+ "h4",
1369
+ "h5",
1370
+ "h6",
1371
+ "br",
1372
+ "section",
1373
+ "article",
1374
+ "pre",
1375
+ "blockquote"
1376
+ ]);
1377
+ var textNode = (value, parentNode) => ({ nodeName: "#text", value, parentNode });
1378
+ var coalesceText = (parent) => {
1379
+ const merged = [];
1380
+ for (const child of parent.childNodes) {
1381
+ const previous = merged.at(-1);
1382
+ if (child.nodeName === "#text" && previous?.nodeName === "#text") {
1383
+ previous.value += child.value;
1384
+ } else {
1385
+ merged.push(child);
1386
+ }
1387
+ }
1388
+ parent.childNodes = merged;
1389
+ };
1390
+ var flattenDeep = (root, maxDepth) => {
1391
+ const stack = [[root, 0]];
1392
+ while (stack.length > 0) {
1393
+ const [parent, depth] = stack.pop();
1394
+ const children = parent.childNodes;
1395
+ let unwrapped = false;
1396
+ for (let index = 0; index < children.length; index++) {
1397
+ const child = children[index];
1398
+ if (!isParent(child)) {
1399
+ continue;
1400
+ }
1401
+ if (depth + 1 > maxDepth && "tagName" in child) {
1402
+ const replacement = [...child.childNodes];
1403
+ if (LINE_ELEMENTS.has(child.tagName)) {
1404
+ replacement.unshift(textNode("\n", parent));
1405
+ replacement.push(textNode("\n", parent));
1406
+ }
1407
+ for (const node of replacement) {
1408
+ node.parentNode = parent;
1409
+ }
1410
+ children.splice(index, 1, ...replacement);
1411
+ index -= 1;
1412
+ unwrapped = true;
1413
+ continue;
1414
+ }
1415
+ stack.push([child, depth + 1]);
1416
+ }
1417
+ if (unwrapped) {
1418
+ coalesceText(parent);
1419
+ }
1420
+ }
1421
+ };
1422
+ var SCRIPT_OR_STYLE = /<(script|style)\b([^>]*)>[\s\S]*?<\/\1\s*>/gi;
1423
+ var LARGE_DOCUMENT_CHARS = 2e6;
1424
+ var stripScriptBodies = (html) => html.replace(
1425
+ SCRIPT_OR_STYLE,
1426
+ (match, tag, attributes) => /application\/ld\+json/i.test(attributes) ? match : `<${tag}${attributes}></${tag}>`
1427
+ );
1428
+ var parseHtml = (html, options = {}) => {
1429
+ const source = html.length > LARGE_DOCUMENT_CHARS ? stripScriptBodies(html) : html;
1430
+ const document2 = options.fragment ? parseFragment(source, { scriptingEnabled: false }) : parse(source, { scriptingEnabled: false });
1431
+ flattenDeep(document2, MAX_ELEMENT_DEPTH);
1432
+ return fromParse5(document2);
1433
+ };
1349
1434
 
1350
1435
  // src/html-to-mdast.ts
1351
- import { fromHtml } from "hast-util-from-html";
1352
1436
  import { toMdast } from "hast-util-to-mdast";
1353
1437
 
1354
1438
  // src/extract-mdast.ts
@@ -1363,6 +1447,61 @@ var emptyDeclarationFilter = (node) => {
1363
1447
  }
1364
1448
  return true;
1365
1449
  };
1450
+ var trimEdge = (children, edge) => {
1451
+ const index = edge === "start" ? 0 : children.length - 1;
1452
+ const node = children[index];
1453
+ if (node?.type !== "text") {
1454
+ return children;
1455
+ }
1456
+ const value = edge === "start" ? node.value.trimStart() : node.value.trimEnd();
1457
+ const copy = [...children];
1458
+ if (value.length === 0) {
1459
+ copy.splice(index, 1);
1460
+ } else {
1461
+ copy[index] = { ...node, value };
1462
+ }
1463
+ return copy;
1464
+ };
1465
+ var liftDisplayMath = (paragraph2) => {
1466
+ if (!paragraph2.children.some((child) => child.type === "math")) {
1467
+ return void 0;
1468
+ }
1469
+ const out = [];
1470
+ let run = [];
1471
+ const flush = () => {
1472
+ const trimmed = trimEdge(trimEdge(run, "start"), "end");
1473
+ if (trimmed.length > 0) {
1474
+ out.push({ ...paragraph2, children: trimmed });
1475
+ }
1476
+ run = [];
1477
+ };
1478
+ for (const child of paragraph2.children) {
1479
+ if (child.type === "math") {
1480
+ flush();
1481
+ out.push(child);
1482
+ } else {
1483
+ run.push(child);
1484
+ }
1485
+ }
1486
+ flush();
1487
+ return out;
1488
+ };
1489
+ var liftDisplayMathIn = (node) => {
1490
+ if (!("children" in node)) {
1491
+ return;
1492
+ }
1493
+ const parent = node;
1494
+ for (let index = 0; index < parent.children.length; index++) {
1495
+ const child = parent.children[index];
1496
+ const lifted = child.type === "paragraph" ? liftDisplayMath(child) : void 0;
1497
+ if (lifted) {
1498
+ parent.children.splice(index, 1, ...lifted);
1499
+ index += lifted.length - 1;
1500
+ continue;
1501
+ }
1502
+ liftDisplayMathIn(child);
1503
+ }
1504
+ };
1366
1505
  var extractMdast = (node) => {
1367
1506
  const extracted = filter(node, (node2) => {
1368
1507
  if (!emptyDeclarationFilter(node2)) {
@@ -1370,6 +1509,9 @@ var extractMdast = (node) => {
1370
1509
  }
1371
1510
  return true;
1372
1511
  });
1512
+ if (extracted) {
1513
+ liftDisplayMathIn(extracted);
1514
+ }
1373
1515
  return extracted;
1374
1516
  };
1375
1517
 
@@ -1379,7 +1521,7 @@ var COMMA_REGEX = /[,、,،]/g;
1379
1521
  var PARAGRAPH_LIKE = /* @__PURE__ */ new Set(["p", "pre", "li", "blockquote", "figcaption", "dd", "dt"]);
1380
1522
  var NON_PROSE_TAGS = /* @__PURE__ */ new Set(["script", "style", "noscript", "template", "svg", "math", "iframe", "object"]);
1381
1523
  var isElement = (node) => typeof node === "object" && node !== null && node.type === "element";
1382
- var isParent = (node) => typeof node === "object" && node !== null && Array.isArray(node.children);
1524
+ var isParent2 = (node) => typeof node === "object" && node !== null && Array.isArray(node.children);
1383
1525
  var classList = (element3) => {
1384
1526
  const className = element3.properties?.className;
1385
1527
  if (Array.isArray(className)) {
@@ -1414,7 +1556,7 @@ var MetricsCollector = class {
1414
1556
  elements: 0
1415
1557
  };
1416
1558
  }
1417
- if (!isParent(node)) {
1559
+ if (!isParent2(node)) {
1418
1560
  return EMPTY_METRICS;
1419
1561
  }
1420
1562
  const cached = this.#cache.get(node);
@@ -1464,7 +1606,7 @@ var MetricsCollector = class {
1464
1606
  }
1465
1607
  };
1466
1608
  var pruneInPlace = (tree, keep) => {
1467
- if (!isParent(tree)) {
1609
+ if (!isParent2(tree)) {
1468
1610
  return tree;
1469
1611
  }
1470
1612
  const stack = [tree];
@@ -1474,11 +1616,11 @@ var pruneInPlace = (tree, keep) => {
1474
1616
  let write = 0;
1475
1617
  for (let read = 0; read < children.length; read++) {
1476
1618
  const child = children[read];
1477
- if (!keep(child)) {
1619
+ if (!keep(child, parent)) {
1478
1620
  continue;
1479
1621
  }
1480
1622
  children[write++] = child;
1481
- if (isParent(child)) {
1623
+ if (isParent2(child)) {
1482
1624
  stack.push(child);
1483
1625
  }
1484
1626
  }
@@ -1493,7 +1635,7 @@ var walk = (tree, visit) => {
1493
1635
  if (visit(node, parent) === false) {
1494
1636
  continue;
1495
1637
  }
1496
- if (isParent(node)) {
1638
+ if (isParent2(node)) {
1497
1639
  for (let i = node.children.length - 1; i >= 0; i--) {
1498
1640
  stack.push({ node: node.children[i], parent: node });
1499
1641
  }
@@ -1595,6 +1737,171 @@ var isTruthyAttribute = (element3, key) => {
1595
1737
  return true;
1596
1738
  };
1597
1739
 
1740
+ // src/extractors/lib/code-tabs.ts
1741
+ var MAX_LABEL_LENGTH = 80;
1742
+ var CodeTabCollector = class {
1743
+ #groups = [];
1744
+ /** Groups whose tab list's parent is still being traversed, innermost last. */
1745
+ #open = [];
1746
+ #isHidden;
1747
+ #radioStrips = [];
1748
+ /** @param isHidden - Elements whose text a reader never sees, excluded from labels. */
1749
+ constructor(isHidden2) {
1750
+ this.#isHidden = isHidden2;
1751
+ }
1752
+ #applyRadioStrip(strip, parent) {
1753
+ const labels = strip.children.filter((child) => isElement(child) && child.tagName === "label");
1754
+ const panels = radioStripPanels(strip, parent);
1755
+ if (!panels || panels.length !== labels.length) {
1756
+ return;
1757
+ }
1758
+ panels.forEach((panel, index) => labelCode(panel, tabLabel(labels[index], this.#isHidden)));
1759
+ parent.children.splice(parent.children.indexOf(strip), 1);
1760
+ }
1761
+ /**
1762
+ * Call for every element, in document order, with its depth.
1763
+ *
1764
+ * A group only collects panels inside the tab list's parent: a page-level tab strip must not
1765
+ * lend its labels to an unrelated code switcher further down, and an inner group closes before
1766
+ * the outer group's next panel.
1767
+ */
1768
+ visit(element3, depth, parent) {
1769
+ if (isRadioTabStrip(element3)) {
1770
+ this.#radioStrips.push({ strip: element3, parent });
1771
+ return;
1772
+ }
1773
+ while (this.#open.length > 0 && depth < (this.#open.at(-1)?.depth ?? 0)) {
1774
+ this.#open.pop();
1775
+ }
1776
+ const role = stringProperty(element3, "role");
1777
+ if (role === "tablist") {
1778
+ const group2 = { tabs: [], panels: [] };
1779
+ this.#groups.push(group2);
1780
+ this.#open.push({ group: group2, depth });
1781
+ return;
1782
+ }
1783
+ const group = this.#open.at(-1)?.group;
1784
+ if (!group) {
1785
+ return;
1786
+ }
1787
+ if (role === "tab") {
1788
+ group.tabs.push(element3);
1789
+ } else if (role === "tabpanel") {
1790
+ group.panels.push(element3);
1791
+ }
1792
+ }
1793
+ /** Labels the code block of every panel whose tab could be identified. */
1794
+ apply() {
1795
+ for (const { strip, parent } of this.#radioStrips) {
1796
+ this.#applyRadioStrip(strip, parent);
1797
+ }
1798
+ for (const group of this.#groups) {
1799
+ if (group.tabs.length < 2 || group.panels.length === 0) {
1800
+ continue;
1801
+ }
1802
+ for (const [panel, tab] of matchTabs(group)) {
1803
+ labelCode(panel, tabLabel(tab, this.#isHidden));
1804
+ }
1805
+ }
1806
+ }
1807
+ };
1808
+ var radioStripPanels = (strip, parent) => {
1809
+ const index = parent.children.indexOf(strip);
1810
+ for (let cursor = index + 1; cursor < parent.children.length; cursor++) {
1811
+ const sibling = parent.children[cursor];
1812
+ if (isElement(sibling)) {
1813
+ return sibling.children.filter(isElement);
1814
+ }
1815
+ }
1816
+ return void 0;
1817
+ };
1818
+ var isRadioTabStrip = (element3) => {
1819
+ const first = element3.children.find(isElement);
1820
+ if (!(first?.tagName === "input" && stringProperty(first, "type") === "radio")) {
1821
+ return false;
1822
+ }
1823
+ let labels = 0;
1824
+ for (const child of element3.children) {
1825
+ if (!isElement(child)) {
1826
+ continue;
1827
+ }
1828
+ if (child.tagName === "label") {
1829
+ labels += 1;
1830
+ } else if (!(child.tagName === "input" && stringProperty(child, "type") === "radio")) {
1831
+ return false;
1832
+ }
1833
+ }
1834
+ return labels >= 2;
1835
+ };
1836
+ var indexById = (elements) => {
1837
+ const byId = /* @__PURE__ */ new Map();
1838
+ for (const element3 of elements) {
1839
+ const id = stringProperty(element3, "id");
1840
+ if (id) {
1841
+ byId.set(id, element3);
1842
+ }
1843
+ }
1844
+ return byId;
1845
+ };
1846
+ var matchTabs = ({ tabs, panels }) => {
1847
+ const tabById = indexById(tabs);
1848
+ const panelById = indexById(panels);
1849
+ const tabOf = /* @__PURE__ */ new Map();
1850
+ for (const panel of panels) {
1851
+ const tab = tabById.get(stringProperty(panel, "ariaLabelledBy") ?? "");
1852
+ if (tab) {
1853
+ tabOf.set(panel, tab);
1854
+ }
1855
+ }
1856
+ for (const tab of tabs) {
1857
+ const panel = panelById.get(stringProperty(tab, "ariaControls") ?? "");
1858
+ if (panel && !tabOf.has(panel)) {
1859
+ tabOf.set(panel, tab);
1860
+ }
1861
+ }
1862
+ if (tabOf.size === 0 && tabs.length === panels.length) {
1863
+ panels.forEach((panel, index) => tabOf.set(panel, tabs[index]));
1864
+ }
1865
+ return tabOf;
1866
+ };
1867
+ var tabLabel = (tab, isHidden2) => {
1868
+ const label = (textOf(tab, isHidden2) || stringProperty(tab, "dataTitle") || "").replace(/\s+/g, " ").trim();
1869
+ return label.length > 0 && label.length <= MAX_LABEL_LENGTH ? label : void 0;
1870
+ };
1871
+ var labelCode = (panel, label) => {
1872
+ if (!label) {
1873
+ return;
1874
+ }
1875
+ const blocks = [];
1876
+ collectPre(panel, blocks);
1877
+ if (blocks.length === 1 && stringProperty(blocks[0], "dataTitle") === void 0) {
1878
+ blocks[0].properties.dataTitle = label;
1879
+ }
1880
+ };
1881
+ var collectPre = (element3, into) => {
1882
+ for (const child of element3.children) {
1883
+ if (!isElement(child) || into.length > 1) {
1884
+ continue;
1885
+ }
1886
+ if (child.tagName === "pre") {
1887
+ into.push(child);
1888
+ continue;
1889
+ }
1890
+ collectPre(child, into);
1891
+ }
1892
+ };
1893
+ var textOf = (element3, isHidden2) => {
1894
+ let text6 = "";
1895
+ for (const child of element3.children) {
1896
+ if (child.type === "text") {
1897
+ text6 += child.value;
1898
+ } else if (isElement(child) && !isHidden2(child)) {
1899
+ text6 += textOf(child, isHidden2);
1900
+ }
1901
+ }
1902
+ return text6;
1903
+ };
1904
+
1598
1905
  // src/extractors/lib/constants.ts
1599
1906
  var REGEXPS = {
1600
1907
  /**
@@ -1605,7 +1912,7 @@ var REGEXPS = {
1605
1912
  * `class="post-header"`), so matching them here deletes the page's headings. The landmark
1606
1913
  * versions of those elements are handled structurally instead.
1607
1914
  */
1608
- unlikelyCandidates: /-ad-|ai2html|banner|breadcrumb|combx|comment(?!ary)|community|cover-wrap|disqus|gdpr|legends|menu|related|remark|replies|rss|shoutbox|sidebar|site-index|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote|speechify-ignore|avatar|subscribe|newsletter|paywall|consent|cookie|toolbar|masthead|promo|share|sharing|widget|tooltip|dropdown|modal|overlay|backdrop|carousel|announcement|notification|toast|skip-link|screen-reader|visually-hidden|sr-only/i,
1915
+ unlikelyCandidates: /-ad-|ai2html|banner|breadcrumb|combx|comment(?!ary)|community|cover-wrap|disqus|gdpr|legends|menu|related|remark|replies|rss|shoutbox|sidebar|site-index|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote|speechify-ignore|avatar|subscribe|newsletter|paywall|consent|cookie|toolbar|masthead|promo|share|sharing|widget|tooltip|dropdown|modal|overlay|backdrop|carousel|announcement|notification|toast|skip-link|screen-reader|(?<!not-)visually-hidden|(?<!not-)sr-only/i,
1609
1916
  /** Rescues containers whose class merely happens to contain an unlikely substring. */
1610
1917
  okMaybeItsaCandidate: /and|article|body|column|content|main|shadow|code|post|entry|story|markdown|prose|doc/i,
1611
1918
  /** Very high-confidence boilerplate, not rescued by the clause above. */
@@ -1823,26 +2130,43 @@ var isUiChromeText = (text6) => {
1823
2130
  }
1824
2131
  return UI_PHRASES.has(normalized);
1825
2132
  };
2133
+ var CONSENT_PLACEHOLDER = /^(this content (isn['’]?t|is not) (visible|available) (due to|because of) your (cookie|privacy) (preferences|settings)|we need your (consent|permission) to load|to (view|see|load) this (content|embed|video|post)[, ]+(please )?(enable|accept|allow|update)|(please )?(accept|allow|enable) (all |marketing |functional )?cookies to (view|see|load|watch)|このコンテンツを表示するには.{0,30}(cookie|クッキー|同意|許可))/i;
2134
+ var MAX_CONSENT_PLACEHOLDER_LENGTH = 400;
2135
+ var isConsentPlaceholderText = (text6) => text6.length <= MAX_CONSENT_PLACEHOLDER_LENGTH && CONSENT_PLACEHOLDER.test(text6.trimStart());
1826
2136
 
1827
2137
  // src/extractors/lib/sanitize.ts
1828
2138
  var INVISIBLE_STYLE = /(^|;)\s*(display\s*:\s*none|visibility\s*:\s*hidden)\s*(;|$)/i;
1829
2139
  var hasHiddenClass = (element3) => {
1830
2140
  const classes = classList(element3);
1831
2141
  if (!classes.some((name) => HIDDEN_CLASS_NAMES.has(name))) {
1832
- return classes.some((name) => REGEXPS.hidden.test(name));
2142
+ return classes.some((name) => REGEXPS.hidden.test(name) || isScreenReaderOnlyClass(name));
1833
2143
  }
1834
2144
  return !classes.some((name) => RESPONSIVE_DISPLAY_OVERRIDE.test(name));
1835
2145
  };
2146
+ var SCREEN_READER_ONLY = /^(sronly|visuallyhidden|screenreader(only|text))(focusable|styles\w*)?$/;
2147
+ var isScreenReaderOnlyClass = (name) => {
2148
+ const first = name.charCodeAt(0) | 32;
2149
+ if (first !== 115 && first !== 118) {
2150
+ return false;
2151
+ }
2152
+ return SCREEN_READER_ONLY.test(name.toLowerCase().replace(/[-_]/g, ""));
2153
+ };
1836
2154
  var isNonContent = (node) => {
1837
2155
  if (node.type === "comment" || node.type === "doctype") {
1838
2156
  return true;
1839
2157
  }
1840
2158
  return isElement(node) && NON_CONTENT_TAGS.has(node.tagName);
1841
2159
  };
1842
- var isHidden = (element3) => {
2160
+ var isHidden = (element3, parent, siblingCode) => {
2161
+ if (!looksHidden(element3)) {
2162
+ return false;
2163
+ }
1843
2164
  if (containsMath(element3)) {
1844
2165
  return false;
1845
2166
  }
2167
+ return !isHiddenCodePanel(element3, parent, siblingCode);
2168
+ };
2169
+ var looksHidden = (element3) => {
1846
2170
  if (isTruthyAttribute(element3, "hidden")) {
1847
2171
  return true;
1848
2172
  }
@@ -1855,10 +2179,57 @@ var isHidden = (element3) => {
1855
2179
  }
1856
2180
  const width = numericProperty(element3, "data-rwidth");
1857
2181
  const height = numericProperty(element3, "data-rheight");
1858
- if (width === 0 && height === 0) {
2182
+ return width === 0 && height === 0;
2183
+ };
2184
+ var MAX_CODE_PANEL_PROSE = 200;
2185
+ var panelCode = (element3) => {
2186
+ let code = "";
2187
+ let prose = 0;
2188
+ const visit = (node, insideCode) => {
2189
+ for (const child of node.children) {
2190
+ if (child.type === "text") {
2191
+ if (insideCode) {
2192
+ code += child.value;
2193
+ } else {
2194
+ prose += child.value.trim().length;
2195
+ if (prose > MAX_CODE_PANEL_PROSE) {
2196
+ return false;
2197
+ }
2198
+ }
2199
+ } else if (isElement(child) && !visit(child, insideCode || child.tagName === "pre")) {
2200
+ return false;
2201
+ }
2202
+ }
1859
2203
  return true;
2204
+ };
2205
+ return visit(element3, element3.tagName === "pre") && code.trim().length > 0 ? code : void 0;
2206
+ };
2207
+ var visibleSiblingCode = (parent, cache) => {
2208
+ let codes = cache.get(parent);
2209
+ if (!codes) {
2210
+ codes = /* @__PURE__ */ new Set();
2211
+ for (const child of parent.children) {
2212
+ if (isElement(child) && !looksHidden(child)) {
2213
+ const code = panelCode(child);
2214
+ if (code !== void 0) {
2215
+ codes.add(code);
2216
+ }
2217
+ }
2218
+ }
2219
+ cache.set(parent, codes);
1860
2220
  }
1861
- return false;
2221
+ return codes;
2222
+ };
2223
+ var isHiddenCodePanel = (element3, parent, cache) => {
2224
+ const code = panelCode(element3);
2225
+ if (code === void 0) {
2226
+ return false;
2227
+ }
2228
+ const siblings = visibleSiblingCode(parent, cache);
2229
+ if (siblings.has(code)) {
2230
+ return false;
2231
+ }
2232
+ return stringProperty(element3, "role") === "tabpanel" || siblings.size > 0;
1862
2233
  };
1863
2234
  var PLACEHOLDER_IMAGE_SRC = /^data:image\/|^about:blank$|spacer\.gif$|blank\.(gif|png)$/i;
1864
2235
  var isPlaceholderImage = (element3) => {
@@ -1876,15 +2247,16 @@ var isPlaceholderImage = (element3) => {
1876
2247
  }
1877
2248
  return false;
1878
2249
  };
1879
- var hoistNoscriptImages = (tree) => {
1880
- const visit = (parent) => {
2250
+ var hoistNoscriptImages = (tree, onElement) => {
2251
+ const visit = (parent, depth) => {
1881
2252
  for (let index = 0; index < parent.children.length; index++) {
1882
2253
  const child = parent.children[index];
1883
2254
  if (!isElement(child)) {
1884
2255
  continue;
1885
2256
  }
1886
2257
  if (child.tagName !== "noscript") {
1887
- visit(child);
2258
+ onElement?.(child, depth, parent);
2259
+ visit(child, depth + 1);
1888
2260
  continue;
1889
2261
  }
1890
2262
  const hasImage = child.children.some(
@@ -1904,7 +2276,7 @@ var hoistNoscriptImages = (tree) => {
1904
2276
  }
1905
2277
  };
1906
2278
  if ("children" in tree) {
1907
- visit(tree);
2279
+ visit(tree, 0);
1908
2280
  }
1909
2281
  };
1910
2282
  var containsMath = (element3) => {
@@ -1919,12 +2291,15 @@ var containsMath = (element3) => {
1919
2291
  return false;
1920
2292
  };
1921
2293
  var stripNonContent = (tree) => {
1922
- hoistNoscriptImages(tree);
1923
- return pruneInPlace(tree, (node) => {
2294
+ const tabs = new CodeTabCollector((element3) => looksHidden(element3) || NON_CONTENT_TAGS.has(element3.tagName));
2295
+ hoistNoscriptImages(tree, (element3, depth, parent) => tabs.visit(element3, depth, parent));
2296
+ tabs.apply();
2297
+ const siblingCode = /* @__PURE__ */ new WeakMap();
2298
+ return pruneInPlace(tree, (node, parent) => {
1924
2299
  if (isNonContent(node)) {
1925
2300
  return false;
1926
2301
  }
1927
- if (isElement(node) && isHidden(node)) {
2302
+ if (isElement(node) && isHidden(node, parent, siblingCode)) {
1928
2303
  return false;
1929
2304
  }
1930
2305
  return true;
@@ -1951,32 +2326,32 @@ var findLandmarkChrome = (tree) => {
1951
2326
  visit(tree, 0, false);
1952
2327
  return chrome;
1953
2328
  };
1954
- var isUnlikelyCandidate = (element3) => {
2329
+ var unlikelyTier = (element3) => {
1955
2330
  if (element3.tagName === "article" || element3.tagName === "main" || element3.tagName === "body") {
1956
- return false;
2331
+ return void 0;
1957
2332
  }
1958
2333
  const role = stringProperty(element3, "role");
1959
2334
  if (role && UNLIKELY_ROLES.has(role)) {
1960
- return true;
2335
+ return "strong";
1961
2336
  }
1962
2337
  if (CHROME_TAGS.has(element3.tagName)) {
1963
- return true;
2338
+ return "strong";
1964
2339
  }
1965
2340
  const match = matchString(element3);
1966
2341
  if (REGEXPS.specialUnlikelyCandidates.test(match)) {
1967
- return true;
2342
+ return "strong";
1968
2343
  }
1969
2344
  for (const name of [...classList(element3), stringProperty(element3, "id") ?? ""]) {
1970
2345
  if (REGEXPS.stronglyUnlikely.test(name)) {
1971
- return true;
2346
+ return "strong";
1972
2347
  }
1973
2348
  }
1974
2349
  if (REGEXPS.unlikelyCandidates.test(match) && !REGEXPS.okMaybeItsaCandidate.test(match)) {
1975
- return true;
2350
+ return "weak";
1976
2351
  }
1977
- return false;
2352
+ return void 0;
1978
2353
  };
1979
- var findUnlikelyElements = (tree) => {
2354
+ var findUnlikelyElements = (tree, spareWeak) => {
1980
2355
  const landmarks = findLandmarkChrome(tree);
1981
2356
  const doomed = [];
1982
2357
  const visit = (node) => {
@@ -1987,7 +2362,15 @@ var findUnlikelyElements = (tree) => {
1987
2362
  if (!isElement(child)) {
1988
2363
  continue;
1989
2364
  }
1990
- if (landmarks.has(child) || isUnlikelyCandidate(child)) {
2365
+ if (landmarks.has(child)) {
2366
+ doomed.push(child);
2367
+ continue;
2368
+ }
2369
+ if (PREFORMATTED_TAGS.has(child.tagName)) {
2370
+ continue;
2371
+ }
2372
+ const tier = unlikelyTier(child);
2373
+ if (tier === "strong" || tier === "weak" && !spareWeak?.(child)) {
1991
2374
  doomed.push(child);
1992
2375
  continue;
1993
2376
  }
@@ -2026,14 +2409,14 @@ var collectPreformattedElements = (tree) => {
2026
2409
  return protectedElements;
2027
2410
  };
2028
2411
  var dropEmptyElements = (tree, collector) => {
2029
- const preformatted = collectPreformattedElements(tree);
2412
+ const preformatted2 = collectPreformattedElements(tree);
2030
2413
  const visit = (parent) => {
2031
2414
  for (let index = 0; index < parent.children.length; index++) {
2032
2415
  const child = parent.children[index];
2033
2416
  if (!isElement(child)) {
2034
2417
  continue;
2035
2418
  }
2036
- if (preformatted.has(child) || !DROP_WHEN_EMPTY_TAGS.has(child.tagName)) {
2419
+ if (preformatted2.has(child) || !DROP_WHEN_EMPTY_TAGS.has(child.tagName)) {
2037
2420
  visit(child);
2038
2421
  continue;
2039
2422
  }
@@ -2128,11 +2511,15 @@ var findCleanupTargets = (tree, collector) => {
2128
2511
  visit(child);
2129
2512
  continue;
2130
2513
  }
2514
+ if (LITERAL_TEXT_TAGS.has(child.tagName)) {
2515
+ collectButtons(child, doomed);
2516
+ continue;
2517
+ }
2131
2518
  if (isLinkOnlyBlock(child, collector)) {
2132
2519
  condemnLinkBlock(child, siblings, index, collector, doomed);
2133
2520
  continue;
2134
2521
  }
2135
- if (isMidArticleWidget(child)) {
2522
+ if (isMidArticleWidget(child, collector)) {
2136
2523
  doomed.push(child);
2137
2524
  continue;
2138
2525
  }
@@ -2174,18 +2561,52 @@ var countAnchors = (element3) => {
2174
2561
  return count;
2175
2562
  };
2176
2563
  var LITERAL_TEXT_TAGS = /* @__PURE__ */ new Set(["code", "kbd", "samp", "var", "pre"]);
2177
- var isMidArticleWidget = (element3) => {
2178
- if (LITERAL_TEXT_TAGS.has(element3.tagName)) {
2179
- return false;
2564
+ var PREFORMATTED_TAGS = /* @__PURE__ */ new Set(["pre", "code"]);
2565
+ var collectButtons = (element3, into) => {
2566
+ for (const child of element3.children) {
2567
+ if (!isElement(child)) {
2568
+ continue;
2569
+ }
2570
+ if (child.tagName === "button") {
2571
+ into.push(child);
2572
+ continue;
2573
+ }
2574
+ collectButtons(child, into);
2180
2575
  }
2576
+ };
2577
+ var isMidArticleWidget = (element3, collector) => {
2181
2578
  if (element3.tagName === "form" || element3.tagName === "fieldset") {
2182
2579
  return true;
2183
2580
  }
2184
2581
  if (element3.tagName === "button") {
2185
2582
  return true;
2186
2583
  }
2187
- return isUiChromeText(elementText(element3));
2584
+ if (collector.metrics(element3).text > MAX_CONSENT_PLACEHOLDER_LENGTH) {
2585
+ return false;
2586
+ }
2587
+ const text6 = elementText(element3);
2588
+ return isUiChromeText(text6) || isConsentPlaceholderText(text6) && !hasBlockDescendant(element3);
2188
2589
  };
2590
+ var BLOCK_TAGS = /* @__PURE__ */ new Set([
2591
+ "p",
2592
+ "div",
2593
+ "section",
2594
+ "article",
2595
+ "figure",
2596
+ "figcaption",
2597
+ "blockquote",
2598
+ "ul",
2599
+ "ol",
2600
+ "table",
2601
+ "pre",
2602
+ "h1",
2603
+ "h2",
2604
+ "h3",
2605
+ "h4",
2606
+ "h5",
2607
+ "h6"
2608
+ ]);
2609
+ var hasBlockDescendant = (element3) => element3.children.some((child) => isElement(child) && (BLOCK_TAGS.has(child.tagName) || hasBlockDescendant(child)));
2189
2610
  var cleanContent = (tree, collector) => {
2190
2611
  const doomed = new Set(findCleanupTargets(tree, collector));
2191
2612
  if (doomed.size > 0) {
@@ -2787,6 +3208,172 @@ var runAdapters = (context, adapters = BUILTIN_ADAPTERS) => {
2787
3208
  return new MetricsCollector().textLength(extracted) >= MIN_ADAPTER_TEXT ? extracted : void 0;
2788
3209
  };
2789
3210
 
3211
+ // src/extractors/lib/blocks.ts
3212
+ var BLOCK_TAGS2 = /* @__PURE__ */ new Set([
3213
+ "address",
3214
+ "article",
3215
+ "aside",
3216
+ "blockquote",
3217
+ "body",
3218
+ "caption",
3219
+ "center",
3220
+ "dd",
3221
+ "details",
3222
+ "dialog",
3223
+ "div",
3224
+ "dl",
3225
+ "dt",
3226
+ "fieldset",
3227
+ "figcaption",
3228
+ "figure",
3229
+ "footer",
3230
+ "form",
3231
+ "h1",
3232
+ "h2",
3233
+ "h3",
3234
+ "h4",
3235
+ "h5",
3236
+ "h6",
3237
+ "header",
3238
+ "hgroup",
3239
+ "hr",
3240
+ "html",
3241
+ "li",
3242
+ "main",
3243
+ "menu",
3244
+ "nav",
3245
+ "ol",
3246
+ "p",
3247
+ "pre",
3248
+ "section",
3249
+ "summary",
3250
+ "table",
3251
+ "tbody",
3252
+ "td",
3253
+ "tfoot",
3254
+ "th",
3255
+ "thead",
3256
+ "tr",
3257
+ "ul"
3258
+ ]);
3259
+ var SKIP_TAGS = /* @__PURE__ */ new Set(["script", "style", "noscript", "template", "svg", "math", "head", "title", "iframe"]);
3260
+ var collapse = (value) => value.replace(/\s+/g, " ");
3261
+ var segmentBlocks = (root, maxBlocks = 2e4) => {
3262
+ const blocks = [];
3263
+ let frame;
3264
+ const enter = (element3) => {
3265
+ frame = { element: element3, parent: frame, depth: (frame?.depth ?? 0) + 1 };
3266
+ };
3267
+ const leave = () => {
3268
+ frame = frame?.parent;
3269
+ };
3270
+ let text6 = "";
3271
+ let linkChars = 0;
3272
+ let links = 0;
3273
+ let images = 0;
3274
+ const flush = () => {
3275
+ const trimmed = text6.trim();
3276
+ if (frame && (trimmed.length > 0 || images > 0) && blocks.length < maxBlocks) {
3277
+ blocks.push({
3278
+ index: blocks.length,
3279
+ owner: frame.element,
3280
+ frame,
3281
+ text: trimmed,
3282
+ linkChars: Math.min(linkChars, trimmed.length),
3283
+ links,
3284
+ images
3285
+ });
3286
+ }
3287
+ text6 = "";
3288
+ linkChars = 0;
3289
+ links = 0;
3290
+ images = 0;
3291
+ };
3292
+ const visitInline = (node, inLink) => {
3293
+ if (node.type === "text") {
3294
+ const value = collapse(node.value);
3295
+ text6 += value;
3296
+ if (inLink) {
3297
+ linkChars += value.trim().length;
3298
+ }
3299
+ return;
3300
+ }
3301
+ if (!isElement(node)) {
3302
+ return;
3303
+ }
3304
+ visit(node, inLink);
3305
+ };
3306
+ const visit = (element3, inLink) => {
3307
+ const tag = element3.tagName;
3308
+ if (SKIP_TAGS.has(tag)) {
3309
+ return;
3310
+ }
3311
+ if (tag === "br") {
3312
+ text6 += " ";
3313
+ return;
3314
+ }
3315
+ if (tag === "img") {
3316
+ images += 1;
3317
+ return;
3318
+ }
3319
+ if (tag === "pre") {
3320
+ flush();
3321
+ enter(element3);
3322
+ text6 = preformatted(element3);
3323
+ flush();
3324
+ leave();
3325
+ return;
3326
+ }
3327
+ if (BLOCK_TAGS2.has(tag)) {
3328
+ flush();
3329
+ enter(element3);
3330
+ for (const child of element3.children) {
3331
+ visitInline(child, inLink);
3332
+ }
3333
+ flush();
3334
+ leave();
3335
+ return;
3336
+ }
3337
+ const isLink = tag === "a" && stringProperty(element3, "href") !== void 0;
3338
+ if (isLink) {
3339
+ links += 1;
3340
+ }
3341
+ for (const child of element3.children) {
3342
+ visitInline(child, inLink || isLink);
3343
+ }
3344
+ };
3345
+ if (isElement(root)) {
3346
+ visit(root, false);
3347
+ } else if ("children" in root) {
3348
+ for (const child of root.children) {
3349
+ visitInline(child, false);
3350
+ }
3351
+ flush();
3352
+ }
3353
+ return blocks;
3354
+ };
3355
+ var preformatted = (element3) => {
3356
+ let value = "";
3357
+ const walk2 = (node) => {
3358
+ if (node.type === "text") {
3359
+ value += node.value;
3360
+ } else if (isElement(node) && !SKIP_TAGS.has(node.tagName)) {
3361
+ for (const child of node.children) {
3362
+ walk2(child);
3363
+ }
3364
+ }
3365
+ };
3366
+ walk2(element3);
3367
+ return value;
3368
+ };
3369
+ var ancestorAt = (block, up) => {
3370
+ let current = block.frame;
3371
+ for (let step = 0; step < up && current; step++) {
3372
+ current = current.parent;
3373
+ }
3374
+ return current?.element;
3375
+ };
3376
+
2790
3377
  // src/extractors/lib/score.ts
2791
3378
  var TAG_BASE_SCORE = {
2792
3379
  div: 5,
@@ -3012,6 +3599,588 @@ var climbToArticleBoundary = (top, candidates, context) => {
3012
3599
  return current;
3013
3600
  };
3014
3601
 
3602
+ // src/extractors/lib/block-features.ts
3603
+ var FEATURE_NAMES = [
3604
+ "bias",
3605
+ "logLen",
3606
+ "linkDensity",
3607
+ "logLinks",
3608
+ "hasImage",
3609
+ "textless",
3610
+ "punctDensity",
3611
+ "digitRatio",
3612
+ "sentenceEnds",
3613
+ "tag_p",
3614
+ "tag_li",
3615
+ "tag_cell",
3616
+ "tag_h1",
3617
+ "tag_h2_6",
3618
+ "tag_pre",
3619
+ "tag_div",
3620
+ "tag_dtdd",
3621
+ "tag_blockquote",
3622
+ "tag_figcaption",
3623
+ "in_nav",
3624
+ "in_header",
3625
+ "in_footer",
3626
+ "in_aside",
3627
+ "in_article",
3628
+ "in_main",
3629
+ "in_form",
3630
+ "in_table",
3631
+ "in_list",
3632
+ "role_chrome",
3633
+ "role_content",
3634
+ "cls_unlikely",
3635
+ "cls_positive",
3636
+ "cls_negative",
3637
+ "cls_strong",
3638
+ "cls_special",
3639
+ "cls_byline",
3640
+ "cls_comment",
3641
+ "landmark",
3642
+ "doom_strong",
3643
+ "doom_weak",
3644
+ "depth",
3645
+ "relPos",
3646
+ "relCharPos",
3647
+ "prev_logLen",
3648
+ "prev_linkDensity",
3649
+ "next_logLen",
3650
+ "next_linkDensity",
3651
+ "win_linkDensity",
3652
+ "win_logLen",
3653
+ "parent_linkDensity",
3654
+ "parent_logText",
3655
+ "gparent_linkDensity",
3656
+ "gparent_logText",
3657
+ "inTopCandidate",
3658
+ "candidateScore",
3659
+ "inTopSibling",
3660
+ "takumi_kept"
3661
+ ];
3662
+ var FEATURE_COUNT = FEATURE_NAMES.length;
3663
+ var PUNCT = /* @__PURE__ */ new Set([...".,;:!?\u3001\u3002\uFF0C\uFF0E\uFF01\uFF1F\uFF1B\uFF1A"]);
3664
+ var SENTENCE_END = /* @__PURE__ */ new Set([...".!?\u3002\uFF01\uFF1F"]);
3665
+ var textStats = (text6) => {
3666
+ let punct = 0;
3667
+ let digits = 0;
3668
+ let sentences = 0;
3669
+ for (let index = 0; index < text6.length; index++) {
3670
+ const char = text6[index];
3671
+ const code = text6.charCodeAt(index);
3672
+ if (code >= 48 && code <= 57) {
3673
+ digits += 1;
3674
+ } else if (PUNCT.has(char)) {
3675
+ punct += 1;
3676
+ const next = text6.charCodeAt(index + 1);
3677
+ if (SENTENCE_END.has(char) && (Number.isNaN(next) || next === 32 || next === 10 || code > 12288)) {
3678
+ sentences += 1;
3679
+ }
3680
+ }
3681
+ }
3682
+ return { punct, digits, sentences };
3683
+ };
3684
+ var COMMENT = /comment|disqus|reply|respond/i;
3685
+ var log1p = (value) => Math.log(1 + value);
3686
+ var signalsOf = (element3, cache) => {
3687
+ let signals = cache.get(element3);
3688
+ if (signals) {
3689
+ return signals;
3690
+ }
3691
+ const match = matchString(element3);
3692
+ const role = stringProperty(element3, "role") ?? "";
3693
+ const names = [...classList(element3), stringProperty(element3, "id") ?? ""];
3694
+ signals = {
3695
+ unlikely: REGEXPS.unlikelyCandidates.test(match) && !REGEXPS.okMaybeItsaCandidate.test(match),
3696
+ positive: REGEXPS.positive.test(match),
3697
+ negative: REGEXPS.negative.test(match),
3698
+ strong: names.some((name) => REGEXPS.stronglyUnlikely.test(name)),
3699
+ special: REGEXPS.specialUnlikelyCandidates.test(match),
3700
+ byline: REGEXPS.byline.test(match),
3701
+ comment: COMMENT.test(match),
3702
+ roleChrome: UNLIKELY_ROLES.has(role),
3703
+ roleContent: CONTENT_ROLES.has(role)
3704
+ };
3705
+ cache.set(element3, signals);
3706
+ return signals;
3707
+ };
3708
+ var SIGNAL_LEVELS = 6;
3709
+ var SIGNAL_COUNT = 9;
3710
+ var RowWriter = class {
3711
+ constructor(out) {
3712
+ this.out = out;
3713
+ this.offset = 0;
3714
+ }
3715
+ push(value) {
3716
+ this.out[this.offset++] = value;
3717
+ }
3718
+ flag(condition) {
3719
+ this.out[this.offset++] = condition ? 1 : 0;
3720
+ }
3721
+ };
3722
+ var EMPTY_CHAIN = {
3723
+ inNav: 0,
3724
+ inHeader: 0,
3725
+ inFooter: 0,
3726
+ inAside: 0,
3727
+ inArticle: 0,
3728
+ inMain: 0,
3729
+ inForm: 0,
3730
+ inTable: 0,
3731
+ inList: 0,
3732
+ landmark: 0,
3733
+ doomStrong: 0,
3734
+ doomWeak: 0,
3735
+ inTop: 0,
3736
+ inTopSibling: 0,
3737
+ nearestScore: 0,
3738
+ distance: new Array(SIGNAL_COUNT).fill(Number.POSITIVE_INFINITY)
3739
+ };
3740
+ var signalFlags = (signals) => [
3741
+ signals.roleChrome,
3742
+ signals.roleContent,
3743
+ signals.unlikely,
3744
+ signals.positive,
3745
+ signals.negative,
3746
+ signals.strong,
3747
+ signals.special,
3748
+ signals.byline,
3749
+ signals.comment
3750
+ ];
3751
+ var any = (parent, condition) => parent || condition ? 1 : 0;
3752
+ var ChainResolver = class {
3753
+ constructor(landmarks, candidateScore, parents, top) {
3754
+ this.landmarks = landmarks;
3755
+ this.candidateScore = candidateScore;
3756
+ this.parents = parents;
3757
+ this.top = top;
3758
+ }
3759
+ #chains = /* @__PURE__ */ new Map();
3760
+ #signals = /* @__PURE__ */ new WeakMap();
3761
+ /** Iterative, so a deeply nested page cannot exhaust the call stack. */
3762
+ resolve(frame) {
3763
+ const pending = [];
3764
+ let current = frame;
3765
+ let chain = EMPTY_CHAIN;
3766
+ while (current) {
3767
+ const memo = this.#chains.get(current.element);
3768
+ if (memo) {
3769
+ chain = memo;
3770
+ break;
3771
+ }
3772
+ pending.push(current);
3773
+ current = current.parent;
3774
+ }
3775
+ for (let index = pending.length - 1; index >= 0; index--) {
3776
+ chain = this.#derive(chain, pending[index].element);
3777
+ this.#chains.set(pending[index].element, chain);
3778
+ }
3779
+ return chain;
3780
+ }
3781
+ #derive(parent, element3) {
3782
+ const tag = element3.tagName;
3783
+ const tier = unlikelyTier(element3);
3784
+ const flags = signalFlags(signalsOf(element3, this.#signals));
3785
+ const top = this.top;
3786
+ const topParent = top ? this.parents.get(top) : void 0;
3787
+ return {
3788
+ inNav: any(parent.inNav, tag === "nav"),
3789
+ inHeader: any(parent.inHeader, tag === "header"),
3790
+ inFooter: any(parent.inFooter, tag === "footer"),
3791
+ inAside: any(parent.inAside, tag === "aside"),
3792
+ inArticle: any(parent.inArticle, tag === "article"),
3793
+ inMain: any(parent.inMain, tag === "main"),
3794
+ inForm: any(parent.inForm, tag === "form"),
3795
+ inTable: any(parent.inTable, tag === "table"),
3796
+ inList: any(parent.inList, tag === "ul" || tag === "ol"),
3797
+ landmark: any(parent.landmark, this.landmarks.has(element3)),
3798
+ doomStrong: any(parent.doomStrong, tier === "strong"),
3799
+ doomWeak: any(parent.doomWeak, tier === "weak"),
3800
+ inTop: any(parent.inTop, element3 === top),
3801
+ inTopSibling: any(
3802
+ parent.inTopSibling,
3803
+ topParent !== void 0 && element3 !== top && this.parents.get(element3) === topParent
3804
+ ),
3805
+ nearestScore: this.candidateScore.get(element3) ?? parent.nearestScore,
3806
+ distance: parent.distance.map((distance, signal) => flags[signal] ? 0 : distance + 1)
3807
+ };
3808
+ }
3809
+ };
3810
+ var evidence = (distance) => distance < SIGNAL_LEVELS ? 1 / (1 + distance) : 0;
3811
+ var writeText = (row, block, density) => {
3812
+ const length = block.text.length;
3813
+ const stats = textStats(block.text);
3814
+ row.push(1);
3815
+ row.push(log1p(length));
3816
+ row.push(density);
3817
+ row.push(log1p(block.links));
3818
+ row.flag(block.images > 0);
3819
+ row.flag(length === 0);
3820
+ row.push(length === 0 ? 0 : stats.punct / length);
3821
+ row.push(length === 0 ? 0 : stats.digits / length);
3822
+ row.push(log1p(stats.sentences));
3823
+ };
3824
+ var writeTag = (row, tag) => {
3825
+ row.flag(tag === "p");
3826
+ row.flag(tag === "li");
3827
+ row.flag(tag === "td" || tag === "th");
3828
+ row.flag(tag === "h1");
3829
+ row.flag(/^h[2-6]$/.test(tag));
3830
+ row.flag(tag === "pre");
3831
+ row.flag(tag === "div" || tag === "section");
3832
+ row.flag(tag === "dt" || tag === "dd");
3833
+ row.flag(tag === "blockquote");
3834
+ row.flag(tag === "figcaption");
3835
+ };
3836
+ var writeChain = (row, chain) => {
3837
+ for (const value of [
3838
+ chain.inNav,
3839
+ chain.inHeader,
3840
+ chain.inFooter,
3841
+ chain.inAside,
3842
+ chain.inArticle,
3843
+ chain.inMain,
3844
+ chain.inForm,
3845
+ chain.inTable,
3846
+ chain.inList
3847
+ ]) {
3848
+ row.push(value);
3849
+ }
3850
+ for (const distance of chain.distance) {
3851
+ row.push(evidence(distance));
3852
+ }
3853
+ row.push(chain.landmark);
3854
+ row.push(chain.doomStrong);
3855
+ row.push(chain.doomWeak);
3856
+ };
3857
+ var windowMeans = (textLen, density, index, radius) => {
3858
+ let link = 0;
3859
+ let len = 0;
3860
+ let size = 0;
3861
+ for (let near = Math.max(0, index - radius); near <= Math.min(textLen.length - 1, index + radius); near++) {
3862
+ link += density[near];
3863
+ len += log1p(textLen[near]);
3864
+ size += 1;
3865
+ }
3866
+ return [link / size, len / size];
3867
+ };
3868
+ var writeNeighbourhood = (row, index, textLen, density) => {
3869
+ const hasPrevious = index > 0;
3870
+ const hasNext = index < textLen.length - 1;
3871
+ row.push(hasPrevious ? log1p(textLen[index - 1]) : 0);
3872
+ row.push(hasPrevious ? density[index - 1] : 0);
3873
+ row.push(hasNext ? log1p(textLen[index + 1]) : 0);
3874
+ row.push(hasNext ? density[index + 1] : 0);
3875
+ const [windowLink, windowLen] = windowMeans(textLen, density, index, 2);
3876
+ row.push(windowLink);
3877
+ row.push(windowLen);
3878
+ };
3879
+ var writeContainers = (row, block, collector) => {
3880
+ for (const container of [ancestorAt(block, 1), ancestorAt(block, 2)]) {
3881
+ row.push(container ? collector.linkDensity(container) : 0);
3882
+ row.push(container ? log1p(collector.textLength(container)) : 0);
3883
+ }
3884
+ };
3885
+ var blockFeatures = ({ root, blocks, collector, lang, takumiKept }) => {
3886
+ const count = blocks.length;
3887
+ const out = new Float32Array(count * FEATURE_COUNT);
3888
+ const context = buildScoringContext(root, collector, lang);
3889
+ const candidates = scoreCandidates(root, context);
3890
+ const topScore = candidates[0]?.score ?? 1;
3891
+ const candidateScore = /* @__PURE__ */ new WeakMap();
3892
+ for (const candidate of candidates) {
3893
+ candidateScore.set(candidate.element, candidate.score / topScore);
3894
+ }
3895
+ const chains = new ChainResolver(findLandmarkChrome(root), candidateScore, context.parents, candidates[0]?.element);
3896
+ const textLen = blocks.map((block) => block.text.length);
3897
+ const density = blocks.map((block) => block.text.length === 0 ? 0 : block.linkChars / block.text.length);
3898
+ const totalChars = textLen.reduce((sum, length) => sum + length, 0) || 1;
3899
+ let charsBefore = 0;
3900
+ for (let index = 0; index < count; index++) {
3901
+ const block = blocks[index];
3902
+ const row = new RowWriter(out.subarray(index * FEATURE_COUNT, (index + 1) * FEATURE_COUNT));
3903
+ const chain = chains.resolve(block.frame);
3904
+ writeText(row, block, density[index]);
3905
+ writeTag(row, block.owner.tagName);
3906
+ writeChain(row, chain);
3907
+ row.push(Math.min(block.frame.depth, 40) / 40);
3908
+ row.push(count <= 1 ? 0 : index / (count - 1));
3909
+ row.push(charsBefore / totalChars);
3910
+ charsBefore += textLen[index];
3911
+ writeNeighbourhood(row, index, textLen, density);
3912
+ writeContainers(row, block, collector);
3913
+ row.push(chain.inTop);
3914
+ row.push(chain.nearestScore);
3915
+ row.push(chain.inTopSibling);
3916
+ row.flag(takumiKept?.has(block.owner));
3917
+ }
3918
+ return out;
3919
+ };
3920
+ var STACK_FEATURE_NAMES = [
3921
+ "s1_logit",
3922
+ "s1_win1",
3923
+ "s1_win3",
3924
+ "s1_parent",
3925
+ "s1_gparent",
3926
+ "s1_ggparent",
3927
+ "s1_parentShare",
3928
+ "s1_distHigh",
3929
+ "s1_docShare"
3930
+ ];
3931
+ var STACKED_FEATURE_COUNT = FEATURE_COUNT + STACK_FEATURE_NAMES.length;
3932
+ var logit = (p) => Math.log(Math.max(1e-6, p) / Math.max(1e-6, 1 - p));
3933
+ var ancestorMass = (blocks, probabilities) => {
3934
+ const mass = /* @__PURE__ */ new Map();
3935
+ const add = (element3, p, weight) => {
3936
+ if (!element3) {
3937
+ return;
3938
+ }
3939
+ const entry = mass.get(element3);
3940
+ if (entry) {
3941
+ entry.p += p * weight;
3942
+ entry.w += weight;
3943
+ } else {
3944
+ mass.set(element3, { p: p * weight, w: weight });
3945
+ }
3946
+ };
3947
+ let docP = 0;
3948
+ let docW = 0;
3949
+ for (const block of blocks) {
3950
+ const weight = block.text.length + 10;
3951
+ const p = probabilities[block.index];
3952
+ add(ancestorAt(block, 1), p, weight);
3953
+ add(ancestorAt(block, 2), p, weight);
3954
+ add(ancestorAt(block, 3), p, weight);
3955
+ docP += p * weight;
3956
+ docW += weight;
3957
+ }
3958
+ const parentWeightShare = (element3) => {
3959
+ const entry = element3 ? mass.get(element3) : void 0;
3960
+ return entry && docW > 0 ? entry.w / docW : 0;
3961
+ };
3962
+ return { mass, docShare: docW === 0 ? 0 : docP / docW, parentWeightShare };
3963
+ };
3964
+ var distanceToHigh = (probabilities) => {
3965
+ const count = probabilities.length;
3966
+ const distance = new Float32Array(count).fill(count);
3967
+ let last = -1;
3968
+ for (let index = 0; index < count; index++) {
3969
+ if (probabilities[index] >= 0.5) {
3970
+ last = index;
3971
+ }
3972
+ if (last >= 0) {
3973
+ distance[index] = index - last;
3974
+ }
3975
+ }
3976
+ last = -1;
3977
+ for (let index = count - 1; index >= 0; index--) {
3978
+ if (probabilities[index] >= 0.5) {
3979
+ last = index;
3980
+ }
3981
+ if (last >= 0) {
3982
+ distance[index] = Math.min(distance[index], last - index);
3983
+ }
3984
+ }
3985
+ return distance;
3986
+ };
3987
+ var stackedFeatures = (blocks, base, probabilities) => {
3988
+ const count = blocks.length;
3989
+ const stride = STACKED_FEATURE_COUNT;
3990
+ const out = new Float32Array(count * stride);
3991
+ const { mass, docShare, parentWeightShare } = ancestorMass(blocks, probabilities);
3992
+ const meanOf = (element3, fallback) => {
3993
+ const entry = element3 ? mass.get(element3) : void 0;
3994
+ return entry ? entry.p / entry.w : fallback;
3995
+ };
3996
+ const distance = distanceToHigh(probabilities);
3997
+ for (let index = 0; index < count; index++) {
3998
+ const row = index * stride;
3999
+ out.set(base.subarray(index * FEATURE_COUNT, (index + 1) * FEATURE_COUNT), row);
4000
+ const p = probabilities[index];
4001
+ const window = (radius) => {
4002
+ let sum = 0;
4003
+ let n = 0;
4004
+ for (let near = Math.max(0, index - radius); near <= Math.min(count - 1, index + radius); near++) {
4005
+ if (near !== index) {
4006
+ sum += probabilities[near];
4007
+ n += 1;
4008
+ }
4009
+ }
4010
+ return n === 0 ? p : sum / n;
4011
+ };
4012
+ const block = blocks[index];
4013
+ let f = row + FEATURE_COUNT;
4014
+ out[f++] = logit(p);
4015
+ out[f++] = window(1);
4016
+ out[f++] = window(3);
4017
+ out[f++] = meanOf(ancestorAt(block, 1), p);
4018
+ out[f++] = meanOf(ancestorAt(block, 2), p);
4019
+ out[f++] = meanOf(ancestorAt(block, 3), p);
4020
+ out[f++] = parentWeightShare(ancestorAt(block, 1));
4021
+ out[f++] = Math.log1p(distance[index]);
4022
+ out[f++] = docShare;
4023
+ }
4024
+ return out;
4025
+ };
4026
+
4027
+ // src/extractors/lib/block-model.ts
4028
+ var isUsableModel = (model, stride = FEATURE_COUNT) => {
4029
+ if (model.kind === "linear") {
4030
+ return model.weights.length === stride;
4031
+ }
4032
+ const internal = 2 ** model.depth - 1;
4033
+ const trees = model.features.length / internal;
4034
+ return Number.isInteger(trees) && trees > 0 && model.thresholds.length === model.features.length && model.leaves.length === trees * (internal + 1) && model.features.every((feature) => feature < stride);
4035
+ };
4036
+ var scoreBlocks = (features, count, model, stride = FEATURE_COUNT) => {
4037
+ const out = new Float32Array(count);
4038
+ if (model.kind === "linear") {
4039
+ const { weights } = model;
4040
+ for (let index = 0; index < count; index++) {
4041
+ const row = index * stride;
4042
+ let sum = 0;
4043
+ for (let feature = 0; feature < stride; feature++) {
4044
+ sum += weights[feature] * features[row + feature];
4045
+ }
4046
+ out[index] = 1 / (1 + Math.exp(-sum));
4047
+ }
4048
+ return out;
4049
+ }
4050
+ const internal = 2 ** model.depth - 1;
4051
+ const leafCount = internal + 1;
4052
+ const trees = model.features.length / internal;
4053
+ const { features: splitFeatures, thresholds, leaves, base } = model;
4054
+ for (let index = 0; index < count; index++) {
4055
+ const row = index * stride;
4056
+ let sum = base;
4057
+ for (let tree = 0; tree < trees; tree++) {
4058
+ const offset = tree * internal;
4059
+ let node = 0;
4060
+ while (node < internal) {
4061
+ const feature = splitFeatures[offset + node];
4062
+ node = feature < 0 || features[row + feature] <= thresholds[offset + node] ? 2 * node + 1 : 2 * node + 2;
4063
+ }
4064
+ sum += leaves[tree * leafCount + node - internal];
4065
+ }
4066
+ out[index] = 1 / (1 + Math.exp(-sum));
4067
+ }
4068
+ return out;
4069
+ };
4070
+
4071
+ // src/extractors/lib/block-model.generated.ts
4072
+ var BLOCK_MODEL = {
4073
+ kind: "trees",
4074
+ depth: 5,
4075
+ base: -0.422449,
4076
+ features: [56, 32, 53, 54, 51, 32, 2, 53, 3, 38, 12, 2, 49, 15, 3, 48, 51, 38, 47, 41, -1, 26, -1, 8, 23, 42, 12, 38, 6, 30, 6, 56, 32, 53, 54, 51, 32, 50, 47, 38, 38, 12, 51, 31, 38, 2, 42, 53, 25, -1, 40, -1, 35, -1, 15, 54, 49, 38, 49, -1, 30, 3, 56, 32, 53, 54, 47, 32, 15, 42, 49, 40, 12, 42, 37, 30, 6, 38, 8, 41, 6, 48, 38, 54, -1, 41, 47, 49, -1, 21, 50, 49, 50, 56, 32, 2, 38, 51, 50, 32, 54, 30, 38, 26, 37, 31, 6, 10, 7, 37, 47, -1, 41, -1, 35, 53, 42, -1, 15, 52, 31, 48, 40, -1, 56, 32, 6, 38, 47, 31, 21, 42, 53, 38, 12, 53, 38, 50, 55, 6, 54, -1, 54, 40, -1, 54, -1, 51, 52, 15, -1, 38, 25, -1, -1, 56, 32, 51, 54, 51, 15, 32, 8, 37, 38, 26, 21, 42, 42, 24, 53, 4, 27, -1, 41, -1, 35, 53, 30, -1, 6, 50, 48, 42, 12, 54, 56, 38, 53, 37, 53, 42, 50, 49, 12, 16, 47, 41, 54, 47, 15, 25, 32, -1, -1, -1, 51, 54, -1, 23, 38, 54, 41, 48, 32, 30, 50, 56, 38, 48, 37, 53, 42, 2, 27, 12, 16, 47, 38, 47, 39, 3, 42, 53, -1, -1, -1, 48, 28, -1, 47, 41, 53, 32, 21, 31, 49, -1, 56, 38, 48, 37, 53, 31, 8, 3, 12, 16, 47, 53, 42, 3, 30, 54, 32, -1, -1, -1, 43, 54, -1, 24, 41, 15, 47, 15, 48, 42, 45, 56, 38, 6, 42, 53, 38, 50, 6, 40, 16, 28, 31, 32, 37, 31, 32, 42, 48, 54, -1, -1, 48, 51, 40, 47, -1, -1, 42, -1, 52, 2, 38, 53, 24, 37, 15, -1, 32, 3, 12, 48, 43, -1, -1, 47, 28, 42, 31, -1, -1, 47, 11, 40, 2, -1, -1, -1, -1, -1, -1, 43, -1, 38, 48, 47, 42, 31, 24, -1, 37, 32, 50, 8, -1, 32, -1, -1, 49, 12, 54, 40, 42, 52, 3, 7, -1, -1, 52, -1, -1, -1, -1, -1, 38, 6, 24, 12, 41, 23, 32, 32, 41, 48, 32, -1, -1, 51, 41, 42, 40, -1, 42, 54, 2, 7, 24, -1, -1, -1, -1, -1, -1, 40, 30, 38, 31, 32, 32, 49, 51, -1, 25, 31, 48, 42, 24, -1, -1, -1, 43, 41, 45, 47, 25, 41, 40, 52, 45, 48, -1, -1, -1, -1, -1, -1, 37, 2, 12, 23, 30, -1, -1, 43, 30, 13, 12, -1, -1, -1, -1, 32, 41, 51, 32, 45, 54, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, 45, 24, 37, 42, 23, 32, 42, 12, 25, 43, -1, -1, 51, 41, 31, 52, -1, -1, 11, 54, 24, 40, -1, -1, -1, -1, -1, -1, 40, 30, 38, 21, 53, 45, 35, -1, 32, 23, 11, -1, 52, -1, -1, 41, 28, 42, 42, 40, 42, -1, -1, -1, -1, -1, -1, -1, -1, 54, 54, -1, -1, 32, 6, 47, 25, 50, 40, 54, 12, 31, 42, 40, 52, 38, 1, 51, 47, 41, 40, 51, 43, 47, 8, -1, 42, 9, 21, 28, -1, -1, -1, -1, 37, 30, 12, 42, 48, -1, -1, 41, 41, 12, 31, -1, -1, -1, -1, 54, 8, 47, 24, 51, -1, 1, 47, -1, -1, -1, -1, -1, -1, -1, -1, 38, 12, 24, 48, 41, -1, 47, 47, 31, -1, 41, -1, -1, 48, 41, 25, 40, 39, 8, -1, -1, 1, -1, -1, -1, -1, -1, -1, 40, -1, -1, 37, 45, 12, 32, 30, -1, -1, 15, 40, 46, 3, -1, -1, -1, -1, 48, 50, 52, 31, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 12, 12, 6, 41, -1, -1, 42, 42, -1, 41, -1, -1, -1, -1, 7, 30, 30, 43, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, 42, 47, 42, 41, 32, 52, 43, 25, 26, 24, 54, 30, -1, -1, 7, 25, 2, 6, 54, 48, 52, 52, 1, -1, -1, -1, -1, -1, -1, -1, 37, 12, 12, 47, 41, 13, -1, 43, 7, -1, 41, -1, -1, -1, -1, 43, 25, 48, 42, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, 30, 53, 21, 31, 51, 41, 23, 55, 7, 43, 39, -1, 28, 54, 52, 30, -1, -1, 50, -1, 1, 52, 42, -1, -1, -1, -1, -1, 40, -1, 42, 42, 40, 54, 12, 52, 53, 45, 2, 38, 1, 55, 47, 54, 45, -1, 40, 31, 7, 30, 47, -1, 49, 40, -1, 43, -1, 51, -1, -1, 43, 37, 45, 12, 15, 42, 47, -1, 44, 40, 1, 40, -1, -1, -1, -1, 48, 40, 31, 4, 46, 40, 1, 50, -1, -1, -1, -1, -1, -1, -1, -1, 31, 50, 40, 53, 40, 52, 54, 54, 47, 49, 52, 41, 3, 54, 52, 32, 4, 42, 40, -1, -1, -1, -1, 4, 42, 31, -1, 50, 51, 42, 3, 21, 12, 55, 43, 41, 50, 54, 30, 1, -1, 40, -1, -1, -1, -1, 40, 40, 26, 40, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 49, 31, 36, 30, 50, 49, 42, 32, 40, 47, 7, 40, 26, 42, 42, 31, -1, 41, 24, 40, -1, 52, 54, 48, 24, -1, 51, -1, -1, -1, 42, 41, 52, 54, 54, 40, 47, 13, 48, 32, 54, 55, 47, 54, 51, 24, -1, 52, 6, 48, 56, 51, 48, 42, -1, 54, 53, 52, 52, -1, -1, 21, 7, 55, 52, 48, -1, 54, 7, 47, -1, 52, -1, -1, -1, -1, 49, 1, 30, -1, -1, -1, 31, 45, -1, -1, -1, -1, -1, -1, -1, -1, 12, 38, 41, 7, 53, -1, 49, 25, 48, 24, 41, -1, -1, 42, -1, 30, 31, -1, 52, -1, 42, 54, 54, -1, -1, -1, -1, -1, 48, -1, -1, 37, 20, 12, 15, 27, 47, -1, 52, 1, 51, 10, -1, -1, -1, -1, 48, 30, 54, 7, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 21, 40, 40, 35, 52, 53, 42, 52, -1, -1, 8, 47, 54, 54, 7, 54, 52, -1, -1, -1, -1, -1, 42, -1, 6, -1, 24, -1, -1, 48, 45, 3, 40, 26, 26, 50, 40, 25, 1, 8, -1, -1, 52, 50, 50, 42, 39, 40, 47, 51, 54, -1, -1, -1, -1, -1, -1, 46, 10, 46, 9, 23, 41, 30, 8, 41, 2, 32, 13, -1, 38, 24, 48, 53, 24, 56, 24, -1, -1, -1, 51, 28, 42, 32, 42, 31, 1, 7, -1, -1, 49, 41, 12, 47, 1, 51, 40, 54, 49, 52, 54, 50, 54, -1, -1, 41, -1, 40, 54, 40, 1, 7, 51, 54, 29, -1, -1, -1, -1, 41, -1, -1, -1, 37, 20, 51, 7, 27, 54, -1, 52, 52, 51, 47, -1, -1, -1, -1, 52, 47, 48, 40, 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 37, 1, 25, 47, 54, 46, 47, 31, -1, -1, -1, -1, 41, -1, 41, 40, 50, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, -1, -1, 41, 49, 42, 42, 29, 23, 51, 52, 47, 48, -1, 47, 30, 31, 1, 50, 8, 51, 7, 52, 31, -1, -1, 40, 7, 3, 49, 1, 40, 43, 54, 40, 40, 52, 54, 1, 52, -1, 50, 24, -1, 52, 45, 2, -1, -1, 48, 40, 54, 51, -1, -1, -1, -1, 31, 46, -1, -1, -1, -1, -1, -1, 7, 7, 48, 41, 1, -1, 52, 8, 51, 42, -1, -1, -1, 52, 40, 13, 26, 42, 32, 40, 50, -1, -1, -1, -1, -1, -1, 9, 50, -1, -1, 12, 42, 1, 40, 54, 54, 46, 7, -1, 11, 54, -1, -1, 41, -1, -1, -1, -1, -1, 31, 51, 51, 51, -1, -1, -1, -1, -1, 42, -1, -1, 45, 32, 40, 15, 40, 6, 31, 52, 50, 32, 31, 31, -1, 50, 52, 48, 48, 45, 40, 42, 51, 31, 54, 47, 1, -1, -1, 49, 49, 46, 1, 40, 52, 52, 52, 31, 48, -1, 40, 54, 26, 51, 6, 44, -1, -1, 52, 51, 42, 42, 40, -1, 2, 52, 48, -1, 42, -1, -1, -1, -1, -1, 21, 12, 7, 45, 1, 39, -1, 30, 50, 54, 49, -1, -1, -1, -1, 52, 40, 48, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, 41, 54, 48, 51, 51, 48, 15, -1, 42, 56, -1, 55, 10, 51, -1, -1, -1, -1, 48, 31, 43, 43, -1, -1, -1, -1, 8, 54, 2, 54, 30, 47, 31, 54, 7, 40, 43, 50, 51, 41, 50, 51, 50, 47, 31, 30, 40, 52, 1, 40, 24, 6, 42, 54, -1, -1, -1, -1, -1, -1, -1, 21, 7, 55, 19, 56, 50, -1, 52, -1, 54, 9, -1, -1, -1, -1, 52, 30, -1, -1, -1, 48, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, 42, 40, 8, 41, 1, 39, 7, 6, 47, 51, -1, -1, 1, 54, 40, 1, 30, 41, 52, 56, 26, 40, -1, -1, -1, -1, 54, 6, -1, -1, 40, 52, 39, 52, 31, 46, 52, 40, 47, 9, 36, 42, -1, 56, -1, 40, 50, 48, 47, 26, 41, 23, 49, -1, -1, -1, -1, -1, -1, -1, -1, 12, 5, 48, 48, 11, -1, 42, 1, 11, 40, 54, -1, -1, 41, 41, 40, -1, 48, 48, 48, 54, -1, 47, -1, -1, -1, -1, -1, -1, -1, 45, 54, 50, 54, 50, 50, 51, 52, 56, 32, 31, 56, 46, 55, 40, 51, 47, 43, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, 11, 31, 32, 47, 25, 1, 52, 7, 51, 51, 31, 40, 9, 6, 52, 52, 42, 54, 24, 45, 50, 40, 1, -1, 50, -1, 48, 40, 45, 47, 1, 27, 3, 50, 38, 40, 49, 48, 39, 31, -1, 54, 7, 1, 52, 41, 39, -1, -1, 51, 54, 23, 51, -1, 42, 56, -1, 32, -1, 54, -1, -1, -1, -1, -1, 42, 21, 31, 41, 30, 50, 40, 51, 51, 40, -1, 54, 53, 50, 47, 40, 40, 40, 41, -1, -1, -1, -1, 32, 1, 54, 45, -1, 50, -1, -1, 12, 42, 48, 43, 42, -1, 2, 7, 6, 50, 16, -1, -1, 40, -1, 45, -1, 54, -1, 52, 54, 40, 54, -1, -1, -1, -1, 42, -1, -1, -1, 25, 47, 6, 41, 40, 31, 48, 56, 40, 40, 51, 1, 26, 7, 31, 54, 15, 45, 52, 7, 51, 56, 52, 54, 9, 50, -1, -1, -1, -1, 7, 54, 23, 54, 31, 51, 51, 52, 32, 11, -1, -1, 46, 55, 40, 42, 43, -1, 30, 42, -1, -1, -1, -1, -1, -1, -1, -1, 41, 11, 41, 43, 12, 38, 41, 5, 53, 46, 1, 48, 11, 6, 41, 52, -1, -1, -1, 40, 11, 32, 40, 31, -1, 54, 54, -1, -1, -1, -1, -1, -1, -1, -1, 30, 32, 31, 47, 51, 40, 43, 54, 1, 40, 2, 52, 1, 48, 52, 40, 27, 24, 51, 52, 31, -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, 37, 20, 51, 31, 27, 42, -1, 52, 40, 54, -1, -1, -1, -1, -1, 40, 52, 8, 48, 51, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, 50, 54, 42, 50, 15, 48, 41, 31, 49, 56, 53, 24, 54, 54, 48, 40, 43, 51, -1, -1, -1, -1, -1, 52, -1, 43, -1, 50, 42, 52, 42, 45, 12, -1, 54, 1, 42, -1, -1, 50, -1, 11, 48, 43, 41, -1, -1, -1, -1, -1, -1, -1, -1, 42, 40, 51, 11, -1, -1, -1, 45, 30, 25, 41, 50, 31, 31, 43, 8, 2, 1, 51, 54, 42, 42, 40, 40, 31, 51, 51, 54, 51, 6, -1, 41, -1, -1, -1, -1, -1, -1, -1, 41, 49, 42, 42, 42, 29, 41, 26, 47, -1, 53, 23, 1, 48, 41, 8, 52, 54, 47, -1, -1, 48, 51, 32, 49, 44, -1, 26, 26, 26, 24, 29, 42, 40, 7, 41, 1, 39, 44, 47, 47, 16, -1, -1, 50, 42, 41, 23, 45, 54, 40, 50, 54, 54, -1, -1, -1, -1, 44, 43, -1, -1, 7, 7, 52, 6, 1, 52, 40, 1, 54, 42, 48, 31, 49, -1, -1, 49, 48, 51, 7, 40, 47, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 54, 50, 54, 52, 50, 2, 56, 42, 15, 49, 51, 50, 51, 55, 53, 43, 43, 48, -1, -1, -1, -1, -1, -1, -1, 44, -1, 52, 54, 54, 54, 41, 13, 51, 2, 47, 51, 50, 40, 7, 42, -1, 40, 27, 32, 32, 41, 15, 23, 54, 45, -1, -1, -1, 20, 54, 40, 29, 56, 52, 40, 52, 21, 12, 7, 42, 41, -1, 47, 40, 1, 46, 1, -1, -1, -1, -1, 52, -1, 11, 1, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 30, 6, 50, 54, 40, 48, 32, 7, 49, -1, 9, 52, 7, 31, 52, 51, 30, -1, 52, -1, -1, -1, 1, 51, -1, -1, -1, -1, -1, 7, 48, 3, 56, 48, 42, 41, 41, 54, 51, 40, 27, 54, 47, 54, 24, -1, 42, 51, -1, -1, -1, 50, 49, 32, 54, -1, 3, 46, 40, 42, 42, 15, 44, 47, 31, 1, 45, 54, 45, 56, 40, 40, 51, 8, 50, 53, 50, 52, 40, 42, 47, 1, 54, 51, 31, 54, 1, 40, 56, -1, 51, -1, 37, 20, 51, 54, 27, 42, -1, 23, 54, 1, -1, -1, -1, -1, -1, 31, 45, 15, 54, 41, 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, 51, 52, 54, 42, -1, 31, 47, 24, 43, 31, -1, -1, 47, 40, 8, 40, 53, 6, -1, 7, 40, 3, -1, -1, -1, -1, 41, -1, -1, 45, 21, 12, 7, 33, 41, -1, 54, 41, -1, 46, 1, -1, -1, -1, -1, 40, 40, -1, -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 52, 26, 52, 43, 51, -1, 52, 40, 30, 2, 6, 41, -1, -1, 52, 26, 47, 39, 49, -1, -1, -1, 44, 2, -1, -1, -1, -1, -1, -1, 40, 43, 40, 48, 43, 41, 52, 42, 45, 45, 40, 43, 30, 30, 52, 1, 54, -1, 42, 50, 52, 31, 43, 24, 50, 7, -1, 52, 40, 1, 31, 25, 36, 7, 32, 32, 2, 48, 32, 40, 50, 41, 9, 26, 15, 1, 16, 47, 41, 54, -1, -1, -1, -1, 54, 39, -1, -1, -1, -1, 51, 7, 21, 42, 55, 41, 51, 52, -1, 24, 24, 51, 42, -1, -1, -1, -1, 54, 54, 1, 47, 54, 50, 41, 50, -1, -1, -1, -1, -1, -1, -1, -1, 54, 50, 54, 42, 45, 51, 52, 41, 31, -1, 31, -1, -1, 54, 42, 31, 39, 43, 51, -1, -1, -1, -1, -1, -1, -1, -1, 54, 31, 47, 16, 6, 6, 51, 29, 47, 45, 56, 42, 40, 47, 1, 43, 54, 52, 45, 8, 14, -1, 39, 32, 43, 7, 40, -1, -1, 54, 48, -1, 41, 54, -1, 7, 47, 1, 40, 54, 32, 48, 40, 48, 53, 53, 13, 54, 41, 43, 52, 50, 48, 54, 27, 24, 23, 48, 40, 54, 3, 41, -1, 15, 40, 2, 41, 40, 49, 40, 48, 26, 1, 52, 52, 40, 47, 51, 41, 24, 39, 31, 25, 51, -1, 24, 52, 52, -1, 31, 16, 1, 1, 40, 54, 52, 53, 52, 52, 51, 40, 10, 52, 54, 2, 1, 50, -1, 54, 31, -1, 1, 52, 40, 3, 54, 31, 41, -1, -1, 44, 41, 9, 51, -1, -1, -1, -1, 12, 5, 42, 48, 11, 41, 41, 51, 11, 31, 40, 52, -1, -1, -1, 1, -1, 1, 48, 40, 30, 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, 23, 54, 45, 40, 51, 6, 55, 41, -1, -1, -1, -1, 6, 51, 6, -1, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, 48, 45, 56, 7, 31, 1, 41, 40, 47, 6, 6, 50, 54, 52, 47, 52, -1, 7, 49, 43, 26, 51, 52, 30, -1, -1, 49, 54, 43, 54, -1, -1, 32, -1, 12, 33, 30, 42, -1, 52, -1, 51, 1, -1, -1, 54, 43, -1, -1, 54, -1, 11, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 50, 41, 13, 8, 47, 52, 9, 47, 50, 39, 52, 11, 30, 30, 31, 40, 2, -1, 3, 49, 40, -1, -1, -1, 54, -1, 32, 40, 24, 51, 12, 33, 42, 41, -1, 41, 44, 47, 37, -1, -1, 31, -1, 45, -1, -1, 7, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, 50, 54, 52, 50, 2, 30, 48, 48, 52, 51, -1, 51, 48, 41, 42, 41, 42, 56, -1, -1, -1, -1, -1, -1, -1, -1, 10, 48, 1, 50, 7, 55, 1, 50, 54, 49, 48, 40, 30, 24, 52, 24, 1, 41, 43, 41, 54, -1, -1, 52, 51, -1, 43, 45, 54, 40, 8, -1, 45, 45, 54, 42, 41, 29, 52, -1, 41, 31, 50, 32, -1, -1, 6, 8, 24, -1, 54, 47, 43, 54, -1, -1, -1, -1, 45, 51, 52, 43, 54, 45, -1, -1, 54, 54, 24, 52, 26, 52, 8, 52, 51, 52, 45, 8, 40, 51, 41, 50, 39, 25, 52, 42, 40, -1, 42, 31, 45, 47, 25, 44, 48, -1, -1, 50, 43, 40, 8, 39, 43, 2, 40, 43, 23, 6, 51, 49, 42, 40, 1, 1, 2, 1, 47, -1, -1, -1, 9, 3, 44, 47, 7, 32, 51, -1, 19, 42, -1, 41, 40, -1, -1, 40, 49, 51, 47, -1, -1, -1, -1, 40, 26, 1, 45, 49, 53, 50, 52, -1, -1, -1, -1, -1, -1, -1, -1, 51, 52, 52, 51, 54, 42, 2, 31, 40, 52, 47, 7, 3, 47, 48, 52, 54, 50, 50, 40, 7, 51, 50, 31, 45, 49, 40, -1, -1, -1, -1, 12, 33, 42, 42, -1, 41, 41, 51, 5, -1, -1, 52, -1, -1, -1, 41, -1, 48, 11, -1, -1, -1, -1, 51, -1, -1, -1, -1, -1, -1, -1, 1, 8, 7, 3, 40, 45, 50, 45, 32, 50, 48, 26, 48, -1, -1, 51, 43, -1, -1, 27, 52, -1, -1, 49, 43, 7, 31, -1, -1, -1, -1, 12, 37, 6, 41, 47, 43, -1, 52, 7, -1, -1, 51, -1, -1, -1, -1, 52, 15, 1, -1, -1, -1, -1, -1, 51, -1, -1, -1, -1, -1, -1, 50, 48, 40, 50, 41, 24, 40, 52, 27, -1, 52, 44, 42, 1, 31, 40, 54, 40, 54, -1, -1, -1, 31, 43, 40, 23, -1, 31, 6, 41, 41, 21, 12, 55, 47, 6, 52, -1, 24, 40, 31, -1, -1, -1, -1, -1, 15, 54, 40, 51, -1, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 48, 8, 52, 45, 1, 46, 52, 51, 40, 31, 54, 46, 40, -1, 52, 40, 42, -1, -1, -1, 43, 50, 40, 47, -1, -1, 48, 54, -1, -1, 52, 52, 43, 43, 6, 49, 2, 50, 39, 51, 52, 40, -1, -1, -1, 14, 8, 45, 27, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, 25, 45, 31, 31, 41, 1, 3, 56, 42, 41, 31, -1, -1, 48, 53, 26, 52, 55, 41, 7, 40, 1, -1, -1, -1, -1, -1, -1, 45, -1, 19, 42, -1, 35, 29, -1, -1, 13, 41, 40, 49, -1, -1, -1, -1, 29, 30, 15, -1, 32, 53, 54, 47, -1, -1, -1, -1, -1, -1, -1, -1, 54, 23, 54, 11, 40, 48, 54, 31, 50, -1, -1, 24, 53, 10, 35, 32, 30, -1, -1, -1, -1, -1, -1, -1, 31, 3, 52, 26, 52, 47, 1, 42, 45, 42, -1, 52, 51, 41, -1, -1, -1, -1, 7, 52, 40, 51, -1, -1, -1, -1, -1, -1, -1, -1, 10, 51, 24, -1, 52, 54, 49, 27, 52, 52, 11, 32, 43, 51, 50, 32, 47, 48, 23, 47, 39, 49, 8, 52, 40, 48, 40, -1, 48, 6, 40, 54, 51, 48, -1, 42, 48, 53, -1, 51, 27, 40, 20, 1, 46, 52, 42, 1, 1, 9, -1, 42, 53, 52, 52, 7, -1, 40, 52, 50, 6, -1, -1, -1, -1, -1, 24, 50, 47, -1, 41, 43, 42, 43, 52, -1, 42, 13, 48, 49, -1, -1, -1, 29, 41, 1, 45, 50, 2, 54, -1, -1, -1, -1, -1, -1, -1, 1, 1, 51, 14, 50, 50, 40, 16, 54, 31, 40, 48, 53, 7, 1, 31, 42, 54, 24, 8, 41, 31, 43, 45, -1, -1, -1, 40, 31, 54, 24, 42, 1, 9, -1, 6, 6, 51, 47, 47, 45, 27, 40, 23, 47, 1, 43, 54, 50, 43, 6, 6, 40, 31, 50, 48, 7, 41, -1, -1, 54, 48, 53, -1, -1, -1, 21, 12, 7, 38, 41, -1, -1, 7, 24, 47, 42, -1, -1, -1, -1, 7, 45, 32, 54, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, 25, 31, 50, 43, 40, 43, 50, 42, 13, 26, 54, 1, -1, 52, 50, 6, 54, -1, 54, -1, 9, 1, 53, -1, -1, -1, -1, -1, -1, -1, 54, 50, 54, 31, 50, 2, 47, 31, 48, -1, 41, -1, 46, 47, 26, 42, -1, 52, 41, -1, -1, -1, 56, -1, -1, -1, -1, 50, 45, 40, 7, 41, 52, 42, 48, 45, -1, 42, -1, -1, 31, 45, -1, -1, 51, 51, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 48, 52, 51, 40, 30, 47, 46, 24, 40, 40, -1, 15, 54, 40, 51, 36, 43, -1, -1, 50, 50, 54, 40, 51, 52, 9, 46, 54, -1, -1, -1, -1, -1, -1, -1, 6, 6, 51, 52, 47, 43, 27, 52, 40, 47, 1, 32, 46, 44, 43, 52, 47, 31, -1, 52, 48, 52, 52, 41, -1, -1, -1, 40, -1, -1, -1, 54, 53, 35, 47, 47, 41, 6, 54, 4, 54, 48, 26, 7, -1, -1, 54, 51, 11, 45, 54, 31, -1, -1, 52, 50, 32, 46, -1, -1, -1, -1, 42, 41, 24, 24, 24, 50, 41, 54, 39, 40, 50, 54, 54, 52, 42, 53, 54, 6, 52, 32, 48, 54, 31, 52, 48, 40, 49, 39, 40, 54, 48, 54, 40, 54, 50, -1, 2, 48, 41, 50, -1, -1, -1, 46, 39, 48, 42, -1, -1, 42, -1, -1, -1, -1, -1, -1, -1, -1, 31, -1, 43, 40, 45, 1, 45, 6, 43, 31, 48, 50, 51, 24, 7, 41, 39, 2, 31, 50, 43, 6, 6, 40, 50, 48, -1, 48, 52, 52, 32, 45, 51, 3, 49, 21, 42, 7, 41, 31, -1, -1, 42, 2, 52, 41, -1, -1, -1, -1, 25, 7, 24, 50, 54, 51, 52, 49, -1, -1, -1, -1, -1, -1, -1, -1, 47, 52, 48, 43, 52, 8, 3, 39, 31, 48, 51, 1, 31, 54, 40, 52, 42, 24, 7, 49, 54, 40, 1, 32, 40, 40, 51, 54, 50, 46, -1, 12, 38, 42, 1, 31, 41, 44, 11, 1, 41, 50, 52, -1, -1, -1, 42, 42, 54, 52, 32, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, 37, 54, 54, 6, 54, -1, -1, 1, 7, 40, 31, -1, -1, -1, -1, 50, 56, -1, -1, 47, 50, 53, 40, -1, -1, -1, -1, -1, -1, -1, -1, 50, 48, 40, 16, 41, 31, 40, 42, 52, -1, 52, 31, 41, 1, 24, 23, 40, 42, 51, -1, -1, -1, 31, 40, 45, 8, 24, 31, 6, 53, -1, 12, 38, 42, 1, 52, 41, 41, 11, 1, 54, -1, 52, -1, -1, -1, 54, 42, 52, 41, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 55, 1, 44, 54, 40, 48, 25, 54, 2, 47, 1, 50, 8, 43, 50, 42, 43, 41, 43, -1, 54, 52, 7, 7, 1, 54, -1, -1, 41, 54],
4077
+ thresholds: [0, 0, 0, 0.1651376, 0.1222076, 0, 0.4375, 0, 0, 0, 0, 0.2533333, 0.04799343, 0, 1.098612, 4.153444, 0.9995694, 0, 0.2428571, 0.7044025, 0, 0, 0, 0.6931472, 0, 0.5077296, 0, 0, 0, 0, 0.02316602, 0, 0, 0, 0.3807987, 0.09414381, 0, 5.57973, 0.3230769, 0, 0, 0, 0.3636364, 0.2, 0, 0.5827814, 0.735, 0, 0, 0, 0.2, 0, 0, 0, 0, 0.2781682, 0, 0, 0.2517483, 0, 0.25, 1.098612, 0, 0, 0, 0.1493049, 0.3230769, 0, 0, 0.7175612, 0.68, 0.275, 0, 0.4674693, 0, 0, 0.01591512, 0, 1.386294, 0.9088849, 0.04255319, 4.559038, 0, 0.6849968, 0, 0.09111514, 0.07707246, 0.04799343, 0, 0, 6.186209, 0.1234112, 10.24495, 0, 0, 0.2533333, 0, 0.1222076, 6.186209, 0, 923186e-8, 0.5, 0, 0, 0, 0, 0.01219512, 0, 0.1875, 0, 0.1655462, 0, 0.7829458, 0, 0, 0, 0.7175612, 0, 0, 0, 0.2, 2.649369, 0.25, 0, 0, 0, 0, 0, 0.3230769, 0.2, 0, 0.7683557, 0, 0, 0, 0, 0, 6.478509, 0, 0.01219512, 0.2781682, 0, 0.7836897, 0.275, 0, 0.6849968, 0, 0.2993237, 7.920083, 0, 0, 0, 0, 0, 0, 0, 0, 0.1966292, 0.06774194, 0.1578185, 0, 0, 1.386294, 0, 0, 0, 0, 0.6257396, 0.4674693, 0, 0, 0, 0, 0, 0.6886503, 0, 0, 0, 0.1666667, 0, 0.01591512, 7.698483, 2.163539, 0.8172206, 0, 0.1935484, 0, 0, 0, 0, 0, 0.4674693, 5.57973, 0.08144234, 0, 0, 0.1655462, 0.09111514, 0.6849968, 0.03896104, 0, 0, 0, 0, 0, 0, 0.6842105, 0.09378118, 0, 0, 0, 4077529e-10, 0.8929385, 1.098612, 0.1666667, 0.5, 10.24495, 0, 0, 3.853134, 0, 0, 0.7175612, 0.75, 0, 0, 0, 0.1655462, 0, 0.1655462, 0, 1.098612, 0.6057872, 0, 0, 0, 0, 2.223656, 0.25, 0, 5405406e-9, 0.8773364, 0, 0.1666667, 0, 0, 0.3408666, 0, 0, 0, 3.38491, 0, 0, 0.2, 0, 0, 0, 0, 0.1655462, 0, 0.566474, 1.098612, 0.2, 0.3807987, 0, 0, 0, 0, 1.791759, 0.7836897, 0, 0, 0.7987013, 0, 0.03896104, 0, 3.711259, 0.5859071, 3.465736, 0, 0, 0, 0.7683557, 0, 0, 6.343881, 0.01219512, 0.225, 0, 0.25, 0, 0.1666667, 0, 0, 0, 0.3702046, 4.559038, 0.07975792, 0, 0, 3.590021, 0.09414381, 0.2, 5405406e-9, 0, 0, 0.8172206, 0, 7.698029, 0.4375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.470899, 2.639057, 0, 0, 0.1655462, 0.25, 0.8010488, 0.25, 0, 0, 0.07707246, 0, 0.225, 0.75, 0, 0, 0, 0, 0, 0, 0.6931472, 0, 0, 4.001706, 0.07707246, 0.6257396, 0.1666667, 0, 0, 0, 0, 5.57973, 0, 0, 0.25, 0, 0, 0.68, 0, 0.5889103, 0.275, 0.7175612, 7.698029, 1.098612, 0.05263158, 0, 0, 5.278115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.9245283, 0, 0, 0, 0.01279318, 4.327618, 0, 0, 0, 0.1578185, 0.7514793, 0.04676814, 0.25, 0, 0.735, 0.2781682, 0.75, 0.05263158, 0, 0, 0, 0, 0, 0, 0, 0.325, 0.2, 0, 0.2, 0, 0, 0.1234112, 0.2429577, 0, 0, 0, 3.853134, 0.7848276, 0, 0, 0, 0, 2.944439, 0.7358209, 4.859812, 0.5458733, 0, 0.8773364, 0.15, 7.920083, 2.995732, 2.589959, 0, 0, 0, 0, 0, 0, 0, 0.2533333, 0, 0, 0, 0, 0, 2.397895, 0, 0, 0, 0, 0, 0, 0, 0.1666667, 0.9245283, 0.4859494, 0.3333333, 4.859812, 0.06774194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.859812, 0, 0, 0.5859071, 0, 0, 0.8896571, 0, 0, 4.110874, 0, 0, 0.0494359, 0.7358209, 0.2, 6.660575, 0, 0, 0, 0.1765268, 0, 0.225, 0, 0, 0, 0, 0, 0, 0.325, 0.2, 0, 0, 0, 4.859812, 0, 0, 0.1666667, 0, 0, 0, 5.278115, 0, 0, 0.6415094, 0.2, 0.01820779, 0.5077296, 0.475, 0.1913043, 0, 0, 0, 0, 0, 0, 0, 0, 0.1146875, 0.7836897, 0, 0, 0.1666667, 0.01219512, 0.7, 0, 6.620073, 0.15, 0.6849968, 0, 0.3333333, 0.7175612, 0.525, 6.349139, 0, 0.6931472, 0, 0.07707246, 0.02836879, 0.325, 0.2429577, 0.6931472, 0.1655462, 0, 0, 0.2786465, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0.4674693, 4.327618, 0, 0, 0.09111514, 0.9716312, 0, 0.2, 0, 0, 0, 0, 0.3807987, 1.098612, 0.1655462, 0, 0.1966292, 0, 4.859812, 0.07707246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.001706, 0.01279318, 0, 0.07707246, 0.2, 0.25, 0, 0.8460699, 0, 0, 2.560159, 0.7358209, 0, 0.15, 0, 0, 0, 0, 2.079442, 0, 0, 0, 0, 0, 0, 0.2, 0, 0, 0, 4.110874, 0, 0, 0.5, 0, 0, 0, 0.2, 0.9814815, 0, 0, 0, 0, 0, 1.277376, 0, 6.028278, 0, 0, 0.05263158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01279318, 0, 0, 0.0700191, 0.4674693, 0, 0.8460699, 0, 0, 0, 0, 0.05263158, 0, 0.5, 0.6931472, 0, 0, 2.484907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5859071, 0.2, 0.01820779, 0.9245283, 0, 2.833213, 1.609438, 0, 0, 0, 0.5889103, 0, 0, 0, 0.05263158, 0, 0.05882353, 0.01591512, 0.6849968, 1.098612, 6.224558, 6.760415, 3.7612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03896104, 0.01279318, 0, 0, 1.098612, 0, 0, 0.8616044, 0, 0, 0, 0, 0, 0, 4.153444, 0.4878399, 0, 0, 2.484907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0.3333333, 0.6842105, 0.6729858, 0, 0, 0.09302326, 2.890372, 0, 0, 0.25, 0.7836897, 7.920083, 0, 0, 0, 0, 0, 2.302585, 7.698029, 0.7520133, 0, 0, 0, 0, 0, 0.25, 0, 0.8896571, 0.01820779, 0.25, 0.3807987, 0, 6.907755, 0, 2.772589, 0, 0, 2.079442, 0, 0.5458733, 0.5889103, 1.098612, 0, 0.2, 0.3333333, 0, 0.5, 0.2, 0, 0.9102251, 0.225, 0, 5.231109, 0, 0.06930693, 0, 0, 4.110874, 0, 4.859812, 0, 0, 0.6057872, 0, 0, 0.2115385, 0.125, 3.258096, 0.225, 0, 0, 0, 0, 1.277376, 0.1, 0.3333333, 0, 0, 0.375, 4.007333, 8.007034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.251345, 0.075, 0, 0.125, 8.091627, 923186e-8, 0, 0.7, 0.0346841, 7.698029, 0.8460699, 0.6931472, 0, 9.083983, 0, 0, 0.3341523, 0.25, 0, 0, 0, 0, 0, 0.5077296, 0.3333333, 0, 3.78419, 0.8297873, 0.3341523, 0, 0, 0, 0, 2.639057, 0.04424779, 6.343881, 0.2978621, 0, 4.859812, 0, 0.1, 0, 0, 0, 0, 0.15, 0.275, 0, 0.375, 0, 0, 0, 2.302585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.08144234, 0.3333333, 0, 0.25, 5.686975, 0, 0.4095238, 0.3333333, 0.15, 0.03896104, 0, 0.3, 0, 0.260274, 3111111e-9, 0, 0, 0.72, 0, 0.275, 0, 3.526361, 0.07347349, 2.331571, 0, 0, 0, 0, 0, 0, 0.8896571, 0.09111514, 6.660575, 0.3807987, 0, 0.25, 0.5458733, 0, 2.649369, 0.2, 923186e-8, 0, 0.3230769, 0.2781682, 0.9007138, 0, 0, 5.693732, 0.03703704, 1.098612, 0, 0.8297873, 2.252276, 0.9029938, 0, 0.898181, 0, 8.091627, 7.698029, 0, 0, 0, 0.75, 0, 9.083983, 1.098612, 0, 0.3309545, 0.09302326, 0.8, 0, 6.55108, 0, 0, 0, 0, 0.1234112, 4.859812, 0, 0, 0, 0, 0, 2.639057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.04424779, 0.75, 0, 0, 0.8974359, 0, 1.098612, 0, 0.6415094, 0, 0, 0.5275567, 0, 0.5, 0.3333333, 0, 6.55108, 0, 0.644637, 0.0542577, 0.7836897, 0, 0, 0, 0, 0, 2.792088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.836282, 0, 0.8297873, 0, 0, 0, 0, 0, 1.579311, 0.5, 0.0600245, 0, 2.302585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8896571, 0, 0.25, 0.475, 0, 6.907755, 0, 0.02698599, 8.2933, 0, 0, 1.098612, 0.5458733, 0.5889103, 0.1935484, 0, 0, 6.55108, 0, 0, 0, 0, 0, 0.9029938, 0, 0, 0, 0, 0, 0, 2.719441, 4.110874, 1.098612, 0.075, 0, 0, 4.430817, 0.225, 0, 1.098612, 0.6931472, 0, 0, 6.55108, 6.478509, 7.251345, 0.5077296, 0, 0.275, 0.976508, 0.9521739, 0.2781682, 0, 0, 0, 0, 0, 0, 0.04643963, 0, 0.7142857, 0, 0, 0.09111514, 0, 1.386294, 0.9245283, 0.75, 0.2, 0, 0, 0, 0, 2.825013, 0, 0, 0, 0, 0, 0, 0, 0.9698997, 0.25, 0.2428695, 0.1666667, 0.4486312, 0.1666667, 3.7612, 0.01111111, 0, 0, 0.04799343, 0.5785877, 0, 0, 2.484907, 0, 0.15, 0.1355838, 0.9102251, 8.091627, 0.4973886, 6.186209, 0.01857929, 0, 0, 0.8143564, 0, 0.275, 0.4324605, 0.225, 2.772589, 0, 0.9007138, 0, 0, 0, 0, 0, 0, 0.0754717, 0, 0, 0, 0, 0, 0, 0.75, 0, 0.1935484, 0, 9.083983, 6.55108, 0.8297873, 0.5948718, 0, 0, 0, 0, 8.501063, 0.8, 1.098612, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.484907, 0, 0, 0.1355838, 0.9814815, 0.3230769, 0.3333333, 0, 0, 0, 0, 0.0754717, 0, 0.8301887, 0.275, 5.686975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5275567, 0, 0, 0.2485207, 0.9102251, 0.3341523, 0.2254693, 0, 0, 0.9995694, 5.521461, 5405406e-9, 1.783998, 0, 0.7846154, 0, 0.2, 2.397895, 5.17615, 1.098612, 0, 0.1875, 6.028278, 0, 0, 0, 0.125, 0.05263158, 0.6931472, 0, 0, 0.275, 2.397895, 5396655e-9, 0.475, 0.45, 8.2933, 0.6849968, 2.995732, 6.55108, 0, 7.251345, 0, 0, 5.857933, 1.098612, 0.05882353, 0, 0, 4.559038, 0.2, 0.898181, 0.9908676, 0, 0, 0, 0, 0.1666667, 0.2093023, 0, 0, 0, 0, 0, 0, 0.75, 0.1875, 1.098612, 0.2485207, 4.859812, 0, 6.55108, 1.098612, 0.9521739, 0.3894129, 0, 0, 0, 4.644391, 0.2, 0, 0, 0.3341523, 0, 0.325, 4.143135, 0, 0, 0, 0, 0, 0, 0, 4.624973, 0, 0, 0, 3111111e-9, 2.484907, 0.2, 0, 0.1355838, 0.9814815, 0.07142857, 0, 0, 5396655e-9, 0, 0, 0.0754717, 0, 0, 0, 0, 0, 0.1666667, 0.2993237, 0.621134, 0.9521739, 0, 0, 0, 0, 0, 0.5275567, 0, 0, 3.465736, 0, 0.075, 0, 0.25, 0.05, 0.25, 4.574711, 0, 0.3333333, 0.5, 0, 0, 8.007034, 6.349139, 1.676732, 3.172406, 0, 0.125, 0.3523154, 0, 0, 0.7836897, 0.1655462, 3.258096, 0, 0, 5307856e-9, 5307856e-9, 0, 2.944439, 0.475, 7.698029, 8.2933, 7.257003, 0.2, 2.923849, 0, 0.15, 0.1355838, 0, 0.7972973, 0.04255319, 0.5555556, 0, 0, 6.224558, 0.7972973, 0.1264647, 0.6819527, 0.125, 0, 0.4375, 10.0538, 1.494614, 0, 0.7520133, 0, 0, 0, 0, 0, 0, 0, 0.07142857, 2.564949, 2.484907, 0, 0, 0, 7.251345, 0.1355838, 0.9102251, 0, 0, 0, 0, 7.553287, 0.275, 4.559038, 0.225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1856436, 5396655e-9, 2.19474, 0.9007138, 0.621134, 2.252276, 0, 0, 0.4486312, 0, 0, 0, 0, 0.4210526, 0, 0, 0, 0, 1.494614, 0.25, 1.609438, 2.197225, 0, 0, 0, 0, 0, 0.898181, 0, 0.898181, 0.5, 0, 0.3333333, 0.5889103, 0, 0.225, 2.890372, 7.017506, 0, 0.5, 5.252274, 0.1578185, 2.772589, 0.2, 0.5, 0.2, 0.275, 8.091627, 2.833213, 0.15, 0, 0.1111111, 0.260274, 0.5889103, 0, 0, 0, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 6.186209, 0, 9.083983, 0, 0.1651376, 0, 0, 0, 0, 0, 8.501063, 0, 0, 0, 0, 1.494614, 2.772589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3341523, 0.1, 1.098612, 0.3113497, 3.401197, 0, 0.05263158, 0.08333334, 5405406e-9, 0.9698997, 0, 0, 2.484907, 0.07347349, 0.125, 4.859812, 0.5, 0.6886503, 4.836282, 0, 0, 0.225, 0, 0, 0, 0, 0.5889103, 0.03191489, 0, 0, 0.525, 7.553287, 0, 7.257003, 0.2, 0.2093023, 8.2933, 0.375, 0.4, 0, 0, 0.4878399, 0, 0, 0, 0.35, 6.620073, 4.559038, 0.5948718, 0, 0.8301887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.735862, 1.098612, 0, 0, 0.2428695, 2.639057, 0, 0.075, 0.01857929, 0, 0, 0.0754717, 0.5628141, 0.175, 0, 2.683568, 2.792088, 1.579311, 0.04629841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.091043, 0, 4.356709, 5396655e-9, 3.258096, 5.686975, 0.7972973, 4.41884, 0, 0.2, 0, 0, 0, 0, 0.175, 0.9698997, 0.03896104, 1.94591, 2.252276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.639057, 0, 0.25, 0, 0, 0, 2.484907, 5.693732, 0, 0.4210526, 0.4210526, 0.3333333, 0.225, 0, 0.01219512, 6.55108, 7.920083, 0.1264647, 0.04629841, 0, 2.397895, 5.17615, 0.275, 3.401197, 0, 6.052089, 0, 2.560159, 0.25, 2.397895, 0.4, 5.733341, 0, 0, 6.343881, 0, 0.525, 0.814433, 4.559038, 0, 0.2, 0, 0, 0, 1.609438, 8.2933, 0.7358209, 0, 0, 0, 0.9995694, 5396655e-9, 0, 0, 0, 0.4674693, 0, 0, 0, 0, 0.2781682, 0, 0, 0, 0, 0, 0.8896571, 0, 0.3333333, 0.5315315, 0.1666667, 4.007333, 0.3, 0.8297873, 0.9521739, 0.175, 0, 0.3309545, 0, 6.186209, 0.2, 0.1, 0.275, 0.4, 0.6886503, 0, 0, 0, 0, 0, 2.197225, 0.1255986, 1.098612, 0, 7.470224, 0, 0, 0, 0.02698599, 1.735862, 2.484907, 0.735, 0, 0.4375, 0.09302326, 0.03191489, 8.669914, 0, 0, 0, 0.225, 0, 3.367296, 0, 0.1493049, 0, 7.257003, 0.5889103, 0.25, 0.2781682, 0, 0, 0, 0, 0.4878399, 0, 0, 0, 0, 0.3230769, 0.02702703, 0.8301887, 0.275, 0.3333333, 2.331571, 0, 0.25, 0.2, 580011e-8, 3.555348, 0, 0.1875, 0.1666667, 0.898181, 0, 3.871201, 5.361292, 0, 0.9995694, 0, 7.920083, 0.2781682, 0, 5.252274, 0, 0, 0, 0, 0.01111111, 0, 0, 5396655e-9, 0.1666667, 0.1578185, 0.7972973, 4.41884, 0, 0, 0, 0, 0, 0, 0.175, 0.6257396, 1.098612, 0, 0.1666667, 0.1913043, 0, 0, 0, 0, 0, 0, 0, 0, 0.7358209, 0, 0.8301887, 0.6931472, 0, 0, 0.2955975, 0, 0, 0.9814815, 2.639057, 1.277376, 0, 0.02702703, 0.6415094, 4.41884, 0, 0, 0, 0.2, 0, 0.5, 0.2, 0.5, 0, 0.08483563, 0.7836897, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.3333333, 0, 0.6842105, 0.225, 2.890372, 0.5889103, 2.302585, 0.15, 0.5827814, 5.768321, 2.302585, 2.719441, 7.698029, 0.275, 0, 0, 0.4210526, 7.095064, 0.5, 0, 0, 0, 3.112789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.2428695, 0, 7.257003, 0.425, 0.1012539, 0, 0, 0, 0, 0, 0.375, 7.553287, 0, 2.560159, 0.2993237, 2.302585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.356709, 923186e-8, 0.7175612, 5.686975, 0, 2.252276, 0.5471264, 0.25, 0.04799343, 0, 0, 0, 0.01857929, 0.01183109, 2.19474, 0.275, 2.995732, 0.2993237, 0, 0, 0, 0, 0, 5.129899, 0, 2.397895, 0, 5.252274, 0.2786465, 8.501063, 3111111e-9, 1.791759, 0, 0, 0.3807987, 0, 0.2428695, 0, 0, 4.143135, 0, 0, 1.098612, 2.772589, 0.5315315, 0, 0, 0, 0, 0, 0, 0, 0, 0.4486312, 0.2, 0, 0, 0, 0, 0, 2.890372, 0.5, 0, 0.5471264, 6.478509, 0.3333333, 0.3333333, 2.833213, 0, 0.05882353, 3.663562, 0.2429577, 0.2978621, 0.1913043, 0.566474, 0.2, 0.125, 0.5, 0, 0.4859494, 0.2781682, 0.5546955, 0.01923077, 0, 0.3270142, 0, 0, 0, 0, 0, 0, 0, 0.2485207, 0.9102251, 0.3702046, 0.1913043, 0.08259411, 0.2, 0.5, 0, 5405406e-9, 0, 0, 0, 4.110874, 2.683568, 0.9716312, 1.098612, 5.521461, 0.6849968, 0.425, 0, 0, 1.960601, 0.9521739, 0.1666667, 0.6, 0.5555556, 0, 0, 0, 0, 0, 0, 0.5077296, 0.1, 0, 0.4055944, 3.401197, 0, 0.4375, 0.2428571, 0.07707246, 0, 0, 0, 3.555348, 0.566474, 0.7672956, 0, 2.302585, 0.3807987, 0.275, 3.637586, 0.6849968, 0.2781682, 0, 0, 0, 0, 0.2115385, 4.394449, 0, 0, 0.75, 0.1875, 6.55108, 0.1111111, 4.859812, 4.836282, 0.2, 2.995732, 0.2228809, 0.3894129, 3.711259, 0.5, 0.7526882, 0, 0, 0.3408666, 1.386294, 0.2429577, 0, 0.275, 0.8556951, 0, 0, 2.302585, 0, 1.94591, 0, 0, 0, 0, 0, 0, 4.356709, 5396655e-9, 3.637586, 5.686975, 0.5827814, 0, 0.7175612, 0, 0.04799343, 0.9007138, 4.691348, 0.9844254, 0, 0, 2.079442, 2.890372, 2.252276, 0, 0, 0, 0, 0, 0, 0, 0.9047619, 0, 4.644391, 0.3807987, 0.898181, 0.0600245, 0.2485207, 0, 0.9698997, 0.75, 0.7, 0.6842105, 3.931826, 0.3, 0.1875, 0.2428695, 0, 0.275, 0, 0.3333333, 0, 0.09111514, 0, 0, 0.2228809, 3.555348, 0, 0, 0, 0, 0.1651376, 0.25, 0, 0, 3.526361, 0.275, 4.41884, 0, 0, 0.03149606, 3111111e-9, 0.2955975, 0, 0.38, 0.2, 0, 0.9, 2.639057, 0, 0, 0, 0, 0, 0, 0, 0.6931472, 4.41884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.02702703, 8.669914, 0.898181, 0.4, 2.331571, 0.5, 0.03149606, 0.08144234, 0, 0, 5.438079, 0.1875, 0.1666667, 8.501063, 0.6842105, 0.1666667, 0, 5.9428, 0, 0, 0, 4.234107, 0.01565826, 0, 0, 0, 0, 0, 0.01111111, 1.579311, 0, 0, 0.5278115, 0.1745893, 0.9245283, 0.8929385, 0.0600245, 0.4210526, 0.25, 0, 0.04975546, 0.38, 4077529e-10, 0, 0, 0.3160217, 0, 0, 0, 0, 4.691348, 0.3408666, 0, 0.898181, 0, 0, 0, 0.375, 0.566474, 0.9160967, 0, 0.2115385, 0.7846154, 0.5, 5.733341, 3.988984, 0.3807987, 0.6931472, 0, 0.1, 0.225, 0.8793104, 0.6931472, 5.924256, 0, 6.052089, 7.257003, 0.275, 0.3523154, 0.5458733, 1.94591, 0.2228809, 0.2993237, 0.5, 0.01183109, 3.89182, 0.275, 0, 0, 0.9324324, 0, 0, 0, 0, 0, 0, 0.2088739, 0, 0, 923186e-8, 2.833213, 0, 0, 0, 0, 0, 0.1666667, 2.197225, 0, 0.08483563, 0.3113497, 0.1012539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.9995694, 3.367296, 0.6849968, 0.1745893, 0, 0.2, 0.6141758, 0, 0, 0.5, 0, 0, 0.5458733, 0.15, 1.098612, 0.1, 0, 0, 0, 0.1176471, 0.3, 0, 0, 0, 0, 0, 0.7358209, 0, 0, 4.110874, 0, 0, 0.03149606, 0, 0.2955975, 0, 0.5889103, 0.5315315, 0, 0.9, 2.639057, 0, 0, 0, 0, 0.4, 0.4, 0, 0, 4.41884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.098612, 9.083983, 0, 8.501063, 3.73767, 0.9324324, 0, 7.698029, 0.225, 0, 0.2533333, 0.01219512, 0.5315315, 0, 0, 7.257003, 0, 0.07707246, 0, 0.0346841, 0, 0, 0, 0.4375, 0.5827814, 0, 0, 0, 0, 0, 0, 0.35, 1.94591, 0.375, 3.590021, 2.079442, 0.5471264, 6.55108, 0.566474, 3.637586, 1.94591, 0.075, 1.098612, 0.1666667, 0, 8.2933, 5.733341, 0.6849968, 0, 0.4486312, 3.367296, 6.660575, 0, 2.302585, 0, 3.433987, 0.25, 0, 5.9428, 0.45, 1.94591, 0.25, 0, 0, 0.01111111, 0.3333333, 0.3333333, 0.5827814, 2.331571, 0.1666667, 0.175, 5.459586, 0.72, 0, 0, 0, 4.859812, 0, 0.5948718, 0.6886503, 0.08483563, 0, 0, 0, 0, 0.07347349, 0, 0, 0, 0, 0, 580011e-8, 0.05263158, 0, 0.8896571, 0, 0.6571429, 0.1222076, 6.224558, 0, 0, 0, 0.01565826, 0.941459, 0, 0, 0, 0, 0.04975546, 0.7836897, 3.465736, 0, 0.3309545, 7.470224, 0.8773364, 6.186209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.356709, 3187076e-9, 0.7175612, 2.564949, 0.5546955, 4.41884, 0.5471264, 0.25, 0, 0, 0, 0, 0.4324605, 0.6257396, 0.5, 0, 2.944439, 0.2993237, 0, 0, 0, 0, 0, 0, 0, 0, 0.02871578, 0.25, 0.4651163, 0, 0.1111111, 0.06896552, 0.1578185, 0, 0.1655462, 2.079442, 0, 0.3341523, 0.1, 0.03896104, 4.61512, 2.397895, 0.2002174, 4.912655, 3.135494, 1.098612, 0, 0, 0, 0.1666667, 2.833213, 0.3333333, 0.225, 0, 0, 0.1146875, 2.923849, 0, 0.5315315, 0.6849968, 0, 0.03149606, 0.3230769, 5.236442, 0.275, 0.3807987, 0.5, 3.302175, 0.225, 4.919404, 0, 0, 0, 0.1765268, 0.4055944, 2.833213, 5.768321, 5.924256, 2.560159, 0.5889103, 0, 0, 0, 1.611032, 0.1, 0.06774194, 0, 0.8143564, 0, 0, 0.25, 0, 0.5315315, 0.4, 0.9495798, 0.3, 2.589959, 0, 2.397895, 3.7612, 8.2933, 0.475, 0.5458733, 0.1578185, 0.7987013, 0, 0, 0, 0, 0.01565826, 0, 0, 3.044523, 4.983607, 0, 0.2, 0, 1.098612, 3.555348, 0.1, 0.07347349, 8.501063, 0, 7.257003, 7.095064, 0.9698997, 0.15, 0, 7.553287, 0.03330147, 0, 5.733341, 6.052089, 0, 0.1255986, 0.2, 0, 1.609438, 4.912655, 0.1, 0, 0.5889103, 0.25, 0.3584906, 0, 0, 0.9047619, 0.8143564, 0, 0.1578185, 0, 0, 0, 0, 0, 0, 0.2428695, 1.098612, 0, 0.1856436, 0.5944056, 0, 0, 0, 0.275, 4.356709, 0, 0, 0, 1.098612, 0, 3.89182, 2.792088, 0.275, 0.1666667, 0.4324605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3187076e-9, 2.564949, 0.2, 0.5546955, 0.1111111, 0, 0.9245283, 0, 0, 0, 0, 0.06896552, 0.1578185, 0.02702703, 0, 0.3333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 2.331571, 1.609438, 0, 0.09302326, 0.5, 4.859812, 0.3270142, 0.425, 0.976508, 0.03191489, 0.03191489, 3.637586, 0.3807987, 5.609472, 0.4651163, 4.836282, 0, 0.1875, 0.04799343, 4.234107, 0, 0.9521739, 6.133398, 0, 0, 0, 0.6, 0.2978621, 1.609438, 0.01857929, 0, 0, 0, 0, 0, 0, 0, 3111111e-9, 0, 4.770685, 0, 0.06930693, 0, 0, 0, 0.07975792, 2.772589, 0, 0, 0.3807987, 0, 0, 0.6931472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3341523, 6.620073, 0.3113497, 0, 1.098612, 5405406e-9, 5.9428, 0, 0.7846154, 7.017506, 0, 5.521461, 0, 0, 0.2, 0.1666667, 0.15, 0.2533333, 0, 0, 0.1234112, 0.3, 0, 0, 0, 0.1765268, 0, 0.3333333, 0.25, 0, 0.1966292, 0, 0, 0.2428695, 0.02836879, 0, 0.1856436, 0.4375, 0.07707246, 0, 0, 0, 0.25, 0, 2.302585, 0, 0, 0.1551724, 0.1109164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.356709, 5396655e-9, 2.079442, 5.686975, 0.5827814, 0.5, 2.683568, 2.223656, 4.983607, 0.9007138, 0, 0.9844254, 0.5278115, 0.72, 0.1264647, 0.9245283, 0.7848276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.277376, 2.564949, 5.17615, 0.03149606, 0, 5.236442, 8.669914, 0.5889103, 0.4180328, 3.302175, 0.075, 0.1666667, 0, 4.356709, 0, 3.465736, 0.4055944, 2.833213, 0.5471264, 0.4324605, 0, 0, 7.257003, 0.1222076, 0, 3.988984, 1.791759, 0.7836897, 0.1, 0, 0, 1.609438, 2.302585, 0.1146875, 0.5077296, 0.9088849, 0, 4.836282, 0, 0.5785877, 0.5, 4.691348, 0.25, 0, 0, 0.03191489, 0, 0, 0, 0.4324605, 0, 4.394449, 0.1012539, 0, 0, 0, 0, 3.555348, 0.6842105, 0, 4.110874, 0.6849968, 3.135494, 0, 0, 0.6849968, 0.4324605, 0, 6.133398, 0, 8.091627, 0.6931472, 5.768321, 580011e-8, 4.836282, 0.6931472, 1.098612, 0.15, 0.4210526, 0.2641791, 5.252274, 0, 0, 7.920083, 0.1264647, 0.225, 0, 0.1913043, 0.25, 2.944439, 0.1655462, 0, 0.04545455, 2.683568, 0, 0, 6.343881, 5.231109, 0.175, 0, 0, 3.367296, 0.2533333, 0.125, 3.637586, 0, 0.01591512, 0.03852465, 0.2517483, 0.3341523, 0.35, 3.178054, 2.302585, 0, 4.859812, 0.03896104, 0, 0, 0, 0, 0, 0, 0.2428571, 0.03149606, 0.2, 0.9995694, 0, 0, 0.735, 0, 0.72, 0.275, 0, 0, 0.525, 5307856e-9, 0.9521739, 0.3230769, 0, 0, 0, 0, 0.425, 0, 3.091043, 4.394449, 0.1234112, 0, 1.94591, 4.983607, 0, 0, 0, 0, 0, 0, 0, 0, 0.6842105, 7.257003, 7.920083, 0.3636364, 0.1765268, 0.1420345, 0.9090909, 0.3333333, 0.15, 8.091627, 0.6141758, 0.09302326, 0, 0.5458733, 2.719441, 6.907755, 0.6849968, 5.78996, 3.044523, 0.225, 0.01111111, 0, 7.251345, 0.3333333, 2.302585, 0.9495798, 0.275, 0, 0, 0, 0, 0, 0, 0.2428695, 3111111e-9, 0, 0.2327044, 0.5944056, 0.06930693, 0, 0, 0, 5.361292, 0, 0, 0, 0.01279318, 0, 1.098612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.110874, 0, 0.25, 1.098612, 0.35, 2.197225, 5.17615, 1.94591, 0.5, 4.691348, 3.061964, 0, 2.560159, 0, 0, 0.1578185, 2.772589, 0, 0, 0, 5.056246, 0, 0, 0, 2.564949, 0.03149606, 0.1666667, 0, 0, 0, 0, 0, 0, 0, 0.02836879, 0.03896104, 2.772589, 0, 0, 0.3333333, 0, 0, 0.03852465, 0, 0, 0, 0, 5.768321, 0, 3.89182, 0, 0, 0, 0, 0, 0.5546955, 0, 0, 0, 0, 0, 0, 7.251345, 4.559038, 0.2, 6.343881, 0.3428572, 0, 0.275, 6.55108, 0, 0, 4.70953, 0.9047619, 0.8010488, 5.733341, 0.25, 0.375, 0.2002174, 0.075, 0.4973886, 0, 0, 0, 0.25, 2.833213, 0.1, 0, 0, 0.25, 0.01219512, 0.7044025, 0.7044025, 0, 0, 0, 0, 0, 6.133398, 0, 0, 0.35, 0.25, 0, 0, 0, 0, 0, 0, 0.7836897, 0.3, 0.1578185, 0, 0.0494359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.60517, 4.153444, 0, 8.711114, 2.639057, 4.61512, 0.9814815, 7.553287, 0.9698997, 0.15, 0.3333333, 0.1493049, 0.2093023, 0.325, 0, 7.257003, 0.175, 0.0700191, 0, 0, 0, 3.637586, 5.356586, 0.15, 0.1655462, 0, 0, 4.919404, 0.5889103, 0, 0, 9.083983, 8.501063, 3.637586, 4.60517, 0.03703704, 0.1234112, 0.2533333, 7.698483, 0, 0, 8.711114, 0.15, 0, 0, 0, 0, 0, 2.079442, 0, 0, 0.38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 2.772589, 0.3333333, 0.3333333, 0.72, 2.302585, 1.098612, 0, 0.260274, 0.5, 0.2, 0, 0, 4.153444, 0, 0, 4.912655, 0, 0.2641791, 0.09302326, 0.3, 2.639057, 0, 0, 0, 0, 0, 0, 3.367296, 0, 0, 0.3702046, 0, 0, 0, 0, 0, 0, 0.3742331, 0.25, 0.1234112, 0, 0, 0, 0, 0.2, 0.25, 0, 0, 0.1666667, 0, 0.1255986, 0.5458733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01857929, 0, 0.2, 2.529484, 0.08483563, 0.1666667, 3.637586, 0, 0, 0, 0, 0, 0, 0, 0.1666667, 0, 0, 0, 0, 0, 0, 0, 0, 1.098612, 6.028278, 0, 6.133398, 0.976508, 4.859812, 3111111e-9, 1.791759, 0.1109164, 0, 4.41884, 0.8297873, 0.3270142, 0, 0, 0, 0, 0.5, 6.55108, 0.275, 0.4210526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580011e-8, 0, 0, 6.907755, 6651744e-9, 0.1234112, 0, 5.609472, 5.361292, 0, 0.3333333, 1.609438, 0.9995694, 5.356586, 0, 0, 1.676732, 0, 0.5948718, 0, 0.8571429, 0.6931472, 5.129899, 0.2, 3.228761, 0.175, 0, 2.883696, 0.02316602, 0.2, 0.1146875, 0.2993237, 3.172406, 0, 0.832981, 1.676732, 0, 0, 0.6842105, 0, 0.1, 0, 5.236442, 0.4375, 7.920083, 0.1109164, 2.302585, 3.332205, 0, 0, 0.1585652, 0, 8.2933, 5.857933, 0.3333333, 0, 0.225, 5.278115, 5.78996, 0.03703704, 0, 0, 0, 0, 0, 0, 4.912655, 0.4651163, 0, 0.2485207, 4.394449, 0.02698599, 3.73767, 7.698029, 0, 0.3702046, 0, 3.061964, 0.3408666, 0, 0, 0, 0.2, 0.3742331, 2.70805, 3.555348, 4.691348, 0.75, 0.1493049, 0, 0, 0, 0, 0, 0, 0, 4.007333, 4.61512, 0.4210526, 0, 7.251345, 7.017506, 0.2, 0, 0.2781682, 0.3333333, 0.275, 4.559038, 0, 0, 4.007333, 0, 0.3523154, 0.5889103, 0, 0, 0.3584906, 0, 3.367296, 3.465736, 0, 0, 0, 0.125, 0.25, 0.4324605, 0, 0.3341523, 5.236442, 0, 0, 0.1111111, 0.06896552, 0.1578185, 0.6141758, 0.1655462, 2.079442, 0, 0.1, 0, 0.03896104, 4.61512, 2.397895, 0.2002174, 5.17615, 2.302585, 0.03191489, 0.04255319, 0.1, 0.5, 4.574711, 2.38506, 0.3333333, 0.3428572, 0, 0, 0.1146875, 2.792088, 0, 0, 0, 0, 0, 0, 0.07142857, 0, 0.2955975, 0, 0, 0.75, 0, 0.4651163, 0.5275567, 0, 0, 0, 0, 0.3333333, 1.098612, 0, 0.09378118, 2.70805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.3333333, 8.669914, 2.564949, 0.225, 2.890372, 7.251345, 0.7848276, 0, 0, 0.5889103, 2.302585, 0, 7.698029, 6.478509, 0.01219512, 0.7836897, 0, 0.06774194, 0, 0, 2.302585, 0, 0, 0, 0, 0, 0, 0, 0, 4077529e-10, 4.356709, 5396655e-9, 0.25, 4.912655, 0.5827814, 0.4651163, 0.1666667, 2.223656, 0, 0.4843636, 0, 0.9, 0.425, 0, 0.5275567, 0, 2.564949, 0.5944056, 0, 0, 0, 0, 0, 0, 0, 0, 5.57973, 3.091043, 0.175, 0.03149606, 0.04424779, 3.044523, 3111111e-9, 2.683568, 2.890372, 0, 0.1109164, 0, 0, 0.2, 3.465736, 0, 0, 0.8297873, 0.9995694, 0, 0, 0, 0, 0, 3.89182, 0, 0, 0, 0, 0, 0, 1.494614, 6.55108, 0.7972973, 0.2, 0.5, 0, 0.9814815, 0, 0.35, 0.225, 0, 0, 0.7836897, 0.325, 0.1966292, 0, 2.890372, 0, 0, 7.017506, 6.620073, 0.1651376, 0.425, 0.02584493, 5.204007, 0, 0.7142857, 0.4973886, 0, 0, 0, 0, 0, 0, 0, 0.1111111, 0.06896552, 0.1578185, 7.698029, 0.1655462, 2.890372, 0, 7.257003, 0.525, 0.03896104, 4.61512, 0, 0, 0.4375, 2.302585, 7.095064, 0.4, 0.1666667, 0, 4.912655, 2.38506, 7.412764, 6.028278, 0.28, 0, 0, 0, 0.225, 0, 0, 0, 0.4324605, 0, 0, 0.6141758, 0.8556951, 0.8929385, 0.05, 0.3309545, 0, 0.2422871, 2.529484, 0, 0.05263158, 0, 0, 0.2002174, 0.1222076, 0, 2.484907, 0.0600245, 0.3333333, 0, 0, 4.356709, 5.686975, 0.25, 0, 0, 0, 0, 0, 0.735, 0.6571429, 0, 0, 0, 4.574711, 0.8773364, 0.04975546, 0, 0.125, 5.459586, 0.4973886, 0.7836897, 4.41884, 0.9160967, 0, 0.4973886, 0.03703704, 5.278115, 0, 2.848795, 0.1012539, 0.1666667, 6.907755, 1.386294, 0.275, 0.04799343, 0, 0.275, 0.5889103, 3.38491, 4077529e-10, 0.425, 5396655e-9, 4.356709, 0, 0.5827814, 0.5278115, 0.9245283, 4.912655, 0, 0, 0, 0.9, 0, 1.098612, 0.1420345, 0, 0, 0.2088739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.425, 1.791759, 5.236442, 2.197225, 0.02702703, 2.772589, 0, 1.960601, 4.219508, 0, 0, 0.03149606, 0.5471264, 0, 0.2533333, 0.5, 3.713572, 4.234107, 0.08333334, 0.1111111, 0.1, 5.924256, 3.853134, 0, 2.529484, 4.025352, 6.028278, 0, 3.258096, 0.4210526, 0.6931472, 0.2517483, 0, 0.8896571, 0.07142857, 0.7829458, 0.3333333, 0, 0, 0.8482024, 0.9090909, 5.056246, 0.8929385, 0, 0, 0, 0, 0, 0.01111111, 0, 4.356709, 0.3309545, 0.1222076, 4.70953, 0.04799343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.768321, 3.853134, 2.397895, 7.095064, 0, 0, 0, 0.3333333, 4.327618, 0.02584493, 2.995732, 0.2, 0.1146875, 0.35, 5.361292, 0.09624537, 0, 0, 0.0346841, 0.2422871, 0.15, 3.7612, 0.2, 0.125, 0.25, 0.1578185, 0.06774194, 5.356586, 0.2093023, 0, 0, 0, 0.2428695, 0, 0.2, 0.2327044, 0.4375, 0, 0.6931472, 0.7358209, 3.367296, 4.356709, 0, 0, 0, 0.5077296, 0.5472561, 0.1146875, 9.083983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1255986, 0.02702703, 923186e-8, 0, 0, 1.609438, 0.05263158, 0.25, 0, 0, 0, 0, 0, 3.178054, 0, 0, 0, 0.38, 4.691348, 0, 0.075, 0, 0, 0, 0, 0, 0, 0, 0, 7.251345, 4.559038, 0.2, 0, 0.3270142, 0.3333333, 0.275, 0.735, 4.70953, 0, 5.521461, 0, 0.6571429, 5.733341, 0, 0, 0.225, 0.260274, 580011e-8, 0, 0, 0, 0.25, 0.125, 1.94591, 0, 0, 0.25, 0.01219512, 0, 0, 0, 0, 0.2428695, 0, 6.028278, 0.2327044, 0.5944056, 0, 0.6931472, 0.5889103, 0, 4.356709, 0, 0, 0, 0.04629841, 0.5472561, 6.028278, 0.2485207, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03149606, 0, 5.236442, 0.7307692, 0.2781682, 0.25, 3.302175, 0, 0.3309545, 0, 0.1655462, 4.110874, 5.081404, 0.6931472, 2.833213, 6.186209, 0.260274, 1.94591, 0.8460699, 2.302585, 0, 0.4324605, 4.356709, 0.3333333, 0.25, 2.302585, 0.02871578, 0, 0, 0.4371859, 0.1146875],
4078
+ leaves: [-0.23561, 0.023447, -0.13061, 0.14613, 0.12236, -0.21303, -32768e-7, -0.20092, -0.084424, -0.26486, -0.31022, 0, -0.31748, -0.19889, -0.056845, 0, 0.17176, 0.3584, -0.023486, 0.19746, 0.13156, -0.10633, -0.22493, 0.16248, 0.43741, -0.084778, 0.09116, 0.3288, 0.17944, -0.15092, -0.17831, 0.079143, 48886e-7, -0.20068, -0.21915, 55031e-7, 0.11458, -0.17973, -0.21929, 0, -0.2285, -0.038863, -0.27544, 0, -0.28158, -0.14282, -0.048874, 0, 0.24062, 0.048763, -0.071005, 0.21582, -0.1209, -0.25721, 0.049963, -0.25376, 0.2459, 0.089621, -0.23001, 0, 0.35351, 0.1219, 0.17403, -0.12309, -0.080028, -0.23554, -0.23459, 0.027953, 0.074411, -0.19864, -0.18511, 18541e-7, -0.21768, -6757e-6, 0.077287, -0.22157, -0.261, -0.19163, 0.036432, 0, -0.10356, 0.20375, 0.14411, -0.028966, 0.053082, -0.12654, -0.25986, 0, 0.28012, -0.22242, -0.076944, 0.20812, 0.087574, -0.087544, 0.203, -0.19972, -0.21254, 63567e-8, 5394e-6, -0.24324, -0.12629, -0.24969, 0.084259, 0, -0.033203, -0.20835, -0.23734, 0, -0.24275, -0.10501, -0.18429, 0.14892, 0.1766, 0.021734, -0.26587, 0, 0.17567, -0.1707, -0.037455, 0.27335, -0.12374, 0.047843, -98443e-7, 0.17197, -0.11254, 0.058117, -0.23677, 0, -0.055431, 0.097804, -0.18559, -0.052887, -0.23058, 0, 0.11528, -0.13612, -0.13923, 0.080909, -0.22532, 0, -0.23152, -0.15324, 0.051228, 0, -0.067109, -0.22395, 0.050691, -0.13745, 0.13637, -90173e-7, -0.24041, 0, 0.15377, -0.16689, 0.24341, -0.022105, -0.24788, 0, -0.017616, 0, -0.16462, 0.013612, 0.038635, 0.22989, 0.045081, -0.10209, -0.21564, 0, 72906e-7, -0.16289, -0.21373, 0, -0.22081, -0.078086, -0.15316, 0.13243, 0.20276, 0.028648, -0.22413, 0, 0.022891, 0.15134, -0.094822, 0.099655, 71388e-7, 0.14674, 0.014356, -0.12154, -0.19694, 0.15717, -0.099096, 0.12635, 0.057267, -0.14791, -0.059075, -0.17192, -0.22546, 0, -0.032808, 0, -0.22099, 0, -92074e-7, -0.083904, 0.16629, -0.098288, -0.18969, 0, -0.171, -47879e-7, 0.10167, -0.18003, 0.063927, -0.11723, 0.13549, -0.069106, -0.044025, 0.15229, 0.05828, -0.068127, 0.2058, -0.072384, 0.097679, -0.22337, 0.06138, -0.092718, -0.15632, -0.016754, -0.21677, 0, -0.030546, 0, -0.21458, 0, -0.079727, -80882e-7, -0.081047, 0.16639, -0.17949, 0, 0.15047, 0.051409, -0.22976, 0.1185, -0.10147, 0.076186, -0.078185, -0.19178, 0.20854, -0.10599, -0.2048, 0.13967, -0.042093, 0.12159, -0.21578, 0, -0.032261, 0.11931, -0.051799, -0.16103, -0.20943, 0, -0.028452, 0, -0.20929, 0, -0.076386, -62274e-7, 0.10547, -0.11488, -0.16999, 0, -0.15001, -0.021811, 0.025352, -0.12175, 0.13057, 0.025172, 0.074301, -0.057198, 0.12407, -0.027459, -0.047656, -0.21144, 0.20279, 0.12903, -0.13322, 0.14871, -0.018247, -0.13235, 0.14172, -77991e-7, -0.18302, 0.056846, -0.13949, -0.017568, -0.20477, 0, -0.057345, 0, -0.15907, 24572e-8, 0.14063, -0.079145, -0.16216, -0.044827, 0.09244, -61447e-7, -0.03938, 0, -0.21476, 0, 0.084126, -0.058617, -0.21641, 0, 0.15694, -0.15306, 0.18212, -0.013169, 0.053679, -0.092513, -0.14749, 21819e-7, -0.20963, 0, -0.013958, 0, 0.093811, -0.024886, 0.14564, -0.030214, -0.11964, 41722e-7, 0.07505, -0.07905, -0.20442, 0, 0, 0, 0, 0, 0, 0, 0.1758, 0, -0.089306, 0, -0.046911, -0.19303, -0.021063, 0, 0.06359, -0.044415, -0.20234, -0.021942, -0.059815, 0.035376, -0.17578, -39977e-7, 0.17888, 56802e-7, 0.032227, -0.17538, 0.10322, -0.13686, 0.20193, -0.016966, -0.16308, 0, 0, 0, 0.019733, 0.15787, -0.10009, 0, -0.19851, 0, 0, 0, 0, 0, 0, 0, -0.16689, -33277e-7, -0.14714, -0.022562, -0.08232, 0, 0.24257, 0.023297, 0.011179, 0.089414, 0.16925, -0.04224, 0.057977, -0.16024, -0.20261, 0.017276, -0.19734, 0, 0, 0, -0.034978, 0, 0, 0, 0.13841, 0, -0.082451, 0, -0.1816, -0.04037, 0.034321, -0.089539, -0.042515, 0.062484, -0.19902, -0.019479, -0.18087, 0.086361, 0.019014, -0.16028, 0.063493, -0.11741, 0.16351, -22315e-7, -0.072393, 0.039091, -0.13329, 71813e-7, -0.10325, 0.058053, 0.01795, 0.13029, -0.17391, 0, 0, 0, -0.19253, 0, 0, 0, 0, 0, 0, 0, -20847e-8, -0.11977, 0.062216, -0.11356, 0.14928, -0.050463, -0.158, 0.015336, -0.051316, 0.12938, -0.064063, 0.14377, -0.16945, 0.018967, 0.1208, 0, -0.20148, 0, 0, 0, 0, 0, 0, 0, -0.014448, 0, 0, 0, 0, 0, 0, 0, -0.035177, 0.035992, -0.14586, -0.018246, -0.19382, 0, -0.015127, 0, 0.17943, -56409e-7, -0.067703, 0.04488, -0.0701, 0.061599, 0.16, 0.014724, -0.18755, 0, 0, 0, -0.021173, 0, 0, 0, 0.11844, 0, -0.061561, 0, -0.16332, -0.023872, 0.050659, -0.074893, -0.16955, -34366e-7, 0.12213, 59165e-7, 0.14215, -0.041624, 0.056331, -0.12229, -0.19907, 0, 0, 0, 0.030292, 0, -0.077533, 0, -0.18039, 0, 0, 0, 0, 0, 0, 0, 0.018018, -0.090382, 0.17553, 14363e-7, -0.15225, 0, -0.017398, 0, 0.043841, -0.031724, -0.043696, 0.1923, -0.21268, -0.039746, -0.0678, 0.13241, -0.031904, 0.069522, 0.030221, -0.084149, 0.015512, 0.15657, -0.17832, 0, -0.10322, -0.2203, -0.099107, 0.087317, 0.036236, -0.14766, -0.15847, -0.032689, 0.025683, 0, -0.19392, 0, 0.17749, 0, -0.10242, 0, -0.13504, 0.046039, 0.045757, 0.14189, 0.031598, -0.029439, -0.18635, 0.03277, -0.052484, -0.14436, 0.17969, 0, 0.079609, -0.1613, 0.22792, 0.057374, -0.18702, 0, 0, 0, 0, 0, 0, 0, -62027e-7, 0, 0, 0, 0, 0, 0, 0, 0.029274, -0.10804, -0.10166, -0.013495, 0.043026, -0.14524, -68354e-7, 0.15943, -0.065839, 0, 0, 0, 0.04128, 0.21927, 0.028587, 0, -0.16939, 0, 0, 0, 0, 0, 0, 0, -0.034465, 0, 0.020687, 0.11856, -0.12938, 0, 0.015103, 0, -0.13947, 0.042767, 0.098829, -0.047357, -0.14425, -0.041459, -0.12037, 0.015986, 0.097795, -0.072453, -0.083549, 0.079645, -0.18458, 0, -0.010661, 0, -0.18048, 0, 0, 0, 0, 0, 0, 0, -0.012508, 0, 0, 0, 0, 0, 0, 0, -0.13963, 0.015077, -56633e-7, -0.08447, 0.062878, -0.16086, -0.10433, 69148e-7, -0.040194, 0, 0, 0, 0.069782, 0.21114, 0.02415, 0, -0.17492, 0, 0, 0, 0, 0, 0, 0, -0.011535, 0, 0, 0, 0, 0, 0, 0, -0.18509, -0.02891, 0.026986, -0.12263, 0.06225, -56188e-7, -0.14204, 0.039703, -0.046537, 0.029692, -0.17472, 0.070816, -0.17798, -0.059514, -82378e-7, 0.10293, 0.13536, -0.020498, -0.038635, 0, 10336e-7, 0, -0.13372, 0, -47907e-7, 0, 0, 0, -0.17007, 0, 0, 0, 0.010723, -0.17646, 0.070132, -0.10855, -0.046831, 0.083752, 0.069197, -0.030386, -0.027699, 0, 0, 0, 0.059552, 0.18908, 0.026431, 0, -0.17187, 0, 0, 0, -0.033033, 0, 0, 0, -70176e-7, 0, 0, 0, 0, 0, 0, 0, -94916e-7, 0.062978, 0.068851, -0.086152, -0.17573, 0, 0.020377, 0, -0.023508, -0.22803, -0.029807, 0, -0.019627, -0.12365, -12063e-7, 0.17307, 0.04038, -0.079567, -0.12624, 0, -0.1737, 0, 0, 0, -0.11666, 0, 0.027222, 0, 0.020463, 0.14805, -0.032103, 0, -0.17899, 0, -0.090726, 0.01678, -0.12042, 0.02373, -0.02823, 0.13292, 0.012529, -0.10838, -0.013804, -0.15214, 0.022612, 0, 0.17206, 0.036673, -0.16364, -0.04501, -0.030187, 0, -0.078899, 0.041736, 0.089131, 0, -0.033457, -0.14906, 0.093504, 0, -0.065116, 0, 0.13226, 69597e-7, -0.11842, 0.039862, 0.11633, -0.04845, -0.038627, -0.20604, -0.029656, 0.092349, 0.048404, -0.07827, 0.13944, -0.016131, -0.029648, 0.10428, 0.023442, -0.22563, -0.043018, 0, 0, 0, -0.16429, 0, 0, 0, -68783e-7, 0, 0, 0, 0, 0, 0, 0, 0.14964, -0.12357, -0.11181, 0.014126, 0.090086, -0.031282, -89455e-7, 0.31516, 0.06684, 0, -0.090069, 0, -92682e-7, 0, -0.26428, 0, -0.26338, -0.055295, 0.11234, -0.087996, 0.15817, 0.034464, -0.07469, 0, 0.12275, -0.095274, -0.023412, -0.20414, 0.045986, -16579e-7, 0.19152, 60307e-7, -0.052893, 9224e-6, -0.12237, -0.010576, -0.01067, 0.074624, 0.072276, -0.080276, -0.027338, 0, 0, 0, 0.034721, 0, 0.033964, 0.16654, -0.17646, 0, 0, 0, -0.043635, 0, 0, 0, -0.073243, 0, 0, 0, 0.087852, 0, 0, 0, -0.10229, 0.065018, -0.074961, 0.017362, 0.089023, 0, -0.29757, 0.054169, -0.093661, 0.046198, 0.041942, -0.049027, 0.043594, 0, -0.018869, -0.15043, 74506e-8, -0.14663, -0.094872, 0.1193, -0.23405, -0.036313, -58063e-7, 0, 45862e-7, -0.10684, 0.049912, 0, 0.038759, 0, 0.18962, 0, -0.13663, -0.011265, 0.052403, 0, -0.10657, 0.02187, 0.10709, -0.037369, -0.040169, 0.14692, -0.11607, 0.11025, -0.043673, -0.16994, -0.021179, 0.022038, -0.032832, -0.14966, -0.01537, 0, 0.063013, -0.072169, -0.11594, 0.03021, -0.10074, -0.011879, 0.060257, -0.03694, 82852e-7, 0, 0.10109, 0, 87296e-7, -0.032554, 0.061912, -0.14583, 0.16942, -0.035799, -0.10036, 0, -0.25201, 0, 0, 0, -0.06714, 0.070598, -0.21703, -0.020805, -0.15616, 0, 0, 0, 0, 0, 0, 0, -0.067411, 0, 0, 0, 0.077964, 0, 0, 0, 97184e-7, -0.11251, -0.10297, 0.076476, -0.2293, 0, 0.029734, -0.1664, -0.14847, 0, -0.067685, 0.013569, 0.014483, -0.10248, 0.12095, -0.032881, -0.010592, 0, 0, 0, 0, 0, 0, 0, 0.15136, 0, -0.024172, 0.052452, 0.023562, 0, 0, 0, -0.11703, -67568e-7, 0.027969, -0.1303, -0.032499, 0.096898, -0.066292, 23632e-7, 0.016985, 0.20216, -0.045021, 0, -0.094842, 0, -74077e-7, 0, -0.02272, 0, 0, 0, -0.14686, 0, 0, 0, -0.010843, 0, 0, 0, 0, 0, 0, 0, -0.11554, 0.021106, 0.092855, 61127e-7, -0.089733, 0.13877, -0.31614, 0, -0.15266, 0, 0, 0, 95187e-7, 0, 0, 0, -0.036823, -0.12929, 37199e-8, 0, -0.092425, -54843e-7, 0.077607, 0, -0.12118, -6866e-6, 0.079638, 0, 0.11951, 0, -0.063101, 0.042691, 0.013897, -0.029772, -0.055544, -0.16688, -0.024123, -0.16282, 0.083259, -0.16826, -0.11709, 0.14111, -0.04945, 0.12567, -0.22206, 0, 0, 0, 0.075202, 0, 0, 0, -0.19509, 0, -0.01329, 0, 0.066086, -0.056225, 0.14867, -22096e-7, 0.056172, -0.058332, 0.023545, -0.21655, -0.11662, 0.027989, 0.07086, 0, 0.062976, 0, 0, 0, -39226e-7, 0.045231, -0.10971, 0.028016, 0.099821, -0.11154, 0.10035, -80902e-7, 0.083733, -0.057717, -0.037373, 0.1103, 0.18821, -0.13347, -0.14145, 0.038517, -0.20667, 0, -0.012954, 0, -0.097992, -95788e-7, 0.1367, -0.014512, -74928e-7, 0.061214, -0.025965, -0.35652, 0.010248, -0.12233, 0.045179, 0.17395, -0.11337, -0.017159, -0.013082, 0.13763, 0.060315, -0.10206, 47238e-7, 0.096057, 0.027621, 0, 0, 0, -0.022141, 0, 0, 0, 0.029913, 0.1496, 0.017033, 0, 38395e-7, 0, 0, 0, 17018e-7, -0.073631, 0.10472, -0.086849, -0.1612, 0.031844, -0.20719, -0.014377, 0.17109, 20696e-7, -0.04497, 0, -29675e-7, 0, -0.087524, 0, 0.03505, 0, 0, 0, -0.071413, 0, 0, 0, -0.1334, 0, 0, 0, 0, 0, 0, 0, 0.023132, -0.040639, 13964e-7, -0.059039, -0.03272, -0.15992, -0.027861, 0.13672, -93064e-7, 0, 0, 0, -0.12892, 0, 0, 0, 0.026098, 0, 0, 0, -0.021587, 0, 0, 0, 0.017142, 0, 0.14725, 0.034147, 79433e-7, 0, 0, 0, -44645e-7, -0.14211, 0.022738, 0.12232, -0.039126, 0.094491, -0.15503, 0.046449, -0.084334, 0.086456, -0.050584, -0.16035, 0.046691, 0, 0, 0, -0.022616, 0.054251, -0.12761, 0.11536, 0.13399, -4685e-6, -0.081236, 0.074367, 0.051594, -0.062453, -0.017763, 0.032867, -0.076098, 0.078335, -0.033117, 0.15269, -68014e-7, 0.10593, 0.018231, -0.20272, 0.070388, -0.038895, 0.10451, -0.096534, -0.058115, 0, 0, 0, 0.039447, 0, 0.23759, 0, 0.013685, -0.20623, 0.050223, -0.10228, 0.16018, 0, -67171e-7, 0, -0.26708, 0, 0, 0, 0, 0, 0, 0, -0.058168, 0.037662, 0.098829, -0.10525, 0.031284, -0.014658, 0.082819, -0.060853, 0.1563, 0.011533, 0.066928, -0.037838, -0.18387, 0, 0, 0, -0.17228, 0, 0, 0, 0, 0, 0, 0, -0.057021, 0.044363, 0.11007, -0.045433, -0.16052, 0, -64906e-7, 0, -0.14251, 0, -0.0246, 0, 0.019769, 0, 0, 0, 0.076812, -0.058827, 42936e-7, 0.20053, 0.034049, -0.1825, -42978e-7, 0.043507, 0.026149, 0, 0, 0, -0.019686, 0, 0, 0, 0.020124, 0, 0.13645, 0.03404, 69094e-7, 0, 0, 0, -0.087854, -57371e-7, 0.054704, -0.023845, 0.11312, -0.040289, -0.096164, -0.015069, -0.03686, -0.12912, -0.11467, 0.023048, -0.076172, 0.10125, -0.15371, 0.087017, 0.064094, -0.067367, 87943e-7, -0.18935, 0.06857, 0, 0, 0, 0.057758, -0.031592, -0.24321, 0.035847, 0.045729, -0.038507, -0.010069, 0.094229, -0.058471, 0.04788, 0.022197, -0.020475, 10191e-7, -0.25404, -0.10108, 0.05941, 0.051012, -0.1533, 0.10741, 0, 0.084339, -0.11393, 0.22737, -0.085373, -0.15318, -0.048603, 0.046747, 0, 0.14736, 0.014507, -0.053352, 0, -0.23277, 0, 0, 0, 0, 0, 0, 0, -0.012598, 0.057208, -0.091349, 0.023022, 0.011586, 0.11199, 0.019182, -0.12706, 0.026242, 0, -0.01728, 0, 0.1092, 0, 14761e-7, 0, -0.1458, 0, 0, 0, -0.024548, 0, 0, 0, 0.033619, 0, 0, 0, 0, 0, 0, 0, 0.060769, 0, -0.04168, 0, -0.1155, 0, 0, 0, -0.05635, 0.12375, -0.12039, 0.055108, 0.15638, -0.095208, 0.044876, 0.22391, 0.027898, 0, 0, 0, -0.18537, 0, -0.011476, 0, 10771e-7, -0.085038, -0.13102, 0.061915, 0.010993, -0.038246, 0.060992, -0.039904, 88277e-8, 0.11099, -0.17348, 0.049152, 0.034217, -0.17378, 0.04784, 0.16406, -0.092672, -0.023253, -0.016019, 0.03554, 0.055159, -0.054804, 0.045669, -0.051226, 0.086273, -0.054624, -0.092911, 0, -0.022157, 0, -0.17564, 0, -0.092692, 0, -1804e-6, 0, 0.14682, 0, 1217e-6, 0, 43195e-7, -0.060954, 0.10289, -0.04488, -0.1172, 0, 0, 0, -0.064135, 0, -0.027066, 0.11426, -0.13309, -0.011765, 0.053923, 0, -0.13617, 0, 0, 0, -95846e-7, 0, 0, 0, 0.037966, 0, 0, 0, 0, 0, 0, 0, -0.072782, 19586e-8, 0.065306, -0.08246, 0.10742, -0.082033, 0.025722, -0.13675, -0.044876, 0.081243, -0.020144, -0.17855, -0.020185, 0.024922, -0.015335, 0.082642, -0.024638, 0, 0, 0, -0.19208, 0, 0, 0, 0.053235, -0.069716, 0.13402, 0.036234, 0.011639, 0, -0.087599, 0, 25781e-7, 0.098686, -0.065432, 0.12438, -0.19541, 0.04425, 0.086504, -0.074234, -0.13462, 0.078694, 0.11702, -0.073058, 0.09056, -15529e-7, -0.14822, 0.054961, 0.014229, 0, 0.11745, 0, -0.04893, 0, 0, 0, -0.11138, 0, 0.037646, 0, -0.23011, 0, 0, 0, -0.027023, -0.16706, 0.022953, 0, -0.027132, 66989e-7, 0.091168, -0.078126, -0.091205, 0.014818, -37882e-8, 0.081839, 0.027402, 0, -0.032799, -0.18298, -0.010016, 0, 0, 0, 0, 0, 0, 0, 0.019663, 0, 0.1121, 0, -0.038791, 0, 0.086966, -0.012656, 0.051028, -0.086572, -0.03736, 0.13078, 0.21254, 0.010417, -0.034823, 0, 0.014084, 0, -0.16808, 0, -0.080822, 0, 0.14593, 0, -0.028996, 0, 0.063285, 0, -0.17771, 0, -0.01122, 0, -83381e-7, -0.11569, 0.017525, -0.10765, -0.02245, 0.016724, 0.094137, -0.1391, 0.068641, -0.062311, 0.021696, -0.16206, -0.017319, 0.11769, -0.1252, 0.075449, -0.031026, -0.16999, 89412e-7, 0, 44891e-7, -0.067516, 0.095815, 0, 0.040837, -0.041221, -0.10237, 0.032695, -0.10809, -0.01304, -0.082945, 0.16586, 0.014353, 0.12178, -0.033391, 0.038092, -0.13034, 0.016893, 0.072037, -0.036279, 70478e-7, 0.11629, -0.11277, -33893e-9, 0.13587, 98328e-7, -0.11287, 0.043838, -0.060847, 0, 87352e-7, 0.10047, -0.098051, 0.040839, -0.21272, 0, 0.037511, -0.045712, 0.123, 0, 0.084366, -0.031473, -0.13666, 0, -0.12655, 0, 0, 0, 0, 0, 0, 0, -0.064211, 0.011691, -0.014972, -0.14635, 0.010109, -0.059672, 62041e-7, 0.10672, -0.023883, 0, -0.12907, 0, 0.019307, 0, 0, 0, -0.1207, -0.015463, 0.06351, -0.042867, -0.073681, 0.048049, -0.024599, 0.092666, -0.12755, 0, 0.034755, -0.069839, 0.095509, 0, -0.081056, 0, -0.12933, -87413e-7, 0.012868, 0, -0.024262, 0.08939, -0.050111, 0, 87469e-7, -0.026991, -0.035638, 0.1048, -0.041749, 81463e-7, 0.12802, -92768e-7, -82695e-7, 0, 0, 0, 0, 0, 0, 0, 0.10892, 0.013922, -41265e-7, 0, 83668e-7, 0, 0, 0, 0.058892, -0.076451, 0.024721, -0.027744, -0.077197, 0.014084, -0.01787, 0.079272, -0.043127, 0.023074, -66287e-8, 0.14055, -0.038597, 0.13411, -0.098707, 0.065152, 0.038447, -0.10175, -0.16632, -28862e-7, -0.093939, 0.03921, 0.10399, 0, -0.01804, 0, -0.12887, 0, -0.075525, 0, 0.030172, 0.18488, -0.038075, 0.14793, -0.092156, 0, -0.16637, 0.046933, -0.021845, 0.12988, 0.026858, 0, 0, 0, 0.14711, 0, 0, 0, -0.020831, 0, 0.065017, 0, -0.16046, 0, -15394e-7, 0, -0.095489, 81358e-7, 0.011474, -0.092039, 0.018318, -0.058772, -0.08752, -18835e-7, -74007e-7, -0.13859, -43991e-7, 0.037264, 0.036919, 0.12395, -25011e-7, -0.14369, -0.12517, -0.010082, -75648e-7, 0, 0.01777, -0.088467, 0.11354, -0.025452, -94347e-7, 0, 0.068502, 0, -0.046559, 0, 0, 0, 51949e-7, 0, 0, 0, 0.10178, 0, 0, 0, -0.028925, 0.043219, 0.067088, -0.086252, -0.054021, 0.010411, -0.014638, 0.026482, -0.090897, 0.04702, 0.15688, 0.036888, 0.015195, 0, -0.11163, 0, -0.077564, 0, 0.083213, -0.029393, -0.031977, 0, -0.15203, 0, -0.010751, 0, -0.082013, 0, -42429e-7, 0, 0.13797, 0, 0.014728, -0.042233, -0.11558, 90845e-7, -7404e-6, -0.083762, 0.016986, 0.17788, 0.033243, -0.050931, 64581e-7, 0.15697, -0.060633, 0, 0, 0, 0.011266, 0, 0, 0, -0.019896, 0, 0, 0, -0.10036, 0, 0, 0, 0, 0, 0, 0, 0.068942, -0.041067, 0.16084, 0.022912, -0.10507, -0.012065, -0.019251, 0.095677, 0.017085, 0, -0.14537, 0, -0.072424, 0, 0.11794, 0, -0.15807, 0, -0.078506, 0.044617, -0.082513, 0, 0.12083, -0.031406, -0.134, 0, -11686e-7, -0.059066, -90457e-7, 0.14323, 77072e-7, -0.035686, -0.11386, 0, 0, 0, 0, 0, 0, 0, 40124e-7, 0, -0.081835, 0, 0.045325, 0, 0, 0, 0.075585, 0.012067, 19576e-7, -0.13391, -0.1318, 51564e-7, -53664e-7, 0.038303, 0.097674, 0, 0.015099, 0, -0.04527, 0, 0.072404, -0.013285, -0.044525, 0.015425, -78979e-7, -0.098209, -0.014333, 0.089267, -0.089966, 0.045773, 0.056658, -0.09631, -0.11973, 0.054319, -0.065433, 0.060883, 0.12166, 0, -0.052713, 0.010772, -0.14409, 0, 0.045448, 0, -0.041279, 0, 0.025348, 0, -0.083471, 0, -0.023398, 0, 0.10275, 0, 0.013612, 0.099287, -0.11102, 0.039706, -0.028685, 0.061428, -0.11575, 0.018439, -0.12604, 0, 0, 0, 0.036272, -0.092052, -0.031352, 0.073103, 0.030486, -0.023667, 0.048044, 0.1294, 0.049608, -0.032326, -0.19871, 0, -0.085979, 4444e-6, 0.020267, -0.094499, -76792e-8, 0.039979, -0.10038, 0.032002, 0.013407, -0.098613, -0.059474, 0.041004, 0.047522, -0.032072, 0.026178, 0.10754, 0.063095, -0.019133, -0.018855, -0.14983, -0.01822, 0.018971, 0.13636, -0.071734, -0.016905, 0, 0, 0, -0.16396, 0, 0, 0, 0.028277, -0.074484, 0.1087, 73969e-8, -0.075709, 0, 40413e-7, 0, 21871e-7, -0.041341, 0.13722, 49287e-7, 0.056671, -0.088958, -0.043014, -0.18153, 0.11727, 0.011742, 0.024388, -0.08622, -0.16515, 0, -0.02264, 0, -0.10466, 0.018774, 0.049966, 0, 0.10992, -21507e-7, -0.036403, 0, -0.14363, 0, 0, 0, 0.010664, 0, 0, 0, -90518e-7, 0.085894, -0.071778, 34003e-7, 0.16997, 0.010998, -0.046348, 0, 0.020108, 0, -0.13171, 0, -0.041374, 0, 0.099651, 0, -0.031808, 0, 0.075817, 0, 38908e-7, -0.05047, -0.15225, 0, -0.01268, 0.040336, -0.10195, 0.028765, -0.039957, 0.098513, 0.054283, -45809e-7, -0.038714, 0.022956, -0.14743, 0.01803, -0.04678, -0.13838, -0.049028, 0.063874, 0.13524, 0.017221, -0.041853, 0, -0.056841, 0, 0, 0, -93136e-7, 0.096437, 0.061252, 53848e-7, 0.062076, -0.082447, -0.13714, 0.042362, -0.097878, 55276e-7, 0.1106, 83847e-7, 0.14319, -0.038194, 0.024497, -0.13626, -26103e-7, -0.11189, 0.016746, 0, 0.044217, -0.090371, -0.09722, -85953e-8, -62085e-7, 0.061046, -0.040654, 0, 27452e-7, 0, 0.10122, 0, -0.11487, 0, 0, 0, 0, 0, 0, 0, -0.037365, 0, 0, 0, 0.084002, 0, 0, 0, 10589e-7, -0.062693, 0.063548, -0.060634, 0.11474, -0.026823, -0.064678, 0, -0.028063, 0.095617, -0.092126, 0, -0.125, 0, 0, 0, -0.036297, -0.14816, 0.083051, -0.062535, -0.022415, 0, 0.080522, 0, -0.015626, 0, -0.11818, 0, -0.065294, 0, 0.024414, 0.16188, -0.061575, 0, -0.024825, 0.10529, -0.078415, 0.035891, -0.13011, 0, -0.090405, 0, 79793e-7, 0, 0.11606, -0.027934, 0.022427, -0.060072, 20204e-7, -0.099397, 0.039744, -0.041974, -0.12733, 0, 0.050794, -0.054425, 46145e-8, 0.11477, -68312e-7, -0.054964, 0.12721, -0.035087, 0.1341, 0.03404, -0.053982, 0.073716, 0.046027, -0.012968, 0.076601, -0.068069, 56639e-7, -0.11096, -0.035559, 0.15378, -0.10047, -67894e-7, -0.061907, 0.093528, -0.22489, -0.01893, -0.027795, 0.01969, 0.026065, -0.1162, 0.013245, 0.10167, -0.10124, 0.063015, -0.10752, 0.034513, 0.10425, 0, 0.20295, 0.042196, -0.036406, 0, 0.053887, -0.035807, 0.13426, 0.015376, -0.097838, 98482e-7, 0.016337, -45954e-7, -0.037521, 0.031785, 0.016996, 0.13314, -0.057412, 0, 0, 0, 76887e-7, 0, 0, 0, -0.01911, 0, 0, 0, -0.087509, 0, 0, 0, 0, 0, 0, 0, -70105e-7, 0.041433, 0.068467, -0.08355, 0.042291, -0.034208, 0.013814, 0.12966, 3964e-6, 0, -0.14479, 78673e-7, 0.089535, -0.032952, -0.1554, 0.042186, 0.060245, 0, 0, 0, 0, 0, 0, 0, -0.012007, 0.11925, -0.084431, 0, 0.016551, 0, -0.12657, -0.013439, -0.011864, 0.060022, 0.010243, -0.04107, -0.08947, 0, 0, 0, -51752e-7, 0.056231, -0.03771, 0, 35339e-7, 0, 0.092671, 0, -0.10671, 0, 0, 0, 0, 0, 0, 0, -0.030051, 0, 0, 0, 0.071736, 0, 0, 0, 31473e-7, -0.072083, 0.012807, 0.14409, 0.10327, -0.06175, -46157e-7, -0.19152, 0.083344, -0.037406, -0.086446, 0, 0.11693, 0, 0.023197, 0, -0.13106, 42629e-7, 0.10111, -0.034088, 0.024672, 0, 0.14411, 0, -0.17742, 0, 0, 0, 0, 0, 0, 0, -36481e-7, 0.097976, -0.059644, 0.010945, -0.17736, 0, 0.052166, -0.030308, 0.037536, -0.048902, 0.12781, -0.018824, 0.038762, -0.10626, -0.033123, 73543e-7, 0.010478, 0.09011, 0.046406, -0.066241, 0.14083, 0.012084, -0.013579, 0, -0.024051, -0.15048, 0.093206, -0.047767, -0.012898, 0.16289, -0.15402, -94362e-7, 24719e-7, 0.062015, -9113e-6, -0.12535, -0.015601, -0.14511, -0.014026, 0.091893, 65389e-7, 0, 0.097959, 0, -0.16773, 0, 0.055743, 0, -36911e-7, -0.12144, 0.082647, -0.079237, -0.031669, 0, 0.093475, 0, 0.012563, 0, -0.12906, 0, 0.038875, 0.17193, 0.041115, -0.097809, -0.049101, 0.017072, -0.037349, 0.050084, 0.026053, -0.032238, -0.011195, 0.069669, -0.066892, 0.017119, 0.11833, -0.043509, -0.070306, 0.020291, -0.11598, -0.014225, -0.1057, 0, 0, 0, -85173e-7, 0, 0, 0, 0.044826, 0, 0, 0, 0, 0, 0, 0, 0.051261, -0.05756, 0.12748, 0.020223, -0.091474, -0.011746, -0.021651, 0.083333, -0.092935, 0, 0, 0, 0.065673, 0, -0.032527, 0, 0.026538, 0, 0, 0, -0.12219, 0, 0, 0, -0.096123, 0.016753, 49884e-7, -0.090856, 32493e-7, 0.039051, -0.016152, 0.11115, -16681e-7, 0.070326, -0.011068, 0.11573, -0.12686, 0, 0.071647, -0.048114, 0.057974, -0.053051, -0.18256, -40285e-7, -78319e-7, 0.11933, 0.16779, 0.032566, 0.10845, 0, -69227e-7, 0, -0.034497, 0.06832, -0.073056, 0.010276, -0.057565, 0, 0.011249, 0.068987, -0.15754, -0.02366, -78687e-7, 0, -0.027928, 0.03746, -0.011046, -0.14144, 6063e-6, 0.072532, 0.015347, -0.1454, 69539e-7, -0.085862, 0.11657, -0.026427, -0.047607, 0.098571, 0.06469, -0.095536, 0.066227, -19412e-7, -0.026025, 0.11285, -0.07439, 0.063187, 0.13503, 49338e-8, -0.050154, 0, 0.024529, 0.1139, -0.2184, -0.034988, 0.054296, -0.10769, 0.023021, -0.07461, 95677e-7, -0.076644, -0.013989, -0.10659, 0.083938, 0, -47879e-7, 0.097004, 0.01414, -0.092279, 0.010343, 0.15939, -0.025294, 0, -0.039047, 0.027899, -0.041516, 0.12828, -0.022115, 0.09901, 0.031891, -0.093052, 0.045363, -0.088255, 0.097469, -0.016273, 0.10201, -0.066943, -0.075958, 0.040701, -0.037877, 0.046858, -0.017457, -0.12222, -16047e-7, 0.033737, 368e-5, -0.1146, 0.074924, -0.075918, 0.022368, 0.14439, -0.080919, 0, 0, 0, -0.22023, -0.03294, -0.06084, 0.078199, -0.10181, 0.032295, 0.038213, -0.043524, -57997e-7, 0, 0, 0, 0.028167, 0, 0.16664, 0, -0.12004, -0.013787, 97243e-7, 0, -0.014114, 72876e-7, 0.064214, -0.061129, -0.067284, 0.075401, 0.063467, -0.028729, 0.042858, -0.04769, -0.11297, 0, -0.012945, 0, 0.031571, 0, 0.098479, 0, 0, 0, -0.04451, 0, 0, 0, 0.037625, 0, 0, 0, -0.078096, 0.042662, 0.075535, 0, 0.090581, -0.023385, -0.038111, 0, 0.11877, 0, 0, 0, 0.019453, 0, 0, 0, 0.02405, 0, 0, 0, -0.11454, 0, 0, 0, -0.030574, 12378e-7, -0.043249, 0.061374, 0.074681, -0.017251, 97641e-7, -0.11251, 0.026877, -0.037737, -0.046798, -0.16678, -0.036045, 0.030047, 96194e-7, 0.064719, 0.029535, -0.08166, -0.096311, 0.056961, -6353e-6, 0, 0.13762, 0, -50443e-7, 0.08431, 0.017116, 0.14029, 0.098149, -0.014986, 53427e-8, -0.1474, -0.12936, 0, 0, 0, 0.10073, -0.026024, -0.075384, 0, -0.036497, 0.032456, -0.097204, 0, 0.036425, -0.070906, -0.072285, -61076e-8, -0.083872, 0, 0, 0, 0, 0, 0, 0, 0.033468, 0, -0.054226, 0, 0.066526, 0, -56047e-7, 0, 0.081728, 0, 0, 0, 0, 0, 0, 0, 0.028036, -0.037901, -0.025244, 0.051391, 0.012023, 0.14221, -0.053562, 0, 0.10853, 0.011708, -0.067275, 0.05247, 0.14765, 0.016044, 24642e-7, 0, -0.032356, 0, 0.072403, 0, -0.022052, -0.15057, 0.035241, 0, 81425e-7, 0.079268, -0.11247, 0.015622, -0.03752, 39485e-7, 0.11405, -0.07088, 0.019227, 0, -0.090312, 74272e-7, 0.019095, -90648e-8, -0.071071, 0, -0.080112, 0, 0, 0, 0, 0, 0, 0, -0.01033, 0, 0.03032, 0, 0.0927, 0, 0, 0, 0.056884, 0, -0.011741, 0, -0.044238, 0, 0, 0, -49167e-7, -0.084186, 0.080052, -0.022887, 0.1074, -0.011541, -0.071179, 0.041683, 0.023634, 0, -0.12001, 0, -0.03292, 0, 0.073188, 0, 0.035599, 0, 0, 0, -0.014502, 0, -0.12891, 0, 0.066688, -0.027753, -0.046211, 14763e-7, 3725e-6, -0.087824, -0.040941, 0.065301, -0.11843, 0.020655, 94887e-7, -0.015808, 0.099428, 0, -0.05038, 0, -0.046476, -0.20753, -0.067054, 0.061949, -0.076371, 0, 0.10658, -0.045319, -0.023216, 0.040463, -0.05455, 0.075967, 0.13074, -0.021735, 0.1087, -0.028063, -0.037057, 0, 0.020722, 0.10414, -0.026148, -0.18981, -0.11805, 0.044611, 0.013586, -0.04135, -0.18336, -0.030885, 0.028057, -0.041197, -0.11473, 8579e-6, 0.10433, 0, 0, 0, 0, 0, 0, 0, -0.078048, 0.015275, 0.058664, -0.050641, -0.076761, 0.011452, -0.048617, 0.05105, 0.12659, 58411e-7, -0.033245, 0.032304, -0.046681, 0, 0, 0, 90518e-7, -0.057968, 0.084365, -0.032485, 0.073015, -0.083745, -0.059293, 0.0344, 0.024544, -0.13336, 0.026336, -0.088487, -0.063366, 0, 37683e-7, 0.13725, 0.063915, -11878e-7, -0.1234, 0.092455, 0.097509, -0.024547, -0.14816, 0.025725, 82909e-8, 0.12393, 0.012222, -0.13709, 0.02356, 0, 0.15106, 0, 80078e-8, -0.08415, -51807e-7, 0.022182, -0.016149, -0.08785, -0.013216, 0.097938, -0.039217, -0.16418, 14686e-7, 0, 84703e-7, 0, 0.067341, 0, -0.097223, 0.042336, 0.075396, -0.016452, 0.068711, -0.075266, 0.014318, 0.15257, 0.078445, -0.036142, -0.046485, 0.075777, -0.13983, 0.016621, 0.030359, 0, -13904e-7, 0.062646, -0.11038, 0.025236, 0.037315, -0.044186, 0.067745, -0.019436, -75564e-7, -0.069348, -0.017988, 0.13503, -0.064786, 0.062311, 0.032619, -0.093655, -0.066577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60694e-7, 0.08374, -0.030204, 0.02166, -0.069387, 0.085511, -0.049972, 0.091911, -0.054857, -0.21127, 0.065635, -0.077686, -0.058378, 0.028323, -0.011569, -0.14229, -0.15949, -0.022667, -0.034547, 0.066567, -0.093185, -0.017722, 0.03802, -0.044432, -0.059983, 0, 0.059735, 0, 0.15142, 0, 0.024378, 0, 0.029274, -0.028514, -0.087855, 0, -0.060101, -99398e-8, 0.031324, -0.061277, -0.073847, 0, 0, 0, 0, 0, 0, 0, 29692e-7, -0.016547, 0.042697, 0, 0.09233, 0, 0, 0, -0.039958, 0, 0, 0, 0.031085, 0, 0, 0, 75879e-7, -0.03649, 0.025366, -70925e-7, -0.10259, 0, 76021e-7, 0, -0.1205, -32473e-7, 0.087623, -0.03726, 0.06484, 0, -43988e-7, 0, 0.014698, 0.092447, -0.14334, 0.073741, -0.11843, -26277e-7, -0.054267, 0.012724, -0.021242, 0, 0, 0, -0.13438, 0, 0, 0, 0.01993, 0, -0.088753, -8987e-6, 42327e-7, -0.012898, 0.029834, -0.13108, 43117e-7, 0, 0, 0, -0.073312, 0, 0, 0, -0.027995, 0, 0.076603, 0.010733, -0.037047, 0, 0, 0, 0.071709, 0, 0, 0, 0, 0, 0, 0, 55723e-7, -0.032517, -0.07081, 54897e-7, -0.060529, 0.060508, -0.02562, -0.15117, -0.09165, 0, 0, 0, -15626e-7, 0, 0.03115, 0.13288, -0.049509, 0.067512, 88059e-7, -0.14817, 0.11426, 0.020746, -69245e-7, 0, 0.016984, -0.2156, -0.095263, 0.07485, -0.12414, 0.046094, 0.10663, -0.01294, 0.046531, -0.021249, -0.038091, 0.075778, -19268e-7, -0.062984, 0.074832, -0.016121, -0.031363, 0, -0.018621, 0.061026, 0.070515, 0, 0, 0, -0.094531, 0, 0, 0, -0.01164, 0, 0, 0, 0.045352, 0, 0, 0, 0, 0, 0, 0, 22532e-8, -0.054367, -96745e-7, 0.071514, 0.016327, -0.10466, 0.079813, 0, 0.0419, 0, -0.11622, 0, -0.029137, 0.064427, -11356e-7, 0.12526, -0.022636, 0.055335, 41816e-7, -0.089303, -0.16328, 0, 0.037796, 0, -92388e-7, 0.10268, 0.059209, -0.16494, 0.12371, 0, 0, 0, -42472e-8, 0.088959, -0.01807, 0.091526, 0.025205, -0.067488, 0.088899, -0.019906, -0.080428, 0, 0.073976, -0.064864, -0.010102, 0, -0.12425, 0, 0.053192, 0, -72896e-7, 0, -0.073692, 0, 0, 0, 0.095601, 0, 0, 0, 52792e-7, 0, 0, 0, -37165e-7, 0.024189, -0.013629, -0.13166, 0.064315, -0.013175, -0.027892, 0.080533, -0.043592, 0.10371, -0.090396, 0.012085, -0.059576, 17789e-7, -0.012954, 0.11632, -0.020293, 0, -0.096478, 0, -22258e-7, 0, 0, 0, 0.087081, 0, 0, 0, 0.012164, -0.084984, 0.029828, 0, 12298e-7, -0.094334, 0.067368, -0.037647, 0.028061, 0.13586, 83007e-7, 0, -53086e-7, -0.049861, -0.014786, 0.034914, -0.016577, 0.11328, -0.074623, 0.057475, -0.060874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.072421, -0.067789, -0.14034, 0.048996, 0.095073, 0, -20842e-7, 0, 0.10831, 0, 0, 0, 0.015003, 0, 0, 0, -0.13018, 0, 0.070154, -0.051793, -0.07156, 0.068217, 0.093561, -0.022408, -0.015392, 0.071292, 0.13787, -0.048402, -22329e-7, -0.054159, 0.098085, -0.048759, -0.088504, 0, 0, 0, 0, 0, 0, 0, 0.046487, 0, 0, 0, -0.04283, 0, 0, 0, 0.049892, -0.048272, -0.084313, 0.021002, -0.12778, -0.018955, 0.024201, 0, 0.016427, -0.049224, 0.04356, -0.082732, 51401e-7, -0.029967, 0.041281, -0.02351, -66707e-7, 0.039986, -0.11837, 78793e-7, -0.10802, 0.054786, -0.032356, 0.097517, -25863e-7, 0, -0.15986, -0.014649, -0.020449, 0.071434, 0.029209, -0.12488, -0.034113, 0.014438, -0.13194, -57964e-7, 0.12533, -0.024238, -0.069328, 0, 0.13724, -0.032544, 0.051254, -0.10671, 8457e-6, -0.15378, 0.020007, 0, -94621e-7, 0.069534, -0.011562, 0.039164, -0.017162, 0, 0.098197, 0.014499, 0.032261, -0.051474, 0.11024, -17162e-7, 0.060177, -0.074861, -0.15746, 0, -0.015913, 0, 0, 0, 44952e-7, 0, 0.13828, 0, -0.081701, 0.032823, -0.03152, 0.089107, 0.015357, 0.12929, 37121e-7, 0, 48569e-7, -0.035331, 0.081198, -0.023418, -0.046096, 0.011596, 0.10078, -62143e-7, -0.01174, -0.16655, 0.016809, 0, 0.031727, 0, 0, 0, -0.088292, 0, 0, 0, 0, 0, 0, 0, 34244e-7, 0.046799, 0.017108, -0.16899, -146e-5, -0.11294, -86982e-8, 0.083014, 1379e-6, -0.014092, -0.074625, 0.092358, -0.1252, 0.026724, 0.14448, -12114e-7, -0.01348, 0.051631, -0.096134, 0, 0.027196, 0, 0.14104, 0, 0.018466, -0.07275, 0.12551, 0.038002, -0.074364, 0.06714, -0.12508, 0.021394, -0.013158, -0.2091, -0.090769, 0.063508, 0.043259, -0.11867, 0.10997, 0, -0.061354, 0.054383, 87675e-7, -0.025932, 0.069052, -0.047497, 0.09614, -0.04538, -0.037436, 0.054846, -0.16423, -0.011058, -67032e-7, 0.083432, 0.023966, 0.13873, 0.079415, 0, -0.011765, 0, -0.02855, 0.062349, -0.066807, 67372e-7, -0.028091, -0.14046, 1795e-6, 0, -0.040078, 0, 0.075265, 0, -22216e-8, 0.025852, -0.083628, 47734e-7, -29351e-7, -0.10202, 0.091706, -0.054675, 49582e-8, 0.043259, -0.035803, 0, 0.077701, 0, 56232e-7, 0, -0.082122, 0, 0, 0, 0, 0, 0, 0, 0.040111, 0, 0, 0, 0, 0, 0, 0, -4736e-7, 0.036989, -0.07113, 0.019354, -21085e-8, 0.084813, -0.028817, 0, 0.016399, -0.090104, 0.04557, 0, -0.075399, 0.061857, -0.02894, 0.090185, -0.019948, 0.06452, -0.053624, 0, -0.01932, 0, -0.10565, 0, -0.046083, 0, 0, 0, 56372e-7, 0, 0.095632, 0, 0.072401, -0.056473, -0.095322, 0, -54519e-7, 0.10486, -0.059186, 0.05208, -0.090862, 0, 0, 0, -0.059152, 0, 40407e-7, 0.075818, 0.023541, 0, 0, 0, -0.012171, 0, -0.109, 0, -82365e-7, 0.010551, 0.023798, -0.14501, -0.013234, 0.03534, -0.1121, 0.010917, -0.017687, 0, 0, 0, 0.051828, 0, 0, 0, -0.096246, 0, 0.021185, -0.061406, 0.042289, 0, -0.030129, 0, -0.073371, 0, 0, 0, 0, 0, 0, 0, -0.030231, 0.041888, -0.099148, 0.016334, -84693e-8, -0.031174, -0.029597, 0.042749, 0.057697, -0.038531, -0.045459, 0.084836, 0.01991, -0.089102, 0.098096, -0.068546, -0.024574, 34075e-7, 56476e-7, -0.1519, 0.099905, -0.028271, 0.027696, -0.07069, 0.023926, -0.089018, 0.052613, 0, -0.11073, 0, -17871e-7, 0, 0.034805, 0, 0, 0, 0, 0, 0, 0, -17624e-7, 0.054975, -0.073771, 0.053292, -0.04409, 0.032918, -0.10589, 0, -0.040952, 0.040368, -0.1467, -0.011103, 0.036183, -0.068113, 0.13565, 0.024473, -0.011316, 0.0615, -0.016938, 0, -0.05374, 0, 0.016534, 0, -0.058042, 0.028406, -0.11065, 0, -0.039548, 0, 0.067803, 0, -40078e-7, 0.053614, -0.10499, 0.037209, -0.070159, 0.063901, -0.044992, 0.082937, 0.035033, -0.024661, 0.093549, -0.018313, -0.027553, 0, 0.15641, 0, -0.068142, -8006e-6, 0.046173, -0.087695, 0.084142, -0.029607, -0.072893, 0.029938, 0.097495, 0, 0, 0, -89587e-7, 0, 0, 0, -0.062636, 0.049858, 0.033583, -0.011686, -0.011819, -0.077281, 0.11728, -0.04263, 0.094023, -0.064688, 0.018571, -0.054869, 0.054816, -0.025101, -0.077111, 0.12447, -0.080208, 0.032175, 0.10619, -0.026948, 0.044988, -0.043586, 0.035888, -0.15549, 0.10289, -0.081816, -0.062961, 0.017548, 0.12173, 79593e-7, 0.048087, -0.052038, -48578e-7, 0.07936, -0.028667, 0, -0.084679, 0, -0.055043, 0.056624, -0.058637, 0, 0, 0, 0, 0, 0, 0, 0.017949, 0, 0, 0, -0.010623, 0, -0.10089, 0, -0.024741, 0.09267, -0.037683, 0, 0.017495, -0.08733, -17206e-7, 0.030103, -0.020631, 0.037982, -0.07277, 0.017193, -0.071013, 0.049577, 0.055074, -0.051208, 0.068817, -0.091669, 64682e-7, 0.090505, 0.13803, 0.02049, -53464e-8, 0, -0.059998, 0.066297, -0.018851, -0.11675, 0.096206, -34643e-7, -0.071539, 0.025012, -0.024888, 0.064844, 0.15481, 0.012736, 42901e-7, -0.037584, -0.060621, 0.019117, 24629e-7, -0.030689, -0.091479, -68942e-7, -0.01967, 0.041313, 0.016918, 0.097876, -0.065399, 0.014023, 0.069674, -0.015819, -25726e-7, -0.13065, 0.051227, -0.069298, -0.07594, 0, 0, 0, 0, 0, 0, 0, 0.033386, 0, 0, 0, 0, 0, 0, 0, 0.046566, -0.043066, 0.018075, -0.11143, 0.033705, -0.072396, -0.028093, -0.14962, 0.070676, -0.029298, 0.041516, -0.086733, 0.059211, -0.063577, -0.011734, 0.097562, -0.019105, 0.027536, -0.036594, 0.029791, -0.020464, -0.17061, 0.012298, -0.045872, 0.032919, -0.10686, -0.016498, 0.10019, -0.059879, 84058e-7, 0.077123, 0, 0.050061, -1209e-6, -0.098278, 0.01663, 0.010824, -0.093375, -1494e-6, 0.037135, 72528e-7, -0.062714, 0.078, 0, 0.03689, 0, -0.028829, -0.11571, -0.011079, 0, 0.029034, 0, 0.083556, 0, 0, 0, 0.022749, 0, 0, 0, -0.044617, 0, 0, 0, -37082e-7, 0.098453, -0.067431, 0.01461, 0.10397, 0, -0.017818, 0, 0.029814, -0.10073, -0.041792, 0.075505, -0.047232, 0.033078, -0.042624, 41926e-7, -0.067843, 0, 0, 0, 0, 0, 0, 0, 82708e-8, 0, 0, 0, 0, 0, 0, 0, -15657e-7, 0.017263, -0.028349, 23201e-7, 79103e-7, -0.10576, -0.03311, 0.14053, -0.072866, 0, 0, 0, 42304e-7, 0, 0.02036, 0.11578, 0.017952, -0.063042, 0.018363, 0.096834, -0.050257, 0.073149, -0.11434, 0.021654, 0.025309, -0.14751, -0.068238, 0.0644, 0.052156, -0.074221, 0.10291, 0, -0.020212, 0.035862, -0.089531, 0.014962, -0.083256, 0.010995, -0.013033, 17731e-7, 0.080368, -0.03904, -0.080374, 0, -0.080963, 0, 0, 0, -8666e-6, 0, 0.027735, 0, 0.079129, 0, 0, 0, -0.040607, 0, 0, 0, 0.024221, 0, 0, 0, 25431e-7, 0.024761, 0.027613, -0.054994, -0.044259, 0.023344, -0.074647, 0.058446, 0.0401, -0.058356, -0.1152, 0, 0.019262, -0.11489, -0.063693, 0.072207, -0.010403, 0.042492, 0.075728, -0.063659, -0.047093, 0.031363, 0.05706, -0.089045, -0.011916, 0, 0.082811, 0, -0.015375, -0.14935, -0.092823, 0.038853]
4079
+ };
4080
+ var BLOCK_STACK_MODEL = {
4081
+ kind: "trees",
4082
+ depth: 5,
4083
+ base: -0.422449,
4084
+ features: [57, 57, 57, 60, 61, 62, 57, 48, 65, 64, 3, 51, 6, 50, -1, -1, 31, 6, 54, 51, 48, 59, 63, 52, 62, 40, 61, 40, -1, -1, -1, 57, 57, 57, 62, 62, 62, 57, -1, 63, 63, 48, 59, 58, 50, 61, -1, -1, 28, 51, 54, -1, 57, -1, 52, 54, 48, 50, 30, -1, 2, -1, 57, 57, 57, 62, 62, 61, 57, -1, 63, 64, 41, 58, 6, 30, 25, -1, -1, 54, 49, 65, 54, 59, 54, 7, 54, 3, 59, 52, 51, 60, 49, 60, 57, 57, 61, 58, 62, 57, -1, 28, 54, 63, 41, 2, 50, 40, -1, -1, 63, 32, 63, 24, 50, -1, 30, 40, 30, 52, 52, -1, 60, 48, 57, 57, 57, 62, 64, 62, 57, -1, 63, 62, 48, 59, 6, 30, 53, -1, -1, 54, 49, 65, 54, -1, -1, 7, 30, 3, 63, 62, 45, 40, 61, 61, 57, 57, 62, 64, 57, 57, -1, 63, 59, 60, 3, 58, 50, 40, -1, -1, 28, 49, 63, 52, -1, -1, 58, 63, 30, 15, 60, -1, 61, 48, 61, 61, 57, 62, 51, 57, 25, -1, 32, 62, 65, 3, 43, 57, 51, -1, -1, 60, 60, 52, 53, 64, 53, 8, 63, 32, 63, 65, 40, -1, 1, 57, 61, 57, -1, 56, 62, 57, -1, -1, 59, 54, 54, 59, 65, 40, -1, -1, -1, -1, 65, 65, 51, 47, 52, 47, 45, 8, 31, 62, 62, 48, 60, 62, 57, -1, 54, 57, 57, -1, -1, 65, 63, 51, 7, 25, 40, -1, -1, -1, -1, 65, 31, 59, 32, 62, 65, 63, 65, 40, 46, 61, 48, 60, 62, 57, -1, 54, 60, 31, -1, -1, 65, 51, 63, 15, 39, 53, -1, -1, -1, -1, 65, 56, 28, 48, 41, 49, 30, 43, 65, 50, 65, 61, 57, 62, 57, -1, 32, 58, 57, -1, -1, 60, 64, 54, 8, 31, 40, -1, -1, -1, -1, 62, 63, 40, -1, 56, 54, 58, 54, 43, 53, 61, 50, 57, 62, 57, -1, 32, 59, 57, -1, -1, 60, 64, 54, 6, 65, 40, -1, -1, -1, -1, 42, 63, 61, -1, 63, 59, 25, 63, 53, 62, 61, 50, 57, 62, 57, -1, 32, 58, 31, -1, -1, 60, 64, 30, 8, 40, 53, -1, -1, -1, -1, 63, 45, 61, -1, 38, 40, 56, 65, 48, 23, 65, 61, 62, 62, 57, -1, 40, 57, 40, -1, -1, 51, 40, 59, 63, 61, 42, -1, -1, -1, -1, 58, -1, 28, 59, 40, 61, 62, 30, 54, 41, 53, 62, 61, 7, 57, -1, 54, 56, 40, -1, -1, -1, 64, 65, 15, 61, 42, -1, -1, -1, -1, -1, -1, -1, -1, 65, 54, 58, 45, 12, 41, 53, 62, 62, 62, 57, -1, 40, 45, 40, -1, -1, 51, 56, 61, 11, 61, 31, -1, -1, -1, -1, 41, -1, 65, 40, 52, 15, 1, -1, 54, 41, 63, 53, 61, 60, 57, -1, 54, 63, 40, -1, -1, 7, 59, 59, 32, 2, 50, -1, -1, -1, -1, -1, -1, 51, 49, 65, 52, 6, 58, 54, 65, 41, 41, 62, 62, 62, -1, 48, 63, 2, -1, -1, -1, -1, 65, 2, 25, 7, -1, -1, -1, -1, -1, -1, -1, -1, 12, 63, 44, 48, 40, 49, 62, -1, 60, 59, 57, -1, -1, 59, 40, -1, -1, -1, -1, 40, 45, 57, 48, -1, -1, -1, -1, -1, -1, -1, -1, 65, 28, 12, 11, 54, 41, -1, 54, 60, 59, 63, -1, -1, 61, 2, -1, -1, -1, -1, 65, 65, 30, 60, -1, -1, -1, -1, -1, -1, -1, -1, 32, 64, 31, 40, 44, 51, 56, 6, 60, 59, 59, -1, -1, 12, 53, -1, -1, -1, -1, 63, 41, -1, 31, -1, -1, -1, -1, -1, -1, -1, -1, 40, 50, -1, 41, -1, -1, 60, 2, 62, 24, 63, 57, -1, 33, 2, -1, 64, -1, -1, 25, -1, 30, 61, -1, -1, -1, -1, -1, -1, -1, -1, 49, 31, -1, -1, 44, 51, 62, 6, 60, 59, 57, -1, -1, 40, 40, -1, -1, -1, -1, 65, 54, 41, 24, -1, -1, -1, -1, -1, -1, -1, -1, 65, 54, 53, 51, 42, -1, 41, -1, 62, 59, 63, -1, 40, 65, 2, -1, -1, -1, -1, 51, 40, 30, 65, -1, -1, -1, -1, -1, -1, -1, -1, 32, 63, 31, 49, 44, 51, 56, -1, 60, 59, 58, -1, -1, 12, 54, -1, -1, -1, -1, 33, 41, 25, 40, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, 41, 6, -1, 27, 61, 60, 65, 45, -1, -1, 58, 1, -1, -1, -1, -1, 24, 31, 13, 30, -1, -1, -1, -1, -1, -1, -1, -1, 54, 65, 52, 52, 3, -1, 42, -1, 57, -1, 63, -1, -1, 7, 25, -1, -1, -1, -1, 50, 48, 65, 56, -1, -1, -1, -1, -1, -1, -1, -1, 65, 52, 59, 40, 32, 59, 9, 65, 62, 59, 65, 7, 38, 47, 65, 8, -1, 45, 41, 50, 24, 65, 6, -1, -1, -1, -1, 51, 31, -1, -1, 63, 59, 40, -1, 42, 40, 40, 42, 57, -1, 12, -1, -1, 33, 58, -1, -1, -1, -1, 52, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, 52, 65, -1, -1, -1, -1, 1, -1, 61, 52, 42, -1, -1, 25, 15, -1, -1, -1, -1, 63, 56, 65, 57, -1, -1, -1, -1, -1, -1, -1, -1, 26, 6, 50, 48, 10, 65, 47, 50, 59, 32, 40, 40, -1, 63, 31, 65, 49, -1, -1, 31, 15, 1, 65, -1, 48, 50, 31, -1, -1, -1, -1, 8, 52, -1, 50, 54, 65, 38, 52, 57, -1, 7, -1, -1, 2, 48, -1, -1, -1, -1, 63, 40, -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, 65, 41, 13, 65, -1, -1, 65, 40, 59, 32, 12, 40, 64, 33, 41, 41, 49, -1, -1, 52, -1, 41, -1, -1, 42, 40, 31, -1, -1, -1, -1, 52, 52, -1, -1, -1, 61, -1, -1, 57, -1, 65, -1, -1, 65, 6, -1, -1, -1, -1, 65, 40, 54, 42, -1, -1, -1, -1, -1, -1, -1, -1, 25, 27, 54, 52, -1, -1, -1, 61, 59, 32, 12, 63, 52, 42, 51, 65, 50, -1, -1, 40, 50, 65, 43, 64, 47, 1, 40, -1, -1, -1, -1, 62, -1, 65, 48, -1, -1, -1, -1, 21, 48, 39, 15, 50, 65, -1, 48, 4, 52, 2, -1, -1, -1, -1, 52, 50, 7, 65, 56, 41, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, 40, 8, 31, 59, 31, 49, 42, 41, 64, 31, 26, 50, 39, -1, 6, 41, 1, -1, 62, 32, 62, 64, 1, 40, -1, 54, -1, -1, -1, -1, 63, 7, 25, 65, 65, 65, 56, 11, 65, 65, 51, 52, 49, 40, 6, 49, 52, 24, 31, 56, 60, 60, 65, 61, 55, 31, 58, -1, -1, 42, 52, 33, 42, -1, 65, 62, -1, -1, 31, 9, 58, 40, -1, -1, -1, -1, 52, 49, 54, 56, 41, 52, 48, 63, -1, -1, -1, -1, -1, -1, -1, -1, 12, 33, 51, 42, -1, 65, 43, 40, 48, -1, -1, -1, -1, -1, -1, 62, -1, 54, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, -1, 7, -1, -1, 2, 48, -1, -1, -1, -1, 7, 40, -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, 63, 1, 52, 50, -1, -1, 52, 40, 50, 48, 31, 63, 52, 63, 62, 16, 56, 62, 41, -1, 59, 62, 1, 42, 53, -1, 42, -1, -1, -1, 51, -1, -1, -1, -1, 44, 52, 57, 61, 30, 38, 41, 65, 61, 54, 50, 24, 21, 59, 58, -1, 59, -1, 61, 40, 62, 42, 65, -1, 54, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 12, 33, 51, 52, -1, 65, 48, 52, 65, -1, -1, -1, -1, -1, 60, 40, 40, -1, 50, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, 7, 60, 65, 47, 26, 24, 8, 65, 40, 1, 25, 1, 52, 1, 6, 43, 24, 54, 50, 63, 54, 40, 49, 60, 56, 6, 60, 60, 65, 31, 2, 64, 61, 57, 44, 40, 13, 41, 59, 54, 52, 63, 40, 35, 48, 63, 62, 54, 47, -1, 32, 58, 65, 52, 47, 50, 47, 31, -1, -1, -1, 42, 13, 26, 58, 30, 51, 47, 61, 2, 59, 63, 49, 50, 51, 65, 62, 52, 23, 47, 65, 24, -1, -1, 31, 16, 65, 32, 60, 43, 11, 54, 50, 48, 31, 63, 41, 63, 52, 8, 32, -1, 40, -1, 59, 31, 23, 43, 58, 26, 8, -1, -1, -1, 65, -1, -1, -1, -1, 61, 40, 62, 8, 65, 56, 65, 65, 51, 53, 57, 32, 48, 59, 10, 23, 52, 52, 15, 63, 64, -1, 64, 31, 3, 42, 65, -1, -1, 7, 6, 40, 65, 59, 42, 12, 50, 41, 65, 48, -1, 42, 65, 3, 43, 52, -1, -1, 46, -1, 42, 54, -1, -1, 56, 40, 58, 30, -1, -1, -1, -1, 1, -1, -1, -1, 12, 33, 51, 65, -1, 65, 43, 65, 54, -1, -1, -1, -1, -1, -1, 45, 23, 55, 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 65, 42, 62, 40, 45, 42, 62, 50, 52, -1, -1, -1, 32, -1, 6, 52, 52, 42, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 12, 55, 64, 51, 65, -1, 65, 24, 65, 41, -1, -1, -1, -1, 55, 65, 52, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, 62, 43, 48, 24, 56, 40, 40, 8, -1, 63, -1, 60, 40, -1, 45, 62, -1, 31, -1, -1, -1, -1, -1, -1, 42, 57, 15, 45, -1, -1, 52, 52, 65, 42, 6, -1, 3, 62, 42, 59, 23, -1, -1, 39, -1, 64, 11, 64, 57, 63, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 7, 2, 56, 47, 60, 65, 9, 49, 52, 1, 7, 54, -1, 45, -1, 64, 54, 54, 51, 47, 51, 45, 45, -1, -1, -1, -1, 40, 65, -1, -1, 59, 65, 40, 30, 24, 2, 65, 38, 57, 31, 40, 31, -1, 40, -1, 48, 61, 51, 59, 47, 31, 54, 59, -1, 41, -1, -1, -1, 62, -1, -1, 60, -1, 65, -1, -1, 23, 21, -1, -1, -1, -1, 31, -1, 57, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, -1, -1, 49, 42, -1, -1, 40, 43, 52, 1, 43, 65, 65, 10, 51, 65, 54, 40, 54, -1, 1, 54, 40, 31, 2, -1, 61, 24, 24, 1, 6, 65, 39, -1, -1, -1, 58, 65, 65, 65, 55, 59, 52, 51, 65, 61, 55, 42, 60, 51, 61, 58, 65, 31, 48, 31, 50, -1, 49, 63, 63, 31, 51, 62, 52, 51, 31, 60, 52, 65, 52, 65, 30, 62, 31, 63, 15, 51, -1, 61, 48, 9, 62, 8, 1, 62, 41, 40, -1, -1, -1, -1, 60, 65, -1, 26, 41, 62, 41, 42, 45, 50, 62, 53, 15, 48, -1, -1, -1, -1, 47, 54, 43, 15, -1, -1, -1, -1, -1, -1, -1, -1, 63, 65, 61, 60, 56, 40, 40, 61, 59, 52, 54, 40, 51, 25, 61, 2, 65, 40, -1, 63, -1, 65, 24, 54, 40, 63, 63, 51, 48, -1, -1, 40, 40, -1, -1, 40, 26, -1, -1, 65, 65, 49, 55, 55, 50, 40, 65, 61, 53, 2, 24, 11, 40, 52, 51, 31, 15, 31, 39, 8, 63, -1, 61, 32, 40, 59, 7, 63, 39, -1, 63, 40, 8, 31, 62, 31, 44, 42, 41, 48, 24, 26, 50, 50, -1, 2, -1, 44, -1, 16, 50, -1, 63, 1, -1, 41, 57, -1, -1, -1, -1, 65, 57, 6, 6, 63, 43, 47, 41, 40, 65, 58, -1, -1, 61, -1, 62, 62, 6, 3, 42, 50, 46, 30, -1, -1, -1, -1, -1, -1, -1, -1, 12, 33, 30, 57, -1, 52, -1, 47, 23, -1, -1, 65, 43, -1, -1, 65, 65, 63, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, 62, 52, 65, 43, 41, 51, 65, 31, 10, 42, 52, 42, 23, 62, 41, 40, 59, 41, 1, 54, 10, 43, 56, 65, 65, 62, 50, -1, -1, -1, 19, 65, -1, 24, 7, -1, -1, -1, -1, 31, 48, -1, -1, -1, -1, -1, -1, -1, -1, 46, 51, -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, 12, 33, 30, 37, -1, 52, -1, 57, 65, -1, -1, 65, 43, -1, -1, 65, 52, -1, -1, -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, 64, 64, 24, 42, 47, 53, 60, 9, 29, 54, 41, 52, 65, 39, 47, 13, 59, 65, 62, 57, 65, 63, 31, 65, 11, 31, 65, 65, 41, -1, -1, 6, 1, 40, 45, 46, 40, 65, 65, 48, 60, -1, 43, 54, 1, 52, 65, 40, 54, 54, -1, -1, -1, -1, 54, 45, 49, -1, -1, -1, 51, 50, 45, 25, 11, 49, 6, 46, 65, 60, 30, 63, 48, 51, 52, -1, -1, 40, 31, 40, 65, 7, 1, 50, 7, 59, 65, 7, -1, -1, -1, -1, -1, 43, 43, 2, 50, 1, 7, 44, 63, 26, 10, 62, 1, 42, 7, 65, 51, 53, 41, 6, 63, 63, -1, 59, 65, 42, 60, -1, 45, -1, -1, -1, 60, 59, 49, 65, 61, 59, -1, 65, 60, 61, 54, 57, 52, -1, -1, 52, 27, 24, 48, -1, 24, -1, 42, -1, -1, 52, 51, -1, -1, -1, -1, 57, 60, 52, 59, 7, 31, 24, 24, 24, 45, -1, 65, 54, 42, 52, 27, 65, 54, 56, 6, -1, -1, -1, 41, 50, 41, 46, 30, 48, 41, 52, 63, 57, 63, 52, 51, 1, 7, 50, 63, 40, 52, 43, 3, 51, 40, 51, 47, 52, 1, 54, 53, 54, 31, -1, -1, 30, -1, 54, 61, 1, 9, 60, 61, 49, 57, 52, 40, -1, 6, 1, 63, 49, -1, 59, -1, -1, 51, 45, 42, 41, -1, 47, 65, 41, -1, -1, 57, 52, -1, -1, -1, -1, 12, 1, 41, 11, 1, -1, 42, 54, 65, 54, 26, -1, -1, 41, 45, 65, 30, -1, 60, -1, -1, 3, 3, -1, -1, -1, -1, -1, -1, -1, -1, 21, 57, 63, 41, 63, -1, 40, 40, 62, 31, 50, -1, -1, -1, -1, 52, 52, 65, 54, 52, 62, 52, 62, -1, -1, -1, -1, -1, -1, -1, -1],
4085
+ thresholds: [-0.3571366, -2.305675, 1.822552, 0.04795042, 0.2888775, 0.4777274, 3.050203, 4.919404, 0.05745253, 5.921578, 0, 0.5546955, 0.01923077, 10.24495, 0, 0, 0.3333333, 0.02316602, 4077529e-10, 0.9844254, 1.783998, 0.3029593, 0.02156334, 6.907755, 0.4310797, 0.075, 0.4741301, 0.075, 0, 0, 0, -0.6342732, -2.573136, 1.293191, 0.02469485, 0.2547487, 0.4310797, 3.050203, 0, 0.3849332, 0.9415143, 4.327618, 0.1943059, 0.2829656, 10.24495, 0.6971402, 0, 0, 0, 0.8793104, 4077529e-10, 0, -1.764177, 0, 3.526361, 0.3807987, 3.013335, 10.24495, 0.5, 0, 0, 0, -0.6342732, -2.870405, 1.56783, 0.02469485, 0.168831, 0.4741301, 2.734421, 0, 0.3849332, 6.452049, 0.5471264, 0.2829656, 0.01219512, 0.5, 0, 0, 0, 0, 0.8571429, 0.07333041, 0, 0.1943059, 0.2781682, 0.5, 0.3807987, 1.098612, 0.3029593, 4.836282, 0, 0.6289944, 0, 0.3867758, -2.573136, 2.107917, 0.02734554, 0.1222605, 0.523972, 3.394045, 0, 0, 4077529e-10, 0.6774194, 0.8773364, 0.5827814, 10.24495, 0.525, 0, 0, 0.3849332, 0.1666667, 0.1653979, 0, 6.759255, 0, 0.1666667, 0.3, 0.5, 8.501063, 3.044523, 0, 0.6289944, 4.327618, -0.9371337, -2.870405, 1.56783, 0.02469485, 6.452049, 0.4310797, 3.050203, 0, 0.3849332, 0.1305989, 1.827123, 0.1943059, 0.01219512, 0, 0, 0, 0, 0, 0.8571429, 0.07333041, 4077529e-10, 0, 0, 0.4166667, 0, 1.098612, 0.1004045, 0.7495036, 2.197225, 0.225, 0.6971402, 0.2888775, -2.870405, 2.107917, 0.02469485, 6.452049, 0.4436583, 3.808074, 0, 0.3849332, 0.1943059, 0.1063413, 1.098612, 0.7306943, 10.24495, 0.525, 0, 0, 0.25, 0.8571429, 0.1360049, 7.257003, 0, 0, 0.2829656, 0.01989664, 0.5, 0, 0.9078827, 0, 0.6971402, 4.327618, 0.2888775, 0.06896514, 2.414095, 0.02469485, 0.9844254, 0.708554, 0, 0, 0, 0.319699, 0.288416, 1.098612, 1.94591, 3.808074, 580011e-8, 0, 0, 0.01315065, 0.1063413, 6.349139, 0, 4.060443, 0, 1.386294, 0.01989664, 0.3333333, 0.01412086, 0.7190987, 0.525, 0, 4.61512, -1.764177, 0.02734554, 2.414095, 0, 0, 0.4310797, 3.808074, 0, 0, 0.08752622, 4077529e-10, 0.6849968, 0.3029593, 0.7190987, 0.525, 0, 0, 0, 0, 0.05745253, 0.1132073, 0.2429577, 0.6, 4.276666, 0.38, 2.302585, 0.6931472, 0.1666667, 0.9522486, 0.523972, 4.327618, 0.1063413, 0.02469485, 2.414095, 0, 4077529e-10, 0.1775001, 3.808074, 0, 0, 0.1423904, 0.1653979, 0.9844254, 0.75, 0, 0.525, 0, 0, 0, 0, 0.1132073, 0.25, 0.08752622, 0.25, 0.2547487, 0.5076258, 0.5579418, 0.623239, 0.075, 0, 0.6971402, 4.327618, 0.1063413, 0.02469485, 2.734421, 0, 4077529e-10, 0.5678395, 0.25, 0, 0, 0.1423904, 0.03852465, 0.6774194, 0, 0, 0, 0, 0, 0, 0, 0.1132073, 0, 0, 4.919404, 0.9245283, 0.01906447, 0.5, 2.397895, 0.4225708, 7.470224, 0.7190987, 0.7527024, -2.870405, 0.02469485, 2.734421, 0, 0, 0.2829656, 3.808074, 0, 0, 0.01315065, 4.828314, 4077529e-10, 0.6931472, 0.2, 0.325, 0, 0, 0, 0, 0.1031566, 0.3849332, 0.275, 0, 0, 0.6849968, 0.8268518, 3187076e-9, 2.890372, 0, 0.6971402, 8.007034, -2.870405, 0.01811626, 2.734421, 0, 0, 0.3029593, 3.808074, 0, 0, 0.01315065, 4.94876, 4077529e-10, 0.01219512, 0.8339582, 0.325, 0, 0, 0, 0, 0.2088739, 0.3849332, 0.4741301, 0, 0.1653979, 0.1349982, 0, 0.1004045, 0, 0.9648098, 0.6971402, 8.007034, -2.870405, 0.01811626, 3.050203, 0, 0, 0.8268518, 0.25, 0, 0, 0.01315065, 4.94876, 0.5, 0, 0.225, 0, 0, 0, 0, 0, 0.04531459, 3.258096, 0.4741301, 0, 0, 0.125, 0, 0.3921823, 2.848795, 0, 0.7190987, 0.6971402, 0.06896514, 0.01811626, 3.394045, 0, 0.1, 0.9928667, 0.225, 0, 0, 0.9521739, 0.35, 0.08752622, 0.02319472, 0.6971402, 0.5859071, 0, 0, 0, 0, 0.3843654, 0, 0, 0.05435247, 0.075, 0.7957155, 0.9206775, 0, 0.6849968, 0.8773364, 0, 0.9648098, 0.02734554, 0.4166667, 3.394045, 0, 9922371e-10, 0, 0.225, 0, 0, 0, 2.833213, 0.4225708, 0, 0.6971402, 0.5859071, 0, 0, 0, 0, 0, 0, 0, 0, 0.3583294, 0.898181, 0.6741498, 4.234107, 0, 0.8773364, 0, 0.9648098, 0.05218401, 0.01811626, 3.394045, 0, 0.1, 4.859812, 0.225, 0, 0, 0.9521739, 0, 0.4741301, 0, 0.6971402, 0.25, 0, 0, 0, 0, 0.2485207, 0, 0.4937787, 0.25, 6.466145, 0, 4.007333, 0, 0.5889103, 0.8773364, 0.5579418, 0, 0.02734554, 5903513e-9, 3.808074, 0, 0, 0.08640844, 0.325, 0, 0, 0.1551724, 0.06987459, 0.1090793, 0.25, 0.05882353, 8.007034, 0, 0, 0, 0, 0, 0, 0, 0.8974359, 0.7652995, 9.083983, 0.01591512, 0.4305397, 0.1012539, 0.7190987, 0.3428572, 0.6415094, 0.02469485, 0.01811626, 0.9206775, 0, 2.19474, 0.5579418, 0.4375, 0, 0, 0, 0, 0.7917553, 0.4375, 0, 0.03149606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4032821e-9, 0.9047619, 3.38491, 0.075, 5307856e-9, 0.9385887, 0, 5903513e-9, 0.3444971, 3.808074, 0, 0, 0.08752622, 0.325, 0, 0, 0, 0, 0.1, 4.859812, 4.271065, 4.327618, 0, 0, 0, 0, 0, 0, 0, 0, 0.1212097, 0, 0, 0, 0.5889103, 0.8773364, 0, 0.4973886, 5903513e-9, 0.3444971, 0.5579418, 0, 0, 0.9021136, 0.4375, 0, 0, 0, 0, 0.135235, 0.7190987, 0.1666667, 0.1718593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.484907, 0.1666667, 0.225, 0.9047619, 0.03852465, 0, 0.03191489, 5903513e-9, 0.3444971, 0.9408998, 0, 0, 0, 0, 0, 0, 0, 0, 0.08640844, 0.01279318, 0, 0.25, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 4.624973, 0, 0.8143564, 0, 0, 0.9574098, 0.2533333, 0.01811626, 0, 0.5579418, -4.433688, 0, 0.1666667, 0.4375, 0, 2.833213, 0, 0, 0, 0, 0.1666667, 0.1829779, 0, 0, 0, 0, 0, 0, 0, 0, 0.04799343, 0.3333333, 0, 0, 0.9047619, 0.03852465, 0.06896514, 0.03191489, 5903513e-9, 0.3029593, 4.271065, 0, 0, 0.25, 0.325, 0, 0, 0, 0, 0.5972933, 0.6849968, 0.8616044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5651671, 0.08483563, 0, 0.6842105, 0.7175612, 0, 0.6100386, 0, 0.01811626, 0.06987459, 0.5579418, 0, 0.175, 0.135235, 0.4375, 0, 0, 0, 0, 0.7480315, 0.075, 0.1666667, 0.666607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02156334, 0, 0.68, 0.9047619, 0.03852465, 0, 0, 5903513e-9, 0.3029593, 0.8608962, 0, 0, 0, 0.5889103, 0, 0, 0, 0, 0, 0.02836879, 0, 0.325, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0, 0, 0.8143564, 0.02702703, 0, 0, 0.975294, 5903513e-9, 0.6503634, 4.859812, 0, 0, 0.1533769, 2.944439, 0, 0, 0, 0, 0, 0.2, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3368467, 8.091627, 7.553287, 0, 0, 0.5859071, 0, -5.875155, 0, 0.06097378, 0, 0, 0.03149606, 0, 0, 0, 0, 0, 5.686975, 1.098612, 0.288416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5076258, 7.553287, 0.5073434, 0.2, 0.1666667, 0.3444971, 0, 0.666607, 0.05218401, 0.04025599, 0.07333041, 0.4166667, 0, 0.4, 0.8675887, 0.6931472, 0, 2.564949, 0.6257669, 4.430817, 0, 0.8163886, 0, 0, 0, 0, 0, 0.9698997, 0.3333333, 0, 0, 5965638e-9, 0.2266646, 0.1, 0, 3111111e-9, 0.275, 0.175, 0.03651913, -5.875155, 0, 0, 0, 0, 0, 0.05888302, 0, 0, 0, 0, 9.083983, 0, 0, 0.7987013, 0, 0, 0, 0, 0, 0, 0, 0, 8.501063, 0.238377, 0, 0, 0, 0, 2.564949, 0, 6141095e-9, 3.367296, 0.5077296, 0, 0, 0, 0, 0, 0, 0, 0, 0.6774194, 0, 0.1726634, 0.9928667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01219512, 4.356709, 2.560159, 0, 0.4225708, 0.7846154, 7.017506, 0.06987459, 0.25, 0.075, 0.1, 0, 0.5579418, 0.2, 0.1212097, 0.08144234, 0, 0, 0, 0, 0, 0.5972933, 0, 4.153444, 4.997212, 0.5, 0, 0, 0, 0, 1.386294, 5.9428, 0, 7.251345, 0.04629841, 0.4561477, 0, 7.553287, -5.875155, 0, 0.75, 0, 0, 0, 1.098612, 0, 0, 0, 0, 0.1168487, 0.35, 0, 6.55108, 0, 0, 0, 0, 0, 0, 0, 0, 0.5076258, 0.6100386, 0, 0.5076258, 0, 0, 0.4446793, 0.2, 0.06987459, 0.25, 0, 0.1, 4.477337, 0, 0.7987013, 0.28, 0.08144234, 0, 0, 9.083983, 0, 0.0754717, 0, 0, 0.5077296, 0.2, 0.5, 0, 0, 0, 0, 8.501063, 10.0538, 0, 0, 0, 0.8804404, 0, 0, -5.875155, 0, 0.8675887, 0, 0, 0.8163886, 0, 0, 0, 0, 0, 0.7652995, 0.25, 0.4973886, 0.03651913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4973886, 5.361292, 0, 0, 0, 0.8572058, 0.06987459, 0.25, 0, 0.1004045, 3.526361, 3111111e-9, 0.03852465, 0.5651671, 6.343881, 0, 0, 0.2, 0, 0.279601, 2.772589, 2.302585, 0.38, 2.70805, 0.1, 0, 0, 0, 0, 0.4777274, 0, 0.7190987, 1.098612, 0, 0, 0, 0, 0, 4.559038, 0, 0, 7.251345, 0.4044122, 0, 1.277376, 0, 5.521461, 0.05882353, 0, 0, 0, 0, 5.693732, 5.356586, 0.01111111, 0.4561477, 0, 0.28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5579418, 0.075, 1.098612, 0, 0.06987459, 0.3333333, 0.1794872, 0.6819527, 0.7672956, 2.079442, 0.25, 0, 7.251345, 0, 0, 0, 0.9245283, 3.091043, 0, 0.2106337, 0, 0.7001467, 4.158883, 3.555348, 0.15, 0, 0.7836897, 0, 0, 0, 0, 0.06097378, 0.03149606, 0, 0.5651671, 0.238377, 0.288416, 0, 0, 0.5972933, 0.1726634, 0.06930693, 4.983607, 0.08144234, 0.3, 0.01591512, 0, 4.276666, 0, 0.1666667, 0, 0.6289944, 0.5678395, 0.288416, 0.8286524, 0, 0, 0.7306943, 0, 0, 0.3341523, 7.698029, 0.1666667, 0.5859071, 0, 0.4446793, 0.852177, 0, 0, 0.3333333, 0, 0.7306943, 0.225, 0, 0, 0, 0, 7.257003, 0.4180328, 0.07347349, 0, 0.4684685, 5.768321, 3.590021, 0.1653979, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03852465, 3111111e-9, 0, 0.279601, 2.772589, 0.2, 0.5278115, 0, 0, 0, 0, 0, 0, 0.1031566, 0, 0.04629841, 1.098612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3075243e-9, 0, 0.75, 0, 0, 0, 1.098612, 0, 0, 0, 0, 0.3333333, 0.15, 0, 6.55108, 0, 0, 0, 0, 0, 0, 0, 0, 0.1168487, 4.61512, 7.095064, 5.924256, 0, 0, 4.644391, 0.2, 7.251345, 4.559038, 0, 0.5579418, 5.521461, 0.4771158, 0.9522486, 0, 0, 0.7495036, 0.28, 0, 0.4685111, 0.5800964, 5.236442, 0.7175612, 0, 0, 0.7175612, 0, 0, 0, 0, 0, 0, 0, 0, 0.2115385, 7.553287, 4.271065, 0.9839365, 0.5, 0, 0.72, 0.07333041, 0.1599989, 0.01440354, 4.276666, 0, 0, 0.04025599, 0.6189346, 0, 0.6474386, 0, 0.1599989, 0.075, 0.319699, 3111111e-9, 0.4044122, 0, 0.2781682, 0, 0, 0, 0, 2.564949, 0, 0, 0, 0, 0, 0, 0, 0.03852465, 9.083983, 0, 0.279601, 2.589959, 8.501063, 0.238377, 0, 0, 0, 0, 0, 0.6289944, 0.15, 0.1, 0, 10.24495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.06097378, 0.09302326, 0.8291906, 0.5651671, 0.07707246, 0, 0, 0, 0.5972933, 0.375, 2.302585, 0, 4.234107, 6.349139, 4.110874, 0.02316602, 3.135494, 0, 0.1012539, 4.276666, 8847693e-9, 0.1935484, 0.2, 0.04799343, 0.6289944, 0, 0.02702703, 0.9078827, 0.9574098, 0.5265958, 0.1666667, 0.2533333, 3.135494, 0.7957155, -0.3571366, 0.7307692, 0.175, 0, 0.9401993, 0.3444971, 0.3807987, 4.912655, 0.3849332, 0.275, 0, 2.848795, 0.06097378, 0.3717366, 0.3309545, 0.4, 0, 0, 0.09596258, 0.298683, 6.55108, 0.38, 3.465736, 0.3230769, 0.3333333, 0, 0, 0, 0.5077296, 0, 0, 0.8268518, 0.25, 0.9521739, 0.4, 0.6971402, 0.75, 0.6474386, 0.02932735, 0.1234112, 4.691348, 0.2429577, 0.4686952, 0.4310797, 6.466145, 0, 0.425, 0.1258911, 0, 0, 0, 0, 0, 0.135235, 0, 0.3202217, 3.637586, 0, 0.2781682, 7.251345, 4.559038, 0, 0.1168487, 0.3270142, 0.4771158, 7.698029, 0, 0.25, 0, 0.075, 0, 0.4685111, 0.25, 0, 4.394449, 0.5114858, 0, 0.6931472, 0, 0, 0, 0.279601, 0, 0, 0, 0, 0.8572058, 0.275, 0.523972, 0, 0.1726634, 0, 0.2053056, 0.1212097, 0.7480315, 0, -0.3571366, 0, 2.923849, 0.1943059, 0, 0, 4.912655, 6.349139, 0, 0.0131972, 1.098612, 0, 1.791759, 0.1666667, 0, 0.1745893, 0.135235, 0, 0, 0, 0.03191489, 0.15, 0.4044122, 0.4685111, 0.5859071, 0, 0, 0.0754717, 0.7300336, 1.098612, 0, 0.5275567, 0.2642521, 0, 0, 2.079442, 0, 0, 0.9, 0, 0.7175612, 0.08483563, 0, 0, 0, 0.175, 0.4753727, 0.5, 0, 0, 0, 0, 2.639057, 0, 0, 0, 0, 0, 0.03852465, 0.5972933, 0, 0.279601, 2.772589, 0.5808709, 0.3807987, 0, 0, 0, 0, 0, 0, 2.564949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8675887, 0.8163886, 0.0700191, 0.9648098, 0.3, 3.178054, 0.941459, 0.9206775, 7.251345, 9.083983, 0, 0, 0, 0, 0, 0.02316602, 5.768321, 6.466145, 0.2254693, 2.772589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.302585, 0.03852465, 0.4044122, 0, 0.279601, 0, 0.311186, 0.2012987, 0, 0, 0, 0, 0, 0.298683, 5.9428, 0.7972973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5579418, 0.984237, 3.526361, 4.919404, 0, 0, 0.275, 0.075, 0, 0, 0.06097378, 0, 0.927255, 0.2, 0, 2.397895, 0.9206775, 0, 0.1666667, 0, 0, 0, 0, 0, 0, 0.0700191, 3.394045, 0, 3.367296, 0, 0, 9.083983, 8.823206, 0.238377, 3111111e-9, 0.03191489, 0, 1.098612, 0.523972, 0.3341523, 0.7388909, 0, 0, 0, 0, 0, 2.302585, 0, 1.098612, 1.56783, 0.1168487, 0, 0, 0, 0, 0, 0, 0, 3.135494, 0, 0, 0, 0.75, 0.2533333, 0, 0.5458733, 0.8835651, 0.4446793, 0, 0.5059524, 5.609472, 2.397895, 0.03149606, 0.3807987, 0, 2.772589, 0, 3.135494, 0.09378118, 0.04975546, 0.2993237, 0.2, 0.4859494, 4.61512, 3.178054, 0, 0, 0, 0, 0.15, 0.3921823, 0, 0, 0.9599924, 0.8163886, 0.25, 0.5, 0, 0.05882353, 0.7917553, 0, -3.537076, 0.3333333, 0.25, 0.25, 0, 0.275, 0, 3.853134, 0.1186681, 0.1578185, 0.6474386, 0.2428571, 0.5, 0.4973886, 0.8218814, 0, 0.6729858, 0, 0, 0, 0.984237, 0, 0, 3075243e-9, 0, 0.05745253, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0, -0.6342732, 0.4044122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2040628, 0, 0, 0.04799343, 0.4095238, 0, 0, 0.35, 1.94591, 6.660575, 4.859812, 2.079442, 0.5076258, 0.279601, 0, 0.02584493, 0.1889052, 0.898181, 0.475, 0.1146875, 0, 1.609438, 0.09378118, 0.1, 0, 0.2533333, 0, 0.5800964, 0, 0, 2.995732, 0.08333334, 0.6503634, 0, 0, 0, 0, 0.8608962, 0.4225708, 0.3583294, 0.4937787, 0, 0.3444971, 4.644391, 0.1578185, 0.3199397, 0.2337021, 0, 0.4878399, 0.3202217, 0.2429577, 0.8572058, 0.5114858, 0.288416, 0.1666667, 2.965995, 0.3333333, 5.17615, 0, 0.0346841, 0.08640844, 0.01072934, 0.1666667, 0.06930693, 0.2106337, 6.028278, 0.0494359, 0, 0.7460366, 7.257003, 0.7300336, 7.553287, 0.5972933, 0, 0.8236248, 0.2, 0.05501111, 0, 0.8793104, 0, 0.4741301, 4.559038, 0, 0.9522486, 0, 2.564949, 0.5800964, 0.3270142, 0.075, 0, 0, 0, 0, 0.8607724, 0.4865274, 0, 0, 0.8301887, 0.4310797, 0.6100386, 3111111e-9, 2.772589, 0, 0.1031566, 0, 0, 1.098612, 0, 0, 0, 0, 0, 0.0600245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6505576e-9, 0.2642521, 0.7957155, 0.6872104, 0, 0.175, 0.125, 0.8572058, 0.8530882, 8.501063, 0.5889103, 0.15, 0.9698997, 0, 0.9839365, 0, 0.7917553, 0.3, 0, 0.1653979, 0, 0.7652995, 0, 0.1765268, 0.1, 0.06876939, 4443248e-9, 0.3636364, 4.001706, 0, 0, 0.275, 0.2, 0, 0, 0.45, 0, 0, 0, 0.4446793, 0.3583294, 0.68, 0, 0, 5.252274, 0.275, 0.3368467, 0.2337021, 0, 0.5827814, 0, 0, 0.25, 7.920083, 0, 0.2, 0, 0.3333333, 0, 0, 0.01610604, 0, 0.4741301, 0.2, 0.275, 0.6474386, 0, 0.03151318, 0, 0, 0.5579418, 0.075, 1.098612, 0, 0.984237, 0.3333333, 0.2115385, 0.6819527, 0.7672956, 4.559038, 0, 0, 7.698483, 8.858511, 0, 0.2533333, 0, 0.9047619, 0, 0, 7.470224, 0, 0.06097378, 3.555348, 0, 0.5944056, 4.271065, 0, 0, 0, 0, 0.8675887, 0.1775001, 0, 0.05882353, 0.02156334, 3.135494, 0.1655462, 0.9245283, 0.2, 0.3478258, 0.5114858, 0, 0, 0.8804404, 0, 0.7001467, 0.7001467, 0.1111111, 1.098612, 0.6257396, 5.081404, 0.9814815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.107917, 0, 4.770685, 0, 0, 0, 0, 0, 0.4446793, 2.772589, 0, 0, 0.4044122, 0.3583294, 0.2995246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.079442, 0.1305989, 6.349139, 0.2642521, 1.94591, 0.3113497, 0.9698997, 0.2125267, 0.3333333, 0, 0.08259411, 3.218876, 0.4674693, 0, 0.1031566, 0.7514793, 0.1, 0.4280677, 0.7358209, 3.663562, 0.898181, 0, 2.079442, 0, 0.4865274, 0.3199397, 0.2106337, 7.470224, 0, 0, 0, 0, 0.04402662, 0, 0, 0.75, 0, 0, 0, 0, 0.5, 1.098612, 0, 0, 0, 0, 0, 0, 0, 0, 0.9, 0.9324324, 0, 6.55108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.770685, 0, -0.6342732, 0.2492674, 0, 0, 0.4446793, 2.772589, 0, 0, 0.2125267, 9.083983, 0, 0, 0, 0, 0, 0, 2.197225, 0, 0, 0, 0, 0, 0, 0, 2.079442, 1.386294, 0, 0.3341523, 0.3230769, 0, 0.2618343, 0, 0, 0.2978621, 0.5, 4.276666, 0.3199397, 0, 0.38, 0, 0.3444971, 0.1726634, 0.523972, -1.218948, 0.311186, 0.01072934, 0.25, 0.135235, 0, 0, 0.4686952, 0.4937787, 0.5, 0, 0, 0, 4.859812, 0.425, 1.94591, 0.9, 0.375, 0.2237885, 0.4865274, 2.163539, 0.6872104, 0, 0.6931472, 0.7836897, 4.007333, 5.521461, 0.1212097, 0.475, 9922371e-10, 0.2228809, 0, 0, 0, 0, 0.6849968, 2.302585, 0.04799343, 0, 0, 0, 0.1578185, 8.007034, 4.110874, 0, 0, 0.04799343, 0.01591512, 0.9814815, 0.5808709, 0.0811779, 0.25, 0.03420965, 2.357957, 0.4859494, 7.257003, 0, 0, 0.15, 0, 0.15, 0.1726634, 0.05263158, 4.110874, 4.276666, 0, 0.3869769, 0.4225708, 0.05263158, 0, 0, 0, 0, 0, 4.85203, 3.871201, 0.05882353, 5.252274, 4.859812, 0, 0.4375, 0.08640844, 0, 0, 0.319699, 2.944439, 0.8010488, 0.1551724, 0.288416, 0.6842105, 0, 0.4371859, 0.02702703, 0.2470046, 0.01989664, 0, 0.6916528, 0.5461184, 0.735, 0.9078827, 0, 0.6931472, 0, 0, 0, 0.9703127, 0.9408998, 0.08144234, 0.8163886, 0.9230132, 0.6474386, 0, 0.7652995, 0.927255, 0.8804404, 0.09378118, 2.734421, 8.2933, 0, 0, 8.711114, 0, 0, 4.327618, 0, 0, 0, 0.6997636, 0, 0, 7.412764, 580011e-8, 0, 0, 0, 0, 1.293191, 0.8835651, 5.768321, 0.1943059, 0.03149606, 0.5, 0, 0, 0, 3.988984, 0, 0.7300336, 0.1651376, 0.2428695, 6.660575, 0, 0.4937787, 0.04975546, 0, 0.01591512, 0, 0, 0, 0.5785877, 5.356586, 0.28, 0.04643963, 0, 2.331571, 0.2955975, 7.920083, 0.1168487, 2.107917, 0.1653979, 7.553287, 0.02584493, 2.564949, 0.05263158, 5.252274, 8201202e-9, 0.275, 5.278115, 2.564949, 1.098612, 0.8297873, 0.125, 0.6842105, 0.1655462, 9.400051, 1.386294, 0.04629841, 0, 0.2978621, 0.1666667, 0, 0, 0.3333333, 0, 0.1255986, 0.06896514, 5.236442, 0, 0.9703127, 0.9021136, 0.08144234, 2.107917, 3.871201, 0.125, 0, 0.02316602, 4.234107, 4920635e-9, 0.1794872, 0, 0.6474386, 0, 0, 0.9995694, 2.197225, 0.1420345, 0.6886503, 0, 0, 0.8163886, 0.6729858, 0, 0, 3.050203, 8.711114, 0, 0, 0, 0, 0, 0, 0.0754717, 0, 0.6931472, 0, 0.3341523, 0.0542577, 0.3719538, 0.1146875, 0, 0, 0, 0.2327044, 2.639057, 0.1677098, 0, 0, 0.3202217, 0, 0, 0.6931472, 1.098612, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.6342732, 0.0375892, 0.6571429, 0.01412086, 0, 0.175, 0.15, 0.168831, 0.3333333, 4.143135, 0, 0, 0, 0, 7.698029, 6.349139, 0.3478258, 0.2002174, 0, 0.7909349, 4.41884, 0.523972, 0, 0, 0, 0, 0, 0, 0, 0],
4086
+ leaves: [-0.31878, 0, -0.21386, 0.1032, -0.089037, 0.10096, -0.085583, -0.24982, -0.18222, -0.08767, 0.24808, 0.019812, -0.04525, 0.09739, 0.023051, -0.091186, 0.044292, -0.096174, 0.046064, 0.23168, -0.077142, 0.22043, 0.069539, 0.31783, 0.14139, 0.39324, -0.14273, 0, 0.47118, 0, 0, 0, -0.28689, 0, 0, 0, -0.24892, -0.11804, -0.19761, 0.14581, 30592e-7, -0.17347, 0.23968, 0, -0.13943, -0.022438, 0.20109, 0, -0.03742, -0.185, -0.030942, 0.096525, 0.057479, -0.092131, 0.1768, -0.15418, 0.28761, 54349e-7, -0.13046, 0, 0.217, -0.05387, 0.36207, 0, -0.26348, 0, 0, 0, -0.10938, -0.23412, -0.15009, 0.14125, 0.02478, -0.17439, 0.17603, -12222e-7, -0.16946, -0.062622, -0.051299, 0.049975, -0.10266, 0.11684, -77817e-7, 0.11119, 0.11634, -0.16966, 0.03832, 0.19845, 0.1627, 0.2482, -0.17467, 0.16947, 0.085149, 0.30282, -0.17858, 0.21696, -0.24599, 0, 0, 0, -0.20435, -0.061186, 0.14553, -0.12948, -0.065705, 0.20929, -0.1866, -0.061435, -0.035533, -0.18097, 0.22482, 0, 0.062581, -0.080121, -0.18422, 53663e-7, 0.16514, -0.093846, 0.093815, -0.18092, 0.094754, 0.22653, -0.099107, 0, 0.029711, 0.27539, 0.19323, -0.1516, -0.23504, 0, 0, 0, -0.070733, -0.19887, -0.13254, 0.13092, 0.02965, -0.15185, 0.069063, -0.066137, 0.20636, 0, 0.036359, 0, -0.13798, 0.032521, -0.020725, 0.11942, 0.069623, -0.15504, 0.089312, 0.1892, 0.096944, 0.19231, -0.13135, 0.14131, 0.2084, 0.025408, 0.061255, 0.24878, -0.22577, 0, 0, 0, -0.1863, -0.021576, -0.11015, 0.10831, -0.14984, 95591e-7, -0.028693, -0.15562, 0.030327, 0, 0.18693, 0, -0.047796, 0.046741, 0.019708, -0.17314, 0.084792, -0.16877, 0.17469, 0.071447, 0.1241, 0.19422, -0.070848, 0, 0.053655, 0.2394, 0.1489, -0.16053, -0.2184, 0, 0, 0, 0.10223, -0.12888, -0.19218, -70025e-7, -0.083068, -0.17488, 0.055509, -0.06944, 0.059408, 0.27968, -0.16603, 0.052281, 0.016982, 0.16886, 0.022023, -0.14734, 0.059351, -0.15003, 0.046576, 0.13777, 0.1881, 0.12208, 0.2244, 0.030347, -0.17702, 0, -82749e-7, 0.16174, -0.2106, 0, 0, 0, 0, 0, 0, 0, 0.059566, -0.17656, 0.038923, -0.09071, -15376e-7, 0.25299, -0.1101, 0.039362, 0.017342, -0.075443, -0.018361, 0.13649, 0.050524, -0.089454, 0.057659, 0.13835, 0.044795, 0.18141, 0.010322, 0.1659, 64778e-7, 0.21367, 0.13681, -0.1486, -0.20786, 0, 0, 0, 0, 0, 0, 0, -0.012525, 0.26293, -0.15276, 0.018769, -0.17799, -0.09904, 0.074436, -0.17605, -0.084997, 25315e-7, 0.10665, -0.13919, 0.057783, 0.17698, 0.040143, -0.23457, 21528e-7, 0.14463, -0.14011, 0.14053, 0.020322, 0.20465, 0.12803, -0.13533, -0.20366, 0, 0, 0, 0, 0, 0, 0, -0.011659, 0.21856, -0.13993, 0.032537, -0.083678, 0.18514, -0.14706, 0.10396, -89532e-7, -0.12856, 49842e-7, 0.21948, 0.086086, -0.1287, -0.065416, 0.04875, -0.046568, 0.13847, 0.10505, -0.18916, 0.16218, -0.20886, 0.025395, 0.19321, -0.20024, 0, 0, 0, 0, 0, 0, 0, 0.23341, -0.035271, -0.12481, 0.090957, -0.16916, -0.068392, 0.018748, 0, -0.035821, 0.17994, -0.07059, 0.01659, 96452e-7, 0.074111, -0.13471, 0.10429, -0.15561, 0.13238, -43242e-7, 0.14606, 0.013174, 0.1955, 0.13114, -0.083045, -0.19852, 0, 0, 0, 0, 0, 0, 0, -0.050254, 0.22151, -0.11774, 0.056798, -0.16026, -0.043395, 0.030176, 0, 0.01821, 0.19027, -0.091734, -0.019291, 0.016345, -0.11042, 0.029938, 0.11237, 0.039109, 0.12685, -0.10734, 0.13199, 0.011938, 0.18867, 0.12053, -0.071607, -0.19556, 0, 0, 0, 0, 0, 0, 0, -0.04689, 0.19814, -0.11419, 0.036199, -0.15099, -0.039416, 0.027778, 0, 90897e-7, -0.15388, 0.02634, -0.16408, -0.077332, 0.061169, 0.026983, 0.14605, -0.069073, 0.15655, -0.10121, 0.098306, 0.12525, -0.19903, -0.032052, 0.17635, -0.19275, 0, 0, 0, 0, 0, 0, 0, -0.13487, -78661e-7, 0.24791, 0, -0.14641, 0.011359, -0.068595, 0.12632, 0.080484, -0.12021, 78606e-7, -0.076651, -0.035819, 0.11089, 0.07826, -0.053902, -0.068808, 0.062142, 0.1864, 0.034044, -0.073019, 0.13374, -0.19412, 0.051882, -0.18688, 0, 0, 0, 0, 0, 0, 0, 0.12952, 0, 0, 0, -0.025255, 0, -0.13332, 0, -0.029127, -0.16208, 0.045483, -0.17471, 0.011839, 0.085709, -0.022881, 0.095192, -0.070798, 0.063432, 0.18055, 0.031005, -0.062873, 0.12294, -0.16251, 0.045998, -0.18705, 0, 0, 0, 0, 0, 0, 0, -0.014552, -0.10701, 0.19835, 0, -0.15769, -0.042538, -0.090104, 0.12266, 58218e-8, -0.10159, 0.036248, -0.016371, 0.043897, 0.15435, -0.076118, 0, -0.068146, 0.061155, 0.17454, 0.028234, -0.087178, 0.093422, -0.066383, 0.11974, -0.19046, 0, 0, 0, 0, 0, 0, 0, -0.069484, 0, 0.16113, 0, -0.037742, -0.14975, 0.018831, -0.07785, -0.10386, 0.089735, -36422e-7, 0.1541, 0.015404, 0.09292, -0.13876, 0.036152, 49348e-7, 0.16981, -0.072142, 0.075278, -0.093063, 0.12596, 0.040608, -0.18604, -0.18053, 0, 0, 0, 0, 0, 0, 0, 0.030829, 0, 0, 0, -0.091149, 0, 0, 0, -38172e-7, 0.13528, 0.10873, -0.21881, 0.16513, -0.037891, 0.094282, -0.14205, -0.025758, 0.11648, -0.24113, 0.1303, -0.010495, -0.18121, 0.026166, 0, -0.18736, 0, 0, 0, 0, 0, 0, 0, -0.042049, 0, 0, 0, 0, 0, 0, 0, 0.23084, -0.034776, -0.11564, 0.089227, 14196e-7, 0.13943, 0.096535, -0.071237, -0.045889, 0.10821, 0.1697, -0.011255, 0.091511, 0, 0.08187, -0.15145, -0.18469, 0, 0, 0, 0, 0, 0, 0, -0.039368, 0, 0, 0, 0, 0, 0, 0, 0.11634, -0.042627, -5224e-6, -0.081608, -0.076521, 0.091283, 0.070928, -0.10526, 0.16169, -62322e-7, -0.15914, 0.074429, -0.093142, 0.18604, -0.16911, 0.036157, -0.18176, 0, 0, 0, 0, 0, 0, 0, -0.036879, 0, 0, 0, 0, 0, 0, 0, -0.041254, 65793e-7, 0.13597, 0.01078, -0.038195, 0, 0.14741, -23902e-8, -0.12856, 0, 0, 0, 0.096233, -0.037189, 0.14776, -9574e-6, -0.17698, 0, 0, 0, 14974e-7, 0, -0.069735, 0, -0.033346, 0, 0, 0, 0, 0, 0, 0, 0.023197, -0.012282, -0.12026, 0.096717, -0.17937, 0, 0, 0, 0.1488, -79748e-7, -0.1524, 0.067945, -0.073014, 0.16329, -0.14901, 0.03301, -0.17662, 0, 0, 0, 0, 0, 0, 0, -0.032376, 0, 0, 0, 0, 0, 0, 0, -67804e-7, 0.13135, 0.065422, -0.084352, -0.024266, 0.048637, 0.095737, -0.12801, 0.15843, 0.023992, -0.022788, 0, 0.015057, -0.19599, 0.06161, 0, -0.16738, 0, 0, 0, 0, 0, 0, 0, -0.087328, 0, 0, 0, 0.03884, 0, 0, 0, 0.057769, -0.082373, 0.035103, 0.19533, 0.021393, -0.22495, 90638e-7, -0.043117, 0.13735, -39622e-7, -0.14363, 0.060968, -0.10608, 0.1084, -0.1645, 0, -0.16951, 0, 0, 0, 0, 0, 0, 0, -0.028117, 0, 0, 0, 0, 0, 0, 0, -0.021435, 0.01056, -0.17263, 0, -0.019753, 0, 0.13322, 14524e-7, 0.048026, -0.037267, -0.20085, 0, 0.12172, -0.047456, 0.047647, -0.16217, -0.16595, 0, 0, 0, 0, 0, 0, 0, -0.022132, 0, 0, 0, 0, 0, 0, 0, 0.048739, -0.082585, 0.13999, -0.051229, -71629e-7, -0.17621, 27376e-7, 0.074376, -88393e-7, -0.10143, 0.034214, 0, 0.11076, 0.0273, -0.097527, 0, -0.15934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.037207, 0.025782, -0.12158, 95648e-7, -0.051308, -0.21738, -50697e-7, 0.063456, 0.12071, -0.023277, -0.071724, 0.029418, -0.23141, -0.01848, 0.0964, -0.11606, -0.15657, 0, -0.024559, 0, 86673e-7, 0, 0, 0, -0.11676, 12122e-7, -0.041715, 0.074709, -0.036049, 0, 0.15983, 0, -0.014469, 0.082783, -0.087967, 0.022561, 0.10962, -0.011297, 0.23271, 0, -0.12793, 39687e-7, -0.197, 0.091983, 0.01793, -0.090029, -0.019215, 0.15215, -0.14988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19636e-7, -0.088794, -0.12343, 0.11977, -0.15647, 0, 0, 0, -3417e-6, 0, 0, 0, 0.020662, 0.14532, 11218e-7, 0, -0.020797, 0, 0, 0, 0, 0, 0, 0, -0.14717, 0, 0, 0, 0, 0, 0, 0, 0.021813, -0.036106, -0.012852, 0.14634, 0.020725, -0.18151, -0.089111, 0.079667, 0.11189, -0.050054, -0.0495, 0.011981, -0.030569, 0.088854, -0.20207, 0.031451, 0.17985, 0, -0.09726, 0.11445, -0.04192, 0.13707, -0.14124, 0.012741, -0.15477, 0, 0, 0, 0, 0, 0, 0, -0.062733, 0.12858, -0.24566, -0.068646, 0.1419, 0, 0.078618, -0.088579, -0.072796, 0.12067, -0.058804, 0.011681, 0.030978, -0.14253, -0.051765, 0.052692, -0.13293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.01667, 0.025776, 0.080178, 52813e-7, -0.037566, 0.07252, 0.12069, -0.059294, -0.23481, 0, 0, 0, -93202e-7, 0.12583, -0.17263, 79894e-8, -0.043584, 0, 0.18834, -53314e-8, -0.061634, 0.10353, -0.13052, 0.011791, -0.15138, 0, 0, 0, -0.02506, 0, 0, 0, 32844e-7, -0.082135, 0.12356, -0.070309, -0.14119, 0, 0, 0, 0.016167, 0, 0.13083, 0.025533, -40782e-7, 0, 0, 0, -0.12086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2486e-6, -0.049879, 0.12705, -0.19319, -0.2983, 64434e-7, -0.049097, 0.10149, 0.010483, 0, -0.089464, 0, -0.026978, 0, 0.016435, 0.15167, 0.012469, -0.12631, 0.12619, -0.016202, 39847e-7, 0.18765, 0.044292, -0.097042, -0.023166, 0, 0, 0, -0.14499, 0, 0, 0, -0.027742, -0.21044, 0.049073, 0, 0.019086, 0.16431, -0.15111, 22833e-7, -0.065115, 0, 0.072499, 0, 0.1286, 0, 0.024416, 0, -0.10275, 0.050504, 0.025028, -0.012968, -0.061989, 0.012309, 0.014391, 0.11556, -0.10724, 0.016672, -0.042548, 0.17285, -0.095792, 0.09429, -0.16289, 0, -0.15634, 0, 0, 0, -3802e-6, 0, 0, 0, 0.050798, 0, 0, 0, 0, 0, 0, 0, -0.035466, 0.13462, -80576e-7, -0.12781, -0.031953, -0.21175, 89983e-7, 0, 0.10814, -0.073105, -0.021317, -0.13275, 96803e-7, -0.046822, 90479e-7, 0.13648, 0.16757, -0.023139, -0.12912, 0.083669, 0.063632, 0, -0.18048, -0.041198, 0.16056, 0, -41979e-7, 0, -0.062455, 0, 0, 0, -0.016626, -0.064816, -0.10089, 0.088929, 0.19723, -58523e-7, 0.061453, -0.040545, -0.087547, 0.082232, -0.15654, 84322e-7, 0.062902, -0.045914, 0.21256, 0.041883, 0.16271, -0.05326, 0.051288, -0.13793, -0.047191, 0.047581, -0.07067, 0.046794, -0.20163, 0, -0.024462, 0, 0.044388, -0.14135, 0.14349, -0.010779, -0.015012, -0.10164, -802e-5, 0.090082, 0.059939, -0.012717, -73499e-7, 0.095098, -0.1044, -57894e-7, -0.024778, 0.14077, -0.050495, 0.078804, -0.048483, -0.2338, -0.12074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86442e-7, -0.18453, 0.035221, 0, -0.070439, 0.10129, -0.085599, 89424e-8, -0.13109, 0, 0, 0, 0, 0, 0, 0, -0.068704, 0, 0, 0, 0.065366, 0, 0, 0, 0.11754, 0, 0, 0, 0.026356, 0, 0, 0, -0.10463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -39888e-7, 0.03117, 0.089166, -0.12897, -0.10975, 0.055568, 0.019508, -0.052253, -0.1817, 0, 0, 0, -0.022799, 0.099006, -0.14978, 1331e-6, 19305e-7, -0.025683, -0.046425, 0.13922, -0.058442, 0, 0.15993, -0.022243, -0.076591, 0, 14588e-7, 0, -0.037563, 0, 0.05665, 0.17815, -0.21591, 0, 0, 0, -0.090392, 0, 0.06413, 0, -0.15199, 0.040411, -0.040924, 0.12009, -0.24176, -0.024511, 0.10206, -0.13227, 0.10132, -0.033979, 0.21215, 0.021766, -0.090434, 32753e-7, -0.15063, 0.023887, -0.099811, 0, 0.17106, -0.018465, -0.1656, 0, -12131e-7, 0, 0.07163, 0, 0, 0, -0.021185, -0.20431, 0.040932, 0, -0.071599, 0, 0, 0, -0.030878, 0, 0.16172, 0, -0.021637, 71234e-7, 0.067308, -0.09265, -0.095929, 0, 0.11221, -0.043052, -0.11599, 0, 0, 0, 0, 0, 0, 0, -0.06202, 0, 0, 0, 0.063006, 0, 0, 0, 0.11344, 0, 0, 0, -0.01453, 0, 0.053922, 0, -0.018448, 0.050326, -0.13026, 0.012479, 0.1786, -0.015326, 0.036543, -0.041512, 0.039455, -0.074793, -0.1837, 0.011569, -0.092563, 0.043492, 5745e-6, 0.1005, 0.094171, 0.02522, -0.1476, 0.053489, -0.10464, 0.13951, -0.21577, 0.011098, -0.24379, 75209e-7, 0.029567, -0.089303, 0.058063, -0.11782, -0.074588, 0.12355, 0.023978, 0.098672, -0.10251, 0.044428, -77226e-7, -0.10821, 13148e-7, 0.095462, -0.14125, 0, 0.020748, -0.080522, 0.019748, 0.13311, -0.090006, 36275e-7, -0.11125, 0.015808, -0.096964, 0.12053, -0.059508, 0.087144, 0.099509, -0.054598, -0.039608, -0.18053, 0.071329, 0, -0.012073, 0, 0.080146, 0, -0.019494, 0.035802, -0.073574, 0.025506, 0.020866, 0.10818, -0.097737, 0.018335, -0.016396, 0.11853, 0.070601, -0.049897, 0.019012, 0, -0.11662, 0, -0.069868, 0.014318, -0.074871, 0.096384, 0.12244, -0.099517, 0.13133, -0.088917, -0.12746, 0.029197, 0.20303, -0.032195, -0.089661, 0.10987, -0.030009, -0.19362, 65422e-7, -0.055154, -0.068651, 57858e-8, 0.061897, -0.071067, -0.12961, 0.053763, -0.063009, 0, 0, 0, -0.039017, 0, 0.021404, 0.14126, -0.18415, 0, 0, 0, -0.080929, 0, 0.061823, 0, 0.1225, -0.068711, -0.17039, 0.089541, -0.039238, 0.10799, -0.13652, 0.017893, -0.04963, 0.15226, -60545e-7, -0.12925, -0.16093, 0, 0.10531, -0.055054, 0.032125, -0.11366, 0.087259, -0.027556, -0.033357, 0.20738, -0.10095, 0.060347, -0.17856, 0, 0.0359, 0, -0.12644, 0.035611, 0.10579, -0.03658, -0.044933, 0.049539, -0.10375, 0.028788, -0.03659, 0.016655, -94193e-7, -0.1116, 0.10228, -0.059757, -0.12675, 0.017271, 0.15092, 0, 92177e-7, 0, -0.040398, 0.054139, 0.023495, -0.19998, 0.03108, -0.14859, 16413e-7, -0.063401, -41736e-7, 0, 0, 0, 0, 0, 0, 0, 0.017633, 0.12154, 0.014844, 0, 62872e-7, 0, 0, 0, -0.012991, 0.015632, 0.148, -0.17287, 0.027573, -0.10558, -0.028381, -0.1601, -0.10861, 0, 0, 0, 0, 0, 0, 0, -0.050799, 0, 0, 0, 0.058191, 0, 0, 0, 0.098109, 0, 0, 0, 0.017355, 0, 0, 0, -84396e-7, 0.015511, -0.022006, 0.090502, -0.083425, 0.081995, 0.037485, -0.1868, 63518e-7, -0.20898, 0.066795, 0, 0.086635, 0, 0, 0, -0.10052, 0, 0, 0, 0.029183, 0, 0, 0, 0.13954, 0, 24183e-7, 0, -0.013996, 0, 0, 0, 0.03755, -0.063408, -0.095524, -66204e-8, -0.01011, -0.11417, 0.11893, -0.038519, -0.043845, 0, 0.054809, 0, 0.014584, 0, 0.11024, 0, -0.1286, 0, 0, 0, -0.013809, 0, 0, 0, 0.046643, 0, 0, 0, 0, 0, 0, 0, 0.029664, -0.11144, -38707e-7, 0.036957, -0.020296, 0, 0.015165, 0.13016, -0.20004, 0, 0, 0, -0.014898, 0, 0.085852, 0, -0.052389, 0, 0, 0, 75247e-7, 0.14896, -0.075097, 0.088276, 0.07936, -0.077352, -0.025878, -0.17786, 0.088121, 0, 0, 0, 0.044288, -0.049057, -0.022134, -0.17036, 0.021931, -0.033452, 27312e-7, -0.034044, -0.12375, 0.02196, 0.089596, 0, -0.032824, 0, -0.17654, 0, -0.083957, 0, 0, 0, 0, 0, 0, 0, 21928e-7, 0.13961, -63211e-7, 0, -0.035498, 0, 0, 0, 87513e-7, -0.071363, -0.13341, 79083e-7, -9789e-6, 0.14328, -0.098177, 0.084643, 0.097713, -0.072204, -0.032773, 0.036905, -0.15301, -0.012019, 0.062019, -0.080499, -0.086663, 0, 0.062205, 0, 0.11582, 0, 0, 0, -0.027736, -0.13376, 0.028855, -0.043784, 0.058421, 0, 0, 0, -3833e-7, 0.031007, 0.024274, -0.13301, 0.13596, -0.041948, -0.1096, 0.046452, 0.12662, -0.049254, -0.16126, 0.061984, -0.23536, 74889e-7, -0.045049, 0.063305, 0.028035, 0, 0.13608, 0.023262, -0.046559, 0, 0, 0, -0.16926, 0, 0.067809, -0.082247, 0.096429, 0, 0, 0, -0.084006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03839, 0, -0.088326, 21105e-7, 0.17277, 0, 0, 0, 0.041922, -71732e-7, 79168e-7, -0.016058, -0.13714, 0, 0.028529, 0, -0.031387, 0.024855, 0.084249, -0.13553, 98604e-7, -0.19609, 0.09914, -0.11453, -0.049297, 0, 0.1629, 0.013718, 0.022975, -0.021355, -0.059963, 0.046499, 10483e-7, 0.13587, -0.094565, 0.094077, -0.097086, 0.10819, -0.17642, 0.049687, -0.075923, 0, 0, 0, -0.042108, 0, 0.18821, 57007e-7, 0.013693, -0.050797, -0.084963, 0.14106, 0.090782, -0.083822, -0.18338, -0.040639, -0.085108, -0.26172, 0.067755, 0, 0.086039, -0.036826, -0.10901, 0.012851, 0.14848, -0.050912, 95496e-7, -0.18808, 0.066332, -0.095817, -0.067671, 0.15728, 0.01908, 0.092292, -0.042226, 0.078525, 0.012025, -0.12747, -0.045771, 0.072186, 44171e-7, -0.056616, -0.027761, 0.040418, -0.079397, 0.024086, 0.023938, -0.14752, -0.032291, 0.11731, -0.14706, 0, -0.16154, 0, 0, 0, -0.16401, 0, 0.11167, -0.073384, 83214e-7, -0.26138, 0.03664, 0, -0.13406, 0.075173, 0.10732, -0.051645, -0.018098, 0.08159, 0.012014, -0.097678, -26073e-7, 0, 0, 0, -0.13623, 0, 0, 0, 0.053201, 0, 0, 0, -0.028917, 0, 0, 0, 0.096481, -0.030247, -80454e-7, -0.12386, -0.0729, 0.085417, 0.13485, -49854e-7, -0.033804, 0.05768, 0.022797, -0.15992, 0.039011, 54903e-8, -17996e-7, -0.072927, -0.052882, 0.040098, 8722e-6, -0.094152, -99553e-8, 0.034386, 0.074581, -0.103, -0.054192, -0.1867, -0.019201, 0.082774, 0.11276, 0, 0, 0, -0.015622, 0.081396, 0.081931, -0.17916, -0.19171, 0, 0, 0, 0.12595, -0.037572, -0.078861, 0.1052, -0.10291, 0, 0.040601, 0, -0.037273, 0.017012, -0.046905, 0.15692, -0.02941, 0.11382, -0.15523, -0.034254, -0.129, -0.014011, 0.063004, -0.10424, 22214e-8, 0.18625, -0.070594, 0, -30289e-7, 0.085572, 0.023822, -0.093746, -0.019635, 0.058169, -0.21594, -0.011842, -0.059955, 0.067115, -0.0272, 0.16808, -0.16449, -0.025853, 41495e-7, 0, 0.10483, -0.035289, -0.082386, 0, -0.14235, -83287e-7, 0.014714, 0, -30812e-7, 0.052884, 0.09577, -0.026076, -0.17278, 0, -0.013967, 0.081389, 0.13011, -90077e-7, -0.029134, 0, 0.075884, -0.034012, -0.10158, 0.026794, 0.1381, 0, 0.031672, 0, -0.049574, 0, 0, 0, 0.012788, -0.069952, -0.092755, 0.072161, 0.038865, -0.063906, 0.10812, -0.040895, -0.11118, 0.035619, 62968e-7, -0.090447, -0.07104, 0.041187, 0.023093, -0.06366, -0.070612, 0, 0, 0, 0.011894, 0, 0, 0, 0.014733, 0, 0.12602, 0, -29376e-7, 0, 0, 0, -0.019266, 0.058113, 87423e-7, -0.018019, -0.074371, 0.037209, 0.059213, -0.15027, -0.094376, 0, 0, 0, 0, 0, 0, 0, -0.060731, 0, 0.037453, 0, 0.078012, 0, 72858e-7, 0, 0.094867, 0, 0, 0, 0, 0, 0, 0, -0.038517, 0.10626, 59984e-7, 0.27093, -0.087623, 0.057645, 0.13399, -0.053092, 99093e-7, -0.03923, -0.10844, 0.033674, 0.065536, -0.073952, 0.064976, -13644e-7, -0.051146, 0.060127, -0.13571, 54371e-7, 0.13184, -0.041253, -0.040928, 0.049498, -0.1608, -29027e-7, 0.039259, 0, -0.049299, 0, 0.08896, 0, -0.020005, 0, 0, 0, 0.11374, 0, 0, 0, -19855e-7, 0.022288, -52636e-8, -0.13676, -0.1283, 0, 0.025403, -0.082463, -0.081695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.022278, 0.022731, -63264e-7, 0.070327, -0.09998, 0, 59647e-7, 0, -0.089259, 0, 0, 0, 0, 0, 0, 0, -0.010335, -0.064594, 0.034999, 0, 0.071962, 0, 59737e-7, 0, 0.087249, 0, 0, 0, 0, 0, 0, 0, -98713e-7, 0.065154, -0.07178, 0.068719, 0.033719, -0.016312, -0.093596, 0.10353, 0.15098, 0.037582, -0.068176, 0.065281, 0.028411, -0.090022, -0.02, 0.097608, 0.096275, -0.043733, -0.11081, 0.062366, 0.07787, -0.096504, 0.25379, -0.027689, 0.15274, -0.02326, 0.11649, -0.10328, 0.03204, 0, -0.1041, 0, 0.053508, -0.06176, 0.034901, -0.10102, 0.12959, 0.025727, 0.013432, -0.025025, -0.15642, 0, -0.012913, 0, 0.036708, 0, 0, 0, 92922e-7, -0.11008, 0.039353, -11975e-7, -0.1873, 0.05168, 0.14323, 0, -91294e-7, 0, -0.085983, 0, 0.062435, -0.095586, 0.18119, -0.016888, -0.023405, 0.12695, -0.031822, 0.012227, -0.034832, 83948e-7, -69426e-7, -0.12173, -0.064596, 0.099589, -0.042226, -0.1849, -0.018328, -0.12036, -98686e-7, 0.13638, -0.030563, 0.035158, 0.13902, -0.014779, -0.10195, 0.016682, 0.06353, 0, -0.013256, 0, 0, 0, -0.12189, 0, 0, 0, 93204e-7, -0.032384, 0.099758, -24205e-8, 0.027201, -0.027466, -0.1313, 0.023869, -0.037027, 0.063667, -0.055427, 0.12884, -0.03747, 0, 0.13929, 0.030423, -0.079607, 0.016579, 0.09025, -0.011038, -0.12443, -0.02106, 0.063132, 0, -6998e-6, -0.15043, 0.023482, 0, 0.086269, 0, -0.017606, 0, 11017e-7, -0.058056, 0.1128, -0.10181, 0.048584, -0.059057, -0.15894, -0.019696, 0.037927, 0, -0.10543, 0.010529, 10329e-7, 0, 0.11671, 0.021251, -0.013467, 0, 0.11561, 0, 28383e-7, -0.1409, -0.036411, 0.10079, -0.19653, 0, 0, 0, 0, 0, 0, 0, -0.015822, -0.085147, 0.067554, -0.051877, -0.030254, 0.033135, -0.060647, 755e-5, -0.12698, -0.026913, -0.013847, 0, 0.033159, 0, 0, 0, 20011e-7, -0.089529, 0.11052, -0.039774, -0.06078, 0.074167, -0.22869, -0.012486, 0.076502, -0.082171, 0.069945, -0.062, -0.026703, 0.13525, -0.030485, 0.074094, 0.010066, -0.025533, 0.027049, -0.060656, -0.10503, 0.049859, -0.043438, 0.091805, 0.028386, -0.1374, -0.13168, 0.085657, -0.13418, 0.037796, -0.067383, 0.078579, -0.094719, 0, 0.020552, 0, 0.11307, -0.03556, -0.065418, 0, -0.13795, 0.01813, -0.041248, 0.13839, 0.098539, -0.066899, -0.15574, -18212e-7, -0.010075, 0.030592, 0.037935, -25368e-7, 0.024418, -0.11589, -0.023747, 0.12406, 0.046364, 0, -0.14184, -0.02566, 0.066711, -0.038485, -0.086794, 0.037373, 0.098719, 0, 0, 0, -0.013182, 0.10087, -0.076343, 0.057484, -0.17586, 0, 0, 0, 0, 0, 0, 0, 0.051839, -0.049326, 0.069539, -0.031561, 0.016381, 0, -0.023198, -0.17628, 0.017158, 0, -0.12172, 0, -9651e-6, 0.03746, 0.032993, -0.14898, -68498e-7, 0, 0, 0, 0, 0, 0, 0, 0.015975, 0, 0.09992, 0, 0.041884, 0, -0.036147, 0, -0.056622, 0.047856, 0.021116, -0.063706, 0.038158, -0.063383, 76563e-7, 0.098989, 0.068157, -0.015616, -0.023883, -0.13523, -61924e-7, 0.070755, -0.041158, 23702e-7, 0.029427, 0, 0, 0, 0, 0, 0, 0, -74014e-7, 0, 0, 0, -0.12097, 0, 0, 0]
4087
+ };
4088
+
4089
+ // src/extractors/lib/layout-tables.ts
4090
+ var DATA_MARKERS = /* @__PURE__ */ new Set(["caption", "thead", "tfoot", "th", "col", "colgroup"]);
4091
+ var BLOCK_IN_CELL = /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6", "table", "form"]);
4092
+ var TABLE_PARTS = /* @__PURE__ */ new Set(["tbody", "thead", "tfoot", "tr", "td", "th"]);
4093
+ var TABLE_CONTEXT = /* @__PURE__ */ new Set(["table", "tbody", "thead", "tfoot", "tr"]);
4094
+ var shapeOf = (table) => {
4095
+ const shape = { rows: 0, columns: 0, dataMarker: false, blockInCell: false };
4096
+ const visit = (node, inCell) => {
4097
+ for (const child of node.children) {
4098
+ if (!isElement(child)) {
4099
+ continue;
4100
+ }
4101
+ const tag = child.tagName;
4102
+ if (tag === "table") {
4103
+ shape.blockInCell = shape.blockInCell || inCell;
4104
+ continue;
4105
+ }
4106
+ if (DATA_MARKERS.has(tag)) {
4107
+ shape.dataMarker = true;
4108
+ }
4109
+ if (tag === "tr") {
4110
+ shape.rows += 1;
4111
+ const cells = child.children.filter(
4112
+ (cell) => isElement(cell) && (cell.tagName === "td" || cell.tagName === "th")
4113
+ ).length;
4114
+ shape.columns = Math.max(shape.columns, cells);
4115
+ }
4116
+ if (inCell && BLOCK_IN_CELL.has(tag)) {
4117
+ shape.blockInCell = true;
4118
+ }
4119
+ visit(child, inCell || tag === "td" || tag === "th");
4120
+ }
4121
+ };
4122
+ visit(table, false);
4123
+ return shape;
4124
+ };
4125
+ var isLayoutTable = (table) => {
4126
+ const role = stringProperty(table, "role");
4127
+ if (role === "presentation" || role === "none" || stringProperty(table, "datatable") === "0") {
4128
+ return true;
4129
+ }
4130
+ const shape = shapeOf(table);
4131
+ if (shape.blockInCell) {
4132
+ return true;
4133
+ }
4134
+ if (shape.dataMarker) {
4135
+ return false;
4136
+ }
4137
+ if (shape.rows <= 1 || shape.columns <= 1) {
4138
+ return true;
4139
+ }
4140
+ if (shape.rows >= 10 || shape.columns > 4) {
4141
+ return false;
4142
+ }
4143
+ return shape.rows * shape.columns <= 10;
4144
+ };
4145
+ var unwrap = (table) => {
4146
+ const cells = [];
4147
+ const collect2 = (node) => {
4148
+ for (const child of node.children) {
4149
+ if (!isElement(child)) {
4150
+ continue;
4151
+ }
4152
+ if (child.tagName === "td" || child.tagName === "th") {
4153
+ cells.push({ type: "element", tagName: "div", properties: {}, children: child.children });
4154
+ } else if (child.tagName !== "table") {
4155
+ collect2(child);
4156
+ }
4157
+ }
4158
+ };
4159
+ collect2(table);
4160
+ return { type: "element", tagName: "div", properties: {}, children: cells };
4161
+ };
4162
+ var unwrapLayoutTables = (root) => {
4163
+ const visit = (parent) => {
4164
+ const parentTag = isElement(parent) ? parent.tagName : "";
4165
+ for (let index = 0; index < parent.children.length; index++) {
4166
+ const child = parent.children[index];
4167
+ if (!isElement(child)) {
4168
+ continue;
4169
+ }
4170
+ if (TABLE_PARTS.has(child.tagName) && !TABLE_CONTEXT.has(parentTag)) {
4171
+ child.tagName = "div";
4172
+ }
4173
+ visit(child);
4174
+ if (child.tagName === "table" && isLayoutTable(child)) {
4175
+ parent.children[index] = unwrap(child);
4176
+ }
4177
+ }
4178
+ };
4179
+ if ("children" in root) {
4180
+ visit(root);
4181
+ }
4182
+ };
4183
+
3015
4184
  // src/extractors/lib/terminators.ts
3016
4185
  var TERMINATOR_PATTERNS = [
3017
4186
  /^was this (page|article|document) helpful/i,
@@ -3030,27 +4199,27 @@ var TERMINATOR_PATTERNS = [
3030
4199
  ];
3031
4200
  var TAIL_START_FRACTION = 0.8;
3032
4201
  var MAX_TERMINATOR_BLOCK_LENGTH = 500;
3033
- var BLOCK_TAGS = /* @__PURE__ */ new Set(["p", "div", "section", "footer", "aside", "h1", "h2", "h3", "h4", "h5", "h6", "ul", "ol"]);
4202
+ var BLOCK_TAGS3 = /* @__PURE__ */ new Set(["p", "div", "section", "footer", "aside", "h1", "h2", "h3", "h4", "h5", "h6", "ul", "ol"]);
3034
4203
  var isTerminatorBlock = (element3, start, tailStart) => {
3035
- if (!BLOCK_TAGS.has(element3.tagName) || start < tailStart) {
4204
+ if (!BLOCK_TAGS3.has(element3.tagName) || start < tailStart) {
3036
4205
  return false;
3037
4206
  }
3038
- const text6 = textOf(element3).replace(/\s+/g, " ").trim();
4207
+ const text6 = textOf2(element3).replace(/\s+/g, " ").trim();
3039
4208
  if (text6.length === 0 || text6.length > MAX_TERMINATOR_BLOCK_LENGTH) {
3040
4209
  return false;
3041
4210
  }
3042
4211
  return TERMINATOR_PATTERNS.some((pattern) => pattern.test(text6));
3043
4212
  };
3044
- var textOf = (node) => {
4213
+ var textOf2 = (node) => {
3045
4214
  if (node.type === "text") {
3046
4215
  return node.value;
3047
4216
  }
3048
- if (!isParent(node)) {
4217
+ if (!isParent2(node)) {
3049
4218
  return "";
3050
4219
  }
3051
4220
  let text6 = "";
3052
4221
  for (const child of node.children) {
3053
- text6 += textOf(child);
4222
+ text6 += textOf2(child);
3054
4223
  }
3055
4224
  return text6;
3056
4225
  };
@@ -3063,7 +4232,7 @@ var truncateTrailingBoilerplate = (tree) => {
3063
4232
  total += node.value.trim().length;
3064
4233
  return;
3065
4234
  }
3066
- if (isParent(node)) {
4235
+ if (isParent2(node)) {
3067
4236
  for (const child of node.children) {
3068
4237
  measure(child);
3069
4238
  }
@@ -3076,7 +4245,7 @@ var truncateTrailingBoilerplate = (tree) => {
3076
4245
  const tailStart = total * TAIL_START_FRACTION;
3077
4246
  let cutoff = -1;
3078
4247
  const find = (node) => {
3079
- if (cutoff !== -1 || !isParent(node)) {
4248
+ if (cutoff !== -1 || !isParent2(node)) {
3080
4249
  return;
3081
4250
  }
3082
4251
  for (const child of node.children) {
@@ -3116,6 +4285,7 @@ var truncateTrailingBoilerplate = (tree) => {
3116
4285
 
3117
4286
  // src/extractors/presets/takumi.ts
3118
4287
  var MIN_RETAINED_FRACTION = 0.25;
4288
+ var FURNITURE_LINK_DENSITY = 0.5;
3119
4289
  var SEMANTIC_SELECTORS = [
3120
4290
  (element3) => stringProperty(element3, "itemprop")?.includes("articleBody") ?? false,
3121
4291
  (element3) => element3.tagName === "article",
@@ -3153,6 +4323,31 @@ var collectMatching = (tree, matches, into) => {
3153
4323
  }
3154
4324
  }
3155
4325
  };
4326
+ var containsTag = (element3, tagName) => element3.children.some((child) => isElement(child) && (child.tagName === tagName || containsTag(child, tagName)));
4327
+ var removesEveryTitle = (root, doomed) => {
4328
+ if (!doomed.some((element3) => containsTag(element3, "h1"))) {
4329
+ return false;
4330
+ }
4331
+ const doomedSet = new Set(doomed);
4332
+ let survivor = false;
4333
+ const visit = (node) => {
4334
+ if (survivor || !("children" in node)) {
4335
+ return;
4336
+ }
4337
+ for (const child of node.children) {
4338
+ if (!isElement(child) || doomedSet.has(child)) {
4339
+ continue;
4340
+ }
4341
+ if (child.tagName === "h1") {
4342
+ survivor = true;
4343
+ return;
4344
+ }
4345
+ visit(child);
4346
+ }
4347
+ };
4348
+ visit(root);
4349
+ return !survivor;
4350
+ };
3156
4351
  var asRootOf = (nodes) => ({ type: "root", children: nodes });
3157
4352
  var scoredSelection = (tree, collector, lang) => {
3158
4353
  const context = buildScoringContext(tree, collector, lang);
@@ -3179,9 +4374,14 @@ var takumiExtractor = (params) => {
3179
4374
  const shortcut = semanticShortcut(body, collector, minLength);
3180
4375
  const searchRoot = shortcut ?? body;
3181
4376
  const searchText = collector.textLength(searchRoot);
3182
- const doomed = findUnlikelyElements(searchRoot);
3183
- const doomedText = doomed.reduce((sum, element3) => sum + collector.metrics(element3).text, 0);
3184
- if (searchText - doomedText > Math.max(minLength, searchText * MIN_RETAINED_FRACTION)) {
4377
+ let doomed = findUnlikelyElements(searchRoot);
4378
+ const textOf3 = (elements) => elements.reduce((sum, element3) => sum + collector.metrics(element3).text, 0);
4379
+ let acceptable = searchText - textOf3(doomed) > Math.max(minLength, searchText * MIN_RETAINED_FRACTION);
4380
+ if (!acceptable) {
4381
+ doomed = findUnlikelyElements(searchRoot, (element3) => collector.linkDensity(element3) < FURNITURE_LINK_DENSITY);
4382
+ acceptable = doomed.length > 0 && searchText - textOf3(doomed) >= minLength && !removesEveryTitle(searchRoot, doomed);
4383
+ }
4384
+ if (acceptable) {
3185
4385
  const doomedSet = new Set(doomed);
3186
4386
  pruneInPlace(searchRoot, (node) => !(isElement(node) && doomedSet.has(node)));
3187
4387
  collector = new MetricsCollector();
@@ -3204,9 +4404,251 @@ var takumiExtractor = (params) => {
3204
4404
  return cleanContent(chosen, cleanupCollector);
3205
4405
  };
3206
4406
 
4407
+ // src/extractors/lib/takumi-signal.ts
4408
+ var MARK = "dataWebforaiIndex";
4409
+ var cloneElements = (root) => {
4410
+ const copyOf = (node) => "children" in node ? {
4411
+ ...node,
4412
+ ...isElement(node) ? { properties: { ...node.properties } } : {},
4413
+ children: [...node.children]
4414
+ } : node;
4415
+ const copy = copyOf(root);
4416
+ const stack = [copy];
4417
+ while (stack.length > 0) {
4418
+ const parent = stack.pop();
4419
+ if (!("children" in parent)) {
4420
+ continue;
4421
+ }
4422
+ const children = parent.children;
4423
+ for (let index = 0; index < children.length; index++) {
4424
+ if ("children" in children[index]) {
4425
+ children[index] = copyOf(children[index]);
4426
+ stack.push(children[index]);
4427
+ }
4428
+ }
4429
+ }
4430
+ return copy;
4431
+ };
4432
+ var takumiSelection = (root, lang, url) => {
4433
+ const elements = [];
4434
+ walk(root, (node) => {
4435
+ if (isElement(node)) {
4436
+ node.properties[MARK] = elements.length;
4437
+ elements.push(node);
4438
+ }
4439
+ });
4440
+ const copy = cloneElements(root);
4441
+ for (const element3 of elements) {
4442
+ delete element3.properties[MARK];
4443
+ }
4444
+ const kept = /* @__PURE__ */ new Set();
4445
+ walk(takumiExtractor({ hast: copy, lang, url, owned: true }), (node) => {
4446
+ if (isElement(node)) {
4447
+ const index = node.properties[MARK];
4448
+ if (typeof index === "number" && elements[index]) {
4449
+ kept.add(elements[index]);
4450
+ }
4451
+ }
4452
+ });
4453
+ return kept;
4454
+ };
4455
+
4456
+ // src/extractors/presets/kiwame.ts
4457
+ var DEFAULT_THRESHOLD = 0.47;
4458
+ var findBody2 = (hast) => findElement(hast, (element3) => element3.tagName === "body") ?? hast;
4459
+ var completeTables = (kept, blocks) => {
4460
+ const rows = /* @__PURE__ */ new Set();
4461
+ const tables = /* @__PURE__ */ new Set();
4462
+ for (const block of blocks) {
4463
+ if (!kept.has(block.owner)) {
4464
+ continue;
4465
+ }
4466
+ const { row, table } = enclosingTable(block.frame);
4467
+ if (row) {
4468
+ rows.add(row);
4469
+ }
4470
+ if (table) {
4471
+ tables.add(table);
4472
+ }
4473
+ }
4474
+ for (const table of tables) {
4475
+ const first = findElement(table, (element3) => element3.tagName === "tr");
4476
+ if (first) {
4477
+ rows.add(first);
4478
+ }
4479
+ }
4480
+ for (const block of blocks) {
4481
+ const { row } = enclosingTable(block.frame);
4482
+ if (row && rows.has(row)) {
4483
+ kept.add(block.owner);
4484
+ }
4485
+ }
4486
+ };
4487
+ var enclosingTable = (start) => {
4488
+ let row;
4489
+ for (let frame = start; frame; frame = frame.parent) {
4490
+ const tag = frame.element.tagName;
4491
+ if (tag === "tr" && !row) {
4492
+ row = frame.element;
4493
+ } else if (tag === "table") {
4494
+ return { row, table: frame.element };
4495
+ }
4496
+ }
4497
+ return { row };
4498
+ };
4499
+ var HEADING_LOOKAHEAD = 3;
4500
+ var keepSectionHeadings = (kept, blocks) => {
4501
+ let seenKept = false;
4502
+ for (let index = 0; index < blocks.length; index++) {
4503
+ const block = blocks[index];
4504
+ if (kept.has(block.owner)) {
4505
+ seenKept = true;
4506
+ continue;
4507
+ }
4508
+ if (!(seenKept && /^h[1-6]$/.test(block.owner.tagName))) {
4509
+ continue;
4510
+ }
4511
+ for (let next = index + 1; next < Math.min(blocks.length, index + 1 + HEADING_LOOKAHEAD); next++) {
4512
+ if (/^h[1-6]$/.test(blocks[next].owner.tagName)) {
4513
+ break;
4514
+ }
4515
+ if (kept.has(blocks[next].owner)) {
4516
+ kept.add(block.owner);
4517
+ break;
4518
+ }
4519
+ }
4520
+ }
4521
+ };
4522
+ var CODE_IN_CONTENT_THRESHOLD = 0.2;
4523
+ var CODE_CONTEXT = 6;
4524
+ var keepCodeInContent = (kept, blocks, probabilities) => {
4525
+ const keptIndex = blocks.map((block) => kept.has(block.owner));
4526
+ const near = (from, step) => {
4527
+ for (let distance = 1; distance <= CODE_CONTEXT; distance++) {
4528
+ const index = from + step * distance;
4529
+ if (index < 0 || index >= blocks.length) {
4530
+ return false;
4531
+ }
4532
+ if (keptIndex[index]) {
4533
+ return true;
4534
+ }
4535
+ }
4536
+ return false;
4537
+ };
4538
+ for (const block of blocks) {
4539
+ if (block.owner.tagName === "pre" && !keptIndex[block.index] && probabilities[block.index] >= CODE_IN_CONTENT_THRESHOLD && near(block.index, -1) && near(block.index, 1)) {
4540
+ kept.add(block.owner);
4541
+ }
4542
+ }
4543
+ };
4544
+ var listOf = (block) => {
4545
+ if (block.owner.tagName !== "li") {
4546
+ return void 0;
4547
+ }
4548
+ for (let frame = block.frame.parent; frame; frame = frame.parent) {
4549
+ const tag = frame.element.tagName;
4550
+ if (tag === "ul" || tag === "ol") {
4551
+ return frame.element;
4552
+ }
4553
+ }
4554
+ return void 0;
4555
+ };
4556
+ var keepAuthoredLists = (kept, blocks) => {
4557
+ let seenKept = false;
4558
+ for (let index = 0; index < blocks.length - 1; index++) {
4559
+ const block = blocks[index];
4560
+ const introducesList = kept.has(block.owner) && /[::]\s*$/.test(block.text) || seenKept && /^h[1-6]$/.test(block.owner.tagName) && REFERENCE_HEADING.test(block.text.trim());
4561
+ seenKept ||= kept.has(block.owner);
4562
+ const list = listOf(blocks[index + 1]);
4563
+ if (!(introducesList && list)) {
4564
+ continue;
4565
+ }
4566
+ kept.add(block.owner);
4567
+ for (let next = index + 1; next < blocks.length && listOf(blocks[next]) === list; next++) {
4568
+ kept.add(blocks[next].owner);
4569
+ }
4570
+ }
4571
+ };
4572
+ var pruneToBlocks = (element3, kept, ownerKept) => {
4573
+ const isBlock = element3.type === "element" && (BLOCK_TAGS2.has(element3.tagName) || element3.tagName === "pre");
4574
+ const selfKept = isBlock ? kept.has(element3) : ownerKept;
4575
+ if (element3.type === "element" && element3.tagName === "pre") {
4576
+ return selfKept;
4577
+ }
4578
+ let keepChildren = false;
4579
+ const children = [];
4580
+ for (const child of element3.children) {
4581
+ if (child.type === "element") {
4582
+ if (pruneToBlocks(child, kept, selfKept)) {
4583
+ children.push(child);
4584
+ keepChildren = true;
4585
+ }
4586
+ } else if (child.type === "text") {
4587
+ if (selfKept) {
4588
+ children.push(child);
4589
+ }
4590
+ } else {
4591
+ children.push(child);
4592
+ }
4593
+ }
4594
+ element3.children = children;
4595
+ return selfKept || keepChildren;
4596
+ };
4597
+ var createKiwameExtractor = (options = {}) => {
4598
+ const { threshold = DEFAULT_THRESHOLD, model = BLOCK_MODEL, cleanup = true } = options;
4599
+ const stackModel = options.stackModel === void 0 ? BLOCK_STACK_MODEL : options.stackModel;
4600
+ const usable = isUsableModel(model);
4601
+ const stackUsable = stackModel ? isUsableModel(stackModel, STACKED_FEATURE_COUNT) : false;
4602
+ return (params) => {
4603
+ if (!usable) {
4604
+ return takumiExtractor(params);
4605
+ }
4606
+ const { hast, lang, owned } = params;
4607
+ const body = owned ? findBody2(hast) : cloneHast(findBody2(hast));
4608
+ stripNonContent(body);
4609
+ const blocks = segmentBlocks(body);
4610
+ if (blocks.length === 0 || !(isElement(body) || body.type === "root")) {
4611
+ return body;
4612
+ }
4613
+ const collector = new MetricsCollector();
4614
+ const takumiKept = takumiSelection(body, lang, params.url);
4615
+ const features = blockFeatures({ root: body, blocks, collector, lang, takumiKept });
4616
+ let probabilities = scoreBlocks(features, blocks.length, model, FEATURE_COUNT);
4617
+ if (stackModel && stackUsable) {
4618
+ const stacked = stackedFeatures(blocks, features, probabilities);
4619
+ probabilities = scoreBlocks(stacked, blocks.length, stackModel, STACKED_FEATURE_COUNT);
4620
+ }
4621
+ const kept = /* @__PURE__ */ new Set();
4622
+ for (const block of blocks) {
4623
+ if (probabilities[block.index] >= threshold) {
4624
+ kept.add(block.owner);
4625
+ }
4626
+ }
4627
+ if (kept.size === 0) {
4628
+ return takumiExtractor({ hast: body, lang, url: params.url, owned: true });
4629
+ }
4630
+ keepCodeInContent(kept, blocks, probabilities);
4631
+ keepSectionHeadings(kept, blocks);
4632
+ keepAuthoredLists(kept, blocks);
4633
+ completeTables(kept, blocks);
4634
+ pruneToBlocks(body, kept, false);
4635
+ unwrapLayoutTables(body);
4636
+ if (!cleanup) {
4637
+ return body;
4638
+ }
4639
+ walk(body, (node) => {
4640
+ if (isElement(node) && (node.tagName === "form" || node.tagName === "fieldset")) {
4641
+ node.tagName = "div";
4642
+ }
4643
+ });
4644
+ return cleanContent(body, new MetricsCollector());
4645
+ };
4646
+ };
4647
+ var kiwameExtractor = createKiwameExtractor();
4648
+
3207
4649
  // src/extractors/presets/auto.ts
3208
4650
  var createAutoExtractor = (options = {}) => {
3209
- const { adapters } = options;
4651
+ const { adapters, fallback = kiwameExtractor } = options;
3210
4652
  return (params) => {
3211
4653
  if (adapters !== false) {
3212
4654
  const extracted = runAdapters({ hast: params.hast, url: params.url, lang: params.lang }, adapters ?? void 0);
@@ -3214,7 +4656,7 @@ var createAutoExtractor = (options = {}) => {
3214
4656
  return extracted;
3215
4657
  }
3216
4658
  }
3217
- return takumiExtractor(params);
4659
+ return fallback(params);
3218
4660
  };
3219
4661
  };
3220
4662
  var autoExtractor = createAutoExtractor();
@@ -3315,7 +4757,6 @@ var customAHandler = (options) => (state, node) => {
3315
4757
  };
3316
4758
 
3317
4759
  // src/mdast-handlers/custom-code-handler.ts
3318
- import { toText } from "hast-util-to-text";
3319
4760
  import { trimTrailingLines } from "trim-trailing-lines";
3320
4761
 
3321
4762
  // src/utils/detect-code-lang.ts
@@ -3366,6 +4807,129 @@ var detectLanguage = (code) => {
3366
4807
  ).filter(([_, score]) => score > 20).sort((a, b) => b[1] - a[1])[0]?.[0] || "plain";
3367
4808
  };
3368
4809
 
4810
+ // src/utils/pre-text.ts
4811
+ var LINE_BLOCK_TAGS = /* @__PURE__ */ new Set([
4812
+ "address",
4813
+ "article",
4814
+ "aside",
4815
+ "blockquote",
4816
+ "dd",
4817
+ "div",
4818
+ "dl",
4819
+ "dt",
4820
+ "figcaption",
4821
+ "figure",
4822
+ "footer",
4823
+ "form",
4824
+ "h1",
4825
+ "h2",
4826
+ "h3",
4827
+ "h4",
4828
+ "h5",
4829
+ "h6",
4830
+ "header",
4831
+ "hr",
4832
+ "li",
4833
+ "main",
4834
+ "nav",
4835
+ "ol",
4836
+ "p",
4837
+ "pre",
4838
+ "section",
4839
+ "table",
4840
+ "tr",
4841
+ "ul"
4842
+ ]);
4843
+ var INLINE_CONTEXT_TAGS = /* @__PURE__ */ new Set(["span", "a", "b", "i", "em", "strong", "mark", "small", "u", "s", "label"]);
4844
+ var preText = (node) => {
4845
+ let out = "";
4846
+ const ensureLineStart = () => {
4847
+ if (out.length > 0 && out.charCodeAt(out.length - 1) !== 10) {
4848
+ out += "\n";
4849
+ }
4850
+ };
4851
+ const visitChildren = (parent, inline) => {
4852
+ let cells = 0;
4853
+ for (const child of parent.children) {
4854
+ const isCell = child.type === "element" && (child.tagName === "td" || child.tagName === "th");
4855
+ visit(child, isCell ? cells++ : 0, inline);
4856
+ }
4857
+ };
4858
+ const visitElement = (element3, cellIndex, inline) => {
4859
+ const tag = element3.tagName;
4860
+ if (tag === "br") {
4861
+ out += "\n";
4862
+ return;
4863
+ }
4864
+ if (cellIndex > 0) {
4865
+ out += " ";
4866
+ }
4867
+ const block = !inline && LINE_BLOCK_TAGS.has(tag);
4868
+ if (block) {
4869
+ ensureLineStart();
4870
+ }
4871
+ visitChildren(element3, inline || INLINE_CONTEXT_TAGS.has(tag));
4872
+ if (block) {
4873
+ ensureLineStart();
4874
+ }
4875
+ };
4876
+ const visit = (current, cellIndex, inline) => {
4877
+ if (current.type === "text") {
4878
+ out += current.value;
4879
+ } else if (current.type === "element") {
4880
+ visitElement(current, cellIndex, inline);
4881
+ } else if (current.type === "root") {
4882
+ visitChildren(current, inline);
4883
+ }
4884
+ };
4885
+ visit(node, 0, false);
4886
+ return out;
4887
+ };
4888
+
4889
+ // src/mdast-handlers/twoslash.ts
4890
+ var cleanTwoslash = (pre) => {
4891
+ if (!classList(pre).includes("twoslash")) {
4892
+ return void 0;
4893
+ }
4894
+ let language;
4895
+ const clean2 = (element3) => {
4896
+ element3.children = element3.children.flatMap((child) => {
4897
+ if (!isElement(child)) {
4898
+ return [child];
4899
+ }
4900
+ const classes = classList(child);
4901
+ if (classes.includes("language-id")) {
4902
+ language ||= preText(child).trim() || void 0;
4903
+ return [];
4904
+ }
4905
+ if (classes.includes("playground-link") || classes.includes("error-behind")) {
4906
+ return [];
4907
+ }
4908
+ if (classes.includes("error")) {
4909
+ return [errorLine(child)];
4910
+ }
4911
+ clean2(child);
4912
+ return [child];
4913
+ });
4914
+ };
4915
+ clean2(pre);
4916
+ return language && /^[\w+#.-]+$/.test(language) ? language : void 0;
4917
+ };
4918
+ var errorLine = (error) => {
4919
+ let code = "";
4920
+ let message = "";
4921
+ for (const child of error.children) {
4922
+ if (isElement(child) && classList(child).includes("code")) {
4923
+ code = preText(child).trim();
4924
+ } else {
4925
+ message += isElement(child) ? preText(child) : child.type === "text" ? child.value : "";
4926
+ }
4927
+ }
4928
+ const prefix = /^\d+$/.test(code) ? `error TS${code}: ` : "error: ";
4929
+ const lines = `${prefix}${message.trim()}`.split("\n").map((line) => `// ${line}`);
4930
+ return { type: "element", tagName: "div", properties: {}, children: [{ type: "text", value: lines.join("\n") }] };
4931
+ };
4932
+
3369
4933
  // src/mdast-handlers/custom-code-handler.ts
3370
4934
  var LANGUAGE_MATCH_REGEX = [/^language-(\S+)$/, /^highlight-source-(\S+)$/, /^CodeBlock--language-(\S+)$/];
3371
4935
  var LANGUAGE_ATTRIBUTES = ["dataLanguage", "dataLang"];
@@ -3379,12 +4943,21 @@ var attributeLanguage = (element3) => {
3379
4943
  return void 0;
3380
4944
  };
3381
4945
  var codeLanguage = (...elements) => elements.flatMap(classList).map((className) => LANGUAGE_MATCH_REGEX.map((regex) => className.match(regex)).find(Boolean)?.[1]).find(Boolean) ?? elements.map(attributeLanguage).find(Boolean);
4946
+ var codeMeta = (pre) => {
4947
+ const title = pre.properties?.dataTitle;
4948
+ if (typeof title !== "string") {
4949
+ return null;
4950
+ }
4951
+ const clean2 = title.replace(/["\r\n]+/g, " ").trim();
4952
+ return clean2 ? `title="${clean2}"` : null;
4953
+ };
3382
4954
  var customCodeHandler = (state, node) => {
4955
+ const twoslashLang = cleanTwoslash(node);
3383
4956
  const code = node.children.find((child) => isElement(child) && child.tagName === "code");
3384
- const codeValue = trimTrailingLines(toText(node));
3385
- const classLang = codeLanguage(...isElement(code) ? [code, node] : [node]);
4957
+ const codeValue = trimTrailingLines(preText(node));
4958
+ const classLang = twoslashLang || codeLanguage(...isElement(code) ? [code, node] : [node]);
3386
4959
  const lang = classLang || detectLanguage(codeValue) || null;
3387
- const result = { type: "code", lang, meta: null, value: codeValue };
4960
+ const result = { type: "code", lang, meta: codeMeta(node), value: codeValue };
3388
4961
  state.patch(node, result);
3389
4962
  return result;
3390
4963
  };
@@ -3393,7 +4966,6 @@ var customCodeHandler = (state, node) => {
3393
4966
  import { select as select5 } from "hast-util-select";
3394
4967
  import { defaultHandlers as defaultHandlers2 } from "hast-util-to-mdast";
3395
4968
  import { toString as hastToString2 } from "hast-util-to-string";
3396
- import { toText as toText2 } from "hast-util-to-text";
3397
4969
  import { trimTrailingLines as trimTrailingLines2 } from "trim-trailing-lines";
3398
4970
  var CODE_BLOCK_REGEX = /highlight-source|language-|codegroup|codeblock|code-block/i;
3399
4971
  var CODE_FILENAME_SELECTORS = "[class*='fileName'],[class*='fileName'],[class*='title'],[class*='Title']";
@@ -3405,13 +4977,13 @@ var customDivHandler = (state, node) => {
3405
4977
  const codeBlocks = collectElements(node, (element3) => element3.tagName === "pre");
3406
4978
  const codeBlock = codeBlocks.length === 1 ? codeBlocks[0] : void 0;
3407
4979
  if (codeBlock) {
3408
- const codeValue = trimTrailingLines2(toText2(codeBlock));
4980
+ const codeValue = trimTrailingLines2(preText(codeBlock));
3409
4981
  const filenameElement = select5(CODE_FILENAME_SELECTORS, node);
3410
4982
  const fileLang = filenameElement ? hastToString2(filenameElement).match(/\.(\w+)$/)?.[1] : null;
3411
4983
  const code = codeBlock.children.find((child) => isElement(child) && child.tagName === "code");
3412
4984
  const classLang = codeLanguage(...isElement(code) ? [code, codeBlock, node] : [codeBlock, node]);
3413
4985
  const lang = fileLang || classLang || detectLanguage(codeValue) || null;
3414
- const result = { type: "code", lang, meta: null, value: codeValue };
4986
+ const result = { type: "code", lang, meta: codeMeta(codeBlock), value: codeValue };
3415
4987
  state.patch(node, result);
3416
4988
  return result;
3417
4989
  }
@@ -3431,11 +5003,20 @@ var hasNoUsableSource = (node) => {
3431
5003
  }
3432
5004
  return false;
3433
5005
  };
5006
+ var PLACEHOLDER_FILE = /^(?:[\w-]*[-_.])?placeholder[\w-]*\.(?:gif|png|svg|webp|jpe?g)$|^(?:spacer|blank|transparent|pixel)\.(?:gif|png)$/i;
5007
+ var isUndescribedPlaceholder = (node) => {
5008
+ if (stringProperty(node, "alt")?.trim() || stringProperty(node, "title")?.trim()) {
5009
+ return false;
5010
+ }
5011
+ const src = stringProperty(node, "src") ?? "";
5012
+ const file = src.split(/[?#]/)[0].split("/").pop() ?? "";
5013
+ return PLACEHOLDER_FILE.test(file);
5014
+ };
3434
5015
  var customImgHandler = (options) => (state, node) => {
3435
5016
  if (options?.hideImage) {
3436
5017
  return void 0;
3437
5018
  }
3438
- if (hasNoUsableSource(node)) {
5019
+ if (hasNoUsableSource(node) || isUndescribedPlaceholder(node)) {
3439
5020
  return void 0;
3440
5021
  }
3441
5022
  const image = defaultHandlers3.image(state, node);
@@ -3450,7 +5031,175 @@ var customImgHandler = (options) => (state, node) => {
3450
5031
 
3451
5032
  // src/mdast-handlers/custom-table-handler.ts
3452
5033
  import { defaultHandlers as defaultHandlers4 } from "hast-util-to-mdast";
3453
- import { toText as toText3 } from "hast-util-to-text";
5034
+ import { toText } from "hast-util-to-text";
5035
+
5036
+ // src/mdast-handlers/table-cell-flatten.ts
5037
+ var PHRASING_TYPES = /* @__PURE__ */ new Set([
5038
+ "text",
5039
+ "emphasis",
5040
+ "strong",
5041
+ "delete",
5042
+ "inlineCode",
5043
+ "link",
5044
+ "linkReference",
5045
+ "image",
5046
+ "imageReference",
5047
+ "html",
5048
+ "footnoteReference",
5049
+ "inlineMath"
5050
+ ]);
5051
+ var PHRASING_PARENTS = /* @__PURE__ */ new Set(["emphasis", "strong", "delete", "link", "linkReference"]);
5052
+ var lineBreak = () => ({ type: "html", value: "<br>" });
5053
+ var needsFlattening = (nodes) => nodes.some((node) => {
5054
+ if (node.type === "break") {
5055
+ return true;
5056
+ }
5057
+ if (!PHRASING_TYPES.has(node.type)) {
5058
+ return true;
5059
+ }
5060
+ if ((node.type === "text" || node.type === "inlineCode") && node.value.includes("\n")) {
5061
+ return true;
5062
+ }
5063
+ return PHRASING_PARENTS.has(node.type) && "children" in node && needsFlattening(node.children);
5064
+ });
5065
+ var CellBuilder = class _CellBuilder {
5066
+ constructor() {
5067
+ this.out = [];
5068
+ this.#pendingBlock = false;
5069
+ }
5070
+ #pendingBlock;
5071
+ /** Starts a new visual line when the previous block left content on the current one. */
5072
+ block() {
5073
+ const last = this.out.at(-1);
5074
+ if (this.#pendingBlock && last && !(last.type === "html" && last.value === "<br>")) {
5075
+ this.out.push(lineBreak());
5076
+ }
5077
+ this.#pendingBlock = true;
5078
+ }
5079
+ add(nodes) {
5080
+ for (const node of nodes) {
5081
+ this.#addOne(node);
5082
+ }
5083
+ }
5084
+ #addOne(node) {
5085
+ switch (node.type) {
5086
+ case "break":
5087
+ this.out.push(lineBreak());
5088
+ return;
5089
+ case "text":
5090
+ this.out.push({ type: "text", value: node.value.replace(/\s*\n\s*/g, " ") });
5091
+ return;
5092
+ case "inlineCode":
5093
+ this.#codeLines(node.value);
5094
+ return;
5095
+ case "code":
5096
+ this.block();
5097
+ this.#codeLines(node.value);
5098
+ return;
5099
+ case "math":
5100
+ this.block();
5101
+ this.out.push({ type: "inlineMath", value: node.value.replace(/\s*\n\s*/g, " ") });
5102
+ return;
5103
+ case "list":
5104
+ node.children.forEach((item, index) => {
5105
+ this.block();
5106
+ const marker = node.ordered ? `${(node.start ?? 1) + index}. ` : "- ";
5107
+ this.out.push({ type: "text", value: marker });
5108
+ this.#pendingBlock = false;
5109
+ this.add(item.children);
5110
+ });
5111
+ return;
5112
+ case "thematicBreak":
5113
+ return;
5114
+ default:
5115
+ this.#addContainer(node);
5116
+ }
5117
+ }
5118
+ #addContainer(node) {
5119
+ if (PHRASING_PARENTS.has(node.type) && "children" in node) {
5120
+ const inner = new _CellBuilder();
5121
+ inner.add(node.children);
5122
+ this.out.push({ ...node, children: inner.out });
5123
+ return;
5124
+ }
5125
+ if (PHRASING_TYPES.has(node.type)) {
5126
+ this.out.push(node);
5127
+ return;
5128
+ }
5129
+ if ("children" in node) {
5130
+ this.block();
5131
+ this.add(node.children);
5132
+ }
5133
+ }
5134
+ #codeLines(value) {
5135
+ value.split("\n").forEach((line, index) => {
5136
+ if (index > 0) {
5137
+ this.out.push(lineBreak());
5138
+ }
5139
+ if (line.trim().length > 0) {
5140
+ this.out.push({ type: "inlineCode", value: line });
5141
+ }
5142
+ });
5143
+ }
5144
+ };
5145
+ var flattenTableCells = (table) => {
5146
+ for (const row of table.children) {
5147
+ for (const cell of row.children) {
5148
+ if (!needsFlattening(cell.children)) {
5149
+ continue;
5150
+ }
5151
+ const builder = new CellBuilder();
5152
+ builder.add(cell.children);
5153
+ cell.children = builder.out;
5154
+ }
5155
+ }
5156
+ };
5157
+ var hasMultilineCode = (nodes) => nodes.some(
5158
+ (node) => node.type === "code" && node.value.includes("\n") || "children" in node && hasMultilineCode(node.children)
5159
+ );
5160
+ var tableHasCodeSamples = (table) => table.children.some((row) => row.children.some((cell) => hasMultilineCode(cell.children)));
5161
+ var unfoldTable = (table, hasHeader) => {
5162
+ const [first, ...rest] = table.children;
5163
+ const labelled = hasHeader && rest.length > 0;
5164
+ const labels = labelled && first ? first.children.map((cell) => cell.children) : [];
5165
+ const rows = labelled ? rest : table.children;
5166
+ const out = [];
5167
+ rows.forEach((row, rowIndex) => {
5168
+ if (rowIndex > 0) {
5169
+ out.push({ type: "thematicBreak" });
5170
+ }
5171
+ row.children.forEach((cell, cellIndex) => {
5172
+ const label = labels[cellIndex];
5173
+ if (label && label.length > 0) {
5174
+ out.push({ type: "paragraph", children: [{ type: "strong", children: label }] });
5175
+ }
5176
+ out.push(...asBlocks(cell.children));
5177
+ });
5178
+ });
5179
+ return out;
5180
+ };
5181
+ var asBlocks = (nodes) => {
5182
+ const blocks = [];
5183
+ let run = [];
5184
+ const flush = () => {
5185
+ if (run.some((node) => node.type !== "text" || node.value.trim().length > 0)) {
5186
+ blocks.push({ type: "paragraph", children: run });
5187
+ }
5188
+ run = [];
5189
+ };
5190
+ for (const node of nodes) {
5191
+ if (PHRASING_TYPES.has(node.type) || node.type === "break") {
5192
+ run.push(node);
5193
+ } else {
5194
+ flush();
5195
+ blocks.push(node);
5196
+ }
5197
+ }
5198
+ flush();
5199
+ return blocks;
5200
+ };
5201
+
5202
+ // src/mdast-handlers/custom-table-handler.ts
3454
5203
  var MAX_SPAN = 1e3;
3455
5204
  var clampSpans = (node) => {
3456
5205
  walk(node, (candidate) => {
@@ -3465,14 +5214,30 @@ var clampSpans = (node) => {
3465
5214
  }
3466
5215
  });
3467
5216
  };
5217
+ var startsWithHeaderRow = (table) => {
5218
+ const row = findElement(table, (element3) => element3.tagName === "tr");
5219
+ if (!row) {
5220
+ return false;
5221
+ }
5222
+ const cells = row.children.filter(isElement);
5223
+ return cells.length > 0 && cells.every((cell) => cell.tagName === "th");
5224
+ };
3468
5225
  var customTableHandler = (options) => (state, node) => {
3469
5226
  if (options?.asText) {
3470
- const paragraph2 = { type: "paragraph", children: [{ type: "text", value: toText3(node) }] };
5227
+ const paragraph2 = { type: "paragraph", children: [{ type: "text", value: toText(node) }] };
3471
5228
  state.patch(node, paragraph2);
3472
5229
  return paragraph2;
3473
5230
  }
3474
5231
  clampSpans(node);
3475
- return defaultHandlers4.table(state, node);
5232
+ const result = defaultHandlers4.table(state, node);
5233
+ if (!result || Array.isArray(result) || result.type !== "table") {
5234
+ return result;
5235
+ }
5236
+ if (tableHasCodeSamples(result)) {
5237
+ return unfoldTable(result, startsWithHeaderRow(node));
5238
+ }
5239
+ flattenTableCells(result);
5240
+ return result;
3476
5241
  };
3477
5242
 
3478
5243
  // src/mdast-handlers/definition-list-handler.ts
@@ -3781,7 +5546,7 @@ var getUrlFromHast = (node) => {
3781
5546
  // src/html-to-mdast.ts
3782
5547
  var htmlToMdast = (htmlOrHast, options) => {
3783
5548
  const { extractors, url: defaultUrl, lang: defaultLang } = options || {};
3784
- const [lang, hast] = typeof htmlOrHast === "string" ? [defaultLang || getLangFromStr(htmlOrHast), fromHtml(htmlOrHast, { fragment: true })] : [defaultLang || getLangFromHast(htmlOrHast), htmlOrHast];
5549
+ const [lang, hast] = typeof htmlOrHast === "string" ? [defaultLang || getLangFromStr(htmlOrHast), parseHtml(htmlOrHast, { fragment: true })] : [defaultLang || getLangFromHast(htmlOrHast), htmlOrHast];
3785
5550
  const isOwned = typeof htmlOrHast === "string" || (options?.owned ?? false);
3786
5551
  const url = defaultUrl || getUrlFromHast(hast);
3787
5552
  const extractedHast = pipeExtractors({ hast: isOwned ? hast : cloneHast(hast), lang, url, owned: true }, extractors);
@@ -3942,9 +5707,10 @@ var readName = (value) => {
3942
5707
  };
3943
5708
  var asString = (value) => typeof value === "string" && value.length > 0 ? value : void 0;
3944
5709
  var MAX_TITLE_LENGTH = 160;
3945
- var asTitle = (value) => {
5710
+ var MAX_DOCUMENT_TITLE_LENGTH = 300;
5711
+ var asTitle = (value, maxLength = MAX_TITLE_LENGTH) => {
3946
5712
  const cleaned = clean(value);
3947
- return cleaned && cleaned.length <= MAX_TITLE_LENGTH ? cleaned : void 0;
5713
+ return cleaned && cleaned.length <= maxLength ? cleaned : void 0;
3948
5714
  };
3949
5715
  var clean = (value) => {
3950
5716
  if (value === void 0) {
@@ -4010,7 +5776,7 @@ var extractMetadata = (tree) => {
4010
5776
  }
4011
5777
  return void 0;
4012
5778
  };
4013
- const title = asTitle(get("og:title", "twitter:title")) ?? asTitle(asString(article?.headline)) ?? asTitle(asString(article?.name)) ?? asTitle(documentTitle(tree)) ?? asTitle(firstHeading2(tree));
5779
+ const title = asTitle(get("og:title", "twitter:title")) ?? asTitle(asString(article?.headline)) ?? asTitle(asString(article?.name)) ?? asTitle(documentTitle(tree), MAX_DOCUMENT_TITLE_LENGTH) ?? asTitle(firstHeading2(tree));
4014
5780
  return {
4015
5781
  title,
4016
5782
  description: clean(get("og:description", "twitter:description", "description")) ?? clean(asString(article?.description)),
@@ -4045,7 +5811,7 @@ ${lines.join("\n")}
4045
5811
  // src/html-to-markdown.ts
4046
5812
  var htmlToMarkdownWithMetadata = (htmlOrHast, options) => {
4047
5813
  const { baseUrl, frontmatter, title, formatting: toMarkdownOptions, ...toMdastOptions } = options || {};
4048
- const hast = typeof htmlOrHast === "string" ? fromHtml2(htmlOrHast, { fragment: true }) : htmlOrHast;
5814
+ const hast = typeof htmlOrHast === "string" ? parseHtml(htmlOrHast, { fragment: true }) : htmlOrHast;
4049
5815
  const isOwned = typeof htmlOrHast === "string";
4050
5816
  const declaredLang = typeof htmlOrHast === "string" ? getLangFromStr(htmlOrHast) : void 0;
4051
5817
  const metadata = extractMetadata(hast);
@@ -4059,10 +5825,54 @@ var htmlToMarkdownWithMetadata = (htmlOrHast, options) => {
4059
5825
  url: toMdastOptions.url ?? metadata.canonicalUrl
4060
5826
  });
4061
5827
  const body = mdastToMarkdown(mdast, { baseUrl, ...toMarkdownOptions });
4062
- const titled = title === false ? body : withTitle(body, metadata.title);
5828
+ const pageUrl = toMdastOptions.url ?? metadata.canonicalUrl;
5829
+ const titled = title === false ? body : withTitle(body, headingTitle(metadata.title, metadata.siteName, pageUrl));
4063
5830
  const markdown = frontmatter ? `${toFrontmatter(metadata)}${titled}` : titled;
4064
5831
  return { markdown, metadata };
4065
5832
  };
5833
+ var TITLE_SEPARATOR = /\s+[-|–—·•:]\s+|\s*[||]\s*/;
5834
+ var SITE_SECTION = /^(docs|documentation|blog|news|wiki|developers?|devblog|help|support|reference)$/;
5835
+ var compact = (value) => value.toLowerCase().replace(/[^\p{L}\p{N}]/gu, "");
5836
+ var siteNames = (siteName, url) => {
5837
+ const names = siteName ? siteName.split(TITLE_SEPARATOR).map(compact) : [];
5838
+ try {
5839
+ const labels = url ? new URL(url).hostname.split(".") : [];
5840
+ const meaningful = labels.slice(0, -1).filter((label) => label !== "www");
5841
+ names.push(...meaningful.map(compact), compact(meaningful.join("")), compact(labels.join("").replace(/^www/, "")));
5842
+ } catch {
5843
+ }
5844
+ return names.filter((name) => name.length >= 3);
5845
+ };
5846
+ var headingTitle = (title, siteName, url) => {
5847
+ if (!title) {
5848
+ return title;
5849
+ }
5850
+ const segments = title.split(TITLE_SEPARATOR);
5851
+ if (segments.length < 2) {
5852
+ return title;
5853
+ }
5854
+ const names = siteNames(siteName, url);
5855
+ if (names.length === 0) {
5856
+ return title;
5857
+ }
5858
+ const isSite = (segment) => {
5859
+ const value = compact(segment);
5860
+ return value.length > 0 && names.some((name) => value === name || value.startsWith(name) && SITE_SECTION.test(value.slice(name.length)));
5861
+ };
5862
+ const last = segments[segments.length - 1];
5863
+ if (isSite(last)) {
5864
+ return stripSegment(title, last, "end");
5865
+ }
5866
+ if (siteName && compact(segments[0]) === compact(siteName)) {
5867
+ return stripSegment(title, segments[0], "start");
5868
+ }
5869
+ return title;
5870
+ };
5871
+ var stripSegment = (title, segment, edge) => {
5872
+ const rest = edge === "end" ? title.slice(0, title.lastIndexOf(segment)) : title.slice(segment.length);
5873
+ const trimmed = rest.replace(edge === "end" ? /[\s\-|–—·•:|]+$/ : /^[\s\-|–—·•:|]+/, "");
5874
+ return trimmed.length > 0 ? trimmed : title;
5875
+ };
4066
5876
  var TITLE_LOOKAHEAD = 400;
4067
5877
  var withTitle = (body, title) => {
4068
5878
  if (!title) {
@@ -4072,13 +5882,21 @@ var withTitle = (body, title) => {
4072
5882
  if (/^#\s+\S/m.test(opening)) {
4073
5883
  return body;
4074
5884
  }
4075
- if (normalizeForCompare(opening).includes(normalizeForCompare(title))) {
5885
+ if (mentionsTitle(opening, title)) {
4076
5886
  return body;
4077
5887
  }
4078
5888
  return `# ${title}
4079
5889
 
4080
5890
  ${body}`;
4081
5891
  };
5892
+ var MIN_EMBEDDED_TITLE_LENGTH = 24;
5893
+ var mentionsTitle = (opening, title) => {
5894
+ const wanted = normalizeForCompare(title);
5895
+ if (wanted.length >= MIN_EMBEDDED_TITLE_LENGTH) {
5896
+ return normalizeForCompare(opening).includes(wanted);
5897
+ }
5898
+ return opening.split("\n").some((line) => normalizeForCompare(line.replace(/[#*_`>]/g, "")) === wanted);
5899
+ };
4082
5900
  var normalizeForCompare = (value) => value.replace(/\s+/g, " ").trim().toLowerCase();
4083
5901
 
4084
5902
  // src/detect-client-shell.ts
@@ -4329,6 +6147,8 @@ var extractorOptions = (name) => {
4329
6147
  switch (name) {
4330
6148
  case "takumi":
4331
6149
  return takumiExtractor;
6150
+ case "kiwame":
6151
+ return kiwameExtractor;
4332
6152
  case "minimal":
4333
6153
  return minimalFilter;
4334
6154
  case "none":
@@ -4349,6 +6169,7 @@ var convertViaPlatform = async (run) => {
4349
6169
  region: run.region,
4350
6170
  screenshot: run.screenshot ? true : void 0,
4351
6171
  respectRobotsTxt: run.respectRobotsTxt ? true : void 0,
6172
+ // `kiwame` is rejected for the platform loader during option resolution.
4352
6173
  convert: { extractor: run.extractor, frontmatter: run.frontmatter }
4353
6174
  });
4354
6175
  return {