From 77e7e13c545cbf68995989429bd60f5d7ebc73d8 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 20:18:57 +0000 Subject: [PATCH 01/17] plan(vulkan): VK-A1 shader-variant pipeline implementation plan Task-by-task plan for sub-project VK-A1 of .agents/specs/vulkan-full-support.md. Plan only: no source, no shader, no build. The decision the plan implements: keep the committed-SPIR-V route so the build stays hermetic on every box, but change the VARIANT mechanism from GLSL #defines to SPIR-V specialization constants. llama.cpp needs 242 string_to_spv call sites largely because a #define variant is a whole new module; a specialization constant is one module specialized at pipeline creation, so artifact count tracks shader FILES rather than the dtype x quant x coopmat-tier cross product. Seven tasks: pin glslang and prove the committed SPIR-V reproduces; a CI staleness gate with a mutation proof; SpecId metadata in the generated table; specialization plumbed through Dispatch with the cache keyed by it; the workgroup size collapsed from three copies to one constant; SPIR-V words moved out of the header; the feature-matrix/backend-matrix drift repaired. Two preconditions are recorded because they block execution rather than the plan: disk is at 99% (4.8 GB free), which makes any build unreliable, and neither box has a GLSL compiler, so no .comp can change until Task 1. One deliberate scope narrowing against the spec's wording is called out in the self-review: the vt::arch_tactics generalization is left to VK-C, since a tactic registry with exactly one tactic would be speculative. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- ...026-08-06-vk-a1-shader-variant-pipeline.md | 1200 +++++++++++++++++ 1 file changed, 1200 insertions(+) create mode 100644 docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md diff --git a/docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md b/docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md new file mode 100644 index 00000000..2dd8506f --- /dev/null +++ b/docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md @@ -0,0 +1,1200 @@ +# VK-A1: Vulkan shader-variant pipeline Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Give the Vulkan backend a shader-variant mechanism that scales to ~100 shaders without a combinatorial explosion of committed artifacts, and gate the committed SPIR-V against staleness in CI. + +**Architecture:** Keep the committed-SPIR-V route (the build stays hermetic — no shader toolchain on any build box, which is strictly better than llama.cpp's build-time `glslc` requirement), but change the *variant* mechanism from GLSL `#define`s to **SPIR-V specialization constants**. llama.cpp needs 242 `string_to_spv(` call sites largely because a `#define` variant is a whole new module; a specialization constant is one module specialized at pipeline-creation time, with the driver dead-code-eliminating the untaken branches. That collapses artifact count from the dtype × quant × coopmat-tier *cross product* down to roughly the number of shader *files*. Emission is split from one monolithic header into a header + `.cpp` so blob growth does not land in every including TU. + +**Tech Stack:** GLSL 450 compute → SPIR-V (glslang, ahead-of-time, committed), Vulkan 1.1 compute pipelines, C++20, CMake, doctest, GitHub Actions. + +## Global Constraints + +- **Row:** `BACKEND-VULKAN`. **Claim:** `CLAIM-VULKAN-FULL-1`. **Spec:** `.agents/specs/vulkan-full-support.md` (sub-project `VK-A1`). +- **`VLLM_CPP_VULKAN` AUTO must keep resolving OFF.** The SACRED CUDA gates are untouched by construction; any CMake change must preserve this and it must be re-verified, not assumed. +- **Everything is additive.** No existing non-Vulkan source file changes behavior. +- **No compiled third-party dependencies.** `.agents/discipline.md` forbids them; `third_party/` is single-header only. glslang is a *build-time tool run by hand and in CI*, never linked. +- **Every commit carries `FOLLOWING_AGENTS_PROTOCOL` plus `Assisted-by:`**, and never `Signed-off-by` or `Co-Authored-By`. +- **Author is `mudler`**, never `localai-bot`. +- **Run `scripts/agent-preflight.sh`** before committing. Note: `check-fusion-consistency` is **RED on `main`** for an unrelated reason (`minimax_h3_video_vae_device` GEMM merge drift, verified pre-existing at `075b9f21^`). Do not attempt to fix it here; confirm it is the *same* failure and no new one. +- **Target environment is `vulkan1.1`** (`TARGET_ENV` in `scripts/gen-vulkan-spirv.py`) — the floor `vulkan_context.cpp` requires. Do not raise it in this plan. +- **Pinned shader compiler: `Glslang Version: 11:16.4.0`** — the exact string recorded at `src/vt/vulkan/vulkan_spirv.h:16`. `--check` compares SPIR-V bytes and ignores only the version comment line, so a different glslang build will fail the gate. +- **llama.cpp port pin: `237ad9b96`**, readable at `/home/mudler/_git/llama.cpp`. Cite `file:line` for any ported structure. + +## PRECONDITIONS — verify before Task 1, stop if unmet + +1. **Disk.** `df -h /home/mudler` showed **4.8 GB free (99% full)** on 2026-08-06. A build under ENOSPC produces partial objects and *bogus* test failures. Require **≥ 40 GB free** before any build step. Free it with `go clean -cache`, pruning stale `source-*` trees and old worktrees, or ask the user. **Do not build under 99%.** +2. **No glslang on either box** (`which glslang glslangValidator glslc` → all not found). Task 1 installs it. Until then, no `.comp` file can be changed, because the committed SPIR-V could not be regenerated. +3. **Work in the worktree** `.claude/worktrees/row+BACKEND-VULKAN-A1` on branch `row/BACKEND-VULKAN-A1`, based on `075b9f21`. + +## File Structure + +| File | Responsibility | Change | +|---|---|---| +| `scripts/gen-vulkan-spirv.py` | AOT shader build: GLSL → SPIR-V → committed C arrays | Modify: emit specialization-constant metadata; split output into `.h` + `.cpp` | +| `src/vt/vulkan/vulkan_spirv.h` | GENERATED. Module table declaration | Regenerate: blobs move out; declarations only | +| `src/vt/vulkan/vulkan_spirv.cpp` | GENERATED. The SPIR-V word arrays | Create (generated) | +| `src/vt/vulkan/vulkan_context.h` | Context API; `Dispatch` signature | Modify: `Dispatch` takes specialization values | +| `src/vt/vulkan/vulkan_context.cpp` | Pipeline cache + `VkSpecializationInfo` | Modify: cache key includes specialization; wire `pSpecializationInfo` | +| `src/vt/vulkan/shaders/vt_common.glsl` | Shared GLSL: storage model, reductions | Modify: `VT_TG` becomes a specialization constant | +| `src/vt/vulkan/shaders/*.comp` | The 7 compute shaders | Modify: `local_size_x_id` instead of a literal | +| `tests/vt/test_vulkan_backend.cpp` | The Vulkan unit gate | Modify: new cases for specialization + metadata | +| `.github/workflows/ci.yml` | CI | Modify: add the `vulkan-spirv-freshness` job | +| `.agents/feature-matrix.md` | Record | Modify: repair the `BACKEND-VULKAN` drift | +| `.agents/backend-matrix.md`, `.agents/state.md`, `docs/STATUS.md`, `docs/BENCHMARKS.md` | Record | Modify: land the row + the doc checkpoint | + +--- + +### Task 1: Pin glslang and prove the committed SPIR-V reproduces + +This task exists because **everything downstream is unbuildable without it**, and because it answers a question nobody has answered: does the committed header actually reproduce? If it does not, the committed-SPIR-V route has no CI gate and the rest of the plan changes. + +**Files:** +- Modify: `.agents/environment.md` (record the installed tool) +- No source changes + +**Interfaces:** +- Consumes: nothing +- Produces: a `glslang` binary on `PATH` reporting exactly `Glslang Version: 11:16.4.0`; the fact (recorded) that `--check` passes or fails at that version + +- [ ] **Step 1: Confirm no compiler is present, so the starting state is known** + +```bash +which glslang glslangValidator glslc || echo "none present (expected)" +``` + +Expected: `none present (expected)`. + +- [ ] **Step 2: Install the pinned glslang** + +`sudo -n true` now returns 0 on both the dev box and dgx (verified 2026-08-06), so either route works. Prefer the **release tarball** — it pins the exact version, needs no root, and matches what CI will download: + +```bash +mkdir -p "$HOME/tools" && cd "$HOME/tools" +# glslang 16.4.0 release build (the version recorded in vulkan_spirv.h:16) +curl -fsSL -o glslang-linux.zip \ + https://github.com/KhronosGroup/glslang/releases/download/16.4.0/glslang-master-linux-Release.zip +unzip -o -q glslang-linux.zip -d glslang-16.4.0 +export PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" +glslang --version +``` + +Expected: output whose first line is exactly `Glslang Version: 11:16.4.0`. + +If the release asset name or URL has changed, find the 16.4.0 release asset for Linux on the glslang releases page. **Do not substitute a different version** — a different glslang emits different SPIR-V and Step 4 will fail for a reason that is not a real staleness. + +- [ ] **Step 3: Run the staleness check against the committed header** + +```bash +cd "$(git rev-parse --show-toplevel)" +PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" python3 scripts/gen-vulkan-spirv.py --check +``` + +Expected: `vulkan_spirv.h is up to date`. + +**If it fails instead:** do not regenerate and move on. Capture the diff and diagnose before proceeding: + +```bash +PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" python3 scripts/gen-vulkan-spirv.py +git diff --stat src/vt/vulkan/vulkan_spirv.h +``` + +A byte difference at the pinned version means the committed artifact was produced by something other than what it claims, which is a **finding to report to the user before continuing** — it would mean the CI gate in Task 2 can never be green and the whole committed-artifact route needs re-deciding. Record it and stop. + +- [ ] **Step 4: Record the toolchain in the environment doc** + +Add to `.agents/environment.md`, in the dev-box profile section alongside the other toolchain facts: + +```markdown +- **Vulkan shader toolchain (2026-08-06, `VK-A1`).** `glslang` **16.4.0** installed + per-user at `$HOME/tools/glslang-16.4.0/bin` (release tarball, no root). This is + the EXACT version recorded at `src/vt/vulkan/vulkan_spirv.h:16`; a different + build emits different SPIR-V and fails `scripts/gen-vulkan-spirv.py --check`, + which compares SPIR-V bytes and ignores only the version comment. Regenerate + committed SPIR-V with that directory on `PATH`. Nothing links against glslang — + it is a build-time tool, never a dependency (`.agents/discipline.md`). +``` + +- [ ] **Step 5: Verify the env doc gate still passes** + +Run: `python3 scripts/check-env-doc.py` +Expected: OK. + +- [ ] **Step 6: Commit** + +```bash +git add .agents/environment.md +git commit -m "$(cat <<'MSG' +build(vulkan): pin glslang 16.4.0 and prove the committed SPIR-V reproduces + +VK-A1 precondition. Neither box had a GLSL compiler, so no .comp file could be +changed without invalidating the committed SPIR-V. glslang 16.4.0 (the exact +version recorded in vulkan_spirv.h) is now installed per-user from the release +tarball; `gen-vulkan-spirv.py --check` reproduces the committed header, which is +the first evidence that the committed-artifact route is gateable at all. + +Nothing is linked against glslang; it is a build-time tool. + +FOLLOWING_AGENTS_PROTOCOL +Assisted-by: Claude Code:claude-opus-5 [Claude Code] +MSG +)" +``` + +--- + +### Task 2: CI job that fails on stale committed SPIR-V + +Today `--check` exists but **no CI job runs it**, so a `.comp` edit without a regenerate would ship silently — exactly the failure mode the committed-artifact route trades for hermeticity. This closes it before ~100 shaders exist. + +**Files:** +- Modify: `.github/workflows/ci.yml` + +**Interfaces:** +- Consumes: `scripts/gen-vulkan-spirv.py --check` from Task 1 +- Produces: CI job `vulkan-spirv-freshness` + +- [ ] **Step 1: Write the job** + +Add to `.github/workflows/ci.yml` under `jobs:`, following the shape of the existing lightweight record jobs (`cuda-arch-features`, `device-leakage`): + +```yaml + vulkan-spirv-freshness: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install pinned glslang + run: | + set -euo pipefail + curl -fsSL -o /tmp/glslang.zip \ + https://github.com/KhronosGroup/glslang/releases/download/16.4.0/glslang-master-linux-Release.zip + unzip -q /tmp/glslang.zip -d /tmp/glslang + echo "/tmp/glslang/bin" >> "$GITHUB_PATH" + - name: Verify the pinned version + run: | + set -euo pipefail + glslang --version | head -1 + glslang --version | head -1 | grep -qF 'Glslang Version: 11:16.4.0' + - name: Committed SPIR-V is not stale + run: python3 scripts/gen-vulkan-spirv.py --check +``` + +The explicit version assertion is deliberate: without it, a glslang release bump turns this gate from "your shader is stale" into a confusing red on an unrelated PR, and the failure message would not say why. + +- [ ] **Step 2: Verify the workflow parses** + +Run: +```bash +python3 -c "import yaml,sys; d=yaml.safe_load(open('.github/workflows/ci.yml')); assert 'vulkan-spirv-freshness' in d['jobs']; print('job registered, keys:', list(d['jobs']['vulkan-spirv-freshness'].keys()))" +``` +Expected: `job registered, keys: ['runs-on', 'steps']` + +- [ ] **Step 3: Prove the gate actually catches staleness (mutation test)** + +The gate is worthless if it passes over a real edit. Prove it locally: + +```bash +export PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" +# Perturb a shader in a way that changes SPIR-V but not semantics +printf '\n// mutation probe\n' >> src/vt/vulkan/shaders/vt_relu.comp +sed -i 's/out_f32\[p.out_off + i\] = max(v, 0.0);/out_f32[p.out_off + i] = max(0.0, v);/' src/vt/vulkan/shaders/vt_relu.comp +python3 scripts/gen-vulkan-spirv.py --check ; echo "exit=$?" +``` +Expected: `vulkan_spirv.h is STALE` and `exit=1`. + +If the `sed` did not match (the shader text differs), make any equivalent +expression-level edit that changes emitted code, and re-run. A comment-only +change may compile to identical SPIR-V under `-g0` — that is correct behavior, +not a gate failure, but it does not prove the gate, so the edit must change code. + +- [ ] **Step 4: Revert the mutation and confirm green** + +```bash +git checkout -- src/vt/vulkan/shaders/vt_relu.comp +python3 scripts/gen-vulkan-spirv.py --check +``` +Expected: `vulkan_spirv.h is up to date`, and `git status --short` shows no shader change. + +- [ ] **Step 5: Commit** + +```bash +git add .github/workflows/ci.yml +git commit -m "$(cat <<'MSG' +ci(vulkan): gate the committed SPIR-V against staleness + +The committed-artifact route trades a build-time shader toolchain for the +obligation to regenerate by hand, and nothing enforced that obligation: --check +existed but no job ran it, so a .comp edit without a regenerate shipped silently. + +The job downloads the pinned glslang 16.4.0 and asserts the version string before +running --check, so a glslang release bump reads as a version mismatch rather than +as a confusing "your shader is stale" on an unrelated PR. Verified by mutation: +an expression-level shader edit turns the gate red, and reverting turns it green. + +FOLLOWING_AGENTS_PROTOCOL +Assisted-by: Claude Code:claude-opus-5 [Claude Code] +MSG +)" +``` + +--- + +### Task 3: Generator emits specialization-constant metadata + +The host must know which specialization constants a module declares, or it will pass values that silently do nothing (Vulkan ignores map entries whose `constantID` is not declared — a wrong value would not fail, it would produce wrong numbers). This mirrors the existing `buffer_count`/`push_size` drift guard at `vulkan_context.cpp:427`. + +**Files:** +- Modify: `scripts/gen-vulkan-spirv.py` +- Modify: `tests/vt/test_vulkan_backend.cpp` +- Regenerate: `src/vt/vulkan/vulkan_spirv.h` + +**Interfaces:** +- Consumes: `SpirvModule` from Task 1's committed header +- Produces: `SpirvModule` gains `const uint32_t* spec_ids; size_t spec_id_count;` — sorted ascending, the SpecId values decorated in the module + +- [ ] **Step 1: Write the failing test** + +Add to `tests/vt/test_vulkan_backend.cpp`, after the existing `"the committed SPIR-V table is present and well-formed"` case: + +```cpp +TEST_CASE("the committed SPIR-V table records each module's specialization constants") { + // Device-independent: a property of the checked-in artifact, so this also gates + // the generator on a box with no Vulkan. The host passes specialization values + // positionally by constantID; Vulkan SILENTLY IGNORES a map entry whose ID the + // module does not declare, so a drift here is wrong numbers, not a clean error. + for (const auto& m : vt::vulkan::kSpirvModules) { + CAPTURE(m.name); + // Every module must at least declare the workgroup-size constant (Task 5). + REQUIRE(m.spec_id_count >= 1); + for (size_t i = 1; i < m.spec_id_count; ++i) { + CHECK(m.spec_ids[i - 1] < m.spec_ids[i]); // sorted ascending, no duplicates + } + CHECK(m.spec_ids[0] == 0u); // ID 0 is reserved for VT_TG (vt_common.glsl) + } +} +``` + +- [ ] **Step 2: Run it to verify it fails** + +Run: `cmake --build build-vulkan --target test_vulkan_backend && ./build-vulkan/tests/test_vulkan_backend -tc="*specialization constants*"` + +(Configure once with `cmake -S . -B build-vulkan -DCMAKE_BUILD_TYPE=Release -DVLLM_CPP_VULKAN=ON` — **only after the disk precondition is met**.) + +Expected: FAIL to COMPILE with `'const struct vt::vulkan::SpirvModule' has no member named 'spec_id_count'`. + +- [ ] **Step 3: Teach the generator to parse SpecId decorations** + +Add to `scripts/gen-vulkan-spirv.py`, above `render`: + +```python +# SPIR-V decoration opcode/operand constants (SPIR-V 1.x core spec, §3.32.3 +# OpDecorate = 71, §3.20 Decoration SpecId = 1). Parsing the module directly is +# the only source of truth: glslang gives no side-channel listing of the SpecIds +# it emitted, and a hand-maintained list is exactly the kind of duplicate that +# drifts. +SPIRV_OP_DECORATE = 71 +SPIRV_DECORATION_SPEC_ID = 1 +SPIRV_HEADER_WORDS = 5 + + +def spec_ids(blob: bytes) -> list[int]: + """Return the SpecId values decorated in one SPIR-V module, sorted ascending.""" + words = [int.from_bytes(blob[i:i + 4], "little") for i in range(0, len(blob), 4)] + ids: set[int] = set() + i = SPIRV_HEADER_WORDS + while i < len(words): + word_count = words[i] >> 16 + opcode = words[i] & 0xFFFF + if word_count == 0: + sys.exit("malformed SPIR-V: zero-length instruction") + # OpDecorate [...] + if opcode == SPIRV_OP_DECORATE and word_count >= 4: + if words[i + 2] == SPIRV_DECORATION_SPEC_ID: + ids.add(words[i + 3]) + i += word_count + return sorted(ids) +``` + +- [ ] **Step 4: Emit the metadata** + +In `render`, replace the `SpirvModule` struct and table emission with: + +```python + for name in sorted(blobs): + ids = spec_ids(blobs[name]) + if ids: + add(f"inline constexpr uint32_t kSpecIds_{name}[] = {{") + add(" " + ", ".join(f"{i}u" for i in ids) + ",") + add("};") + add("") + + add("// Name -> SPIR-V module. The NAME is the shader's file stem and is also the") + add("// key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp).") + add("//") + add("// spec_ids lists the SPECIALIZATION CONSTANT IDs the module declares, parsed") + add("// from its OpDecorate SpecId instructions, sorted ascending. The host passes") + add("// specialization values by ID; Vulkan SILENTLY IGNORES a map entry whose ID") + add("// the module does not declare, so without this table a host/shader drift") + add("// produces WRONG NUMBERS instead of a clean failure.") + add("struct SpirvModule {") + add(" const char* name;") + add(" const uint32_t* words;") + add(" size_t word_count;") + add(" const uint32_t* spec_ids;") + add(" size_t spec_id_count;") + add("};") + add("") + add("inline constexpr SpirvModule kSpirvModules[] = {") + for name in sorted(blobs): + ids = spec_ids(blobs[name]) + idp = f"kSpecIds_{name}" if ids else "nullptr" + add(f' {{"{name}", kSpv_{name}, sizeof(kSpv_{name}) / sizeof(uint32_t), ' + f'{idp}, {len(ids)}}},') + add("};") +``` + +- [ ] **Step 5: Add a generator unit test for the parser** + +Create `tests/scripts/test_gen_vulkan_spirv.py`, following the shape of the existing `tests/scripts/test_check_*.py` suites: + +```python +"""Unit tests for scripts/gen-vulkan-spirv.py (BACKEND-VULKAN, VK-A1).""" +import importlib.util +import pathlib +import struct +import unittest + +ROOT = pathlib.Path(__file__).resolve().parents[2] +spec = importlib.util.spec_from_file_location( + "gen_vulkan_spirv", ROOT / "scripts" / "gen-vulkan-spirv.py") +gen = importlib.util.module_from_spec(spec) +spec.loader.exec_module(gen) + + +def module(*instructions: tuple[int, list[int]]) -> bytes: + """Build a minimal SPIR-V blob: 5 header words then the given instructions.""" + words = [0x07230203, 0x00010300, 0, 1, 0] + for opcode, operands in instructions: + words.append(((len(operands) + 1) << 16) | opcode) + words.extend(operands) + return b"".join(struct.pack("= 1)` — no shader declares a specialization constant yet. That is correct: Task 5 makes it pass. Leaving it red here is deliberate, so do **not** weaken the assertion. + +- [ ] **Step 8: Commit** + +```bash +git add scripts/gen-vulkan-spirv.py src/vt/vulkan/vulkan_spirv.h \ + tests/scripts/test_gen_vulkan_spirv.py tests/vt/test_vulkan_backend.cpp +git commit -m "$(cat <<'MSG' +feat(vulkan): record each module's specialization-constant IDs in the SPIR-V table + +The host will pass specialization values by constantID, and Vulkan SILENTLY +IGNORES a map entry whose ID the module does not declare -- a host/shader drift +would produce wrong numbers rather than a clean failure. The generator now parses +OpDecorate SpecId straight out of the emitted module (glslang exposes no +side-channel listing, and a hand-maintained list is exactly the duplicate that +drifts) and emits the sorted IDs alongside each blob. + +Parser covered by unit tests including the two ways a naive scanner breaks: +non-SpecId decorations, and stepping over unrelated opcodes by word count. The +C++ assertion that every module declares at least one constant is RED on purpose +until the workgroup size becomes one. + +FOLLOWING_AGENTS_PROTOCOL +Assisted-by: Claude Code:claude-opus-5 [Claude Code] +MSG +)" +``` + +--- + +### Task 4: Specialize pipelines, and key the cache by specialization + +**Files:** +- Modify: `src/vt/vulkan/vulkan_context.h:66-67` (`Dispatch`), `:109` (`GetPipeline`) +- Modify: `src/vt/vulkan/vulkan_context.cpp:419-502` (`GetPipeline`), `:504+` (`Dispatch`) +- Modify: `src/vt/vulkan/vulkan_ops.cpp` (all `Dispatch` call sites) + +**Interfaces:** +- Consumes: `SpirvModule::spec_ids` / `spec_id_count` from Task 3 +- Produces: + - `void VulkanContext::Dispatch(const std::string& name, const void* const* buffers, uint32_t buffer_count, const void* push_constants, uint32_t push_size, uint32_t group_count_x, const uint32_t* spec_values = nullptr, uint32_t spec_count = 0)` + - Pipeline cache key type `std::string` of the form `name + "|" + decimal spec values joined by ","` + +- [ ] **Step 1: Write the failing test** + +Add to `tests/vt/test_vulkan_backend.cpp`: + +```cpp +TEST_CASE("Vulkan specializes pipelines and caches them per specialization") { + if (!vt::vulkan::VulkanDeviceAvailable()) return; // no device: nothing to assert + auto& ctx = vt::vulkan::VulkanContext::Get(); + + // vt_relu with the workgroup size specialized to two different values must + // produce two DISTINCT pipelines and IDENTICAL results. Identical results are + // the real assertion: a specialization that silently did nothing would also + // return identical results, so the pipeline-count check is what proves the + // mechanism engaged. + const size_t before = ctx.PipelineCacheSize(); + + const int64_t n = 300; // deliberately not a multiple of either workgroup size + std::vector in(n), out64(n), out128(n); + for (int64_t i = 0; i < n; ++i) in[i] = static_cast(i) - 150.0f; + + RunReluWithWorkgroup(ctx, in, out64, 64u); + RunReluWithWorkgroup(ctx, in, out128, 128u); + + CHECK(ctx.PipelineCacheSize() == before + 2); // two variants, two pipelines + for (int64_t i = 0; i < n; ++i) { + CAPTURE(i); + CHECK(out64[i] == doctest::Approx(std::max(in[i], 0.0f))); + CHECK(out64[i] == out128[i]); // specialization must not change numerics + } +} +``` + +Add the helper above the case (it allocates through the backend so the buffer +registry resolves the pointers, exactly as the existing op cases do): + +```cpp +// Dispatch vt_relu over `in` with VT_TG specialized to `tg`. Mirrors the push +// constant layout in src/vt/vulkan/shaders/vt_relu.comp. +static void RunReluWithWorkgroup(vt::vulkan::VulkanContext& ctx, + const std::vector& in, std::vector& out, + uint32_t tg) { + vt::Backend& be = *vt::GetBackend(vt::DeviceType::kVULKAN); + const size_t bytes = in.size() * sizeof(float); + void* din = be.Alloc(bytes); + void* dout = be.Alloc(bytes); + std::memcpy(din, in.data(), bytes); + + struct Push { uint32_t n, in_off, out_off; } push{ + static_cast(in.size()), 0u, 0u}; + const void* bufs[2] = {be.BufferOf(din), be.BufferOf(dout)}; + const uint32_t spec[1] = {tg}; + const uint32_t groups = static_cast((in.size() + tg - 1) / tg); + ctx.Dispatch("vt_relu", bufs, 2, &push, sizeof(push), groups, spec, 1); + + std::memcpy(out.data(), dout, bytes); + be.Free(din); + be.Free(dout); +} +``` + +If `Backend::BufferOf` is not the accessor the existing cases use to turn a +device pointer into a `VkBuffer`, use whatever `tests/vt/test_vulkan_backend.cpp` +already uses in its interior-pointer case (`"Vulkan resolves INTERIOR pointers"`, +line 136) and keep the rest identical. + +- [ ] **Step 2: Run it to verify it fails** + +Run: `cmake --build build-vulkan --target test_vulkan_backend && ./build-vulkan/tests/test_vulkan_backend -tc="*specializes pipelines*"` +Expected: FAIL to compile — `Dispatch` takes 6 arguments, and `PipelineCacheSize` does not exist. + +- [ ] **Step 3: Extend the context API** + +In `src/vt/vulkan/vulkan_context.h`, change the `Dispatch` declaration and add the accessor: + +```cpp + // Dispatch one compute kernel, SYNCHRONOUSLY (record, submit, wait). `name` is + // a key in the committed SPIR-V table (src/vt/vulkan/vulkan_spirv.h). + // ... (existing comment retained) ... + // + // `spec_values` are SPECIALIZATION CONSTANT values, supplied in ascending + // constantID order and matching the module's declared `spec_ids` exactly. They + // are part of the pipeline cache KEY: each distinct combination is a distinct + // VkPipeline, specialized once and reused. This is the variant mechanism that + // replaces llama.cpp's per-#define module explosion + // (ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @ 237ad9b96 has + // 242 string_to_spv call sites, most inside dtype/quant/coopmat loops). + void Dispatch(const std::string& name, const void* const* buffers, uint32_t buffer_count, + const void* push_constants, uint32_t push_size, uint32_t group_count_x, + const uint32_t* spec_values = nullptr, uint32_t spec_count = 0); + + // Number of distinct pipelines currently cached. Exposed for the unit gate: it + // is how a test proves a specialization actually produced a NEW pipeline rather + // than silently reusing one. + size_t PipelineCacheSize() const; +``` + +and change the private declaration: + +```cpp + Pipeline& GetPipeline(const std::string& name, uint32_t buffer_count, uint32_t push_size, + const uint32_t* spec_values, uint32_t spec_count); +``` + +- [ ] **Step 4: Implement specialization in `GetPipeline`** + +In `src/vt/vulkan/vulkan_context.cpp`, replace the head of `GetPipeline` (currently `vulkan_context.cpp:419-441`) with: + +```cpp +namespace { +// Cache key: the module name plus the specialization values, which together +// identify a VkPipeline. Values are decimal so the key is human-readable in the +// VT_CHECK messages below. +std::string PipelineKey(const std::string& name, const uint32_t* spec_values, + uint32_t spec_count) { + std::string key = name; + for (uint32_t i = 0; i < spec_count; ++i) { + key += (i == 0 ? '|' : ','); + key += std::to_string(spec_values[i]); + } + return key; +} +} // namespace + +VulkanContext::Pipeline& VulkanContext::GetPipeline(const std::string& name, + uint32_t buffer_count, uint32_t push_size, + const uint32_t* spec_values, + uint32_t spec_count) { + const std::string key = PipelineKey(name, spec_values, spec_count); + auto& cache = *static_cast*>(pipelines_); + auto it = cache.find(key); + if (it != cache.end()) { + VT_CHECK(it->second.buffer_count == buffer_count && it->second.push_size == push_size, + "vulkan: pipeline " + key + " re-requested with a different binding layout"); + return it->second; + } + + const VulkanApi& vk = Api(); + auto device = Unpack(device_); + + const SpirvModule* module = nullptr; + for (const SpirvModule& m : kSpirvModules) { + if (name == m.name) { module = &m; break; } + } + VT_CHECK(module != nullptr, + "vulkan: no committed SPIR-V for kernel '" + name + + "' — regenerate with scripts/gen-vulkan-spirv.py"); + + // The host passes specialization values POSITIONALLY against the module's + // declared SpecIds. Vulkan silently ignores a map entry for an undeclared ID, + // so a mismatch here would be wrong numbers rather than an error — check it. + VT_CHECK(spec_count == module->spec_id_count, + "vulkan: kernel '" + name + "' declares " + + std::to_string(module->spec_id_count) + + " specialization constants but " + std::to_string(spec_count) + + " values were supplied — host and committed SPIR-V have drifted"); +``` + +Then, immediately before the `VkComputePipelineCreateInfo` block (currently `:484`), build the specialization info, and reference it from the stage: + +```cpp + // One uint32 per constant, tightly packed; entry i carries the module's i-th + // declared SpecId (they are emitted sorted ascending). + std::vector spec_entries(spec_count); + for (uint32_t i = 0; i < spec_count; ++i) { + spec_entries[i].constantID = module->spec_ids[i]; + spec_entries[i].offset = i * static_cast(sizeof(uint32_t)); + spec_entries[i].size = sizeof(uint32_t); + } + VkSpecializationInfo spec_info{}; + spec_info.mapEntryCount = spec_count; + spec_info.pMapEntries = spec_entries.data(); + spec_info.dataSize = spec_count * sizeof(uint32_t); + spec_info.pData = spec_values; +``` + +and in the existing `cpci.stage` setup add: + +```cpp + cpci.stage.pSpecializationInfo = spec_count ? &spec_info : nullptr; +``` + +**`spec_entries` and `spec_info` must be declared in the same scope as `cpci` and +must outlive the `vkCreateComputePipelines` call.** A function-local temporary +whose address is captured and read later is precisely the use-after-free class +this project has already hit twice with CUDA-graph capture; keep them as named +locals in `GetPipeline`'s body, not in a nested block. + +Finally, change the cache insert at the end from `cache.emplace(name, p)` to +`cache.emplace(key, p)`. + +- [ ] **Step 5: Thread it through `Dispatch` and add the accessor** + +In `Dispatch`, change the signature to match the header and the `GetPipeline` call to: + +```cpp + Pipeline& p = GetPipeline(name, buffer_count, push_size, spec_values, spec_count); +``` + +Add, next to the other small accessors: + +```cpp +size_t VulkanContext::PipelineCacheSize() const { + std::lock_guard guard(*static_cast(mutex_)); + return static_cast*>(pipelines_)->size(); +} +``` + +`mutex_` is a `void*` to a `std::mutex` and this method is `const`, so the +`static_cast` is on the pointer, not on `this` — no `mutable` is needed. + +- [ ] **Step 6: Run the test** + +Run: `./build-vulkan/tests/test_vulkan_backend -tc="*specializes pipelines*"` +Expected: still FAILS — `vt_relu` declares 0 specialization constants, so the new `VT_CHECK` fires with "declares 0 ... but 1 values were supplied". That is the drift guard working. Task 5 makes it pass. + +- [ ] **Step 7: Verify the existing suite is unbroken** + +All existing `Dispatch` call sites in `vulkan_ops.cpp` use the defaulted arguments, so they pass `spec_count == 0` and match today's `spec_id_count == 0`. + +Run: `./build-vulkan/tests/test_vulkan_backend` +Expected: every case except `"*specialization constants*"` and `"*specializes pipelines*"` passes — 8 of the pre-existing cases green, the 2 new ones red. + +- [ ] **Step 8: Commit** + +```bash +git add src/vt/vulkan/vulkan_context.h src/vt/vulkan/vulkan_context.cpp \ + tests/vt/test_vulkan_backend.cpp +git commit -m "$(cat <<'MSG' +feat(vulkan): specialize compute pipelines and key the cache by specialization + +The variant mechanism VK-A1 exists to choose. llama.cpp spells a shader variant +as a GLSL #define, so every dtype x quant x coopmat-tier combination is a whole +new SPIR-V module -- 242 string_to_spv call sites at pin 237ad9b96, most inside +those loops. A specialization constant is instead ONE module specialized at +pipeline creation, with the driver eliminating the untaken branches, so artifact +count tracks shader FILES rather than their cross product. + +Dispatch now takes specialization values, the pipeline cache is keyed by name plus +those values, and the count is checked against the module's declared SpecIds -- +Vulkan silently ignores a map entry for an undeclared ID, so an unchecked drift +would be wrong numbers, not an error. The specialization structures are named +locals that outlive the create call, not temporaries whose address escapes. + +Existing call sites use the defaulted arguments and are unaffected. The two new +gates stay RED until a shader actually declares a constant. + +FOLLOWING_AGENTS_PROTOCOL +Assisted-by: Claude Code:claude-opus-5 [Claude Code] +MSG +)" +``` + +--- + +### Task 5: Make the workgroup size a specialization constant + +This proves the mechanism on a real shader and removes a genuine hazard: the workgroup size is currently duplicated as `#define VT_TG 128u` (`vt_common.glsl:60`), a literal `local_size_x = 128` in every `.comp`, and `kWorkgroupSize = 128` on the host (`vulkan_context.h:148`) — three copies held in agreement by a comment. It also turns out to be the first thing a real device needs to vary: llama.cpp selects workgroup size per device. + +**Files:** +- Modify: `src/vt/vulkan/shaders/vt_common.glsl:60,177,183` +- Modify: all 7 of `src/vt/vulkan/shaders/*.comp` (the `local_size_x` line) +- Modify: `src/vt/vulkan/vulkan_context.h:148` (`kWorkgroupSize`) +- Modify: `src/vt/vulkan/vulkan_ops.cpp` (pass the value at every `Dispatch`) +- Regenerate: `src/vt/vulkan/vulkan_spirv.h` + +**Interfaces:** +- Consumes: `Dispatch(..., spec_values, spec_count)` from Task 4 +- Produces: specialization constant **ID 0 = workgroup size**, declared by every module; host constant `vt::vulkan::kWorkgroupSize` stays 128 and is the value passed + +- [ ] **Step 1: Convert the shared header** + +In `src/vt/vulkan/shaders/vt_common.glsl`, replace `#define VT_TG 128u` (line 60) with: + +```glsl +// Workgroup size, as SPECIALIZATION CONSTANT ID 0. It was a #define, duplicated +// into every .comp's local_size_x and again into kWorkgroupSize on the host and +// held in agreement by a comment. As a specialization constant there is ONE +// declaration: the .comp files derive local_size_x from it via local_size_x_id, +// and the host supplies the value at pipeline creation +// (src/vt/vulkan/vulkan_context.cpp GetPipeline). ID 0 is reserved for this +// across every shader in the backend. +layout(constant_id = 0) const uint VT_TG = 128u; +``` + +`vt_smem` (line 177) is declared `shared float vt_smem[VT_TG]`. A specialization +constant **is** a valid array size in GLSL/SPIR-V (it becomes `OpSpecConstant` +sized), so this line needs no change — but verify it compiles rather than +assuming, because that is the one construct in this file that could reject a +spec constant. + +- [ ] **Step 2: Convert every shader's workgroup declaration** + +In each of the 7 `src/vt/vulkan/shaders/*.comp`, replace the literal layout line: + +```glsl +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; +``` + +with: + +```glsl +// local_size_x comes from specialization constant 0 (VT_TG, vt_common.glsl), so +// the host chooses the workgroup size at pipeline creation and there is exactly +// one place it is written down. +layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; +``` + +Verify you changed all 7 and that no literal remains: + +```bash +grep -c 'local_size_x_id = 0' src/vt/vulkan/shaders/*.comp | grep -v ':1$' || echo "all 7 converted" +grep -n 'local_size_x = 128' src/vt/vulkan/shaders/*.comp && echo "LEFTOVER LITERAL" || echo "no literals remain" +``` + +Expected: `all 7 converted` then `no literals remain`. + +- [ ] **Step 3: Regenerate and confirm every module now declares ID 0** + +```bash +export PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" +python3 scripts/gen-vulkan-spirv.py +grep -c 'kSpecIds_' src/vt/vulkan/vulkan_spirv.h +``` +Expected: `7` occurrences of the array definition (one per module), plus their uses in the table. + +If glslang **rejects** `shared float vt_smem[VT_TG]` with a spec-constant size, +that is the one real risk in this task: fall back to sizing the shared array by +the MAXIMUM supported workgroup size (a plain `const uint VT_TG_MAX = 1024u;`) +and indexing only the first `VT_TG` entries. Record the fallback and why, in the +commit body — it costs shared memory and must not be silently taken. + +- [ ] **Step 4: Pass the value at every dispatch** + +In `src/vt/vulkan/vulkan_ops.cpp`, every `ctx.Dispatch(...)` call gains the +specialization argument. The value is the existing host constant, so behavior is +unchanged: + +```cpp + static constexpr uint32_t kSpecTg[1] = {vt::vulkan::kWorkgroupSize}; +``` + +declared once at file scope near the top of the anonymous namespace, then each +call site gains `, kSpecTg, 1` before the closing paren. Confirm none were +missed: + +```bash +grep -c 'kSpecTg, 1' src/vt/vulkan/vulkan_ops.cpp +grep -c 'ctx.Dispatch(' src/vt/vulkan/vulkan_ops.cpp +``` +Expected: the two counts are EQUAL. + +- [ ] **Step 5: Update the host constant's comment** + +In `src/vt/vulkan/vulkan_context.h`, replace the `kWorkgroupSize` comment (line 145-147): + +```cpp +// Workgroup size this backend specializes its kernels with. It is no longer +// duplicated in the shaders: the .comp files declare `local_size_x_id = 0` and +// vt_common.glsl declares `layout(constant_id = 0) const uint VT_TG`, so this is +// the single value the host supplies at pipeline creation. Kernels that compute +// their workgroup COUNT from it (FlatGroupCount) therefore cannot disagree with +// the SPIR-V. +inline constexpr uint32_t kWorkgroupSize = 128; +``` + +- [ ] **Step 6: Run both new gates** + +Run: `cmake --build build-vulkan --target test_vulkan_backend && ./build-vulkan/tests/test_vulkan_backend` +Expected: **all cases PASS**, including `"*specialization constants*"` (every module now declares ID 0) and `"*specializes pipelines*"` (two workgroup sizes, two pipelines, identical results). + +- [ ] **Step 7: Verify the numerics did not move** + +The specialization must be numerically inert at the default value. Run the cross-device harness, which compares Vulkan against the CPU oracle: + +Run: `./build-vulkan/tests/test_backend_cross_device` +Expected: 5/5 cases pass, same assertion count as before the change (73/73 on a dev box with llvmpipe only; 144/144 on GB10 where CUDA is also present). + +If any NMSE moved, stop: a specialization constant changed generated code in a +way that altered the reduction, and that needs explaining before it lands. + +- [ ] **Step 8: Commit** + +```bash +git add src/vt/vulkan/shaders/ src/vt/vulkan/vulkan_spirv.h \ + src/vt/vulkan/vulkan_context.h src/vt/vulkan/vulkan_ops.cpp +git commit -m "$(cat <<'MSG' +refactor(vulkan): workgroup size becomes specialization constant 0 + +Proves the Task 4 mechanism on a real shader and removes a live hazard. The +workgroup size was written down three times -- #define VT_TG in vt_common.glsl, a +literal local_size_x in each of the 7 .comp files, and kWorkgroupSize on the host +-- held in agreement by a comment. Kernels compute their workgroup COUNT from the +host constant, so a drift would have been a silently wrong dispatch shape. + +There is now one declaration: constant_id 0, with the .comp files taking +local_size_x_id = 0 and the host supplying the value at pipeline creation. ID 0 is +reserved for it across the backend. + +Numerically inert at the default: the cross-device harness against the CPU oracle +is unchanged, and the new gate dispatches the same shader at two workgroup sizes +and requires two distinct pipelines with identical results. + +FOLLOWING_AGENTS_PROTOCOL +Assisted-by: Claude Code:claude-opus-5 [Claude Code] +MSG +)" +``` + +--- + +### Task 6: Split SPIR-V emission out of the header + +At 7 modules the committed header is 3,491 lines / 109 KB and is included by two TUs. At the target surface it is megabytes of `constexpr` arrays re-parsed by every includer, which costs compile time and memory and makes every regeneration a huge diff in a header. Splitting now is cheap; splitting after ~100 shaders is not. + +**Files:** +- Modify: `scripts/gen-vulkan-spirv.py` (`render` → `render_header` + `render_source`) +- Regenerate: `src/vt/vulkan/vulkan_spirv.h` (declarations only) +- Create (generated): `src/vt/vulkan/vulkan_spirv.cpp` +- Modify: `CMakeLists.txt` (add the generated source to the Vulkan target sources) + +**Interfaces:** +- Consumes: the `SpirvModule` layout from Task 3 +- Produces: `vulkan_spirv.h` declaring `extern const SpirvModule kSpirvModules[]; extern const size_t kSpirvModuleCount;`; `vulkan_spirv.cpp` defining them + +- [ ] **Step 1: Write the failing test** + +The existing case computes the module count with `sizeof(kSpirvModules)/sizeof(...)`, which cannot work on an `extern` array of unknown bound. Update it to use the new count symbol, which makes it fail first: + +In `tests/vt/test_vulkan_backend.cpp`, in `"the committed SPIR-V table is present and well-formed"`, replace: + +```cpp + const size_t n = sizeof(vt::vulkan::kSpirvModules) / sizeof(vt::vulkan::kSpirvModules[0]); + CHECK(n == 7); + for (const auto& m : vt::vulkan::kSpirvModules) { +``` + +with: + +```cpp + // The blobs live in vulkan_spirv.cpp, so the array is `extern` and of unknown + // bound here; the generated count is the only way to size it. That is the point + // of the split: at ~100 shaders the words must not be re-parsed by every TU + // that merely needs the table. + const size_t n = vt::vulkan::kSpirvModuleCount; + CHECK(n == 7); + for (size_t mi = 0; mi < n; ++mi) { + const auto& m = vt::vulkan::kSpirvModules[mi]; +``` + +and close the loop accordingly. Apply the same `kSpirvModuleCount` indexing to the two other range-`for` loops over `kSpirvModules` in that file and in the Task 3 case. + +- [ ] **Step 2: Run it to verify it fails** + +Run: `cmake --build build-vulkan --target test_vulkan_backend` +Expected: FAIL to compile — `'kSpirvModuleCount' is not a member of 'vt::vulkan'`. + +- [ ] **Step 3: Split the generator's output** + +In `scripts/gen-vulkan-spirv.py`, add the second output path next to `OUT_HEADER`: + +```python +OUT_SOURCE = REPO / "src" / "vt" / "vulkan" / "vulkan_spirv.cpp" +``` + +Replace `render` with two functions. `render_header` emits the same banner comment plus: + +```python + add("namespace vt::vulkan {") + add("") + add("// Name -> SPIR-V module. The NAME is the shader's file stem and is also the") + add("// key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp).") + add("//") + add("// spec_ids lists the SPECIALIZATION CONSTANT IDs the module declares, parsed") + add("// from its OpDecorate SpecId instructions, sorted ascending. The host passes") + add("// specialization values by ID; Vulkan SILENTLY IGNORES a map entry whose ID") + add("// the module does not declare, so without this table a host/shader drift") + add("// produces WRONG NUMBERS instead of a clean failure.") + add("struct SpirvModule {") + add(" const char* name;") + add(" const uint32_t* words;") + add(" size_t word_count;") + add(" const uint32_t* spec_ids;") + add(" size_t spec_id_count;") + add("};") + add("") + add("// DEFINED IN vulkan_spirv.cpp. The SPIR-V words are deliberately NOT in this") + add("// header: at the target shader surface they are megabytes of array initializer") + add("// that every including TU would re-parse.") + add("extern const SpirvModule kSpirvModules[];") + add("extern const size_t kSpirvModuleCount;") + add("") + add("} // namespace vt::vulkan") +``` + +`render_source` emits the banner, `#include "vulkan_spirv.h"`, the per-module +`kSpv_*` and `kSpecIds_*` arrays in an anonymous namespace, then the definitions: + +```python + add("const SpirvModule kSpirvModules[] = {") + for name in sorted(blobs): + ids = spec_ids(blobs[name]) + idp = f"kSpecIds_{name}" if ids else "nullptr" + add(f' {{"{name}", kSpv_{name}, sizeof(kSpv_{name}) / sizeof(uint32_t), ' + f'{idp}, {len(ids)}}},') + add("};") + add("const size_t kSpirvModuleCount = sizeof(kSpirvModules) / sizeof(kSpirvModules[0]);") +``` + +Update `main` to write and `--check` **both** files: + +```python + header = render_header(blobs, version) + source = render_source(blobs, version) + + if args.check: + stale = [] + for path, text in ((OUT_HEADER, header), (OUT_SOURCE, source)): + current = path.read_text() if path.exists() else "" + if strip_version(current) != strip_version(text): + stale.append(path.relative_to(REPO)) + if stale: + sys.exit("STALE, re-run scripts/gen-vulkan-spirv.py: " + + ", ".join(str(p) for p in stale)) + print("committed SPIR-V is up to date") + return + + OUT_HEADER.write_text(header) + OUT_SOURCE.write_text(source) +``` + +Hoist `strip_version` to module scope so both branches use the one definition. + +- [ ] **Step 4: Add the generated source to the build** + +In `CMakeLists.txt`, in the Vulkan backend block at line 903, add +`src/vt/vulkan/vulkan_spirv.cpp` to the same source list that already carries +`src/vt/vulkan/vulkan_context.cpp`. + +- [ ] **Step 5: Regenerate, build, and run** + +```bash +export PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" +python3 scripts/gen-vulkan-spirv.py +python3 scripts/gen-vulkan-spirv.py --check +cmake --build build-vulkan --target test_vulkan_backend +./build-vulkan/tests/test_vulkan_backend +``` +Expected: `committed SPIR-V is up to date`; build succeeds; **all cases pass**. + +- [ ] **Step 6: Confirm the header actually shrank** + +```bash +wc -l src/vt/vulkan/vulkan_spirv.h src/vt/vulkan/vulkan_spirv.cpp +``` +Expected: the header is on the order of 40 lines; the `.cpp` carries the ~3,450 lines of words. If the header did not shrink, the blobs did not move and the split did not happen. + +- [ ] **Step 7: Full Vulkan-on build, clean, `-Werror`** + +Header changes are exactly where an incremental build reports green over a red clean build. + +```bash +rm -rf build-vulkan +cmake -S . -B build-vulkan -DCMAKE_BUILD_TYPE=Release -DVLLM_CPP_VULKAN=ON +cmake --build build-vulkan -j"$(nproc)" 2>&1 | tee /tmp/vk-build.log +grep -ci warning /tmp/vk-build.log +``` +Expected: build succeeds; warning count **0**. + +- [ ] **Step 8: Prove the CUDA gate build is untouched** + +`VLLM_CPP_VULKAN` AUTO must still resolve OFF. + +```bash +cmake -S . -B /tmp/vk-auto-probe -DCMAKE_BUILD_TYPE=Release 2>&1 | grep -i vulkan +``` +Expected: Vulkan reported OFF (or absent). Nothing in this task may change that. + +- [ ] **Step 9: Commit** + +```bash +git add scripts/gen-vulkan-spirv.py src/vt/vulkan/vulkan_spirv.h \ + src/vt/vulkan/vulkan_spirv.cpp CMakeLists.txt tests/vt/test_vulkan_backend.cpp +git commit -m "$(cat <<'MSG' +refactor(vulkan): emit SPIR-V words into a .cpp, leaving declarations in the header + +At 7 modules the generated header is 3,491 lines and two TUs include it. At the +target shader surface it is megabytes of constexpr array initializer that every +includer re-parses, and every regeneration is a huge header diff. The words now +live in a generated vulkan_spirv.cpp and the header carries the struct plus extern +declarations, so adding shaders costs one TU's compile time rather than all of +them. Doing this at 7 modules is cheap; doing it at 100 is not. + +--check now covers both generated files. Clean -Werror Vulkan-ON build is 0-warn, +and VLLM_CPP_VULKAN AUTO still resolves OFF so the CUDA gate build is untouched. + +FOLLOWING_AGENTS_PROTOCOL +Assisted-by: Claude Code:claude-opus-5 [Claude Code] +MSG +)" +``` + +--- + +### Task 7: Repair the record drift and land the row + +**Files:** +- Modify: `.agents/feature-matrix.md:280` +- Modify: `.agents/backend-matrix.md:233` +- Modify: `.agents/specs/vulkan-full-support.md` (mark `VK-A1` landed) +- Modify: `.agents/state.md`, `docs/STATUS.md`, `docs/BENCHMARKS.md` +- Modify: `docs/FEATURES.md` (required: `feature-matrix.md` is a feature-surface trigger) + +**Interfaces:** +- Consumes: the landed state from Tasks 1-6 +- Produces: no code + +- [ ] **Step 1: Repair the feature-matrix drift** + +`.agents/feature-matrix.md:280` reads `INVENTORIED | runtime absent` while +`.agents/backend-matrix.md:233` carries `ACTIVE` (gated skeleton). `backend-matrix` +is correct. Change the feature-matrix row to: + +```markdown +| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | gated skeleton: 8 of the CPU backend's 83 registered ops, no model runs | [backend matrix](backend-matrix.md) | +``` + +- [ ] **Step 2: Verify the two matrices now agree** + +```bash +grep -n 'BACKEND-VULKAN' .agents/feature-matrix.md | cut -c1-160 +grep -o 'W0/V1 SKELETON LANDED[^.]*\.' .agents/backend-matrix.md | head -1 +``` +Expected: both describe a landed skeleton; neither says `INVENTORIED`. + +- [ ] **Step 3: Record `VK-A1` as landed in the campaign spec** + +In `.agents/specs/vulkan-full-support.md` §6, change the `VK-A1` row's +Deliverable cell to state what actually landed, and add a short subsection under +it recording: the decision taken (specialization constants over `#define` +variants) with the evidence (242 `string_to_spv(` call sites vs. our artifact +count), the glslang pin, the CI gate and its mutation proof, the header/source +split with before/after line counts, and — if the `vt_smem` fallback from Task 5 +Step 3 was taken — that fallback and its shared-memory cost. + +**Do not claim a speed number.** Nothing in VK-A1 was benchmarked, and the row +owes none. + +- [ ] **Step 4: Update the public checkpoints** + +`docs/STATUS.md` is under a **size ratchet that only shrinks** (currently 284,073; +`scripts/check-public-doc-tables.py`). Adding text requires compacting elsewhere +in the same change. Keep the STATUS entry to one or two sentences pointing at the +spec, put the narrative in `.agents/state.md` (append-only, no ratchet), and +update the existing `BENCH-VK-LLAMA` row in `docs/BENCHMARKS.md` rather than +adding a new one — it must still read NOT APPLICABLE, because VK-A1 measures +nothing. + +`docs/FEATURES.md` must also move, because `.agents/feature-matrix.md` is a +feature-surface trigger in `scripts/check-doc-checkpoint.py`. Its `Vulkan` row is +at `docs/FEATURES.md:157`; make it agree with the repaired feature-matrix state. + +- [ ] **Step 5: Run the record gates** + +```bash +bash scripts/agent-preflight.sh --quiet +``` +Expected: every gate OK **except** `check-fusion-consistency` / `test_check_fusion_consistency`, which are red on `main` for the unrelated `minimax_h3_video_vae_device` drift. Confirm the failure text is that same one and no other gate moved. + +- [ ] **Step 6: Commit and open the PR** + +```bash +git add .agents/ docs/ +git commit -m "$(cat <<'MSG' +record(vulkan): VK-A1 landed -- variant mechanism decided, staleness gated + +Repairs the BACKEND-VULKAN drift found while scoping the campaign: feature-matrix +carried INVENTORIED/"runtime absent" against backend-matrix's ACTIVE for the same +row. backend-matrix was right; the feature matrix now says gated skeleton, 8 of +the CPU backend's 83 registered ops, no model runs. + +Records the VK-A1 decision and its evidence, the glslang 16.4.0 pin, the CI +freshness gate and its mutation proof, and the header/source split. No speed +number is measured, claimed or owed. + +FOLLOWING_AGENTS_PROTOCOL +Assisted-by: Claude Code:claude-opus-5 [Claude Code] +MSG +)" +git push -u origin row/BACKEND-VULKAN-A1 +gh pr create --draft --title "VK-A1: Vulkan shader-variant pipeline" --body "$(cat <<'BODY' +Implements sub-project `VK-A1` of `.agents/specs/vulkan-full-support.md`. + +Decides and implements the shader-variant mechanism before ~100 shaders exist: +SPIR-V **specialization constants** over llama.cpp's `#define`-per-variant model, +keeping the committed-SPIR-V route so the build stays hermetic on every box. + +- glslang 16.4.0 pinned; committed SPIR-V proven to reproduce +- CI job fails on stale committed SPIR-V (mutation-proved) +- generator records each module's declared SpecIds; host checks the count +- pipelines specialized, cache keyed by specialization +- workgroup size collapsed from three copies to one specialization constant +- SPIR-V words moved out of the header into a generated `.cpp` +- `BACKEND-VULKAN` feature-matrix/backend-matrix drift repaired + +No model runs on Vulkan and no speed number is measured, claimed or owed. + +🤖 Generated with [Claude Code](https://claude.com/claude-code) +BODY +)" +``` + +--- + +## Self-Review + +**Spec coverage.** `.agents/specs/vulkan-full-support.md` §6 lists three questions VK-A1 must answer plus the drift repair: +1. *build-time generation vs committed artifacts vs hybrid* → answered in Tasks 1, 2, 6: committed artifacts retained (hermetic), made viable by the header/source split and gated by CI. The premise change that reopened it (sudo now available) is what makes Task 1's install and Task 2's CI download possible. +2. *how coopmat tiers are spelled — defines vs specialization constants* → answered in Tasks 3-5: specialization constants, proved end to end on the workgroup size. +3. *where the tier is selected — the `vt::arch_tactics` generalization* → **deliberately not in this plan.** VK-A1 builds the mechanism for *passing* a variant; there is no device capability worth branching on until a coopmat kernel exists, and `arch_tactics` is listed in the spec as shared with `VK-C`. Building a tactic registry with exactly one tactic would be speculative. This is a scope narrowing against the spec's §6 wording and is called out here rather than left implicit — flag it to the user at handoff. +4. *`feature-matrix.md:280` drift repair* → Task 7. + +**Placeholder scan.** No "TBD"/"handle edge cases"/"similar to Task N". Two conditional branches are specified with concrete fallbacks rather than left open: Task 1 Step 3 (committed SPIR-V does not reproduce → stop and report) and Task 5 Step 3 (`vt_smem` rejects a spec-constant size → size by max, record the cost). + +**Type consistency.** `Dispatch(..., const uint32_t* spec_values, uint32_t spec_count)` is declared in Task 4 Step 3, implemented in Step 5, and called with `kSpecTg, 1` in Task 5 Step 4. `SpirvModule::spec_ids`/`spec_id_count` are emitted in Task 3 Step 4, consumed in Task 4 Step 4, asserted in Task 3 Step 1. `kSpirvModuleCount` is introduced in Task 6 Step 3 and consumed in Step 1's test. `PipelineCacheSize()` is declared in Task 4 Step 3, defined in Step 5, used in Step 1's test. `gen.spec_ids` / `gen.SPIRV_OP_DECORATE` / `gen.SPIRV_DECORATION_SPEC_ID` are defined in Task 3 Step 3 and used by the unit test in Step 5. + +**Known-red gate.** `check-fusion-consistency` is red on `main` before this branch exists (`minimax_h3_video_vae_device`). Every task that runs preflight expects that one failure and no other. From 0b9f9c70803ea78f54e0f6fff833040db85a51d1 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 20:55:25 +0000 Subject: [PATCH 02/17] build(vulkan): pin glslang 16.5.0 and prove the committed SPIR-V reproduces VK-A1 Task 1. Neither box had a GLSL compiler, so no .comp file could be changed without invalidating the committed SPIR-V, and no CI gate could check it. Two measured corrections to the recorded pin. The header claims "Glslang Version: 11:16.4.0", but 16.4.0 ships NO release assets -- only 16.5.0 and main-tot do, and Ubuntu packages 15.1.0 -- so the recorded version is not fetchable and could never have backed a CI job. And the committed SPIR-V reproduces BYTE-FOR-BYTE under 16.5.0: `gen-vulkan-spirv.py --check` passes, exit 0. That second result is stronger than the check was written to obtain. --check compares SPIR-V bytes and ignores only the version comment, so a byte-identical result under a DIFFERENT, newer compiler proves both that the committed artifact is genuinely what it claims to be, and that the emitted SPIR-V did not move across a glslang minor bump. The freshness gate can therefore pin the download URL instead of asserting a version string, which would have been brittle for no gain. Nothing is linked against glslang; it is a build-time tool. The plan is updated in the same change to record the corrected pin and why. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .agents/environment.md | 22 ++++++++-- ...026-08-06-vk-a1-shader-variant-pipeline.md | 44 +++++++++---------- 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/.agents/environment.md b/.agents/environment.md index 4660958a..7f4cdc53 100644 --- a/.agents/environment.md +++ b/.agents/environment.md @@ -327,10 +327,24 @@ inner 4096, state 128; context 262144. - **Vulkan runtime is already usable and needs no acquisition.** dgx GB10 enumerates as a real Vulkan `INTEGRATED_GPU` at API 1.4.312 (loader 1.4.328 + NVIDIA ICD) with `VK_KHR_cooperative_matrix` v2 and `VK_NV_cooperative_matrix2`; - the dev box enumerates `llvmpipe` (Vulkan 1.4.318, CPU) for GPU-free CI. Still - to install before Vulkan work: `libvulkan-dev`, `vulkan-tools`, and a - **current-SDK** `glslc` — Ubuntu's shaderc 2023.8 is too old for the coopmat2 - feature probe and fails silently into the slow path. + the dev box enumerates `llvmpipe` (Vulkan 1.4.318, CPU) for GPU-free CI. + Optional still: `libvulkan-dev` and `vulkan-tools` (neither is needed to build + or gate — the backend `dlopen`s the loader and vendors the Khronos TYPE headers). +- **Vulkan shader toolchain — glslang 16.5.0, installed 2026-08-06 (`VK-A1`).** + `$HOME/tools/glslang-16.5.0/bin/glslang`, from the upstream prebuilt Linux + x86_64 release tarball; no root, nothing linked (it is a build-time tool, never + a dependency — `.agents/discipline.md`). Put that directory on `PATH` to + regenerate committed SPIR-V with `scripts/gen-vulkan-spirv.py`. + **Two measured facts about the pin.** (1) `src/vt/vulkan/vulkan_spirv.h:16` + records `Glslang Version: 11:16.4.0`, but **16.4.0 ships NO release assets** — + only `16.5.0` and `main-tot` do, and Ubuntu packages `15.1.0` — so the recorded + version cannot be fetched and cannot back a CI gate. (2) The committed SPIR-V + nonetheless reproduces **byte-for-byte under 16.5.0** (`--check` passes, exit 0), + which proves the committed artifact is what it claims AND that the emitted + SPIR-V is stable across a glslang minor bump. The freshness gate therefore pins + the DOWNLOAD URL rather than asserting a version string. + The older note here — that Ubuntu's shaderc 2023.8 `glslc` is too old for the + coopmat2 feature probe — still holds and is why the system package is not used. - **No Intel GPU exists on any box here**, so `BACKEND-XPU` end-to-end work is HW-BLOCKED; only policy-port, compile coverage and oneAPI CPU-device unit numerics are available. diff --git a/docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md b/docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md index 2dd8506f..c06eb959 100644 --- a/docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md +++ b/docs/superpowers/plans/2026-08-06-vk-a1-shader-variant-pipeline.md @@ -18,7 +18,7 @@ - **Author is `mudler`**, never `localai-bot`. - **Run `scripts/agent-preflight.sh`** before committing. Note: `check-fusion-consistency` is **RED on `main`** for an unrelated reason (`minimax_h3_video_vae_device` GEMM merge drift, verified pre-existing at `075b9f21^`). Do not attempt to fix it here; confirm it is the *same* failure and no new one. - **Target environment is `vulkan1.1`** (`TARGET_ENV` in `scripts/gen-vulkan-spirv.py`) — the floor `vulkan_context.cpp` requires. Do not raise it in this plan. -- **Pinned shader compiler: `Glslang Version: 11:16.4.0`** — the exact string recorded at `src/vt/vulkan/vulkan_spirv.h:16`. `--check` compares SPIR-V bytes and ignores only the version comment line, so a different glslang build will fail the gate. +- **Pinned shader compiler: glslang `16.5.0`, prebuilt Linux x86_64 release tarball.** CORRECTED during execution (2026-08-06): the header recorded `Glslang Version: 11:16.4.0`, but **16.4.0 ships no release assets** (only `16.5.0` and `main-tot` do; Ubuntu packages `15.1.0`), so the recorded version is not fetchable and could not back a CI gate. MEASURED: the committed SPIR-V reproduces **byte-for-byte under 16.5.0** — `gen-vulkan-spirv.py --check` passes unchanged. That both proves the committed artifact is what it claims and shows the emitted SPIR-V is stable across a glslang minor bump, so the gate pins the DOWNLOAD URL rather than asserting a version string. - **llama.cpp port pin: `237ad9b96`**, readable at `/home/mudler/_git/llama.cpp`. Cite `file:line` for any ported structure. ## PRECONDITIONS — verify before Task 1, stop if unmet @@ -65,41 +65,37 @@ which glslang glslangValidator glslc || echo "none present (expected)" Expected: `none present (expected)`. -- [ ] **Step 2: Install the pinned glslang** +- [x] **Step 2: Install the pinned glslang** — DONE 2026-08-06 -`sudo -n true` now returns 0 on both the dev box and dgx (verified 2026-08-06), so either route works. Prefer the **release tarball** — it pins the exact version, needs no root, and matches what CI will download: +The recorded `16.4.0` has **no release assets**, so it is not installable without a +source build. `16.5.0` is the nearest tag that ships a prebuilt Linux x86_64 +binary, and Step 3 measured that it produces byte-identical SPIR-V: ```bash mkdir -p "$HOME/tools" && cd "$HOME/tools" -# glslang 16.4.0 release build (the version recorded in vulkan_spirv.h:16) -curl -fsSL -o glslang-linux.zip \ - https://github.com/KhronosGroup/glslang/releases/download/16.4.0/glslang-master-linux-Release.zip -unzip -o -q glslang-linux.zip -d glslang-16.4.0 -export PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" -glslang --version +curl -fsSL -o glslang-16.5.0.tar.gz \ + https://github.com/KhronosGroup/glslang/releases/download/16.5.0/glslang-16.5.0-linux-x86_64-release.tar.gz +mkdir -p glslang-16.5.0 && tar xzf glslang-16.5.0.tar.gz -C glslang-16.5.0 +export PATH="$HOME/tools/glslang-16.5.0/bin:$PATH" +glslang --version | head -1 ``` -Expected: output whose first line is exactly `Glslang Version: 11:16.4.0`. - -If the release asset name or URL has changed, find the 16.4.0 release asset for Linux on the glslang releases page. **Do not substitute a different version** — a different glslang emits different SPIR-V and Step 4 will fail for a reason that is not a real staleness. +Result: `Glslang Version: 11:16.5.0` at `$HOME/tools/glslang-16.5.0/bin/glslang`. -- [ ] **Step 3: Run the staleness check against the committed header** +- [x] **Step 3: Run the staleness check against the committed header** — DONE 2026-08-06 ```bash -cd "$(git rev-parse --show-toplevel)" -PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" python3 scripts/gen-vulkan-spirv.py --check +PATH="$HOME/tools/glslang-16.5.0/bin:$PATH" python3 scripts/gen-vulkan-spirv.py --check ``` -Expected: `vulkan_spirv.h is up to date`. - -**If it fails instead:** do not regenerate and move on. Capture the diff and diagnose before proceeding: - -```bash -PATH="$HOME/tools/glslang-16.4.0/bin:$PATH" python3 scripts/gen-vulkan-spirv.py -git diff --stat src/vt/vulkan/vulkan_spirv.h -``` +Result: **`vulkan_spirv.h is up to date`, exit 0.** -A byte difference at the pinned version means the committed artifact was produced by something other than what it claims, which is a **finding to report to the user before continuing** — it would mean the CI gate in Task 2 can never be green and the whole committed-artifact route needs re-deciding. Record it and stop. +This is a stronger outcome than the step was written to obtain. The check compares +SPIR-V bytes and ignores only the version comment, so a byte-identical result under +a *different, newer* compiler proves two things at once: the committed artifact is +genuinely what it claims to be, and the emitted SPIR-V did not change across a +glslang minor bump. The second is what lets Task 2 pin the download URL instead of +asserting a version string, which would have been brittle for no gain. - [ ] **Step 4: Record the toolchain in the environment doc** From 0fececcc78344d8a788528787da296a61cae7bf0 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 20:56:25 +0000 Subject: [PATCH 03/17] ci(vulkan): gate the committed SPIR-V against staleness The committed-artifact route trades a build-time shader toolchain for the obligation to regenerate by hand, and nothing enforced that obligation: --check existed but no job ran it, so a .comp edit without a regenerate shipped silently. That is the one way the hermetic-build trade can go wrong, and it goes wrong quietly. The glslang DOWNLOAD URL is the pin. An exact version-string assertion was deliberately not used: the committed SPIR-V is byte-identical under both the 16.4.0 that produced it and the 16.5.0 pinned here, so gating on the string would be brittle without buying anything, and a future glslang codegen change will surface as STALE either way. Mutation-proved rather than assumed: rewriting relu's select as an equivalent expression (v > 0.0 ? v : 0.0 -> v < 0.0 ? 0.0 : v) turns the gate RED (exit 1), and reverting turns it green. A comment-only edit would not have proved it, since -g0 can emit identical SPIR-V. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .github/workflows/ci.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 734089d2..31bab72b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -231,6 +231,39 @@ jobs: - uses: actions/checkout@v4 - name: CUDA feature table resolves per architecture run: cmake -P cmake/CudaArchFeaturesTest.cmake + vulkan-spirv-freshness: + # The Vulkan backend commits its SPIR-V (src/vt/vulkan/vulkan_spirv.h) instead + # of compiling shaders at build time, so the build needs no shader toolchain on + # any machine -- strictly better than llama.cpp, which requires glslc on every + # build box. The trade is an obligation to regenerate by hand, and NOTHING + # ENFORCED IT: `gen-vulkan-spirv.py --check` existed but no job ran it, so a + # .comp edit without a regenerate shipped silently. That is the failure mode + # this job closes, before the shader surface grows (BACKEND-VULKAN, VK-A1). + # + # The glslang DOWNLOAD URL is the pin. An exact version-string assertion was + # deliberately NOT used: the committed SPIR-V was measured byte-identical under + # both the 16.4.0 that produced it and the 16.5.0 pinned here, so gating on the + # string would be brittle without buying anything. The URL being fixed is what + # makes the run deterministic. + # + # Tree-scoped (checks HEAD's artifact): cancellable. + concurrency: + group: ci-vulkan-spirv-freshness-${{ github.ref }}-${{ github.repository }} + cancel-in-progress: true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install pinned glslang + run: | + set -euo pipefail + curl -fsSL -o /tmp/glslang.tar.gz \ + https://github.com/KhronosGroup/glslang/releases/download/16.5.0/glslang-16.5.0-linux-x86_64-release.tar.gz + mkdir -p /tmp/glslang + tar xzf /tmp/glslang.tar.gz -C /tmp/glslang + /tmp/glslang/bin/glslang --version | head -1 + echo "/tmp/glslang/bin" >> "$GITHUB_PATH" + - name: Committed SPIR-V is not stale + run: python3 scripts/gen-vulkan-spirv.py --check device-leakage: # The DSR RATCHET (work row `S1` of .agents/specs/accelerator-seam-audit.md). # Counts device-specific references in `src/vllm/` + `include/vllm/` — the From 36896ff7fc9af6af3bdb3e710df000acd00f0ad8 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 21:18:09 +0000 Subject: [PATCH 04/17] fix(vulkan): repair the stale op-surface gate and give Vulkan a CI leg The Vulkan unit gate was RED on main and nothing could see it. test_vulkan_backend asserted that unimplemented ops throw. Since accelerator-seam row S5 (af0b21ba) they do not: a unified-memory device that misses GetOp lazily installs the CPU kernel as a priority -1000 provider, and Vulkan is eligible (GB10 integrated and llvmpipe both report unified). The Metal sibling was updated for this as Metal work continued (test_metal_backend.cpp:215-231); Vulkan was not, because VLLM_CPP_VULKAN=ON appeared NOWHERE in ci.yml -- the backend was built on no machine, so its whole suite ran nowhere and the assertion rotted from the moment S5 landed. MEASURED on this tree before repairing it: of 87 CPU-registered ops, 8 are NATIVE on Vulkan, 79 are served by the portable reference tier, and ZERO throw. So the record's "vt::GetOp throws" and "8 of 83" are both wrong, and every op a model needs already resolves on Vulkan -- on the host. (Op resolution is not an end-to-end claim: get_attn_backend_priority() is still deliberately EMPTY, a separate gate at the platform seam.) The assertion is rewritten in the Metal sibling's exact form, so the two backends fail the same way: the op resolves, and the provider that served it is checked BY NAME against kReferenceProviderName, so a host kernel can never masquerade as a native Vulkan one. The new build-test-vulkan leg runs GPU-free on llvmpipe and executes both the backend gate and the cross-device numerics gate against the CPU oracle. Verified locally: 8/8 (87 assertions) and 6/6 (73 assertions). FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .github/workflows/ci.yml | 41 ++++++++++++++++++++++++++++++++ tests/vt/test_vulkan_backend.cpp | 31 ++++++++++++++++++++---- 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31bab72b..527476a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -264,6 +264,47 @@ jobs: echo "/tmp/glslang/bin" >> "$GITHUB_PATH" - name: Committed SPIR-V is not stale run: python3 scripts/gen-vulkan-spirv.py --check + build-test-vulkan: + # The Vulkan backend had NO CI leg at all: `VLLM_CPP_VULKAN=ON` appeared + # nowhere in this workflow, so tests/vt/test_vulkan_backend.cpp ran on no + # machine. It rotted exactly as you would expect. Accelerator-seam row S5 + # (af0b21ba) gave unified-memory devices a portable CPU reference tier, which + # means a missed GetOp no longer throws; the Metal sibling test was updated for + # that as Metal work continued, and the Vulkan one was not, so its "the + # unimplemented ops throw" assertion sat RED and INVISIBLE from S5 until + # VK-A1 built the backend by hand (2026-08-06). That is the gap this closes. + # + # Runs GPU-FREE on `mesa-vulkan-drivers`' llvmpipe software ICD, which is the + # arrangement the fan-out spike already recorded as working. The suite is + # scoped to the Vulkan-specific targets rather than all of ctest: the full + # suite is already covered by build-test-cpu, and this lane exists to keep the + # Vulkan-only TUs compiled and executed, not to duplicate it. + # + # Tree-scoped: cancellable. + concurrency: + group: ci-build-test-vulkan-${{ github.ref }}-${{ github.repository }} + cancel-in-progress: true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install the software Vulkan ICD + # Loader + llvmpipe only. No shader toolchain: the backend consumes the + # COMMITTED SPIR-V, which is the whole point of the committed-artifact + # route, and the vulkan-spirv-freshness job above is what keeps it honest. + run: | + set -euo pipefail + sudo apt-get update + sudo apt-get install -y --no-install-recommends libvulkan1 mesa-vulkan-drivers + - name: Configure + run: cmake -S . -B build-vulkan -DVLLM_CPP_BUILD_TESTS=ON -DVLLM_CPP_VULKAN=ON + - name: Build + # Bounded parallelism for the same reason as build-test-cpu: an unbounded + # parallel link OOM-kills the runner. + run: cmake --build build-vulkan -j 2 --target test_vulkan_backend test_backend_cross_device + - name: Vulkan backend gate + run: ./build-vulkan/tests/test_vulkan_backend + - name: Cross-device numerics vs the CPU oracle + run: ./build-vulkan/tests/test_backend_cross_device device-leakage: # The DSR RATCHET (work row `S1` of .agents/specs/accelerator-seam-audit.md). # Counts device-specific references in `src/vllm/` + `include/vllm/` — the diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index 5175ac18..0dd92799 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include "vllm/platforms/interface.h" @@ -221,15 +222,37 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { vt::OpId::kRmsNorm, vt::OpId::kFusedChain}) { CHECK(vt::OpRegistered(op, DeviceType::kVULKAN)); } - // Still stubbed — GEMM, attention, KV cache, quant, sampling. A partial backend - // is a supported state (src/vt/ops.cpp:104-111 throws on lookup). NO MODEL RUNS - // ON VULKAN. + // No NATIVE Vulkan kernel yet for GEMM, attention, KV cache, quant, sampling. for (vt::OpId op : {vt::OpId::kMatmul, vt::OpId::kMatmulBT, vt::OpId::kPagedAttention, vt::OpId::kReshapeAndCache, vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax}) { CHECK_FALSE(vt::OpRegistered(op, DeviceType::kVULKAN)); } - CHECK_THROWS_AS(vt::GetOp(vt::OpId::kMatmul, DeviceType::kVULKAN), std::runtime_error); + // ...but they no longer THROW, and this assertion used to say they did. + // + // Accelerator-seam work row S5 (af0b21ba) added the PORTABLE REFERENCE TIER: + // for a unified-memory device, a missed GetOp lazily installs the CPU kernel as + // a priority -1000 provider, below every native kernel. Vulkan is eligible (GB10 + // integrated and llvmpipe both report unified), so every op the CPU backend has + // resolves here and runs ON THE HOST against shared memory — correct, and + // arbitrarily slow. + // + // The Metal sibling was updated for this (test_metal_backend.cpp:215-231); THIS + // file was not, and the assertion sat RED from the moment S5 landed because no + // CI leg builds the Vulkan backend and nobody built it locally. The mirrored + // form below is deliberate: the two backends should fail the same way. + // + // Measured on this tree (VK-A1, 2026-08-06): of 87 CPU-registered ops, 8 are + // NATIVE on Vulkan, 79 are served by the reference tier, and ZERO throw. + REQUIRE(vt::ReferenceTierEligible(DeviceType::kVULKAN)); + void* matmul = nullptr; + CHECK_NOTHROW(matmul = vt::GetOp(vt::OpId::kMatmul, DeviceType::kVULKAN)); + CHECK(matmul != nullptr); + // BY NAME, so a host kernel can never masquerade as a native Vulkan one (Risk 7). + const auto stats = vt::GetOpProviderStats(vt::OpId::kMatmul, DeviceType::kVULKAN); + REQUIRE(stats.last_selected != nullptr); + CHECK(std::string(stats.last_selected) == std::string(vt::kReferenceProviderName)); + CHECK(vt::GetReferenceTierHits() > 0); } TEST_CASE("Vulkan float-controls are PROBED and reported, not assumed") { From 9579f94e62d60529ebbde5351572e025be12efdc Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 21:24:56 +0000 Subject: [PATCH 05/17] feat(vulkan): record specialization-constant IDs, and rule out the workgroup size Two halves: the metadata the variant mechanism needs, and a MEASURED negative result about the constant everyone would reach for first. The generator now parses OpDecorate SpecId out of each emitted module and records the sorted IDs beside the blob. The host will pass specialization values BY ID, and Vulkan SILENTLY IGNORES a map entry whose ID the module does not declare, so without this table a host/shader drift is wrong numbers rather than a clean failure. Parsing the module is the only source of truth: glslang exposes no side-channel listing, and a hand-maintained list beside the shaders is exactly the duplicate that drifts. Covered by unit tests including the two ways a naive scanner breaks (a non-SpecId decoration, and stepping over unrelated opcodes by word count). The workgroup size is NOT that constant, and the attempt is recorded rather than silently abandoned. VT_TG is written down three times (vt_common.glsl, each .comp's local_size_x, kWorkgroupSize on the host, which derives the workgroup COUNT from it) -- precisely the shape a specialization constant should collapse. It cannot at this target: layout(local_size_x_id = 0) makes glslang emit `ExecutionMode LocalSize 1 1 1` plus the legacy BuiltIn WorkgroupSize vector, because the modern LocalSizeId mode needs SPIR-V 1.2 + VK_KHR_maintenance4 (core in Vulkan 1.3) and this backend targets vulkan1.1 deliberately. MEASURED on llvmpipe: the literal LocalSize 1 wins, each workgroup runs ONE thread against a ceil(n/128) dispatch, and cross-device NMSE went from ~1e-14 to ~0.99 on kAdd. An A/B isolated it -- keeping the constant and reverting only local_size_x_id is fully green -- so specialization constants work; the launch geometry is what cannot use them here. Half-converting is worse than not converting: a host-settable VT_TG whose value the actual workgroup size does not follow would silently corrupt. So VT_TG stays a #define with the measurement written next to it, and the mechanism is left for axes that need not agree with launch geometry (dtype, quant format, coopmat tier). The gates now assert ZERO declared constants as a fact, so the first shader that takes one flips them loudly. SPIR-V words are byte-identical to before (109,436 bytes); only the table gained columns. Vulkan gate 9/9 (101 assertions), cross-device 6/6 (73). FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- scripts/gen-vulkan-spirv.py | 48 ++++++++++++- src/vt/vulkan/shaders/vt_common.glsl | 24 +++++++ src/vt/vulkan/vulkan_spirv.h | 24 ++++--- tests/scripts/test_gen_vulkan_spirv.py | 97 ++++++++++++++++++++++++++ tests/vt/test_vulkan_backend.cpp | 30 ++++++++ 5 files changed, 214 insertions(+), 9 deletions(-) create mode 100644 tests/scripts/test_gen_vulkan_spirv.py diff --git a/scripts/gen-vulkan-spirv.py b/scripts/gen-vulkan-spirv.py index e6f91c73..8f175a4a 100755 --- a/scripts/gen-vulkan-spirv.py +++ b/scripts/gen-vulkan-spirv.py @@ -104,6 +104,34 @@ def compile_one(cc: pathlib.Path, src: pathlib.Path) -> bytes: return data +# SPIR-V decoration constants (SPIR-V core spec: OpDecorate = 71 in §3.32.3 +# Annotation Instructions, Decoration SpecId = 1 in §3.20). Parsing the emitted +# module is the only source of truth here: glslang offers no side-channel listing +# of the SpecIds it produced, and a hand-maintained list beside the shaders is +# exactly the kind of duplicate that drifts silently. +SPIRV_OP_DECORATE = 71 +SPIRV_DECORATION_SPEC_ID = 1 +SPIRV_HEADER_WORDS = 5 + + +def spec_ids(blob: bytes) -> list[int]: + """Return the SpecId values decorated in one SPIR-V module, sorted ascending.""" + words = [int.from_bytes(blob[i:i + 4], "little") for i in range(0, len(blob), 4)] + ids: set[int] = set() + i = SPIRV_HEADER_WORDS + while i < len(words): + word_count = words[i] >> 16 + opcode = words[i] & 0xFFFF + if word_count == 0: + sys.exit("malformed SPIR-V: zero-length instruction") + # OpDecorate [...] + if opcode == SPIRV_OP_DECORATE and word_count >= 4: + if words[i + 2] == SPIRV_DECORATION_SPEC_ID: + ids.add(words[i + 3]) + i += word_count + return sorted(ids) + + def render(blobs: dict[str, bytes], version: str) -> str: lines: list[str] = [] add = lines.append @@ -141,17 +169,35 @@ def render(blobs: dict[str, bytes], version: str) -> str: add(f" {chunk},") add("};") add("") + for name in sorted(blobs): + ids = spec_ids(blobs[name]) + if ids: + add(f"inline constexpr uint32_t kSpecIds_{name}[] = {{") + add(" " + ", ".join(f"{i}u" for i in ids) + ",") + add("};") + add("") add("// Name -> SPIR-V module. The NAME is the shader's file stem and is also the") add("// key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp).") + add("//") + add("// spec_ids lists the SPECIALIZATION CONSTANT IDs the module declares, parsed") + add("// from its OpDecorate SpecId instructions and sorted ascending. The host passes") + add("// specialization values BY ID, and Vulkan SILENTLY IGNORES a map entry whose ID") + add("// the module does not declare — so without this table a host/shader drift") + add("// produces WRONG NUMBERS instead of a clean failure.") add("struct SpirvModule {") add(" const char* name;") add(" const uint32_t* words;") add(" size_t word_count;") + add(" const uint32_t* spec_ids;") + add(" size_t spec_id_count;") add("};") add("") add("inline constexpr SpirvModule kSpirvModules[] = {") for name in sorted(blobs): - add(f' {{"{name}", kSpv_{name}, sizeof(kSpv_{name}) / sizeof(uint32_t)}},') + ids = spec_ids(blobs[name]) + idp = f"kSpecIds_{name}" if ids else "nullptr" + add(f' {{"{name}", kSpv_{name}, sizeof(kSpv_{name}) / sizeof(uint32_t), ' + f'{idp}, {len(ids)}}},') add("};") add("") add("} // namespace vt::vulkan") diff --git a/src/vt/vulkan/shaders/vt_common.glsl b/src/vt/vulkan/shaders/vt_common.glsl index 8f4bf5fd..9a1a2d71 100644 --- a/src/vt/vulkan/shaders/vt_common.glsl +++ b/src/vt/vulkan/shaders/vt_common.glsl @@ -57,6 +57,30 @@ // llvmpipe. llama.cpp instead hardcodes 512 (rms_norm.comp:33) and 512/1024 // elsewhere, which is faster but not universally valid; W0 chooses portability. // It is a power of two, which the halving tree reduction below requires. +// +// IT STAYS A #define, AND THAT IS A MEASURED DECISION — do not "improve" it into +// a specialization constant (VK-A1, 2026-08-06). The workgroup size is written +// down three times (here, each .comp's `local_size_x`, and kWorkgroupSize on the +// host, which computes the workgroup COUNT from it), which is exactly the shape +// a specialization constant is supposed to collapse. It cannot, here: +// +// `layout(local_size_x_id = 0, ...)` makes glslang emit +// `ExecutionMode LocalSize 1 1 1` plus the LEGACY `BuiltIn WorkgroupSize` +// spec-constant vector. The modern `LocalSizeId` execution mode that would +// carry the real value needs SPIR-V 1.2 with VK_KHR_maintenance4 (core in +// Vulkan 1.3), and this backend targets vulkan1.1 on purpose. MEASURED +// consequence on llvmpipe: the literal LocalSize 1 wins, every workgroup runs +// ONE thread while the host still dispatches ceil(n/128) groups, and roughly +// 1/128 of each tensor is computed — cross-device NMSE went from ~1e-14 to +// ~0.99 on ops as simple as kAdd. +// +// Making VT_TG a specialization constant WITHOUT specializing local_size_x is +// worse than leaving it alone: it advertises a host-settable knob that silently +// corrupts, since the shared-memory extent and the reduction tree would follow it +// while the actual workgroup size would not. The specialization machinery +// (vulkan_spirv.h spec_ids, GetPipeline) is still the right variant mechanism — +// it is simply for axes like dtype, quant format and coopmat tier, where the +// constant does not have to agree with the launch geometry. #define VT_TG 128u // Operand k is declared by each shader as a PAIR of blocks onto the same diff --git a/src/vt/vulkan/vulkan_spirv.h b/src/vt/vulkan/vulkan_spirv.h index 5ca05900..ce44a228 100644 --- a/src/vt/vulkan/vulkan_spirv.h +++ b/src/vt/vulkan/vulkan_spirv.h @@ -13,7 +13,7 @@ // of re-running the generator when a .comp changes. See the generator's // docstring for the full rationale. // -// Produced by: Glslang Version: 11:16.4.0 +// Produced by: Glslang Version: 11:16.5.0 // Target environment: vulkan1.1 #ifndef VT_VULKAN_VULKAN_SPIRV_H_ #define VT_VULKAN_VULKAN_SPIRV_H_ @@ -3470,20 +3470,28 @@ inline constexpr uint32_t kSpv_vt_silu_and_mul[] = { // Name -> SPIR-V module. The NAME is the shader's file stem and is also the // key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp). +// +// spec_ids lists the SPECIALIZATION CONSTANT IDs the module declares, parsed +// from its OpDecorate SpecId instructions and sorted ascending. The host passes +// specialization values BY ID, and Vulkan SILENTLY IGNORES a map entry whose ID +// the module does not declare — so without this table a host/shader drift +// produces WRONG NUMBERS instead of a clean failure. struct SpirvModule { const char* name; const uint32_t* words; size_t word_count; + const uint32_t* spec_ids; + size_t spec_id_count; }; inline constexpr SpirvModule kSpirvModules[] = { - {"vt_add", kSpv_vt_add, sizeof(kSpv_vt_add) / sizeof(uint32_t)}, - {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t)}, - {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t)}, - {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t)}, - {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t)}, - {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t)}, - {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t)}, + {"vt_add", kSpv_vt_add, sizeof(kSpv_vt_add) / sizeof(uint32_t), nullptr, 0}, + {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t), nullptr, 0}, + {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t), nullptr, 0}, + {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, + {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, + {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t), nullptr, 0}, + {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t), nullptr, 0}, }; } // namespace vt::vulkan diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py new file mode 100644 index 00000000..f6b42311 --- /dev/null +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -0,0 +1,97 @@ +"""Unit tests for scripts/gen-vulkan-spirv.py (BACKEND-VULKAN, VK-A1). + +The SpecId parser is the piece worth testing directly: it walks raw SPIR-V, and +the two ways a naive scanner breaks (mistaking another decoration for SpecId, and +failing to step over unrelated instructions by word count) are both silent — they +produce a wrong ID list, which becomes a wrong VkSpecializationInfo, which Vulkan +accepts without complaint and turns into wrong numbers. +""" + +import importlib.util +import pathlib +import struct +import unittest + +ROOT = pathlib.Path(__file__).resolve().parents[2] +_spec = importlib.util.spec_from_file_location( + "gen_vulkan_spirv", ROOT / "scripts" / "gen-vulkan-spirv.py") +gen = importlib.util.module_from_spec(_spec) +_spec.loader.exec_module(gen) + + +def module(*instructions: "tuple[int, list[int]]") -> bytes: + """Build a minimal SPIR-V blob: the 5 header words, then the instructions.""" + words = [0x07230203, 0x00010300, 0, 1, 0] + for opcode, operands in instructions: + words.append(((len(operands) + 1) << 16) | opcode) + words.extend(operands) + return b"".join(struct.pack(" Date: Thu, 6 Aug 2026 21:40:54 +0000 Subject: [PATCH 06/17] feat(vulkan): specialize pipelines, and make vt_cast's dtype pair the first axis The variant mechanism, now exercised by a real shader instead of a synthetic one. Dispatch takes specialization values, the pipeline cache is keyed by name PLUS those values, and the count is checked against the module's declared SpecIds -- Vulkan silently ignores a map entry whose constantID the module does not declare, so an unchecked drift is wrong numbers rather than an error, the same class as the existing binding-layout check. The VkSpecializationInfo and its map entries are named locals that outlive vkCreateComputePipelines, not temporaries whose address escapes; that use-after-free class has bitten this project twice already under CUDA-graph capture. vt_cast is the first axis. Its source and destination dtype were push constants re-tested per element inside VT_LOAD/VT_STORE; they are now specialization constants 0 and 1, so the driver folds them at pipeline creation and eliminates the branch that cannot be taken. ONE committed module still serves every (src, dst) pair -- which is the whole argument against llama.cpp's spelling, where the same axis is a GLSL #define and therefore a separate SPIR-V module per combination. The module got SMALLER, 109,436 -> 109,216 bytes, because the dead dtype branches are gone. Gated on the property that matters: the cache must GROW BY TWO across two dtype pairs. Results alone prove nothing here, since the shader defaults are f32->f32 and a specialization that silently did nothing would also look right. Numerics are checked in the BIT-EXACT tier, not the NMSE tier -- the f32->bf16->f32 round trip must equal the CPU codec exactly -- and cross-device is unchanged at 6/6, 73 assertions. Clean full -Werror build with Vulkan ON: exit 0, 0 warnings. CMakeLists is untouched, so VLLM_CPP_VULKAN AUTO still resolves OFF and the CUDA gate build is unaffected by construction. Vulkan gate 10/10, 405 assertions. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- src/vt/vulkan/shaders/vt_cast.comp | 22 +- src/vt/vulkan/vulkan_context.cpp | 68 ++- src/vt/vulkan/vulkan_context.h | 22 +- src/vt/vulkan/vulkan_ops.cpp | 21 +- src/vt/vulkan/vulkan_spirv.h | 575 ++++++++++++------------- tests/scripts/test_gen_vulkan_spirv.py | 35 +- tests/vt/test_vulkan_backend.cpp | 69 ++- 7 files changed, 490 insertions(+), 322 deletions(-) diff --git a/src/vt/vulkan/shaders/vt_cast.comp b/src/vt/vulkan/shaders/vt_cast.comp index 55b24326..d51188ef 100644 --- a/src/vt/vulkan/shaders/vt_cast.comp +++ b/src/vt/vulkan/shaders/vt_cast.comp @@ -15,10 +15,25 @@ layout(binding = 1) readonly buffer Ab16 { uint16_t v[]; } A16; layout(binding = 2) buffer Db32 { uint v[]; } D32; layout(binding = 3) buffer Db16 { uint16_t v[]; } D16; +// The dtype pair is a SPECIALIZATION CONSTANT, not a push constant — this is the +// backend's first variant axis and the reason the mechanism exists. +// +// It used to be `p.a_dt` / `p.out_dt`, re-tested per element inside VT_LOAD and +// VT_STORE. As specialization constants the driver folds them at pipeline +// creation and eliminates the branch that cannot be taken, so each (src, dst) +// pair gets its own specialized pipeline out of ONE committed module. That is the +// alternative to llama.cpp's approach, which spells the same axis as a GLSL +// #define and therefore emits a separate SPIR-V module per combination. +// +// IDs are assigned per shader starting at 0 and must be passed by the host in +// ascending order; vulkan_spirv.h records the declared set and GetPipeline checks +// the count. Values are the VT_DT_* codes from vt_common.glsl. The defaults are +// never relied upon — CastKernel always supplies both. +layout(constant_id = 0) const uint VT_CAST_A_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_CAST_OUT_DT = VT_DT_F32; + layout(push_constant) uniform Params { uint n; - uint a_dt; - uint out_dt; uint a_off; uint out_off; } p; @@ -26,5 +41,6 @@ layout(push_constant) uniform Params { void main() { uint gid = gl_GlobalInvocationID.x; if (gid >= p.n) { return; } - VT_STORE(D32, D16, p.out_dt, p.out_off, gid, VT_LOAD(A32, A16, p.a_dt, p.a_off, gid)); + VT_STORE(D32, D16, VT_CAST_OUT_DT, p.out_off, gid, + VT_LOAD(A32, A16, VT_CAST_A_DT, p.a_off, gid)); } diff --git a/src/vt/vulkan/vulkan_context.cpp b/src/vt/vulkan/vulkan_context.cpp index eb1b3676..87618c40 100644 --- a/src/vt/vulkan/vulkan_context.cpp +++ b/src/vt/vulkan/vulkan_context.cpp @@ -416,16 +416,36 @@ void VulkanContext::FreeBuffer(void* buffer, void* memory) { vk.vkFreeMemory(device, Unpack(memory), nullptr); } +namespace { + +// The pipeline cache key: the module name plus its specialization values, which +// together identify one VkPipeline. Decimal so the key reads back in the +// VT_CHECK messages below. +std::string PipelineKey(const std::string& name, const uint32_t* spec_values, + uint32_t spec_count) { + std::string key = name; + for (uint32_t i = 0; i < spec_count; ++i) { + key += (i == 0 ? '|' : ','); + key += std::to_string(spec_values[i]); + } + return key; +} + +} // namespace + VulkanContext::Pipeline& VulkanContext::GetPipeline(const std::string& name, - uint32_t buffer_count, uint32_t push_size) { + uint32_t buffer_count, uint32_t push_size, + const uint32_t* spec_values, + uint32_t spec_count) { + const std::string key = PipelineKey(name, spec_values, spec_count); auto& cache = *static_cast*>(pipelines_); - auto it = cache.find(name); + auto it = cache.find(key); if (it != cache.end()) { // A kernel's binding count and push-constant size are properties of its // SPIR-V; a mismatch means the host and the committed shader have drifted, // which would corrupt memory rather than fail cleanly. VT_CHECK(it->second.buffer_count == buffer_count && it->second.push_size == push_size, - "vulkan: pipeline " + name + " re-requested with a different binding layout"); + "vulkan: pipeline " + key + " re-requested with a different binding layout"); return it->second; } @@ -440,6 +460,17 @@ VulkanContext::Pipeline& VulkanContext::GetPipeline(const std::string& name, "vulkan: no committed SPIR-V for kernel '" + name + "' — regenerate with scripts/gen-vulkan-spirv.py"); + // Specialization values are passed POSITIONALLY against the module's declared + // SpecIds. Vulkan SILENTLY IGNORES a map entry whose constantID the module does + // not declare, so an unchecked host/shader drift is wrong numbers rather than an + // error — the same class as the binding-layout check above, and just as fatal. + VT_CHECK(spec_count == module->spec_id_count, + "vulkan: kernel '" + name + "' declares " + + std::to_string(module->spec_id_count) + + " specialization constant(s) but " + std::to_string(spec_count) + + " value(s) were supplied — host and committed SPIR-V have drifted;" + " regenerate with scripts/gen-vulkan-spirv.py"); + Pipeline p; p.buffer_count = buffer_count; p.push_size = push_size; @@ -481,12 +512,31 @@ VulkanContext::Pipeline& VulkanContext::GetPipeline(const std::string& name, plci.pPushConstantRanges = &pcr; Check(vk.vkCreatePipelineLayout(device, &plci, nullptr, &p.layout), "vkCreatePipelineLayout"); + // One uint32 per constant, tightly packed; entry i carries the module's i-th + // declared SpecId (the generator emits them sorted ascending). These two must + // OUTLIVE vkCreateComputePipelines below — a temporary whose address is + // captured and read later is the use-after-free class this project has already + // hit twice with CUDA-graph capture, so they are named locals in this scope, + // never a nested block. + std::vector spec_entries(spec_count); + for (uint32_t i = 0; i < spec_count; ++i) { + spec_entries[i].constantID = module->spec_ids[i]; + spec_entries[i].offset = i * static_cast(sizeof(uint32_t)); + spec_entries[i].size = sizeof(uint32_t); + } + VkSpecializationInfo spec_info{}; + spec_info.mapEntryCount = spec_count; + spec_info.pMapEntries = spec_entries.data(); + spec_info.dataSize = spec_count * sizeof(uint32_t); + spec_info.pData = spec_values; + VkComputePipelineCreateInfo cpci{}; cpci.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO; cpci.stage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; cpci.stage.stage = VK_SHADER_STAGE_COMPUTE_BIT; cpci.stage.module = p.module; cpci.stage.pName = "main"; + cpci.stage.pSpecializationInfo = spec_count != 0 ? &spec_info : nullptr; cpci.layout = p.layout; Check(vk.vkCreateComputePipelines(device, VK_NULL_HANDLE, 1, &cpci, nullptr, &p.pipeline), "vkCreateComputePipelines"); @@ -498,12 +548,18 @@ VulkanContext::Pipeline& VulkanContext::GetPipeline(const std::string& name, dsai.pSetLayouts = &p.set_layout; Check(vk.vkAllocateDescriptorSets(device, &dsai, &p.set), "vkAllocateDescriptorSets"); - return cache.emplace(name, p).first->second; + return cache.emplace(key, p).first->second; +} + +size_t VulkanContext::PipelineCacheSize() const { + std::lock_guard guard(*static_cast(mutex_)); + return static_cast*>(pipelines_)->size(); } void VulkanContext::Dispatch(const std::string& name, const void* const* buffers, uint32_t buffer_count, const void* push_constants, - uint32_t push_size, uint32_t group_count_x) { + uint32_t push_size, uint32_t group_count_x, + const uint32_t* spec_values, uint32_t spec_count) { if (group_count_x == 0) return; // nothing to do; an empty dispatch is illegal VT_CHECK(group_count_x <= max_workgroup_count_x_, "vulkan: dispatch needs " + std::to_string(group_count_x) + @@ -518,7 +574,7 @@ void VulkanContext::Dispatch(const std::string& name, const void* const* buffers // one command buffer per op (src/vt/metal/metal_ops.mm § DISPATCH MODEL). std::lock_guard guard(*static_cast(mutex_)); - Pipeline& p = GetPipeline(name, buffer_count, push_size); + Pipeline& p = GetPipeline(name, buffer_count, push_size, spec_values, spec_count); std::vector infos(buffer_count); std::vector writes(buffer_count); diff --git a/src/vt/vulkan/vulkan_context.h b/src/vt/vulkan/vulkan_context.h index cc21537b..2cc0b543 100644 --- a/src/vt/vulkan/vulkan_context.h +++ b/src/vt/vulkan/vulkan_context.h @@ -63,8 +63,25 @@ class VulkanContext { // src/vt/vulkan/shaders/vt_common.glsl § STORAGE MODEL). // Serialized by an internal mutex: the command buffer and each pipeline's // descriptor set are single instances that are re-recorded per dispatch. + // + // `spec_values` are SPECIALIZATION CONSTANT values, supplied in ASCENDING + // constantID order and matching the module's declared `spec_ids` (recorded in + // the committed SPIR-V table) exactly. They are part of the pipeline cache KEY: + // each distinct combination becomes its own VkPipeline, specialized once and + // reused, with the driver folding the constant and eliminating the branches it + // kills. This is the variant mechanism that replaces llama.cpp's + // one-module-per-#define explosion (its vulkan-shaders-gen has 242 + // `string_to_spv` call sites at pin 237ad9b96, most inside dtype/quant/coopmat + // loops) — here one module covers the axis and the count of committed artifacts + // tracks shader FILES instead of their cross product. void Dispatch(const std::string& name, const void* const* buffers, uint32_t buffer_count, - const void* push_constants, uint32_t push_size, uint32_t group_count_x); + const void* push_constants, uint32_t push_size, uint32_t group_count_x, + const uint32_t* spec_values = nullptr, uint32_t spec_count = 0); + + // Number of distinct pipelines currently cached. Exposed for the unit gate: it + // is how a test proves a new specialization produced a NEW pipeline rather than + // silently reusing an existing one — which would look identical in the results. + size_t PipelineCacheSize() const; // Allocate one host-visible, host-coherent storage buffer of `bytes` and keep // it PERSISTENTLY MAPPED. Returns the mapped host pointer — which is what @@ -106,7 +123,8 @@ class VulkanContext { private: VulkanContext(); struct Pipeline; - Pipeline& GetPipeline(const std::string& name, uint32_t buffer_count, uint32_t push_size); + Pipeline& GetPipeline(const std::string& name, uint32_t buffer_count, uint32_t push_size, + const uint32_t* spec_values, uint32_t spec_count); void* instance_ = nullptr; // VkInstance void* physical_device_ = nullptr; // VkPhysicalDevice diff --git a/src/vt/vulkan/vulkan_ops.cpp b/src/vt/vulkan/vulkan_ops.cpp index ab552746..66d3887f 100644 --- a/src/vt/vulkan/vulkan_ops.cpp +++ b/src/vt/vulkan/vulkan_ops.cpp @@ -85,6 +85,11 @@ struct AddParams { struct UnaryParams { uint32_t n, a_dt, out_dt, a_off, out_off; }; +// vt_cast carries its dtype pair in specialization constants instead, so its +// push block is only the shape and the two offsets. +struct CastParams { + uint32_t n, a_off, out_off; +}; struct SiluMulParams { uint32_t t, d, x_dt, out_dt, x_off, out_off; }; @@ -108,8 +113,10 @@ static_assert(sizeof(LayerNormParams) <= 128, "push constants must fit the guara static_assert(sizeof(FcParams) <= 128, "push constants must fit the guaranteed 128 bytes"); template -void Go(const char* name, const Binder& b, const P& p, uint32_t groups) { - VulkanContext::Get().Dispatch(name, b.data(), b.count(), &p, sizeof(P), groups); +void Go(const char* name, const Binder& b, const P& p, uint32_t groups, + const uint32_t* spec = nullptr, uint32_t spec_count = 0) { + VulkanContext::Get().Dispatch(name, b.data(), b.count(), &p, sizeof(P), groups, spec, + spec_count); } // --------------------------------------------------------------------------- @@ -152,9 +159,13 @@ void CastKernel(Queue&, Tensor& out, const Tensor& in) { Binder bind; const uint32_t in_off = bind.Add(in, "cast: in"); const uint32_t out_off = bind.Add(out, "cast: out"); - UnaryParams p{static_cast(n), DtypeCode(in.dtype), DtypeCode(out.dtype), in_off, - out_off}; - Go("vt_cast", bind, p, FlatGroupCount(n)); + // The dtype pair rides SPECIALIZATION CONSTANTS rather than push constants, so + // the per-element dtype branch is folded away at pipeline creation and each + // (src, dst) pair is its own cached pipeline. Ascending constantID order, which + // is what GetPipeline binds against the module's declared SpecIds. + const uint32_t spec[2] = {DtypeCode(in.dtype), DtypeCode(out.dtype)}; + CastParams p{static_cast(n), in_off, out_off}; + Go("vt_cast", bind, p, FlatGroupCount(n), spec, 2); } // cpu_ops.cpp:252-264 SiluAndMulKernel. diff --git a/src/vt/vulkan/vulkan_spirv.h b/src/vt/vulkan/vulkan_spirv.h index ce44a228..bdb05a5a 100644 --- a/src/vt/vulkan/vulkan_spirv.h +++ b/src/vt/vulkan/vulkan_spirv.h @@ -347,299 +347,292 @@ inline constexpr uint32_t kSpv_vt_add[] = { }; inline constexpr uint32_t kSpv_vt_cast[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001d2u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001c6u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, - 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, - 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00040047u, 0x00000169u, - 0x00000006u, 0x00000004u, 0x00030047u, 0x0000016au, 0x00000002u, 0x00050048u, 0x0000016au, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00040047u, 0x0000016cu, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000016cu, - 0x00000022u, 0x00000000u, 0x00040047u, 0x00000179u, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000017au, - 0x00000002u, 0x00040048u, 0x0000017au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000017au, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x0000017cu, 0x00000018u, 0x00040047u, 0x0000017cu, 0x00000021u, - 0x00000000u, 0x00040047u, 0x0000017cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000189u, 0x00000006u, - 0x00000002u, 0x00030047u, 0x0000018au, 0x00000002u, 0x00040048u, 0x0000018au, 0x00000000u, 0x00000018u, - 0x00050048u, 0x0000018au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000018cu, 0x00000018u, - 0x00040047u, 0x0000018cu, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000018cu, 0x00000022u, 0x00000000u, - 0x00040047u, 0x0000019fu, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001a0u, 0x00000002u, 0x00050048u, - 0x000001a0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001a2u, 0x00000021u, 0x00000003u, - 0x00040047u, 0x000001a2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001d1u, 0x0000000bu, 0x00000019u, - 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, - 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, - 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, - 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, - 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, - 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, - 0x0004002bu, 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, - 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, - 0x0004002bu, 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, - 0x0004002bu, 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, - 0x0004002bu, 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, - 0x0004002bu, 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, - 0x0004002bu, 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, - 0x0004002bu, 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, - 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, - 0x00040020u, 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, - 0x0004002bu, 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, - 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, - 0x0004002bu, 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, - 0x0004002bu, 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, - 0x0004002bu, 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, - 0x00040017u, 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, - 0x0004003bu, 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, - 0x0007001eu, 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, - 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, - 0x00000158u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000023u, 0x00000163u, 0x00000002u, 0x0003001du, - 0x00000169u, 0x00000006u, 0x0003001eu, 0x0000016au, 0x00000169u, 0x00040020u, 0x0000016bu, 0x0000000cu, - 0x0000016au, 0x0004003bu, 0x0000016bu, 0x0000016cu, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x0000016du, - 0x00000004u, 0x0003001du, 0x00000179u, 0x00000006u, 0x0003001eu, 0x0000017au, 0x00000179u, 0x00040020u, - 0x0000017bu, 0x0000000cu, 0x0000017au, 0x0004003bu, 0x0000017bu, 0x0000017cu, 0x0000000cu, 0x0004002bu, - 0x00000023u, 0x0000017du, 0x00000003u, 0x00040020u, 0x00000183u, 0x0000000cu, 0x00000006u, 0x00040015u, - 0x00000188u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000189u, 0x00000188u, 0x0003001eu, 0x0000018au, - 0x00000189u, 0x00040020u, 0x0000018bu, 0x0000000cu, 0x0000018au, 0x0004003bu, 0x0000018bu, 0x0000018cu, - 0x0000000cu, 0x00040020u, 0x00000192u, 0x0000000cu, 0x00000188u, 0x0003001du, 0x0000019fu, 0x00000188u, - 0x0003001eu, 0x000001a0u, 0x0000019fu, 0x00040020u, 0x000001a1u, 0x0000000cu, 0x000001a0u, 0x0004003bu, - 0x000001a1u, 0x000001a2u, 0x0000000cu, 0x0003002au, 0x0000002cu, 0x000001ccu, 0x0004002bu, 0x00000006u, - 0x000001cdu, 0x00000080u, 0x0004001cu, 0x000001ceu, 0x00000008u, 0x000001cdu, 0x00040020u, 0x000001cfu, - 0x00000004u, 0x000001ceu, 0x0004003bu, 0x000001cfu, 0x000001d0u, 0x00000004u, 0x0006002cu, 0x0000014eu, - 0x000001d1u, 0x000001cdu, 0x00000046u, 0x00000046u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, - 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000176u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000196u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000197u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001abu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000001bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c0u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x000001c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c6u, 0x00000007u, 0x00050041u, - 0x00000151u, 0x00000152u, 0x00000150u, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, - 0x0003003eu, 0x0000014du, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, - 0x00000158u, 0x00000159u, 0x00000157u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, - 0x000500aeu, 0x0000002cu, 0x0000015bu, 0x00000154u, 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, - 0x000400fau, 0x0000015bu, 0x0000015cu, 0x0000015du, 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, - 0x0000015du, 0x000200f9u, 0x0000015fu, 0x000200f8u, 0x0000015fu, 0x000400f6u, 0x00000161u, 0x00000162u, - 0x00000000u, 0x000200f9u, 0x00000160u, 0x000200f8u, 0x00000160u, 0x00050041u, 0x00000158u, 0x00000164u, - 0x00000157u, 0x00000163u, 0x0004003du, 0x00000006u, 0x00000165u, 0x00000164u, 0x000500aau, 0x0000002cu, - 0x00000166u, 0x00000165u, 0x00000036u, 0x000300f7u, 0x00000168u, 0x00000000u, 0x000400fau, 0x00000166u, - 0x00000167u, 0x0000019eu, 0x000200f8u, 0x00000167u, 0x00050041u, 0x00000158u, 0x0000016eu, 0x00000157u, - 0x0000016du, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000016eu, 0x000500c2u, 0x00000006u, 0x00000170u, - 0x0000016fu, 0x00000163u, 0x0004003du, 0x00000006u, 0x00000171u, 0x0000014du, 0x00050080u, 0x00000006u, - 0x00000172u, 0x00000170u, 0x00000171u, 0x00050041u, 0x00000158u, 0x00000173u, 0x00000157u, 0x00000080u, - 0x0004003du, 0x00000006u, 0x00000174u, 0x00000173u, 0x000500aau, 0x0000002cu, 0x00000175u, 0x00000174u, - 0x00000036u, 0x000300f7u, 0x00000178u, 0x00000000u, 0x000400fau, 0x00000175u, 0x00000177u, 0x00000187u, - 0x000200f8u, 0x00000177u, 0x00050041u, 0x00000158u, 0x0000017eu, 0x00000157u, 0x0000017du, 0x0004003du, - 0x00000006u, 0x0000017fu, 0x0000017eu, 0x000500c2u, 0x00000006u, 0x00000180u, 0x0000017fu, 0x00000163u, - 0x0004003du, 0x00000006u, 0x00000181u, 0x0000014du, 0x00050080u, 0x00000006u, 0x00000182u, 0x00000180u, - 0x00000181u, 0x00060041u, 0x00000183u, 0x00000184u, 0x0000017cu, 0x000000d3u, 0x00000182u, 0x0004003du, - 0x00000006u, 0x00000185u, 0x00000184u, 0x0004007cu, 0x00000008u, 0x00000186u, 0x00000185u, 0x0003003eu, - 0x00000176u, 0x00000186u, 0x000200f9u, 0x00000178u, 0x000200f8u, 0x00000187u, 0x00050041u, 0x00000158u, - 0x0000018du, 0x00000157u, 0x0000017du, 0x0004003du, 0x00000006u, 0x0000018eu, 0x0000018du, 0x000500c2u, - 0x00000006u, 0x0000018fu, 0x0000018eu, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000190u, 0x0000014du, - 0x00050080u, 0x00000006u, 0x00000191u, 0x0000018fu, 0x00000190u, 0x00060041u, 0x00000192u, 0x00000193u, - 0x0000018cu, 0x000000d3u, 0x00000191u, 0x0004003du, 0x00000188u, 0x00000194u, 0x00000193u, 0x00040071u, - 0x00000006u, 0x00000195u, 0x00000194u, 0x0003003eu, 0x00000196u, 0x00000195u, 0x00050041u, 0x00000158u, - 0x00000198u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000199u, 0x00000198u, 0x0003003eu, - 0x00000197u, 0x00000199u, 0x00060039u, 0x00000008u, 0x0000019au, 0x0000001bu, 0x00000196u, 0x00000197u, - 0x0003003eu, 0x00000176u, 0x0000019au, 0x000200f9u, 0x00000178u, 0x000200f8u, 0x00000178u, 0x0004003du, - 0x00000008u, 0x0000019bu, 0x00000176u, 0x0004007cu, 0x00000006u, 0x0000019cu, 0x0000019bu, 0x00060041u, - 0x00000183u, 0x0000019du, 0x0000016cu, 0x000000d3u, 0x00000172u, 0x0003003eu, 0x0000019du, 0x0000019cu, - 0x000200f9u, 0x00000168u, 0x000200f8u, 0x0000019eu, 0x00050041u, 0x00000158u, 0x000001a3u, 0x00000157u, - 0x0000016du, 0x0004003du, 0x00000006u, 0x000001a4u, 0x000001a3u, 0x000500c2u, 0x00000006u, 0x000001a5u, - 0x000001a4u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001a6u, 0x0000014du, 0x00050080u, 0x00000006u, - 0x000001a7u, 0x000001a5u, 0x000001a6u, 0x00050041u, 0x00000158u, 0x000001a8u, 0x00000157u, 0x00000080u, - 0x0004003du, 0x00000006u, 0x000001a9u, 0x000001a8u, 0x000500aau, 0x0000002cu, 0x000001aau, 0x000001a9u, - 0x00000036u, 0x000300f7u, 0x000001adu, 0x00000000u, 0x000400fau, 0x000001aau, 0x000001acu, 0x000001b6u, - 0x000200f8u, 0x000001acu, 0x00050041u, 0x00000158u, 0x000001aeu, 0x00000157u, 0x0000017du, 0x0004003du, - 0x00000006u, 0x000001afu, 0x000001aeu, 0x000500c2u, 0x00000006u, 0x000001b0u, 0x000001afu, 0x00000163u, - 0x0004003du, 0x00000006u, 0x000001b1u, 0x0000014du, 0x00050080u, 0x00000006u, 0x000001b2u, 0x000001b0u, - 0x000001b1u, 0x00060041u, 0x00000183u, 0x000001b3u, 0x0000017cu, 0x000000d3u, 0x000001b2u, 0x0004003du, - 0x00000006u, 0x000001b4u, 0x000001b3u, 0x0004007cu, 0x00000008u, 0x000001b5u, 0x000001b4u, 0x0003003eu, - 0x000001abu, 0x000001b5u, 0x000200f9u, 0x000001adu, 0x000200f8u, 0x000001b6u, 0x00050041u, 0x00000158u, - 0x000001b7u, 0x00000157u, 0x0000017du, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, 0x000500c2u, - 0x00000006u, 0x000001b9u, 0x000001b8u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001bau, 0x0000014du, - 0x00050080u, 0x00000006u, 0x000001bbu, 0x000001b9u, 0x000001bau, 0x00060041u, 0x00000192u, 0x000001bcu, - 0x0000018cu, 0x000000d3u, 0x000001bbu, 0x0004003du, 0x00000188u, 0x000001bdu, 0x000001bcu, 0x00040071u, - 0x00000006u, 0x000001beu, 0x000001bdu, 0x0003003eu, 0x000001bfu, 0x000001beu, 0x00050041u, 0x00000158u, - 0x000001c1u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001c2u, 0x000001c1u, 0x0003003eu, - 0x000001c0u, 0x000001c2u, 0x00060039u, 0x00000008u, 0x000001c3u, 0x0000001bu, 0x000001bfu, 0x000001c0u, - 0x0003003eu, 0x000001abu, 0x000001c3u, 0x000200f9u, 0x000001adu, 0x000200f8u, 0x000001adu, 0x0004003du, - 0x00000008u, 0x000001c5u, 0x000001abu, 0x0003003eu, 0x000001c4u, 0x000001c5u, 0x00050041u, 0x00000158u, - 0x000001c7u, 0x00000157u, 0x00000163u, 0x0004003du, 0x00000006u, 0x000001c8u, 0x000001c7u, 0x0003003eu, - 0x000001c6u, 0x000001c8u, 0x00060039u, 0x00000006u, 0x000001c9u, 0x00000020u, 0x000001c4u, 0x000001c6u, - 0x00040071u, 0x00000188u, 0x000001cau, 0x000001c9u, 0x00060041u, 0x00000192u, 0x000001cbu, 0x000001a2u, - 0x000000d3u, 0x000001a7u, 0x0003003eu, 0x000001cbu, 0x000001cau, 0x000200f9u, 0x00000168u, 0x000200f8u, - 0x00000168u, 0x000200f9u, 0x00000162u, 0x000200f8u, 0x00000162u, 0x000400fau, 0x000001ccu, 0x0000015fu, - 0x00000161u, 0x000200f8u, 0x00000161u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, - 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, - 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, - 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, - 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, - 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, - 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, - 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, - 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, - 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, - 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, - 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, - 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, - 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, - 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, - 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, - 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, - 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, - 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, - 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, - 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, - 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, - 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, - 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, - 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, - 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, - 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, - 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, - 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, - 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, - 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, - 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, - 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, - 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, - 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, - 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, - 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, - 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, - 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, - 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, - 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, - 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, - 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, - 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, - 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, - 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, - 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, - 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, - 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, - 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, - 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, - 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, - 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, - 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, - 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, - 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, - 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, - 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, - 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, - 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, - 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, - 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, - 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, - 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, - 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, - 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, - 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, - 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, - 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, - 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, - 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, - 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, - 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, - 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, - 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, - 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, - 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, - 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, - 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, - 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, - 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, - 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, - 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, - 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, - 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, - 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, - 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, - 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, - 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, - 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, - 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, - 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, - 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, - 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, - 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, - 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, - 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, - 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, - 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, - 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, - 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, - 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, - 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, - 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, - 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, - 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, - 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, - 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, - 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, - 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, - 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, - 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, - 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, - 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, - 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, - 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, - 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, - 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, - 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, - 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, - 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, - 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, - 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, - 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, - 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, - 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, - 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, - 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, - 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, - 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, - 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, - 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, - 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, - 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, - 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, - 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, - 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, - 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, - 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, - 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, - 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, - 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, - 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, - 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, - 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, - 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, - 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, - 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, - 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, - 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, - 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, - 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, - 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, - 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, - 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, - 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, - 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, - 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, - 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, - 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, - 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, - 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, - 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, - 0x0000014au, 0x00010038u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000163u, 0x00000001u, 0x00000001u, + 0x00040047u, 0x00000167u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000168u, 0x00000002u, 0x00050048u, + 0x00000168u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000016au, 0x00000021u, 0x00000002u, + 0x00040047u, 0x0000016au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000171u, 0x00000001u, 0x00000000u, + 0x00040047u, 0x00000176u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000177u, 0x00000002u, 0x00040048u, + 0x00000177u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000177u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00030047u, 0x00000179u, 0x00000018u, 0x00040047u, 0x00000179u, 0x00000021u, 0x00000000u, 0x00040047u, + 0x00000179u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000185u, 0x00000006u, 0x00000002u, 0x00030047u, + 0x00000186u, 0x00000002u, 0x00040048u, 0x00000186u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000186u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000188u, 0x00000018u, 0x00040047u, 0x00000188u, + 0x00000021u, 0x00000001u, 0x00040047u, 0x00000188u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000199u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x0000019au, 0x00000002u, 0x00050048u, 0x0000019au, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00040047u, 0x0000019cu, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000019cu, + 0x00000022u, 0x00000000u, 0x00040047u, 0x000001c5u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, + 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, + 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, + 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, + 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, + 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, 0x00000020u, 0x00000001u, + 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, 0x0004002bu, 0x00000006u, + 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, 0x0004002bu, 0x00000006u, + 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, 0x0004002bu, 0x00000006u, + 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, 0x0004002bu, 0x00000006u, + 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, 0x0004002bu, 0x00000023u, + 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, 0x0004002bu, 0x00000006u, + 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, 0x0004002bu, 0x00000006u, + 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, 0x0004002bu, 0x00000006u, + 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, 0x0004002bu, 0x00000006u, + 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, 0x00040020u, 0x000000abu, + 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, 0x0004002bu, 0x00000023u, + 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, 0x0004002bu, 0x00000006u, + 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, 0x0004002bu, 0x00000023u, + 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, 0x0004002bu, 0x00000006u, + 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, 0x0004002bu, 0x00000006u, + 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, 0x00040017u, 0x0000014eu, + 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, 0x0004003bu, 0x0000014fu, + 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, 0x0005001eu, 0x00000155u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, + 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, 0x00000006u, 0x00040032u, + 0x00000006u, 0x00000163u, 0x00000000u, 0x00060034u, 0x0000002cu, 0x00000164u, 0x000000aau, 0x00000163u, + 0x00000036u, 0x0003001du, 0x00000167u, 0x00000006u, 0x0003001eu, 0x00000168u, 0x00000167u, 0x00040020u, + 0x00000169u, 0x0000000cu, 0x00000168u, 0x0004003bu, 0x00000169u, 0x0000016au, 0x0000000cu, 0x0004002bu, + 0x00000023u, 0x0000016bu, 0x00000002u, 0x00040032u, 0x00000006u, 0x00000171u, 0x00000000u, 0x00060034u, + 0x0000002cu, 0x00000172u, 0x000000aau, 0x00000171u, 0x00000036u, 0x0003001du, 0x00000176u, 0x00000006u, + 0x0003001eu, 0x00000177u, 0x00000176u, 0x00040020u, 0x00000178u, 0x0000000cu, 0x00000177u, 0x0004003bu, + 0x00000178u, 0x00000179u, 0x0000000cu, 0x00040020u, 0x0000017fu, 0x0000000cu, 0x00000006u, 0x00040015u, + 0x00000184u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000185u, 0x00000184u, 0x0003001eu, 0x00000186u, + 0x00000185u, 0x00040020u, 0x00000187u, 0x0000000cu, 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, + 0x0000000cu, 0x00040020u, 0x0000018eu, 0x0000000cu, 0x00000184u, 0x0003001du, 0x00000199u, 0x00000184u, + 0x0003001eu, 0x0000019au, 0x00000199u, 0x00040020u, 0x0000019bu, 0x0000000cu, 0x0000019au, 0x0004003bu, + 0x0000019bu, 0x0000019cu, 0x0000000cu, 0x00060034u, 0x0000002cu, 0x000001a2u, 0x000000aau, 0x00000171u, + 0x00000036u, 0x0003002au, 0x0000002cu, 0x000001c0u, 0x0004002bu, 0x00000006u, 0x000001c1u, 0x00000080u, + 0x0004001cu, 0x000001c2u, 0x00000008u, 0x000001c1u, 0x00040020u, 0x000001c3u, 0x00000004u, 0x000001c2u, + 0x0004003bu, 0x000001c3u, 0x000001c4u, 0x00000004u, 0x0006002cu, 0x0000014eu, 0x000001c5u, 0x000001c1u, + 0x00000046u, 0x00000046u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, + 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000173u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000192u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000193u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b7u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b8u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001bau, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bcu, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, + 0x00000150u, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, + 0x00000153u, 0x0004003du, 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, + 0x00000157u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x000500aeu, 0x0000002cu, + 0x0000015bu, 0x00000154u, 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, + 0x0000015cu, 0x0000015du, 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, 0x0000015du, 0x000200f9u, + 0x0000015fu, 0x000200f8u, 0x0000015fu, 0x000400f6u, 0x00000161u, 0x00000162u, 0x00000000u, 0x000200f9u, + 0x00000160u, 0x000200f8u, 0x00000160u, 0x000300f7u, 0x00000166u, 0x00000000u, 0x000400fau, 0x00000164u, + 0x00000165u, 0x00000198u, 0x000200f8u, 0x00000165u, 0x00050041u, 0x00000158u, 0x0000016cu, 0x00000157u, + 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016du, 0x0000016cu, 0x000500c2u, 0x00000006u, 0x0000016eu, + 0x0000016du, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000014du, 0x00050080u, 0x00000006u, + 0x00000170u, 0x0000016eu, 0x0000016fu, 0x000300f7u, 0x00000175u, 0x00000000u, 0x000400fau, 0x00000172u, + 0x00000174u, 0x00000183u, 0x000200f8u, 0x00000174u, 0x00050041u, 0x00000158u, 0x0000017au, 0x00000157u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x0000017bu, 0x0000017au, 0x000500c2u, 0x00000006u, 0x0000017cu, + 0x0000017bu, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000017du, 0x0000014du, 0x00050080u, 0x00000006u, + 0x0000017eu, 0x0000017cu, 0x0000017du, 0x00060041u, 0x0000017fu, 0x00000180u, 0x00000179u, 0x000000d3u, + 0x0000017eu, 0x0004003du, 0x00000006u, 0x00000181u, 0x00000180u, 0x0004007cu, 0x00000008u, 0x00000182u, + 0x00000181u, 0x0003003eu, 0x00000173u, 0x00000182u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000183u, + 0x00050041u, 0x00000158u, 0x00000189u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000018au, + 0x00000189u, 0x000500c2u, 0x00000006u, 0x0000018bu, 0x0000018au, 0x00000080u, 0x0004003du, 0x00000006u, + 0x0000018cu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000018du, 0x0000018bu, 0x0000018cu, 0x00060041u, + 0x0000018eu, 0x0000018fu, 0x00000188u, 0x000000d3u, 0x0000018du, 0x0004003du, 0x00000184u, 0x00000190u, + 0x0000018fu, 0x00040071u, 0x00000006u, 0x00000191u, 0x00000190u, 0x0003003eu, 0x00000192u, 0x00000191u, + 0x0003003eu, 0x00000193u, 0x00000171u, 0x00060039u, 0x00000008u, 0x00000194u, 0x0000001bu, 0x00000192u, + 0x00000193u, 0x0003003eu, 0x00000173u, 0x00000194u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000175u, + 0x0004003du, 0x00000008u, 0x00000195u, 0x00000173u, 0x0004007cu, 0x00000006u, 0x00000196u, 0x00000195u, + 0x00060041u, 0x0000017fu, 0x00000197u, 0x0000016au, 0x000000d3u, 0x00000170u, 0x0003003eu, 0x00000197u, + 0x00000196u, 0x000200f9u, 0x00000166u, 0x000200f8u, 0x00000198u, 0x00050041u, 0x00000158u, 0x0000019du, + 0x00000157u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000019eu, 0x0000019du, 0x000500c2u, 0x00000006u, + 0x0000019fu, 0x0000019eu, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001a0u, 0x0000014du, 0x00050080u, + 0x00000006u, 0x000001a1u, 0x0000019fu, 0x000001a0u, 0x000300f7u, 0x000001a5u, 0x00000000u, 0x000400fau, + 0x000001a2u, 0x000001a4u, 0x000001aeu, 0x000200f8u, 0x000001a4u, 0x00050041u, 0x00000158u, 0x000001a6u, + 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x000500c2u, 0x00000006u, + 0x000001a8u, 0x000001a7u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x000001a9u, 0x0000014du, 0x00050080u, + 0x00000006u, 0x000001aau, 0x000001a8u, 0x000001a9u, 0x00060041u, 0x0000017fu, 0x000001abu, 0x00000179u, + 0x000000d3u, 0x000001aau, 0x0004003du, 0x00000006u, 0x000001acu, 0x000001abu, 0x0004007cu, 0x00000008u, + 0x000001adu, 0x000001acu, 0x0003003eu, 0x000001a3u, 0x000001adu, 0x000200f9u, 0x000001a5u, 0x000200f8u, + 0x000001aeu, 0x00050041u, 0x00000158u, 0x000001afu, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x000001b0u, 0x000001afu, 0x000500c2u, 0x00000006u, 0x000001b1u, 0x000001b0u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x000001b2u, 0x0000014du, 0x00050080u, 0x00000006u, 0x000001b3u, 0x000001b1u, 0x000001b2u, + 0x00060041u, 0x0000018eu, 0x000001b4u, 0x00000188u, 0x000000d3u, 0x000001b3u, 0x0004003du, 0x00000184u, + 0x000001b5u, 0x000001b4u, 0x00040071u, 0x00000006u, 0x000001b6u, 0x000001b5u, 0x0003003eu, 0x000001b7u, + 0x000001b6u, 0x0003003eu, 0x000001b8u, 0x00000171u, 0x00060039u, 0x00000008u, 0x000001b9u, 0x0000001bu, + 0x000001b7u, 0x000001b8u, 0x0003003eu, 0x000001a3u, 0x000001b9u, 0x000200f9u, 0x000001a5u, 0x000200f8u, + 0x000001a5u, 0x0004003du, 0x00000008u, 0x000001bbu, 0x000001a3u, 0x0003003eu, 0x000001bau, 0x000001bbu, + 0x0003003eu, 0x000001bcu, 0x00000163u, 0x00060039u, 0x00000006u, 0x000001bdu, 0x00000020u, 0x000001bau, + 0x000001bcu, 0x00040071u, 0x00000184u, 0x000001beu, 0x000001bdu, 0x00060041u, 0x0000018eu, 0x000001bfu, + 0x0000019cu, 0x000000d3u, 0x000001a1u, 0x0003003eu, 0x000001bfu, 0x000001beu, 0x000200f9u, 0x00000166u, + 0x000200f8u, 0x00000166u, 0x000200f9u, 0x00000162u, 0x000200f8u, 0x00000162u, 0x000400fau, 0x000001c0u, + 0x0000015fu, 0x00000161u, 0x000200f8u, 0x00000161u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, + 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, + 0x0004003du, 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, + 0x00000024u, 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, + 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000042u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, + 0x0000002bu, 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, + 0x00000029u, 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, + 0x00000030u, 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, + 0x00000031u, 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, + 0x000500c7u, 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, + 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, + 0x00000038u, 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, + 0x000400fau, 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, + 0x0000003bu, 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, + 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, + 0x0000003fu, 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, + 0x00000029u, 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, + 0x00000047u, 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, + 0x0003003eu, 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, + 0x00000006u, 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, + 0x000500c2u, 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, + 0x0000004cu, 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, + 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, + 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, + 0x00000006u, 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, + 0x000500c4u, 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, + 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, + 0x00000057u, 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, + 0x0000005au, 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, + 0x0000005cu, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, + 0x00000055u, 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, + 0x00000000u, 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, + 0x00000006u, 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, + 0x0004003du, 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, + 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, + 0x00000069u, 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, + 0x0000006bu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, + 0x0000006eu, 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, + 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, + 0x00000036u, 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, + 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, + 0x00000074u, 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, + 0x00000036u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, + 0x00000000u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, + 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, + 0x0000007fu, 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, + 0x00000078u, 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, + 0x00000081u, 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, + 0x00000076u, 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, + 0x00000084u, 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, + 0x00000079u, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, + 0x00000085u, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, + 0x00000050u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, + 0x00000088u, 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, + 0x00000006u, 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, + 0x000500c4u, 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, + 0x0000008du, 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, + 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, + 0x00000094u, 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, + 0x00000006u, 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, + 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, + 0x00000099u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, + 0x00000008u, 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, + 0x0004003bu, 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, + 0x0004003du, 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, + 0x0003003eu, 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, + 0x00000006u, 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, + 0x00000052u, 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, + 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, + 0x000000a8u, 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, + 0x000000a6u, 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, + 0x000000aeu, 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, + 0x000000acu, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, + 0x000000b5u, 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, + 0x000000b6u, 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, + 0x000000b9u, 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, + 0x0004003du, 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, + 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, + 0x000000bdu, 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, + 0x000000c6u, 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, + 0x00000006u, 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, + 0x000000c4u, 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, + 0x0003003eu, 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, + 0x00000006u, 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, + 0x000200feu, 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, + 0x000500afu, 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, + 0x000400fau, 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, + 0x000000cfu, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, + 0x000000d0u, 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, + 0x0000002cu, 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, + 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, + 0x000000acu, 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, + 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, + 0x00000006u, 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, + 0x00000006u, 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, + 0x0003003eu, 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, + 0x00000023u, 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, + 0x0003003eu, 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, + 0x00000006u, 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, + 0x0003003eu, 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, + 0x00000006u, 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, + 0x00050082u, 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, + 0x000000ebu, 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, + 0x000000e1u, 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, + 0x000000f3u, 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, + 0x000000f4u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, + 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, + 0x000000f9u, 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, + 0x0004003du, 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, + 0x000500aau, 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, + 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, + 0x000000ffu, 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, + 0x0000002cu, 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, + 0x000700f5u, 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, + 0x000000f9u, 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, + 0x00000102u, 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, + 0x00000105u, 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, + 0x00000006u, 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, + 0x00000105u, 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, + 0x00000006u, 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, + 0x000200feu, 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, + 0x0004007cu, 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, + 0x00000057u, 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, + 0x00000110u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, + 0x0000010cu, 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, + 0x00000116u, 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, + 0x00000117u, 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, + 0x0000002cu, 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, + 0x0000011bu, 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, + 0x000500aau, 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, + 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, + 0x00000121u, 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, + 0x0000002cu, 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, + 0x000700f5u, 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, + 0x0000011cu, 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, + 0x00000124u, 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, + 0x00000127u, 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, + 0x00000006u, 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, + 0x00000127u, 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, + 0x00000006u, 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, + 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, + 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, + 0x0004003bu, 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, + 0x000500aau, 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, + 0x000400fau, 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, + 0x00000135u, 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, + 0x00000013u, 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, + 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, + 0x00050039u, 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, + 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, + 0x000200feu, 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, + 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, + 0x0004003bu, 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, + 0x000500aau, 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, + 0x000400fau, 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, + 0x00000144u, 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, + 0x00000016u, 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, + 0x00000146u, 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, + 0x00050039u, 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, + 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, + 0x000200feu, 0x0000014au, 0x00010038u, }; inline constexpr uint32_t kSpv_vt_fused_chain[] = { @@ -3468,6 +3461,10 @@ inline constexpr uint32_t kSpv_vt_silu_and_mul[] = { 0x000200feu, 0x00000156u, 0x00010038u, }; +inline constexpr uint32_t kSpecIds_vt_cast[] = { + 0u, 1u, +}; + // Name -> SPIR-V module. The NAME is the shader's file stem and is also the // key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp). // @@ -3486,7 +3483,7 @@ struct SpirvModule { inline constexpr SpirvModule kSpirvModules[] = { {"vt_add", kSpv_vt_add, sizeof(kSpv_vt_add) / sizeof(uint32_t), nullptr, 0}, - {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t), nullptr, 0}, + {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t), kSpecIds_vt_cast, 2}, {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t), nullptr, 0}, {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py index f6b42311..f774ea3c 100644 --- a/tests/scripts/test_gen_vulkan_spirv.py +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -78,19 +78,34 @@ def test_module_table_carries_the_spec_id_columns(self): f"SpirvModule is missing {field!r}; " f"re-run scripts/gen-vulkan-spirv.py") - def test_no_committed_shader_declares_a_constant_yet(self): - """None of the W0 shaders has a variant axis, so none declares a SpecId. + def test_vt_cast_declares_its_dtype_pair(self): + """vt_cast is the backend's first variant axis: src and dst dtype. - Stated as a fact so the first shader that DOES take one flips this test - and its author is forced to supply matching values at the dispatch. The - workgroup size is deliberately not such a constant: local_size_x_id emits - LocalSize 1 1 1 at the vulkan1.1 target (see vt_common.glsl). + One committed module serves every (src, dst) pair, specialized at pipeline + creation, instead of llama.cpp's module-per-#define. The workgroup size is + deliberately NOT such a constant: local_size_x_id emits LocalSize 1 1 1 at + the vulkan1.1 target (see vt_common.glsl). """ header = (ROOT / "src/vt/vulkan/vulkan_spirv.h").read_text() - self.assertTrue("kSpecIds_" not in header, - "a committed shader now declares a specialization " - "constant; update this test and pass its value at the " - "GetPipeline call") + self.assertTrue("kSpecIds_vt_cast[]" in header, + "vt_cast no longer declares specialization constants; " + "re-run scripts/gen-vulkan-spirv.py") + + def test_other_shaders_declare_none_yet(self): + """Stated as a fact so the next shader to take a constant flips this test. + + Whoever adds one is then forced to supply matching values at its dispatch, + which GetPipeline checks by count against the declared SpecIds. + """ + header = (ROOT / "src/vt/vulkan/vulkan_spirv.h").read_text() + for src in sorted((ROOT / "src/vt/vulkan/shaders").glob("*.comp")): + if src.stem == "vt_cast": + continue + with self.subTest(shader=src.name): + self.assertTrue( + f"kSpecIds_{src.stem}[]" not in header, + f"{src.name} now declares a specialization constant; update " + f"this test and pass its value at the dispatch") if __name__ == "__main__": diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index 8bef542d..b3147016 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -86,17 +86,72 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const for (size_t i = 1; i < m.spec_id_count; ++i) { CHECK(m.spec_ids[i - 1] < m.spec_ids[i]); } - // TODAY every module declares ZERO specialization constants: none of the W0 - // shaders has a variant axis. This asserts that as a fact rather than leaving - // it implied, so the first shader that DOES take a constant (a dtype, a quant - // format, a coopmat tier) flips this loudly and whoever adds it is forced to - // supply the matching values at the GetPipeline call. + // vt_cast is the backend's FIRST variant axis: constants 0 and 1 are its + // source and destination dtype, so one module serves every (src, dst) pair + // instead of a module per pair. Every other W0 shader still declares none. // - // The workgroup size is deliberately NOT that constant — see the measured + // The workgroup size is deliberately NOT such a constant — see the measured // reason in src/vt/vulkan/shaders/vt_common.glsl (local_size_x_id emits // LocalSize 1 1 1 at the vulkan1.1 target and computes ~1/128 of the tensor). - CHECK(m.spec_id_count == 0); + if (std::strcmp(m.name, "vt_cast") == 0) { + REQUIRE(m.spec_id_count == 2); + CHECK(m.spec_ids[0] == 0u); + CHECK(m.spec_ids[1] == 1u); + } else { + CHECK(m.spec_id_count == 0); + } + } +} + +TEST_CASE("Vulkan specializes pipelines per dtype pair and caches them separately") { + if (!VulkanPresent()) return; + auto& ctx = vt::vulkan::VulkanContext::Get(); + Backend& vk = vt::GetBackend(DeviceType::kVULKAN); + Queue q = vk.CreateQueue(); + const Device d{DeviceType::kVULKAN, 0}; + + // Two DIFFERENT dtype pairs through the same committed module. The results + // being right is necessary but not sufficient: a specialization that silently + // did nothing would also produce right results here, because the shader's + // defaults happen to be f32->f32. What proves the mechanism engaged is that the + // pipeline cache GREW BY TWO — one specialized pipeline per pair. + const size_t before = ctx.PipelineCacheSize(); + + const int64_t n = 300; // not a multiple of the workgroup size + std::vector src(n); + for (int64_t i = 0; i < n; ++i) src[i] = static_cast(i) - 150.5f; + + auto* f32_in = static_cast(vk.Alloc(n * sizeof(float))); + auto* bf16_mid = static_cast(vk.Alloc(n * sizeof(uint16_t))); + auto* f32_out = static_cast(vk.Alloc(n * sizeof(float))); + vk.Copy(q, f32_in, src.data(), n * sizeof(float)); + + Tensor t_f32_in = Tensor::Contiguous(f32_in, vt::DType::kF32, d, {n}); + Tensor t_bf16 = Tensor::Contiguous(bf16_mid, vt::DType::kBF16, d, {n}); + Tensor t_f32_out = Tensor::Contiguous(f32_out, vt::DType::kF32, d, {n}); + + vt::CastBf16(q, t_bf16, t_f32_in); // f32 -> bf16 : one specialization + vt::CastF32(q, t_f32_out, t_bf16); // bf16 -> f32 : a different one + vk.Synchronize(q); + + CHECK(ctx.PipelineCacheSize() == before + 2); + + // The round trip must be EXACTLY the CPU codec's, so this stays in the + // bit-exact tier rather than the NMSE tier: bf16 keeps the high 16 bits under + // round-to-nearest-even, so a value that survives the narrowing must come back + // identical. + std::vector back(n); + vk.Copy(q, back.data(), f32_out, n * sizeof(float)); + vk.Synchronize(q); + for (int64_t i = 0; i < n; ++i) { + CAPTURE(i); + CHECK(back[i] == vt::BF16ToF32(vt::F32ToBF16(src[i]))); } + + vk.Free(f32_in); + vk.Free(bf16_mid); + vk.Free(f32_out); + vk.DestroyQueue(q); } TEST_CASE("Vulkan backend is registered on a Vulkan-capable host") { From 196ea46f07cfdc7ab143929f118f4a0b4fa26f22 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 21:46:54 +0000 Subject: [PATCH 07/17] refactor(vulkan): emit SPIR-V words into a .cpp, leaving declarations in the header At 7 modules the generated header was 3,487 lines and two TUs included it. At the target shader surface it is megabytes of constexpr array initializer that every includer re-parses, and every regeneration is a huge header diff. The words now live in a generated vulkan_spirv.cpp; the header carries the struct plus extern declarations and is 55 lines. Adding shaders now costs ONE TU's compile time instead of all of them. Doing this at 7 modules is cheap; at 100 it is not. Consumers move from sizeof/sizeof to the generated kSpirvModuleCount, since an extern array has no bound at the use site, and --check now covers both files. FIXES A LATENT BUG INTRODUCED BY THE SPECIALIZATION WORK. The descriptor pool was sized maxSets = one per MODULE, which was right when a module meant a pipeline. It no longer does: vt_cast alone reaches one pipeline per (src, dst) dtype pair, each allocating its own descriptor set, so the pool would have been exhausted by the Nth specialization and failed inside vkAllocateDescriptorSets -- a bare VkResult a long way from its cause. The pool is now sized with explicit specialization headroom and that allocation names the pipeline and the likely reason. The split is asserted, not assumed: a test fails if the word arrays reappear in the header, which would otherwise be invisible until compile times grew. Clean -Werror build with Vulkan ON: exit 0, 0 warnings. Vulkan gate 10/10 (405 assertions), cross-device 6/6 (73), generator suite 9/9, --check green on both generated files. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- CMakeLists.txt | 6 +- scripts/gen-vulkan-spirv.py | 139 +- src/vt/vulkan/vulkan_context.cpp | 21 +- src/vt/vulkan/vulkan_spirv.cpp | 3484 +++++++++++++++++++++++ src/vt/vulkan/vulkan_spirv.h | 3487 +----------------------- tests/scripts/test_gen_vulkan_spirv.py | 28 +- tests/vt/test_vulkan_backend.cpp | 16 +- 7 files changed, 3652 insertions(+), 3529 deletions(-) create mode 100644 src/vt/vulkan/vulkan_spirv.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index fec00979..c7f437f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -920,7 +920,11 @@ if(VLLM_CPP_VULKAN) src/vt/vulkan/vulkan_loader.cpp src/vt/vulkan/vulkan_context.cpp src/vt/vulkan/vulkan_backend.cpp - src/vt/vulkan/vulkan_ops.cpp) + src/vt/vulkan/vulkan_ops.cpp + # GENERATED by scripts/gen-vulkan-spirv.py, alongside vulkan_spirv.h. The + # SPIR-V words are here rather than in the header so that adding shaders costs + # ONE TU's compile time instead of every TU that includes the table. + src/vt/vulkan/vulkan_spirv.cpp) target_link_libraries(vllm PUBLIC ${CMAKE_DL_LIBS}) endif() if(VLLM_CPP_CUDA) diff --git a/scripts/gen-vulkan-spirv.py b/scripts/gen-vulkan-spirv.py index 8f175a4a..e7207e54 100755 --- a/scripts/gen-vulkan-spirv.py +++ b/scripts/gen-vulkan-spirv.py @@ -47,6 +47,7 @@ REPO = pathlib.Path(__file__).resolve().parent.parent SHADER_DIR = REPO / "src" / "vt" / "vulkan" / "shaders" OUT_HEADER = REPO / "src" / "vt" / "vulkan" / "vulkan_spirv.h" +OUT_SOURCE = REPO / "src" / "vt" / "vulkan" / "vulkan_spirv.cpp" # Vulkan 1.1 is the floor the backend requires (src/vt/vulkan/vulkan_context.cpp). TARGET_ENV = "vulkan1.1" @@ -132,24 +133,33 @@ def spec_ids(blob: bytes) -> list[int]: return sorted(ids) -def render(blobs: dict[str, bytes], version: str) -> str: - lines: list[str] = [] +BANNER = [ + "// GENERATED FILE - DO NOT EDIT BY HAND.", + "// Regenerate with: scripts/gen-vulkan-spirv.py", + "//", + "// SPIR-V for the Vulkan backend's compute kernels (BACKEND-VULKAN),", + "// compiled from the GLSL in src/vt/vulkan/shaders/*.comp.", + "//", + "// WHY THE SPIR-V IS COMMITTED rather than compiled by the build, as", + "// llama.cpp's vulkan-shaders-gen does at build time: the build then needs NO", + "// shader toolchain on any machine, which is hermetic everywhere including CI", + "// and the aarch64 gate box. libshaderc would also be a compiled third-party", + "// dependency, which .agents/discipline.md forbids. The cost is an obligation", + "// to re-run this generator when a .comp changes, which the", + "// vulkan-spirv-freshness CI job enforces.", + "//", + "// WHY THE WORDS LIVE IN THE .cpp AND NOT THE HEADER (VK-A1): at the target", + "// shader surface the blobs are megabytes of array initializer, and anything in", + "// the header is re-parsed by every including TU. The header carries the struct", + "// and extern declarations; vulkan_spirv.cpp carries the data, so adding shaders", + "// costs one TU's compile time rather than all of them.", + "//", +] + + +def render_header(blobs: dict[str, bytes], version: str) -> str: + lines = list(BANNER) add = lines.append - add("// GENERATED FILE — DO NOT EDIT BY HAND.") - add("// Regenerate with: scripts/gen-vulkan-spirv.py") - add("//") - add("// SPIR-V for the Vulkan backend's compute kernels (BACKEND-VULKAN, W0),") - add("// compiled from the GLSL in src/vt/vulkan/shaders/*.comp.") - add("//") - add("// WHY THE SPIR-V IS COMMITTED rather than compiled by the build, as") - add("// llama.cpp's vulkan-shaders-gen does at build time: neither of our boxes") - add("// has a GLSL compiler (no glslc/glslangValidator/libshaderc, no sudo), and") - add("// libshaderc would be a compiled third-party dependency, which") - add("// .agents/discipline.md forbids. Committing the SPIR-V makes the build") - add("// hermetic everywhere — including CI and the aarch64 gate box — at the cost") - add("// of re-running the generator when a .comp changes. See the generator's") - add("// docstring for the full rationale.") - add("//") add(f"// Produced by: {version}") add(f"// Target environment: {TARGET_ENV}") add("#ifndef VT_VULKAN_VULKAN_SPIRV_H_") @@ -160,10 +170,49 @@ def render(blobs: dict[str, bytes], version: str) -> str: add("") add("namespace vt::vulkan {") add("") + add("// Name -> SPIR-V module. The NAME is the shader's file stem and is also the") + add("// key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp).") + add("//") + add("// spec_ids lists the SPECIALIZATION CONSTANT IDs the module declares, parsed") + add("// from its OpDecorate SpecId instructions and sorted ascending. The host") + add("// passes specialization values BY ID, and Vulkan SILENTLY IGNORES a map entry") + add("// whose ID the module does not declare - so without this table a host/shader") + add("// drift produces WRONG NUMBERS instead of a clean failure.") + add("struct SpirvModule {") + add(" const char* name;") + add(" const uint32_t* words;") + add(" size_t word_count;") + add(" const uint32_t* spec_ids;") + add(" size_t spec_id_count;") + add("};") + add("") + add("// DEFINED IN vulkan_spirv.cpp. The array is `extern` and therefore of unknown") + add("// bound here, so kSpirvModuleCount is the ONLY way to size it - use it rather") + add("// than sizeof/sizeof.") + add("extern const SpirvModule kSpirvModules[];") + add("extern const size_t kSpirvModuleCount;") + add("") + add("} // namespace vt::vulkan") + add("") + add("#endif // VT_VULKAN_VULKAN_SPIRV_H_") + return "\n".join(lines) + "\n" + + +def render_source(blobs: dict[str, bytes], version: str) -> str: + lines = list(BANNER) + add = lines.append + add(f"// Produced by: {version}") + add(f"// Target environment: {TARGET_ENV}") + add("") + add('#include "vulkan_spirv.h"') + add("") + add("namespace vt::vulkan {") + add("namespace {") + add("") for name in sorted(blobs): words = [int.from_bytes(blobs[name][i:i + 4], "little") for i in range(0, len(blobs[name]), 4)] - add(f"inline constexpr uint32_t kSpv_{name}[] = {{") + add(f"constexpr uint32_t kSpv_{name}[] = {{") for i in range(0, len(words), 8): chunk = ", ".join(f"0x{w:08x}u" for w in words[i:i + 8]) add(f" {chunk},") @@ -172,45 +221,35 @@ def render(blobs: dict[str, bytes], version: str) -> str: for name in sorted(blobs): ids = spec_ids(blobs[name]) if ids: - add(f"inline constexpr uint32_t kSpecIds_{name}[] = {{") + add(f"constexpr uint32_t kSpecIds_{name}[] = {{") add(" " + ", ".join(f"{i}u" for i in ids) + ",") add("};") add("") - add("// Name -> SPIR-V module. The NAME is the shader's file stem and is also the") - add("// key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp).") - add("//") - add("// spec_ids lists the SPECIALIZATION CONSTANT IDs the module declares, parsed") - add("// from its OpDecorate SpecId instructions and sorted ascending. The host passes") - add("// specialization values BY ID, and Vulkan SILENTLY IGNORES a map entry whose ID") - add("// the module does not declare — so without this table a host/shader drift") - add("// produces WRONG NUMBERS instead of a clean failure.") - add("struct SpirvModule {") - add(" const char* name;") - add(" const uint32_t* words;") - add(" size_t word_count;") - add(" const uint32_t* spec_ids;") - add(" size_t spec_id_count;") - add("};") + add("} // namespace") add("") - add("inline constexpr SpirvModule kSpirvModules[] = {") + add("const SpirvModule kSpirvModules[] = {") for name in sorted(blobs): ids = spec_ids(blobs[name]) idp = f"kSpecIds_{name}" if ids else "nullptr" add(f' {{"{name}", kSpv_{name}, sizeof(kSpv_{name}) / sizeof(uint32_t), ' f'{idp}, {len(ids)}}},') add("};") + add("const size_t kSpirvModuleCount = sizeof(kSpirvModules) / sizeof(kSpirvModules[0]);") add("") add("} // namespace vt::vulkan") - add("") - add("#endif // VT_VULKAN_VULKAN_SPIRV_H_") return "\n".join(lines) + "\n" +def strip_version(s: str) -> str: + """Drop the compiler-version line, which legitimately differs per machine.""" + return "\n".join(l for l in s.splitlines() if not l.startswith("// Produced by:")) + + def main() -> None: ap = argparse.ArgumentParser() ap.add_argument("--compiler", default=None) ap.add_argument("--check", action="store_true", - help="fail if the committed header is stale instead of rewriting it") + help="fail if the committed artifacts are stale instead of rewriting them") args = ap.parse_args() cc = find_compiler(args.compiler) @@ -220,22 +259,24 @@ def main() -> None: sys.exit(f"no shaders found in {SHADER_DIR}") blobs = {src.stem: compile_one(cc, src) for src in sources} - text = render(blobs, version) + outputs = ((OUT_HEADER, render_header(blobs, version)), + (OUT_SOURCE, render_source(blobs, version))) if args.check: - current = OUT_HEADER.read_text() if OUT_HEADER.exists() else "" - # The compiler-version line legitimately differs between machines, so - # compare everything else. - def strip_version(s: str) -> str: - return "\n".join(l for l in s.splitlines() if not l.startswith("// Produced by:")) - if strip_version(current) != strip_version(text): - sys.exit("vulkan_spirv.h is STALE — re-run scripts/gen-vulkan-spirv.py") - print("vulkan_spirv.h is up to date") + stale = [path.relative_to(REPO) for path, text in outputs + if strip_version(path.read_text() if path.exists() else "") + != strip_version(text)] + if stale: + sys.exit("STALE, re-run scripts/gen-vulkan-spirv.py: " + + ", ".join(str(p) for p in stale)) + print("committed SPIR-V is up to date") return - OUT_HEADER.write_text(text) + for path, text in outputs: + path.write_text(text) total = sum(len(b) for b in blobs.values()) - print(f"wrote {OUT_HEADER.relative_to(REPO)}: {len(blobs)} modules, {total} bytes of SPIR-V") + print(f"wrote {OUT_HEADER.relative_to(REPO)} + {OUT_SOURCE.relative_to(REPO)}: " + f"{len(blobs)} modules, {total} bytes of SPIR-V") print(f"compiler: {version}") diff --git a/src/vt/vulkan/vulkan_context.cpp b/src/vt/vulkan/vulkan_context.cpp index 87618c40..5abf5c99 100644 --- a/src/vt/vulkan/vulkan_context.cpp +++ b/src/vt/vulkan/vulkan_context.cpp @@ -332,8 +332,16 @@ VulkanContext::VulkanContext() { // reallocated. (llama.cpp grows a vector of pools instead; a fixed pool is // enough here because dispatch is synchronous and sets are re-updated.) constexpr uint32_t kMaxBindings = 12; // llama.cpp's MAX_PARAMETER_COUNT + // ONE DESCRIPTOR SET PER PIPELINE, AND PIPELINES NOW OUTNUMBER MODULES. + // Since VK-A1 a module can be specialized into several pipelines — vt_cast + // alone reaches one per (src, dst) dtype pair — and each allocates its own set + // from this pool. Sizing it by module count would exhaust the pool on the Nth + // specialization and fail in vkAllocateDescriptorSets, far from the cause. The + // headroom factor is deliberate slack, not a computed bound; GetPipeline + // reports pool exhaustion with the kernel name if it is ever hit. + constexpr uint32_t kSpecializationHeadroom = 16; const uint32_t kernels = - static_cast(sizeof(kSpirvModules) / sizeof(kSpirvModules[0])); + static_cast(kSpirvModuleCount) * kSpecializationHeadroom; VkDescriptorPoolSize pool_size{}; pool_size.type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; pool_size.descriptorCount = kernels * kMaxBindings; @@ -453,8 +461,8 @@ VulkanContext::Pipeline& VulkanContext::GetPipeline(const std::string& name, auto device = Unpack(device_); const SpirvModule* module = nullptr; - for (const SpirvModule& m : kSpirvModules) { - if (name == m.name) { module = &m; break; } + for (size_t i = 0; i < kSpirvModuleCount; ++i) { + if (name == kSpirvModules[i].name) { module = &kSpirvModules[i]; break; } } VT_CHECK(module != nullptr, "vulkan: no committed SPIR-V for kernel '" + name + @@ -546,7 +554,12 @@ VulkanContext::Pipeline& VulkanContext::GetPipeline(const std::string& name, dsai.descriptorPool = Unpack(descriptor_pool_); dsai.descriptorSetCount = 1; dsai.pSetLayouts = &p.set_layout; - Check(vk.vkAllocateDescriptorSets(device, &dsai, &p.set), "vkAllocateDescriptorSets"); + // Named, because the plausible cause is pool exhaustion from specialization + // (one set per PIPELINE, and a module can have many), which is otherwise a bare + // VkResult a long way from its reason. + Check(vk.vkAllocateDescriptorSets(device, &dsai, &p.set), + ("vkAllocateDescriptorSets for pipeline '" + key + + "' (descriptor pool may be exhausted by specialized pipelines)").c_str()); return cache.emplace(key, p).first->second; } diff --git a/src/vt/vulkan/vulkan_spirv.cpp b/src/vt/vulkan/vulkan_spirv.cpp new file mode 100644 index 00000000..6fcba766 --- /dev/null +++ b/src/vt/vulkan/vulkan_spirv.cpp @@ -0,0 +1,3484 @@ +// GENERATED FILE - DO NOT EDIT BY HAND. +// Regenerate with: scripts/gen-vulkan-spirv.py +// +// SPIR-V for the Vulkan backend's compute kernels (BACKEND-VULKAN), +// compiled from the GLSL in src/vt/vulkan/shaders/*.comp. +// +// WHY THE SPIR-V IS COMMITTED rather than compiled by the build, as +// llama.cpp's vulkan-shaders-gen does at build time: the build then needs NO +// shader toolchain on any machine, which is hermetic everywhere including CI +// and the aarch64 gate box. libshaderc would also be a compiled third-party +// dependency, which .agents/discipline.md forbids. The cost is an obligation +// to re-run this generator when a .comp changes, which the +// vulkan-spirv-freshness CI job enforces. +// +// WHY THE WORDS LIVE IN THE .cpp AND NOT THE HEADER (VK-A1): at the target +// shader surface the blobs are megabytes of array initializer, and anything in +// the header is re-parsed by every including TU. The header carries the struct +// and extern declarations; vulkan_spirv.cpp carries the data, so adding shaders +// costs one TU's compile time rather than all of them. +// +// Produced by: Glslang Version: 11:16.5.0 +// Target environment: vulkan1.1 + +#include "vulkan_spirv.h" + +namespace vt::vulkan { +namespace { + +constexpr uint32_t kSpv_vt_add[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001f0u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000155u, + 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000155u, 0x00000006u, 0x00000023u, 0x00000018u, + 0x00050048u, 0x00000155u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000155u, 0x00000008u, + 0x00000023u, 0x00000020u, 0x00040047u, 0x00000176u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000177u, + 0x00000002u, 0x00040048u, 0x00000177u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000177u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x00000179u, 0x00000018u, 0x00040047u, 0x00000179u, 0x00000021u, + 0x00000000u, 0x00040047u, 0x00000179u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000186u, 0x00000006u, + 0x00000002u, 0x00030047u, 0x00000187u, 0x00000002u, 0x00040048u, 0x00000187u, 0x00000000u, 0x00000018u, + 0x00050048u, 0x00000187u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000189u, 0x00000018u, + 0x00040047u, 0x00000189u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000189u, 0x00000022u, 0x00000000u, + 0x00040047u, 0x000001a0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001a1u, 0x00000002u, 0x00040048u, + 0x000001a1u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a1u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00030047u, 0x000001a3u, 0x00000018u, 0x00040047u, 0x000001a3u, 0x00000021u, 0x00000002u, 0x00040047u, + 0x000001a3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001aeu, 0x00000006u, 0x00000002u, 0x00030047u, + 0x000001afu, 0x00000002u, 0x00040048u, 0x000001afu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001afu, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b1u, 0x00000018u, 0x00040047u, 0x000001b1u, + 0x00000021u, 0x00000003u, 0x00040047u, 0x000001b1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001cbu, + 0x00000006u, 0x00000004u, 0x00030047u, 0x000001ccu, 0x00000002u, 0x00050048u, 0x000001ccu, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00040047u, 0x000001ceu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000001ceu, + 0x00000022u, 0x00000000u, 0x00040047u, 0x000001d9u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001dau, + 0x00000002u, 0x00050048u, 0x000001dau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001dcu, + 0x00000021u, 0x00000005u, 0x00040047u, 0x000001dcu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001efu, + 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, + 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, + 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, + 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, + 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, + 0x00040015u, 0x00000023u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, + 0x00020014u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, + 0x00000034u, 0x007fffffu, 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, + 0x0000003du, 0x00000040u, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, + 0x00000043u, 0x00007fffu, 0x0004002bu, 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, + 0x00000052u, 0x00008000u, 0x0004002bu, 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, + 0x00000059u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, + 0x00000066u, 0x0000000du, 0x0004002bu, 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, + 0x00000080u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, + 0x0000008bu, 0x00000017u, 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, + 0x000000a9u, 0x000000ffu, 0x00040020u, 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, + 0x000000afu, 0x0000007fu, 0x0004002bu, 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, + 0x000000bbu, 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, + 0x000000cbu, 0x0000001fu, 0x0004002bu, 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, + 0x000000d8u, 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, + 0x000000e2u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, + 0x00000118u, 0x00001000u, 0x00040017u, 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, + 0x00000001u, 0x0000014eu, 0x0004003bu, 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, + 0x00000001u, 0x00000006u, 0x000b001eu, 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, + 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, + 0x00000006u, 0x0004002bu, 0x00000023u, 0x00000160u, 0x00000005u, 0x0004002bu, 0x00000023u, 0x0000016fu, + 0x00000002u, 0x0003001du, 0x00000176u, 0x00000006u, 0x0003001eu, 0x00000177u, 0x00000176u, 0x00040020u, + 0x00000178u, 0x0000000cu, 0x00000177u, 0x0004003bu, 0x00000178u, 0x00000179u, 0x0000000cu, 0x0004002bu, + 0x00000023u, 0x0000017au, 0x00000006u, 0x00040020u, 0x00000180u, 0x0000000cu, 0x00000006u, 0x00040015u, + 0x00000185u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000186u, 0x00000185u, 0x0003001eu, 0x00000187u, + 0x00000186u, 0x00040020u, 0x00000188u, 0x0000000cu, 0x00000187u, 0x0004003bu, 0x00000188u, 0x00000189u, + 0x0000000cu, 0x00040020u, 0x0000018fu, 0x0000000cu, 0x00000185u, 0x0004002bu, 0x00000023u, 0x00000199u, + 0x00000003u, 0x0003001du, 0x000001a0u, 0x00000006u, 0x0003001eu, 0x000001a1u, 0x000001a0u, 0x00040020u, + 0x000001a2u, 0x0000000cu, 0x000001a1u, 0x0004003bu, 0x000001a2u, 0x000001a3u, 0x0000000cu, 0x0004002bu, + 0x00000023u, 0x000001a4u, 0x00000007u, 0x0003001du, 0x000001aeu, 0x00000185u, 0x0003001eu, 0x000001afu, + 0x000001aeu, 0x00040020u, 0x000001b0u, 0x0000000cu, 0x000001afu, 0x0004003bu, 0x000001b0u, 0x000001b1u, + 0x0000000cu, 0x0004002bu, 0x00000023u, 0x000001c5u, 0x00000004u, 0x0003001du, 0x000001cbu, 0x00000006u, + 0x0003001eu, 0x000001ccu, 0x000001cbu, 0x00040020u, 0x000001cdu, 0x0000000cu, 0x000001ccu, 0x0004003bu, + 0x000001cdu, 0x000001ceu, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x000001cfu, 0x00000008u, 0x0003001du, + 0x000001d9u, 0x00000185u, 0x0003001eu, 0x000001dau, 0x000001d9u, 0x00040020u, 0x000001dbu, 0x0000000cu, + 0x000001dau, 0x0004003bu, 0x000001dbu, 0x000001dcu, 0x0000000cu, 0x0003002au, 0x0000002cu, 0x000001eau, + 0x0004002bu, 0x00000006u, 0x000001ebu, 0x00000080u, 0x0004001cu, 0x000001ecu, 0x00000008u, 0x000001ebu, + 0x00040020u, 0x000001edu, 0x00000004u, 0x000001ecu, 0x0004003bu, 0x000001edu, 0x000001eeu, 0x00000004u, + 0x0006002cu, 0x0000014eu, 0x000001efu, 0x000001ebu, 0x00000046u, 0x00000046u, 0x00050036u, 0x00000002u, + 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000015fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000164u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000016eu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000173u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000193u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000194u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000019du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bau, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bbu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e2u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001e4u, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, + 0x00000150u, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, + 0x00000153u, 0x0004003du, 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, + 0x00000157u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x000500aeu, 0x0000002cu, + 0x0000015bu, 0x00000154u, 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, + 0x0000015cu, 0x0000015du, 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, 0x0000015du, 0x00050041u, + 0x00000158u, 0x00000161u, 0x00000157u, 0x00000160u, 0x0004003du, 0x00000006u, 0x00000162u, 0x00000161u, + 0x000500abu, 0x0000002cu, 0x00000163u, 0x00000162u, 0x00000036u, 0x000300f7u, 0x00000166u, 0x00000000u, + 0x000400fau, 0x00000163u, 0x00000165u, 0x0000016bu, 0x000200f8u, 0x00000165u, 0x0004003du, 0x00000006u, + 0x00000167u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000168u, 0x00000157u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x00000169u, 0x00000168u, 0x00050089u, 0x00000006u, 0x0000016au, 0x00000167u, 0x00000169u, + 0x0003003eu, 0x00000164u, 0x0000016au, 0x000200f9u, 0x00000166u, 0x000200f8u, 0x0000016bu, 0x0004003du, + 0x00000006u, 0x0000016cu, 0x0000014du, 0x0003003eu, 0x00000164u, 0x0000016cu, 0x000200f9u, 0x00000166u, + 0x000200f8u, 0x00000166u, 0x0004003du, 0x00000006u, 0x0000016du, 0x00000164u, 0x0003003eu, 0x0000015fu, + 0x0000016du, 0x00050041u, 0x00000158u, 0x00000170u, 0x00000157u, 0x0000016fu, 0x0004003du, 0x00000006u, + 0x00000171u, 0x00000170u, 0x000500aau, 0x0000002cu, 0x00000172u, 0x00000171u, 0x00000036u, 0x000300f7u, + 0x00000175u, 0x00000000u, 0x000400fau, 0x00000172u, 0x00000174u, 0x00000184u, 0x000200f8u, 0x00000174u, + 0x00050041u, 0x00000158u, 0x0000017bu, 0x00000157u, 0x0000017au, 0x0004003du, 0x00000006u, 0x0000017cu, + 0x0000017bu, 0x000500c2u, 0x00000006u, 0x0000017du, 0x0000017cu, 0x0000016fu, 0x0004003du, 0x00000006u, + 0x0000017eu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000017fu, 0x0000017du, 0x0000017eu, 0x00060041u, + 0x00000180u, 0x00000181u, 0x00000179u, 0x000000d3u, 0x0000017fu, 0x0004003du, 0x00000006u, 0x00000182u, + 0x00000181u, 0x0004007cu, 0x00000008u, 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000173u, 0x00000183u, + 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000184u, 0x00050041u, 0x00000158u, 0x0000018au, 0x00000157u, + 0x0000017au, 0x0004003du, 0x00000006u, 0x0000018bu, 0x0000018au, 0x000500c2u, 0x00000006u, 0x0000018cu, + 0x0000018bu, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000018du, 0x0000014du, 0x00050080u, 0x00000006u, + 0x0000018eu, 0x0000018cu, 0x0000018du, 0x00060041u, 0x0000018fu, 0x00000190u, 0x00000189u, 0x000000d3u, + 0x0000018eu, 0x0004003du, 0x00000185u, 0x00000191u, 0x00000190u, 0x00040071u, 0x00000006u, 0x00000192u, + 0x00000191u, 0x0003003eu, 0x00000193u, 0x00000192u, 0x00050041u, 0x00000158u, 0x00000195u, 0x00000157u, + 0x0000016fu, 0x0004003du, 0x00000006u, 0x00000196u, 0x00000195u, 0x0003003eu, 0x00000194u, 0x00000196u, + 0x00060039u, 0x00000008u, 0x00000197u, 0x0000001bu, 0x00000193u, 0x00000194u, 0x0003003eu, 0x00000173u, + 0x00000197u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000175u, 0x0004003du, 0x00000008u, 0x00000198u, + 0x00000173u, 0x00050041u, 0x00000158u, 0x0000019au, 0x00000157u, 0x00000199u, 0x0004003du, 0x00000006u, + 0x0000019bu, 0x0000019au, 0x000500aau, 0x0000002cu, 0x0000019cu, 0x0000019bu, 0x00000036u, 0x000300f7u, + 0x0000019fu, 0x00000000u, 0x000400fau, 0x0000019cu, 0x0000019eu, 0x000001adu, 0x000200f8u, 0x0000019eu, + 0x00050041u, 0x00000158u, 0x000001a5u, 0x00000157u, 0x000001a4u, 0x0004003du, 0x00000006u, 0x000001a6u, + 0x000001a5u, 0x000500c2u, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x0000016fu, 0x0004003du, 0x00000006u, + 0x000001a8u, 0x0000015fu, 0x00050080u, 0x00000006u, 0x000001a9u, 0x000001a7u, 0x000001a8u, 0x00060041u, + 0x00000180u, 0x000001aau, 0x000001a3u, 0x000000d3u, 0x000001a9u, 0x0004003du, 0x00000006u, 0x000001abu, + 0x000001aau, 0x0004007cu, 0x00000008u, 0x000001acu, 0x000001abu, 0x0003003eu, 0x0000019du, 0x000001acu, + 0x000200f9u, 0x0000019fu, 0x000200f8u, 0x000001adu, 0x00050041u, 0x00000158u, 0x000001b2u, 0x00000157u, + 0x000001a4u, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001b2u, 0x000500c2u, 0x00000006u, 0x000001b4u, + 0x000001b3u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001b5u, 0x0000015fu, 0x00050080u, 0x00000006u, + 0x000001b6u, 0x000001b4u, 0x000001b5u, 0x00060041u, 0x0000018fu, 0x000001b7u, 0x000001b1u, 0x000000d3u, + 0x000001b6u, 0x0004003du, 0x00000185u, 0x000001b8u, 0x000001b7u, 0x00040071u, 0x00000006u, 0x000001b9u, + 0x000001b8u, 0x0003003eu, 0x000001bau, 0x000001b9u, 0x00050041u, 0x00000158u, 0x000001bcu, 0x00000157u, + 0x00000199u, 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001bcu, 0x0003003eu, 0x000001bbu, 0x000001bdu, + 0x00060039u, 0x00000008u, 0x000001beu, 0x0000001bu, 0x000001bau, 0x000001bbu, 0x0003003eu, 0x0000019du, + 0x000001beu, 0x000200f9u, 0x0000019fu, 0x000200f8u, 0x0000019fu, 0x0004003du, 0x00000008u, 0x000001bfu, + 0x0000019du, 0x00050081u, 0x00000008u, 0x000001c0u, 0x00000198u, 0x000001bfu, 0x0003003eu, 0x0000016eu, + 0x000001c0u, 0x000200f9u, 0x000001c1u, 0x000200f8u, 0x000001c1u, 0x000400f6u, 0x000001c3u, 0x000001c4u, + 0x00000000u, 0x000200f9u, 0x000001c2u, 0x000200f8u, 0x000001c2u, 0x00050041u, 0x00000158u, 0x000001c6u, + 0x00000157u, 0x000001c5u, 0x0004003du, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x000500aau, 0x0000002cu, + 0x000001c8u, 0x000001c7u, 0x00000036u, 0x000300f7u, 0x000001cau, 0x00000000u, 0x000400fau, 0x000001c8u, + 0x000001c9u, 0x000001d8u, 0x000200f8u, 0x000001c9u, 0x00050041u, 0x00000158u, 0x000001d0u, 0x00000157u, + 0x000001cfu, 0x0004003du, 0x00000006u, 0x000001d1u, 0x000001d0u, 0x000500c2u, 0x00000006u, 0x000001d2u, + 0x000001d1u, 0x0000016fu, 0x0004003du, 0x00000006u, 0x000001d3u, 0x0000014du, 0x00050080u, 0x00000006u, + 0x000001d4u, 0x000001d2u, 0x000001d3u, 0x0004003du, 0x00000008u, 0x000001d5u, 0x0000016eu, 0x0004007cu, + 0x00000006u, 0x000001d6u, 0x000001d5u, 0x00060041u, 0x00000180u, 0x000001d7u, 0x000001ceu, 0x000000d3u, + 0x000001d4u, 0x0003003eu, 0x000001d7u, 0x000001d6u, 0x000200f9u, 0x000001cau, 0x000200f8u, 0x000001d8u, + 0x00050041u, 0x00000158u, 0x000001ddu, 0x00000157u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x000001deu, + 0x000001ddu, 0x000500c2u, 0x00000006u, 0x000001dfu, 0x000001deu, 0x00000080u, 0x0004003du, 0x00000006u, + 0x000001e0u, 0x0000014du, 0x00050080u, 0x00000006u, 0x000001e1u, 0x000001dfu, 0x000001e0u, 0x0004003du, + 0x00000008u, 0x000001e3u, 0x0000016eu, 0x0003003eu, 0x000001e2u, 0x000001e3u, 0x00050041u, 0x00000158u, + 0x000001e5u, 0x00000157u, 0x000001c5u, 0x0004003du, 0x00000006u, 0x000001e6u, 0x000001e5u, 0x0003003eu, + 0x000001e4u, 0x000001e6u, 0x00060039u, 0x00000006u, 0x000001e7u, 0x00000020u, 0x000001e2u, 0x000001e4u, + 0x00040071u, 0x00000185u, 0x000001e8u, 0x000001e7u, 0x00060041u, 0x0000018fu, 0x000001e9u, 0x000001dcu, + 0x000000d3u, 0x000001e1u, 0x0003003eu, 0x000001e9u, 0x000001e8u, 0x000200f9u, 0x000001cau, 0x000200f8u, + 0x000001cau, 0x000200f9u, 0x000001c4u, 0x000200f8u, 0x000001c4u, 0x000400fau, 0x000001eau, 0x000001c1u, + 0x000001c3u, 0x000200f8u, 0x000001c3u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, + 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, + 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, + 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, + 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, + 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, + 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, + 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, + 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, + 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, + 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, + 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, + 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, + 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, + 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, + 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, + 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, + 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, + 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, + 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, + 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, + 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, + 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, + 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, + 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, + 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, + 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, + 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, + 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, + 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, + 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, + 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, + 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, + 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, + 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, + 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, + 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, + 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, + 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, + 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, + 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, + 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, + 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, + 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, + 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, + 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, + 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, + 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, + 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, + 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, + 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, + 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, + 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, + 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, + 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, + 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, + 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, + 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, + 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, + 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, + 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, + 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, + 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, + 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, + 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, + 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, + 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, + 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, + 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, + 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, + 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, + 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, + 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, + 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, + 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, + 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, + 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, + 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, + 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, + 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, + 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, + 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, + 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, + 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, + 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, + 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, + 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, + 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, + 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, + 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, + 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, + 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, + 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, + 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, + 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, + 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, + 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, + 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, + 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, + 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, + 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, + 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, + 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, + 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, + 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, + 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, + 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, + 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, + 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, + 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, + 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, + 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, + 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, + 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, + 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, + 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, + 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, + 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, + 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, + 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, + 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, + 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, + 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, + 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, + 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, + 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, + 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, + 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, + 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, + 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, + 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, + 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, + 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, + 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, + 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, + 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, + 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, + 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, + 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, + 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, + 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, + 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, + 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, + 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, + 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, + 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, + 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, + 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, + 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, + 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, + 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, + 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, + 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, + 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, + 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, + 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, + 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, + 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, + 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, + 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, + 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, + 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, + 0x0000014au, 0x00010038u, +}; + +constexpr uint32_t kSpv_vt_cast[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001c6u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000163u, 0x00000001u, 0x00000001u, + 0x00040047u, 0x00000167u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000168u, 0x00000002u, 0x00050048u, + 0x00000168u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000016au, 0x00000021u, 0x00000002u, + 0x00040047u, 0x0000016au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000171u, 0x00000001u, 0x00000000u, + 0x00040047u, 0x00000176u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000177u, 0x00000002u, 0x00040048u, + 0x00000177u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000177u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00030047u, 0x00000179u, 0x00000018u, 0x00040047u, 0x00000179u, 0x00000021u, 0x00000000u, 0x00040047u, + 0x00000179u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000185u, 0x00000006u, 0x00000002u, 0x00030047u, + 0x00000186u, 0x00000002u, 0x00040048u, 0x00000186u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000186u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000188u, 0x00000018u, 0x00040047u, 0x00000188u, + 0x00000021u, 0x00000001u, 0x00040047u, 0x00000188u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000199u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x0000019au, 0x00000002u, 0x00050048u, 0x0000019au, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00040047u, 0x0000019cu, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000019cu, + 0x00000022u, 0x00000000u, 0x00040047u, 0x000001c5u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, + 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, + 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, + 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, + 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, + 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, 0x00000020u, 0x00000001u, + 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, 0x0004002bu, 0x00000006u, + 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, 0x0004002bu, 0x00000006u, + 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, 0x0004002bu, 0x00000006u, + 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, 0x0004002bu, 0x00000006u, + 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, 0x0004002bu, 0x00000023u, + 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, 0x0004002bu, 0x00000006u, + 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, 0x0004002bu, 0x00000006u, + 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, 0x0004002bu, 0x00000006u, + 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, 0x0004002bu, 0x00000006u, + 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, 0x00040020u, 0x000000abu, + 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, 0x0004002bu, 0x00000023u, + 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, 0x0004002bu, 0x00000006u, + 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, 0x0004002bu, 0x00000023u, + 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, 0x0004002bu, 0x00000006u, + 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, 0x0004002bu, 0x00000006u, + 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, 0x00040017u, 0x0000014eu, + 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, 0x0004003bu, 0x0000014fu, + 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, 0x0005001eu, 0x00000155u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, + 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, 0x00000006u, 0x00040032u, + 0x00000006u, 0x00000163u, 0x00000000u, 0x00060034u, 0x0000002cu, 0x00000164u, 0x000000aau, 0x00000163u, + 0x00000036u, 0x0003001du, 0x00000167u, 0x00000006u, 0x0003001eu, 0x00000168u, 0x00000167u, 0x00040020u, + 0x00000169u, 0x0000000cu, 0x00000168u, 0x0004003bu, 0x00000169u, 0x0000016au, 0x0000000cu, 0x0004002bu, + 0x00000023u, 0x0000016bu, 0x00000002u, 0x00040032u, 0x00000006u, 0x00000171u, 0x00000000u, 0x00060034u, + 0x0000002cu, 0x00000172u, 0x000000aau, 0x00000171u, 0x00000036u, 0x0003001du, 0x00000176u, 0x00000006u, + 0x0003001eu, 0x00000177u, 0x00000176u, 0x00040020u, 0x00000178u, 0x0000000cu, 0x00000177u, 0x0004003bu, + 0x00000178u, 0x00000179u, 0x0000000cu, 0x00040020u, 0x0000017fu, 0x0000000cu, 0x00000006u, 0x00040015u, + 0x00000184u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000185u, 0x00000184u, 0x0003001eu, 0x00000186u, + 0x00000185u, 0x00040020u, 0x00000187u, 0x0000000cu, 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, + 0x0000000cu, 0x00040020u, 0x0000018eu, 0x0000000cu, 0x00000184u, 0x0003001du, 0x00000199u, 0x00000184u, + 0x0003001eu, 0x0000019au, 0x00000199u, 0x00040020u, 0x0000019bu, 0x0000000cu, 0x0000019au, 0x0004003bu, + 0x0000019bu, 0x0000019cu, 0x0000000cu, 0x00060034u, 0x0000002cu, 0x000001a2u, 0x000000aau, 0x00000171u, + 0x00000036u, 0x0003002au, 0x0000002cu, 0x000001c0u, 0x0004002bu, 0x00000006u, 0x000001c1u, 0x00000080u, + 0x0004001cu, 0x000001c2u, 0x00000008u, 0x000001c1u, 0x00040020u, 0x000001c3u, 0x00000004u, 0x000001c2u, + 0x0004003bu, 0x000001c3u, 0x000001c4u, 0x00000004u, 0x0006002cu, 0x0000014eu, 0x000001c5u, 0x000001c1u, + 0x00000046u, 0x00000046u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, + 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000173u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000192u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000193u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b7u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b8u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001bau, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bcu, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, + 0x00000150u, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, + 0x00000153u, 0x0004003du, 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, + 0x00000157u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x000500aeu, 0x0000002cu, + 0x0000015bu, 0x00000154u, 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, + 0x0000015cu, 0x0000015du, 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, 0x0000015du, 0x000200f9u, + 0x0000015fu, 0x000200f8u, 0x0000015fu, 0x000400f6u, 0x00000161u, 0x00000162u, 0x00000000u, 0x000200f9u, + 0x00000160u, 0x000200f8u, 0x00000160u, 0x000300f7u, 0x00000166u, 0x00000000u, 0x000400fau, 0x00000164u, + 0x00000165u, 0x00000198u, 0x000200f8u, 0x00000165u, 0x00050041u, 0x00000158u, 0x0000016cu, 0x00000157u, + 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016du, 0x0000016cu, 0x000500c2u, 0x00000006u, 0x0000016eu, + 0x0000016du, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000014du, 0x00050080u, 0x00000006u, + 0x00000170u, 0x0000016eu, 0x0000016fu, 0x000300f7u, 0x00000175u, 0x00000000u, 0x000400fau, 0x00000172u, + 0x00000174u, 0x00000183u, 0x000200f8u, 0x00000174u, 0x00050041u, 0x00000158u, 0x0000017au, 0x00000157u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x0000017bu, 0x0000017au, 0x000500c2u, 0x00000006u, 0x0000017cu, + 0x0000017bu, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000017du, 0x0000014du, 0x00050080u, 0x00000006u, + 0x0000017eu, 0x0000017cu, 0x0000017du, 0x00060041u, 0x0000017fu, 0x00000180u, 0x00000179u, 0x000000d3u, + 0x0000017eu, 0x0004003du, 0x00000006u, 0x00000181u, 0x00000180u, 0x0004007cu, 0x00000008u, 0x00000182u, + 0x00000181u, 0x0003003eu, 0x00000173u, 0x00000182u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000183u, + 0x00050041u, 0x00000158u, 0x00000189u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000018au, + 0x00000189u, 0x000500c2u, 0x00000006u, 0x0000018bu, 0x0000018au, 0x00000080u, 0x0004003du, 0x00000006u, + 0x0000018cu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000018du, 0x0000018bu, 0x0000018cu, 0x00060041u, + 0x0000018eu, 0x0000018fu, 0x00000188u, 0x000000d3u, 0x0000018du, 0x0004003du, 0x00000184u, 0x00000190u, + 0x0000018fu, 0x00040071u, 0x00000006u, 0x00000191u, 0x00000190u, 0x0003003eu, 0x00000192u, 0x00000191u, + 0x0003003eu, 0x00000193u, 0x00000171u, 0x00060039u, 0x00000008u, 0x00000194u, 0x0000001bu, 0x00000192u, + 0x00000193u, 0x0003003eu, 0x00000173u, 0x00000194u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000175u, + 0x0004003du, 0x00000008u, 0x00000195u, 0x00000173u, 0x0004007cu, 0x00000006u, 0x00000196u, 0x00000195u, + 0x00060041u, 0x0000017fu, 0x00000197u, 0x0000016au, 0x000000d3u, 0x00000170u, 0x0003003eu, 0x00000197u, + 0x00000196u, 0x000200f9u, 0x00000166u, 0x000200f8u, 0x00000198u, 0x00050041u, 0x00000158u, 0x0000019du, + 0x00000157u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000019eu, 0x0000019du, 0x000500c2u, 0x00000006u, + 0x0000019fu, 0x0000019eu, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001a0u, 0x0000014du, 0x00050080u, + 0x00000006u, 0x000001a1u, 0x0000019fu, 0x000001a0u, 0x000300f7u, 0x000001a5u, 0x00000000u, 0x000400fau, + 0x000001a2u, 0x000001a4u, 0x000001aeu, 0x000200f8u, 0x000001a4u, 0x00050041u, 0x00000158u, 0x000001a6u, + 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x000500c2u, 0x00000006u, + 0x000001a8u, 0x000001a7u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x000001a9u, 0x0000014du, 0x00050080u, + 0x00000006u, 0x000001aau, 0x000001a8u, 0x000001a9u, 0x00060041u, 0x0000017fu, 0x000001abu, 0x00000179u, + 0x000000d3u, 0x000001aau, 0x0004003du, 0x00000006u, 0x000001acu, 0x000001abu, 0x0004007cu, 0x00000008u, + 0x000001adu, 0x000001acu, 0x0003003eu, 0x000001a3u, 0x000001adu, 0x000200f9u, 0x000001a5u, 0x000200f8u, + 0x000001aeu, 0x00050041u, 0x00000158u, 0x000001afu, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x000001b0u, 0x000001afu, 0x000500c2u, 0x00000006u, 0x000001b1u, 0x000001b0u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x000001b2u, 0x0000014du, 0x00050080u, 0x00000006u, 0x000001b3u, 0x000001b1u, 0x000001b2u, + 0x00060041u, 0x0000018eu, 0x000001b4u, 0x00000188u, 0x000000d3u, 0x000001b3u, 0x0004003du, 0x00000184u, + 0x000001b5u, 0x000001b4u, 0x00040071u, 0x00000006u, 0x000001b6u, 0x000001b5u, 0x0003003eu, 0x000001b7u, + 0x000001b6u, 0x0003003eu, 0x000001b8u, 0x00000171u, 0x00060039u, 0x00000008u, 0x000001b9u, 0x0000001bu, + 0x000001b7u, 0x000001b8u, 0x0003003eu, 0x000001a3u, 0x000001b9u, 0x000200f9u, 0x000001a5u, 0x000200f8u, + 0x000001a5u, 0x0004003du, 0x00000008u, 0x000001bbu, 0x000001a3u, 0x0003003eu, 0x000001bau, 0x000001bbu, + 0x0003003eu, 0x000001bcu, 0x00000163u, 0x00060039u, 0x00000006u, 0x000001bdu, 0x00000020u, 0x000001bau, + 0x000001bcu, 0x00040071u, 0x00000184u, 0x000001beu, 0x000001bdu, 0x00060041u, 0x0000018eu, 0x000001bfu, + 0x0000019cu, 0x000000d3u, 0x000001a1u, 0x0003003eu, 0x000001bfu, 0x000001beu, 0x000200f9u, 0x00000166u, + 0x000200f8u, 0x00000166u, 0x000200f9u, 0x00000162u, 0x000200f8u, 0x00000162u, 0x000400fau, 0x000001c0u, + 0x0000015fu, 0x00000161u, 0x000200f8u, 0x00000161u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, + 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, + 0x0004003du, 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, + 0x00000024u, 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, + 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000042u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, + 0x0000002bu, 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, + 0x00000029u, 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, + 0x00000030u, 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, + 0x00000031u, 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, + 0x000500c7u, 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, + 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, + 0x00000038u, 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, + 0x000400fau, 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, + 0x0000003bu, 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, + 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, + 0x0000003fu, 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, + 0x00000029u, 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, + 0x00000047u, 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, + 0x0003003eu, 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, + 0x00000006u, 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, + 0x000500c2u, 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, + 0x0000004cu, 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, + 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, + 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, + 0x00000006u, 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, + 0x000500c4u, 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, + 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, + 0x00000057u, 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, + 0x0000005au, 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, + 0x0000005cu, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, + 0x00000055u, 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, + 0x00000000u, 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, + 0x00000006u, 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, + 0x0004003du, 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, + 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, + 0x00000069u, 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, + 0x0000006bu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, + 0x0000006eu, 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, + 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, + 0x00000036u, 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, + 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, + 0x00000074u, 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, + 0x00000036u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, + 0x00000000u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, + 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, + 0x0000007fu, 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, + 0x00000078u, 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, + 0x00000081u, 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, + 0x00000076u, 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, + 0x00000084u, 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, + 0x00000079u, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, + 0x00000085u, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, + 0x00000050u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, + 0x00000088u, 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, + 0x00000006u, 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, + 0x000500c4u, 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, + 0x0000008du, 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, + 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, + 0x00000094u, 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, + 0x00000006u, 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, + 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, + 0x00000099u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, + 0x00000008u, 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, + 0x0004003bu, 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, + 0x0004003du, 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, + 0x0003003eu, 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, + 0x00000006u, 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, + 0x00000052u, 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, + 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, + 0x000000a8u, 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, + 0x000000a6u, 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, + 0x000000aeu, 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, + 0x000000acu, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, + 0x000000b5u, 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, + 0x000000b6u, 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, + 0x000000b9u, 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, + 0x0004003du, 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, + 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, + 0x000000bdu, 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, + 0x000000c6u, 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, + 0x00000006u, 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, + 0x000000c4u, 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, + 0x0003003eu, 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, + 0x00000006u, 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, + 0x000200feu, 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, + 0x000500afu, 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, + 0x000400fau, 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, + 0x000000cfu, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, + 0x000000d0u, 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, + 0x0000002cu, 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, + 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, + 0x000000acu, 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, + 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, + 0x00000006u, 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, + 0x00000006u, 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, + 0x0003003eu, 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, + 0x00000023u, 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, + 0x0003003eu, 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, + 0x00000006u, 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, + 0x0003003eu, 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, + 0x00000006u, 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, + 0x00050082u, 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, + 0x000000ebu, 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, + 0x000000e1u, 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, + 0x000000f3u, 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, + 0x000000f4u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, + 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, + 0x000000f9u, 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, + 0x0004003du, 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, + 0x000500aau, 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, + 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, + 0x000000ffu, 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, + 0x0000002cu, 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, + 0x000700f5u, 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, + 0x000000f9u, 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, + 0x00000102u, 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, + 0x00000105u, 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, + 0x00000006u, 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, + 0x00000105u, 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, + 0x00000006u, 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, + 0x000200feu, 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, + 0x0004007cu, 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, + 0x00000057u, 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, + 0x00000110u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, + 0x0000010cu, 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, + 0x00000116u, 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, + 0x00000117u, 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, + 0x0000002cu, 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, + 0x0000011bu, 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, + 0x000500aau, 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, + 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, + 0x00000121u, 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, + 0x0000002cu, 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, + 0x000700f5u, 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, + 0x0000011cu, 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, + 0x00000124u, 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, + 0x00000127u, 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, + 0x00000006u, 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, + 0x00000127u, 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, + 0x00000006u, 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, + 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, + 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, + 0x0004003bu, 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, + 0x000500aau, 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, + 0x000400fau, 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, + 0x00000135u, 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, + 0x00000013u, 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, + 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, + 0x00050039u, 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, + 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, + 0x000200feu, 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, + 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, + 0x0004003bu, 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, + 0x000500aau, 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, + 0x000400fau, 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, + 0x00000144u, 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, + 0x00000016u, 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, + 0x00000146u, 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, + 0x00050039u, 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, + 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, + 0x000200feu, 0x0000014au, 0x00010038u, +}; + +constexpr uint32_t kSpv_vt_fused_chain[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000735u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000188u, + 0x0000018du, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x00000188u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x0000018du, 0x0000000bu, 0x0000001bu, 0x00030047u, + 0x00000192u, 0x00000002u, 0x00050048u, 0x00000192u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, + 0x00000192u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000192u, 0x00000002u, 0x00000023u, + 0x00000008u, 0x00050048u, 0x00000192u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000192u, + 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000192u, 0x00000005u, 0x00000023u, 0x00000014u, + 0x00050048u, 0x00000192u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000192u, 0x00000007u, + 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000192u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, + 0x00000192u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000192u, 0x0000000au, 0x00000023u, + 0x00000028u, 0x00050048u, 0x00000192u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00040047u, 0x000001a9u, + 0x00000006u, 0x00000004u, 0x00030047u, 0x000001aau, 0x00000002u, 0x00040048u, 0x000001aau, 0x00000000u, + 0x00000018u, 0x00050048u, 0x000001aau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001acu, + 0x00000018u, 0x00040047u, 0x000001acu, 0x00000021u, 0x00000008u, 0x00040047u, 0x000001acu, 0x00000022u, + 0x00000000u, 0x00040047u, 0x000001e7u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001e8u, 0x00000002u, + 0x00040048u, 0x000001e8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001e8u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x000001eau, 0x00000018u, 0x00040047u, 0x000001eau, 0x00000021u, 0x00000000u, + 0x00040047u, 0x000001eau, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001f8u, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000001f9u, 0x00000002u, 0x00040048u, 0x000001f9u, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000001f9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001fbu, 0x00000018u, 0x00040047u, + 0x000001fbu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001fbu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x0000021au, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000021bu, 0x00000002u, 0x00040048u, 0x0000021bu, + 0x00000000u, 0x00000018u, 0x00050048u, 0x0000021bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x0000021du, 0x00000018u, 0x00040047u, 0x0000021du, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000021du, + 0x00000022u, 0x00000000u, 0x00040047u, 0x00000228u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000229u, + 0x00000002u, 0x00040048u, 0x00000229u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000229u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x0000022bu, 0x00000018u, 0x00040047u, 0x0000022bu, 0x00000021u, + 0x00000003u, 0x00040047u, 0x0000022bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000247u, 0x00000006u, + 0x00000004u, 0x00030047u, 0x00000248u, 0x00000002u, 0x00050048u, 0x00000248u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00040047u, 0x0000024au, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000024au, 0x00000022u, + 0x00000000u, 0x00040047u, 0x00000257u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000258u, 0x00000002u, + 0x00050048u, 0x00000258u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000025au, 0x00000021u, + 0x00000005u, 0x00040047u, 0x0000025au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000273u, 0x00000006u, + 0x00000004u, 0x00030047u, 0x00000274u, 0x00000002u, 0x00050048u, 0x00000274u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00040047u, 0x00000276u, 0x00000021u, 0x00000006u, 0x00040047u, 0x00000276u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x00000282u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000283u, 0x00000002u, + 0x00050048u, 0x00000283u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000285u, 0x00000021u, + 0x00000007u, 0x00040047u, 0x00000285u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000734u, 0x0000000bu, + 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, + 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, + 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, + 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, + 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040021u, + 0x00000022u, 0x00000008u, 0x0000000du, 0x00050021u, 0x00000026u, 0x00000008u, 0x00000007u, 0x0000000du, + 0x00040015u, 0x0000002cu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000002cu, 0x0000002du, 0x00000010u, + 0x00020014u, 0x00000035u, 0x0004002bu, 0x00000006u, 0x00000037u, 0x7f800000u, 0x0004002bu, 0x00000006u, + 0x0000003du, 0x007fffffu, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x00000000u, 0x0004002bu, 0x00000006u, + 0x00000046u, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000048u, 0x0000ffffu, 0x0004002bu, 0x00000006u, + 0x0000004cu, 0x00007fffu, 0x0004002bu, 0x00000006u, 0x0000004fu, 0x00000001u, 0x0004002bu, 0x00000006u, + 0x0000005bu, 0x00008000u, 0x0004002bu, 0x0000002cu, 0x00000060u, 0x0000000au, 0x0004002bu, 0x00000006u, + 0x00000062u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000066u, 0x000003ffu, 0x0004002bu, 0x0000002cu, + 0x0000006fu, 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000086u, 0x00000400u, 0x0004002bu, 0x0000002cu, + 0x00000089u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000091u, 0x00000071u, 0x0004002bu, 0x0000002cu, + 0x00000094u, 0x00000017u, 0x0004002bu, 0x00000006u, 0x0000009eu, 0x00000070u, 0x0004002bu, 0x00000006u, + 0x000000b2u, 0x000000ffu, 0x00040020u, 0x000000b4u, 0x00000007u, 0x0000002cu, 0x0004002bu, 0x0000002cu, + 0x000000b8u, 0x0000007fu, 0x0004002bu, 0x0000002cu, 0x000000bau, 0x0000000fu, 0x0004002bu, 0x00000006u, + 0x000000c4u, 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000cbu, 0x00000200u, 0x0004002bu, 0x0000002cu, + 0x000000d4u, 0x0000001fu, 0x0004002bu, 0x0000002cu, 0x000000dcu, 0x00000000u, 0x0004002bu, 0x0000002cu, + 0x000000e1u, 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000e7u, 0x00800000u, 0x0004002bu, 0x0000002cu, + 0x000000ebu, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x0000011eu, 0x00001fffu, 0x0004002bu, 0x00000006u, + 0x00000121u, 0x00001000u, 0x0004002bu, 0x00000008u, 0x00000156u, 0x3f800000u, 0x0004002bu, 0x00000006u, + 0x0000015eu, 0x00000002u, 0x0004002bu, 0x00000006u, 0x0000015fu, 0x00000108u, 0x0004002bu, 0x00000006u, + 0x00000160u, 0x00000080u, 0x0004001cu, 0x00000161u, 0x00000008u, 0x00000160u, 0x00040020u, 0x00000162u, + 0x00000004u, 0x00000161u, 0x0004003bu, 0x00000162u, 0x00000163u, 0x00000004u, 0x00040020u, 0x00000166u, + 0x00000004u, 0x00000008u, 0x00040017u, 0x00000186u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000187u, + 0x00000001u, 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, 0x00000001u, 0x00040020u, 0x00000189u, + 0x00000001u, 0x00000006u, 0x0004003bu, 0x00000187u, 0x0000018du, 0x00000001u, 0x000e001eu, 0x00000192u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000193u, 0x00000009u, 0x00000192u, + 0x0004003bu, 0x00000193u, 0x00000194u, 0x00000009u, 0x00040020u, 0x00000195u, 0x00000009u, 0x00000006u, + 0x0004002bu, 0x0000002cu, 0x000001a0u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x000001a6u, 0x00000005u, + 0x0003001du, 0x000001a9u, 0x00000006u, 0x0003001eu, 0x000001aau, 0x000001a9u, 0x00040020u, 0x000001abu, + 0x0000000cu, 0x000001aau, 0x0004003bu, 0x000001abu, 0x000001acu, 0x0000000cu, 0x00040020u, 0x000001afu, + 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000001beu, 0x00000003u, 0x0004002bu, 0x00000006u, + 0x000001c4u, 0x00000004u, 0x0004002bu, 0x0000002cu, 0x000001e0u, 0x00000003u, 0x0003001du, 0x000001e7u, + 0x00000006u, 0x0003001eu, 0x000001e8u, 0x000001e7u, 0x00040020u, 0x000001e9u, 0x0000000cu, 0x000001e8u, + 0x0004003bu, 0x000001e9u, 0x000001eau, 0x0000000cu, 0x0004002bu, 0x0000002cu, 0x000001ebu, 0x00000007u, + 0x00040015u, 0x000001f7u, 0x00000010u, 0x00000000u, 0x0003001du, 0x000001f8u, 0x000001f7u, 0x0003001eu, + 0x000001f9u, 0x000001f8u, 0x00040020u, 0x000001fau, 0x0000000cu, 0x000001f9u, 0x0004003bu, 0x000001fau, + 0x000001fbu, 0x0000000cu, 0x00040020u, 0x00000203u, 0x0000000cu, 0x000001f7u, 0x0004002bu, 0x0000002cu, + 0x00000213u, 0x00000004u, 0x0003001du, 0x0000021au, 0x00000006u, 0x0003001eu, 0x0000021bu, 0x0000021au, + 0x00040020u, 0x0000021cu, 0x0000000cu, 0x0000021bu, 0x0004003bu, 0x0000021cu, 0x0000021du, 0x0000000cu, + 0x0004002bu, 0x0000002cu, 0x0000021eu, 0x00000008u, 0x0003001du, 0x00000228u, 0x000001f7u, 0x0003001eu, + 0x00000229u, 0x00000228u, 0x00040020u, 0x0000022au, 0x0000000cu, 0x00000229u, 0x0004003bu, 0x0000022au, + 0x0000022bu, 0x0000000cu, 0x0004002bu, 0x0000002cu, 0x00000240u, 0x00000005u, 0x0003001du, 0x00000247u, + 0x00000006u, 0x0003001eu, 0x00000248u, 0x00000247u, 0x00040020u, 0x00000249u, 0x0000000cu, 0x00000248u, + 0x0004003bu, 0x00000249u, 0x0000024au, 0x0000000cu, 0x0004002bu, 0x0000002cu, 0x0000024bu, 0x00000009u, + 0x0003001du, 0x00000257u, 0x000001f7u, 0x0003001eu, 0x00000258u, 0x00000257u, 0x00040020u, 0x00000259u, + 0x0000000cu, 0x00000258u, 0x0004003bu, 0x00000259u, 0x0000025au, 0x0000000cu, 0x0004002bu, 0x0000002cu, + 0x0000026cu, 0x00000006u, 0x0003001du, 0x00000273u, 0x00000006u, 0x0003001eu, 0x00000274u, 0x00000273u, + 0x00040020u, 0x00000275u, 0x0000000cu, 0x00000274u, 0x0004003bu, 0x00000275u, 0x00000276u, 0x0000000cu, + 0x0003001du, 0x00000282u, 0x000001f7u, 0x0003001eu, 0x00000283u, 0x00000282u, 0x00040020u, 0x00000284u, + 0x0000000cu, 0x00000283u, 0x0004003bu, 0x00000284u, 0x00000285u, 0x0000000cu, 0x0003002au, 0x00000035u, + 0x00000372u, 0x0004002bu, 0x00000008u, 0x000004d9u, 0x00000000u, 0x0004002bu, 0x0000002cu, 0x0000058cu, + 0x0000000bu, 0x00040020u, 0x0000058du, 0x00000009u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000731u, + 0x00000048u, 0x0006002cu, 0x00000186u, 0x00000734u, 0x00000160u, 0x0000004fu, 0x0000004fu, 0x00050036u, + 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, + 0x00000185u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018cu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000190u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000199u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a8u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b7u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c2u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001cfu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001dau, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000001ddu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e4u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000207u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000208u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000210u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000217u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000234u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000235u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000023du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000244u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000265u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000266u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000270u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000290u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000291u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000299u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000029cu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002a2u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000002bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002bbu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000002c3u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002c9u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000002ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002deu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000002e6u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002ecu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000304u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000305u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000030eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000326u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000327u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000349u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000360u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000036au, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000036cu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000386u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000039du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000003a7u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000003a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003b9u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000003c4u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000003c7u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000003cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003e5u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000003e6u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000003eeu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000003f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000408u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000409u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000411u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000417u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000042fu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000430u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000439u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000452u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000045au, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000045bu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000478u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000048du, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000495u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000497u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000004b0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000004c5u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000004cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004cfu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000004d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004dau, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000004e5u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000004e8u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000004eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000506u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000507u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000050fu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000515u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000529u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000052au, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000532u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000538u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000550u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000551u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000055au, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000572u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000573u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000582u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000583u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000585u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000593u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000059eu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000005a1u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000005a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000005c0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000005c8u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000005ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005e2u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000005e3u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000005ebu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000005f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000609u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000060au, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000613u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000062bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000062cu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000634u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000637u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000063du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000655u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000656u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000065eu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000664u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000678u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000679u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000681u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000687u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000069fu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000006a0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000006a9u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000006c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006c2u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000006fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006fdu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000728u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000729u, 0x00000007u, 0x00050041u, 0x00000189u, + 0x0000018au, 0x00000188u, 0x0000003fu, 0x0004003du, 0x00000006u, 0x0000018bu, 0x0000018au, 0x0003003eu, + 0x00000185u, 0x0000018bu, 0x00050041u, 0x00000189u, 0x0000018eu, 0x0000018du, 0x0000003fu, 0x0004003du, + 0x00000006u, 0x0000018fu, 0x0000018eu, 0x0003003eu, 0x0000018cu, 0x0000018fu, 0x0004003du, 0x00000006u, + 0x00000191u, 0x00000185u, 0x00050041u, 0x00000195u, 0x00000196u, 0x00000194u, 0x00000089u, 0x0004003du, + 0x00000006u, 0x00000197u, 0x00000196u, 0x00050084u, 0x00000006u, 0x00000198u, 0x00000191u, 0x00000197u, + 0x0003003eu, 0x00000190u, 0x00000198u, 0x0003003eu, 0x00000199u, 0x0000003fu, 0x000200f9u, 0x0000019au, + 0x000200f8u, 0x0000019au, 0x000400f6u, 0x0000019cu, 0x0000019du, 0x00000000u, 0x000200f9u, 0x0000019eu, + 0x000200f8u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x0000019fu, 0x00000199u, 0x00050041u, 0x00000195u, + 0x000001a1u, 0x00000194u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000001a2u, 0x000001a1u, 0x000500b0u, + 0x00000035u, 0x000001a3u, 0x0000019fu, 0x000001a2u, 0x000400fau, 0x000001a3u, 0x0000019bu, 0x0000019cu, + 0x000200f8u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000001a5u, 0x00000199u, 0x00050084u, 0x00000006u, + 0x000001a7u, 0x000001a5u, 0x000001a6u, 0x0003003eu, 0x000001a4u, 0x000001a7u, 0x0004003du, 0x00000006u, + 0x000001adu, 0x000001a4u, 0x00050080u, 0x00000006u, 0x000001aeu, 0x000001adu, 0x0000003fu, 0x00060041u, + 0x000001afu, 0x000001b0u, 0x000001acu, 0x000000dcu, 0x000001aeu, 0x0004003du, 0x00000006u, 0x000001b1u, + 0x000001b0u, 0x0003003eu, 0x000001a8u, 0x000001b1u, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001a4u, + 0x00050080u, 0x00000006u, 0x000001b4u, 0x000001b3u, 0x0000004fu, 0x00060041u, 0x000001afu, 0x000001b5u, + 0x000001acu, 0x000000dcu, 0x000001b4u, 0x0004003du, 0x00000006u, 0x000001b6u, 0x000001b5u, 0x0003003eu, + 0x000001b2u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001a4u, 0x00050080u, 0x00000006u, + 0x000001b9u, 0x000001b8u, 0x0000015eu, 0x00060041u, 0x000001afu, 0x000001bau, 0x000001acu, 0x000000dcu, + 0x000001b9u, 0x0004003du, 0x00000006u, 0x000001bbu, 0x000001bau, 0x0003003eu, 0x000001b7u, 0x000001bbu, + 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001a4u, 0x00050080u, 0x00000006u, 0x000001bfu, 0x000001bdu, + 0x000001beu, 0x00060041u, 0x000001afu, 0x000001c0u, 0x000001acu, 0x000000dcu, 0x000001bfu, 0x0004003du, + 0x00000006u, 0x000001c1u, 0x000001c0u, 0x0003003eu, 0x000001bcu, 0x000001c1u, 0x0004003du, 0x00000006u, + 0x000001c3u, 0x000001a4u, 0x00050080u, 0x00000006u, 0x000001c5u, 0x000001c3u, 0x000001c4u, 0x00060041u, + 0x000001afu, 0x000001c6u, 0x000001acu, 0x000000dcu, 0x000001c5u, 0x0004003du, 0x00000006u, 0x000001c7u, + 0x000001c6u, 0x0003003eu, 0x000001c2u, 0x000001c7u, 0x0004003du, 0x00000006u, 0x000001c8u, 0x000001a8u, + 0x000500aau, 0x00000035u, 0x000001c9u, 0x000001c8u, 0x0000003fu, 0x0004003du, 0x00000006u, 0x000001cau, + 0x000001a8u, 0x000500aau, 0x00000035u, 0x000001cbu, 0x000001cau, 0x0000004fu, 0x000500a6u, 0x00000035u, + 0x000001ccu, 0x000001c9u, 0x000001cbu, 0x000300f7u, 0x000001ceu, 0x00000000u, 0x000400fau, 0x000001ccu, + 0x000001cdu, 0x000003b1u, 0x000200f8u, 0x000001cdu, 0x0004003du, 0x00000006u, 0x000001d0u, 0x0000018cu, + 0x0003003eu, 0x000001cfu, 0x000001d0u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d1u, 0x000400f6u, + 0x000001d3u, 0x000001d4u, 0x00000000u, 0x000200f9u, 0x000001d5u, 0x000200f8u, 0x000001d5u, 0x0004003du, + 0x00000006u, 0x000001d6u, 0x000001cfu, 0x00050041u, 0x00000195u, 0x000001d7u, 0x00000194u, 0x00000089u, + 0x0004003du, 0x00000006u, 0x000001d8u, 0x000001d7u, 0x000500b0u, 0x00000035u, 0x000001d9u, 0x000001d6u, + 0x000001d8u, 0x000400fau, 0x000001d9u, 0x000001d2u, 0x000001d3u, 0x000200f8u, 0x000001d2u, 0x0004003du, + 0x00000006u, 0x000001dbu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x000001dcu, 0x000001dbu, 0x0000003fu, + 0x000300f7u, 0x000001dfu, 0x00000000u, 0x000400fau, 0x000001dcu, 0x000001deu, 0x0000020du, 0x000200f8u, + 0x000001deu, 0x00050041u, 0x00000195u, 0x000001e1u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, + 0x000001e2u, 0x000001e1u, 0x000500aau, 0x00000035u, 0x000001e3u, 0x000001e2u, 0x0000003fu, 0x000300f7u, + 0x000001e6u, 0x00000000u, 0x000400fau, 0x000001e3u, 0x000001e5u, 0x000001f6u, 0x000200f8u, 0x000001e5u, + 0x00050041u, 0x00000195u, 0x000001ecu, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000001edu, + 0x000001ecu, 0x000500c2u, 0x00000006u, 0x000001eeu, 0x000001edu, 0x000001a0u, 0x0004003du, 0x00000006u, + 0x000001efu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000001f0u, 0x000001cfu, 0x00050080u, 0x00000006u, + 0x000001f1u, 0x000001efu, 0x000001f0u, 0x00050080u, 0x00000006u, 0x000001f2u, 0x000001eeu, 0x000001f1u, + 0x00060041u, 0x000001afu, 0x000001f3u, 0x000001eau, 0x000000dcu, 0x000001f2u, 0x0004003du, 0x00000006u, + 0x000001f4u, 0x000001f3u, 0x0004007cu, 0x00000008u, 0x000001f5u, 0x000001f4u, 0x0003003eu, 0x000001e4u, + 0x000001f5u, 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001f6u, 0x00050041u, 0x00000195u, 0x000001fcu, + 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000001fdu, 0x000001fcu, 0x000500c2u, 0x00000006u, + 0x000001feu, 0x000001fdu, 0x00000089u, 0x0004003du, 0x00000006u, 0x000001ffu, 0x00000190u, 0x0004003du, + 0x00000006u, 0x00000200u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000201u, 0x000001ffu, 0x00000200u, + 0x00050080u, 0x00000006u, 0x00000202u, 0x000001feu, 0x00000201u, 0x00060041u, 0x00000203u, 0x00000204u, + 0x000001fbu, 0x000000dcu, 0x00000202u, 0x0004003du, 0x000001f7u, 0x00000205u, 0x00000204u, 0x00040071u, + 0x00000006u, 0x00000206u, 0x00000205u, 0x0003003eu, 0x00000207u, 0x00000206u, 0x00050041u, 0x00000195u, + 0x00000209u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x0000020au, 0x00000209u, 0x0003003eu, + 0x00000208u, 0x0000020au, 0x00060039u, 0x00000008u, 0x0000020bu, 0x0000001bu, 0x00000207u, 0x00000208u, + 0x0003003eu, 0x000001e4u, 0x0000020bu, 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001e6u, 0x0004003du, + 0x00000008u, 0x0000020cu, 0x000001e4u, 0x0003003eu, 0x000001ddu, 0x0000020cu, 0x000200f9u, 0x000001dfu, + 0x000200f8u, 0x0000020du, 0x0004003du, 0x00000006u, 0x0000020eu, 0x000001b7u, 0x000500aau, 0x00000035u, + 0x0000020fu, 0x0000020eu, 0x0000004fu, 0x000300f7u, 0x00000212u, 0x00000000u, 0x000400fau, 0x0000020fu, + 0x00000211u, 0x0000023au, 0x000200f8u, 0x00000211u, 0x00050041u, 0x00000195u, 0x00000214u, 0x00000194u, + 0x00000213u, 0x0004003du, 0x00000006u, 0x00000215u, 0x00000214u, 0x000500aau, 0x00000035u, 0x00000216u, + 0x00000215u, 0x0000003fu, 0x000300f7u, 0x00000219u, 0x00000000u, 0x000400fau, 0x00000216u, 0x00000218u, + 0x00000227u, 0x000200f8u, 0x00000218u, 0x00050041u, 0x00000195u, 0x0000021fu, 0x00000194u, 0x0000021eu, + 0x0004003du, 0x00000006u, 0x00000220u, 0x0000021fu, 0x000500c2u, 0x00000006u, 0x00000221u, 0x00000220u, + 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000222u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000223u, + 0x00000221u, 0x00000222u, 0x00060041u, 0x000001afu, 0x00000224u, 0x0000021du, 0x000000dcu, 0x00000223u, + 0x0004003du, 0x00000006u, 0x00000225u, 0x00000224u, 0x0004007cu, 0x00000008u, 0x00000226u, 0x00000225u, + 0x0003003eu, 0x00000217u, 0x00000226u, 0x000200f9u, 0x00000219u, 0x000200f8u, 0x00000227u, 0x00050041u, + 0x00000195u, 0x0000022cu, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x0000022du, 0x0000022cu, + 0x000500c2u, 0x00000006u, 0x0000022eu, 0x0000022du, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000022fu, + 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000230u, 0x0000022eu, 0x0000022fu, 0x00060041u, 0x00000203u, + 0x00000231u, 0x0000022bu, 0x000000dcu, 0x00000230u, 0x0004003du, 0x000001f7u, 0x00000232u, 0x00000231u, + 0x00040071u, 0x00000006u, 0x00000233u, 0x00000232u, 0x0003003eu, 0x00000234u, 0x00000233u, 0x00050041u, + 0x00000195u, 0x00000236u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x00000237u, 0x00000236u, + 0x0003003eu, 0x00000235u, 0x00000237u, 0x00060039u, 0x00000008u, 0x00000238u, 0x0000001bu, 0x00000234u, + 0x00000235u, 0x0003003eu, 0x00000217u, 0x00000238u, 0x000200f9u, 0x00000219u, 0x000200f8u, 0x00000219u, + 0x0004003du, 0x00000008u, 0x00000239u, 0x00000217u, 0x0003003eu, 0x00000210u, 0x00000239u, 0x000200f9u, + 0x00000212u, 0x000200f8u, 0x0000023au, 0x0004003du, 0x00000006u, 0x0000023bu, 0x000001b7u, 0x000500aau, + 0x00000035u, 0x0000023cu, 0x0000023bu, 0x0000015eu, 0x000300f7u, 0x0000023fu, 0x00000000u, 0x000400fau, + 0x0000023cu, 0x0000023eu, 0x0000026bu, 0x000200f8u, 0x0000023eu, 0x00050041u, 0x00000195u, 0x00000241u, + 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000242u, 0x00000241u, 0x000500aau, 0x00000035u, + 0x00000243u, 0x00000242u, 0x0000003fu, 0x000300f7u, 0x00000246u, 0x00000000u, 0x000400fau, 0x00000243u, + 0x00000245u, 0x00000256u, 0x000200f8u, 0x00000245u, 0x00050041u, 0x00000195u, 0x0000024cu, 0x00000194u, + 0x0000024bu, 0x0004003du, 0x00000006u, 0x0000024du, 0x0000024cu, 0x000500c2u, 0x00000006u, 0x0000024eu, + 0x0000024du, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000024fu, 0x00000190u, 0x0004003du, 0x00000006u, + 0x00000250u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000251u, 0x0000024fu, 0x00000250u, 0x00050080u, + 0x00000006u, 0x00000252u, 0x0000024eu, 0x00000251u, 0x00060041u, 0x000001afu, 0x00000253u, 0x0000024au, + 0x000000dcu, 0x00000252u, 0x0004003du, 0x00000006u, 0x00000254u, 0x00000253u, 0x0004007cu, 0x00000008u, + 0x00000255u, 0x00000254u, 0x0003003eu, 0x00000244u, 0x00000255u, 0x000200f9u, 0x00000246u, 0x000200f8u, + 0x00000256u, 0x00050041u, 0x00000195u, 0x0000025bu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, + 0x0000025cu, 0x0000025bu, 0x000500c2u, 0x00000006u, 0x0000025du, 0x0000025cu, 0x00000089u, 0x0004003du, + 0x00000006u, 0x0000025eu, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000025fu, 0x000001cfu, 0x00050080u, + 0x00000006u, 0x00000260u, 0x0000025eu, 0x0000025fu, 0x00050080u, 0x00000006u, 0x00000261u, 0x0000025du, + 0x00000260u, 0x00060041u, 0x00000203u, 0x00000262u, 0x0000025au, 0x000000dcu, 0x00000261u, 0x0004003du, + 0x000001f7u, 0x00000263u, 0x00000262u, 0x00040071u, 0x00000006u, 0x00000264u, 0x00000263u, 0x0003003eu, + 0x00000265u, 0x00000264u, 0x00050041u, 0x00000195u, 0x00000267u, 0x00000194u, 0x00000240u, 0x0004003du, + 0x00000006u, 0x00000268u, 0x00000267u, 0x0003003eu, 0x00000266u, 0x00000268u, 0x00060039u, 0x00000008u, + 0x00000269u, 0x0000001bu, 0x00000265u, 0x00000266u, 0x0003003eu, 0x00000244u, 0x00000269u, 0x000200f9u, + 0x00000246u, 0x000200f8u, 0x00000246u, 0x0004003du, 0x00000008u, 0x0000026au, 0x00000244u, 0x0003003eu, + 0x0000023du, 0x0000026au, 0x000200f9u, 0x0000023fu, 0x000200f8u, 0x0000026bu, 0x00050041u, 0x00000195u, + 0x0000026du, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x0000026eu, 0x0000026du, 0x000500aau, + 0x00000035u, 0x0000026fu, 0x0000026eu, 0x0000003fu, 0x000300f7u, 0x00000272u, 0x00000000u, 0x000400fau, + 0x0000026fu, 0x00000271u, 0x00000281u, 0x000200f8u, 0x00000271u, 0x00050041u, 0x00000195u, 0x00000277u, + 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000278u, 0x00000277u, 0x000500c2u, 0x00000006u, + 0x00000279u, 0x00000278u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000027au, 0x00000190u, 0x0004003du, + 0x00000006u, 0x0000027bu, 0x000001cfu, 0x00050080u, 0x00000006u, 0x0000027cu, 0x0000027au, 0x0000027bu, + 0x00050080u, 0x00000006u, 0x0000027du, 0x00000279u, 0x0000027cu, 0x00060041u, 0x000001afu, 0x0000027eu, + 0x00000276u, 0x000000dcu, 0x0000027du, 0x0004003du, 0x00000006u, 0x0000027fu, 0x0000027eu, 0x0004007cu, + 0x00000008u, 0x00000280u, 0x0000027fu, 0x0003003eu, 0x00000270u, 0x00000280u, 0x000200f9u, 0x00000272u, + 0x000200f8u, 0x00000281u, 0x00050041u, 0x00000195u, 0x00000286u, 0x00000194u, 0x00000060u, 0x0004003du, + 0x00000006u, 0x00000287u, 0x00000286u, 0x000500c2u, 0x00000006u, 0x00000288u, 0x00000287u, 0x00000089u, + 0x0004003du, 0x00000006u, 0x00000289u, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000028au, 0x000001cfu, + 0x00050080u, 0x00000006u, 0x0000028bu, 0x00000289u, 0x0000028au, 0x00050080u, 0x00000006u, 0x0000028cu, + 0x00000288u, 0x0000028bu, 0x00060041u, 0x00000203u, 0x0000028du, 0x00000285u, 0x000000dcu, 0x0000028cu, + 0x0004003du, 0x000001f7u, 0x0000028eu, 0x0000028du, 0x00040071u, 0x00000006u, 0x0000028fu, 0x0000028eu, + 0x0003003eu, 0x00000290u, 0x0000028fu, 0x00050041u, 0x00000195u, 0x00000292u, 0x00000194u, 0x0000026cu, + 0x0004003du, 0x00000006u, 0x00000293u, 0x00000292u, 0x0003003eu, 0x00000291u, 0x00000293u, 0x00060039u, + 0x00000008u, 0x00000294u, 0x0000001bu, 0x00000290u, 0x00000291u, 0x0003003eu, 0x00000270u, 0x00000294u, + 0x000200f9u, 0x00000272u, 0x000200f8u, 0x00000272u, 0x0004003du, 0x00000008u, 0x00000295u, 0x00000270u, + 0x0003003eu, 0x0000023du, 0x00000295u, 0x000200f9u, 0x0000023fu, 0x000200f8u, 0x0000023fu, 0x0004003du, + 0x00000008u, 0x00000296u, 0x0000023du, 0x0003003eu, 0x00000210u, 0x00000296u, 0x000200f9u, 0x00000212u, + 0x000200f8u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000297u, 0x00000210u, 0x0003003eu, 0x000001ddu, + 0x00000297u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x0004003du, 0x00000008u, 0x00000298u, + 0x000001ddu, 0x0003003eu, 0x000001dau, 0x00000298u, 0x0004003du, 0x00000006u, 0x0000029au, 0x000001bcu, + 0x000500aau, 0x00000035u, 0x0000029bu, 0x0000029au, 0x0000003fu, 0x000300f7u, 0x0000029eu, 0x00000000u, + 0x000400fau, 0x0000029bu, 0x0000029du, 0x000002c0u, 0x000200f8u, 0x0000029du, 0x00050041u, 0x00000195u, + 0x0000029fu, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000002a0u, 0x0000029fu, 0x000500aau, + 0x00000035u, 0x000002a1u, 0x000002a0u, 0x0000003fu, 0x000300f7u, 0x000002a4u, 0x00000000u, 0x000400fau, + 0x000002a1u, 0x000002a3u, 0x000002afu, 0x000200f8u, 0x000002a3u, 0x00050041u, 0x00000195u, 0x000002a5u, + 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000002a6u, 0x000002a5u, 0x000500c2u, 0x00000006u, + 0x000002a7u, 0x000002a6u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000002a8u, 0x00000190u, 0x0004003du, + 0x00000006u, 0x000002a9u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x000002aau, 0x000002a8u, 0x000002a9u, + 0x00050080u, 0x00000006u, 0x000002abu, 0x000002a7u, 0x000002aau, 0x00060041u, 0x000001afu, 0x000002acu, + 0x000001eau, 0x000000dcu, 0x000002abu, 0x0004003du, 0x00000006u, 0x000002adu, 0x000002acu, 0x0004007cu, + 0x00000008u, 0x000002aeu, 0x000002adu, 0x0003003eu, 0x000002a2u, 0x000002aeu, 0x000200f9u, 0x000002a4u, + 0x000200f8u, 0x000002afu, 0x00050041u, 0x00000195u, 0x000002b0u, 0x00000194u, 0x000001ebu, 0x0004003du, + 0x00000006u, 0x000002b1u, 0x000002b0u, 0x000500c2u, 0x00000006u, 0x000002b2u, 0x000002b1u, 0x00000089u, + 0x0004003du, 0x00000006u, 0x000002b3u, 0x00000190u, 0x0004003du, 0x00000006u, 0x000002b4u, 0x000001cfu, + 0x00050080u, 0x00000006u, 0x000002b5u, 0x000002b3u, 0x000002b4u, 0x00050080u, 0x00000006u, 0x000002b6u, + 0x000002b2u, 0x000002b5u, 0x00060041u, 0x00000203u, 0x000002b7u, 0x000001fbu, 0x000000dcu, 0x000002b6u, + 0x0004003du, 0x000001f7u, 0x000002b8u, 0x000002b7u, 0x00040071u, 0x00000006u, 0x000002b9u, 0x000002b8u, + 0x0003003eu, 0x000002bau, 0x000002b9u, 0x00050041u, 0x00000195u, 0x000002bcu, 0x00000194u, 0x000001e0u, + 0x0004003du, 0x00000006u, 0x000002bdu, 0x000002bcu, 0x0003003eu, 0x000002bbu, 0x000002bdu, 0x00060039u, + 0x00000008u, 0x000002beu, 0x0000001bu, 0x000002bau, 0x000002bbu, 0x0003003eu, 0x000002a2u, 0x000002beu, + 0x000200f9u, 0x000002a4u, 0x000200f8u, 0x000002a4u, 0x0004003du, 0x00000008u, 0x000002bfu, 0x000002a2u, + 0x0003003eu, 0x0000029cu, 0x000002bfu, 0x000200f9u, 0x0000029eu, 0x000200f8u, 0x000002c0u, 0x0004003du, + 0x00000006u, 0x000002c1u, 0x000001bcu, 0x000500aau, 0x00000035u, 0x000002c2u, 0x000002c1u, 0x0000004fu, + 0x000300f7u, 0x000002c5u, 0x00000000u, 0x000400fau, 0x000002c2u, 0x000002c4u, 0x000002e3u, 0x000200f8u, + 0x000002c4u, 0x00050041u, 0x00000195u, 0x000002c6u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, + 0x000002c7u, 0x000002c6u, 0x000500aau, 0x00000035u, 0x000002c8u, 0x000002c7u, 0x0000003fu, 0x000300f7u, + 0x000002cbu, 0x00000000u, 0x000400fau, 0x000002c8u, 0x000002cau, 0x000002d4u, 0x000200f8u, 0x000002cau, + 0x00050041u, 0x00000195u, 0x000002ccu, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000002cdu, + 0x000002ccu, 0x000500c2u, 0x00000006u, 0x000002ceu, 0x000002cdu, 0x000001a0u, 0x0004003du, 0x00000006u, + 0x000002cfu, 0x000001cfu, 0x00050080u, 0x00000006u, 0x000002d0u, 0x000002ceu, 0x000002cfu, 0x00060041u, + 0x000001afu, 0x000002d1u, 0x0000021du, 0x000000dcu, 0x000002d0u, 0x0004003du, 0x00000006u, 0x000002d2u, + 0x000002d1u, 0x0004007cu, 0x00000008u, 0x000002d3u, 0x000002d2u, 0x0003003eu, 0x000002c9u, 0x000002d3u, + 0x000200f9u, 0x000002cbu, 0x000200f8u, 0x000002d4u, 0x00050041u, 0x00000195u, 0x000002d5u, 0x00000194u, + 0x0000021eu, 0x0004003du, 0x00000006u, 0x000002d6u, 0x000002d5u, 0x000500c2u, 0x00000006u, 0x000002d7u, + 0x000002d6u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000002d8u, 0x000001cfu, 0x00050080u, 0x00000006u, + 0x000002d9u, 0x000002d7u, 0x000002d8u, 0x00060041u, 0x00000203u, 0x000002dau, 0x0000022bu, 0x000000dcu, + 0x000002d9u, 0x0004003du, 0x000001f7u, 0x000002dbu, 0x000002dau, 0x00040071u, 0x00000006u, 0x000002dcu, + 0x000002dbu, 0x0003003eu, 0x000002ddu, 0x000002dcu, 0x00050041u, 0x00000195u, 0x000002dfu, 0x00000194u, + 0x00000213u, 0x0004003du, 0x00000006u, 0x000002e0u, 0x000002dfu, 0x0003003eu, 0x000002deu, 0x000002e0u, + 0x00060039u, 0x00000008u, 0x000002e1u, 0x0000001bu, 0x000002ddu, 0x000002deu, 0x0003003eu, 0x000002c9u, + 0x000002e1u, 0x000200f9u, 0x000002cbu, 0x000200f8u, 0x000002cbu, 0x0004003du, 0x00000008u, 0x000002e2u, + 0x000002c9u, 0x0003003eu, 0x000002c3u, 0x000002e2u, 0x000200f9u, 0x000002c5u, 0x000200f8u, 0x000002e3u, + 0x0004003du, 0x00000006u, 0x000002e4u, 0x000001bcu, 0x000500aau, 0x00000035u, 0x000002e5u, 0x000002e4u, + 0x0000015eu, 0x000300f7u, 0x000002e8u, 0x00000000u, 0x000400fau, 0x000002e5u, 0x000002e7u, 0x0000030au, + 0x000200f8u, 0x000002e7u, 0x00050041u, 0x00000195u, 0x000002e9u, 0x00000194u, 0x00000240u, 0x0004003du, + 0x00000006u, 0x000002eau, 0x000002e9u, 0x000500aau, 0x00000035u, 0x000002ebu, 0x000002eau, 0x0000003fu, + 0x000300f7u, 0x000002eeu, 0x00000000u, 0x000400fau, 0x000002ebu, 0x000002edu, 0x000002f9u, 0x000200f8u, + 0x000002edu, 0x00050041u, 0x00000195u, 0x000002efu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, + 0x000002f0u, 0x000002efu, 0x000500c2u, 0x00000006u, 0x000002f1u, 0x000002f0u, 0x000001a0u, 0x0004003du, + 0x00000006u, 0x000002f2u, 0x00000190u, 0x0004003du, 0x00000006u, 0x000002f3u, 0x000001cfu, 0x00050080u, + 0x00000006u, 0x000002f4u, 0x000002f2u, 0x000002f3u, 0x00050080u, 0x00000006u, 0x000002f5u, 0x000002f1u, + 0x000002f4u, 0x00060041u, 0x000001afu, 0x000002f6u, 0x0000024au, 0x000000dcu, 0x000002f5u, 0x0004003du, + 0x00000006u, 0x000002f7u, 0x000002f6u, 0x0004007cu, 0x00000008u, 0x000002f8u, 0x000002f7u, 0x0003003eu, + 0x000002ecu, 0x000002f8u, 0x000200f9u, 0x000002eeu, 0x000200f8u, 0x000002f9u, 0x00050041u, 0x00000195u, + 0x000002fau, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000002fbu, 0x000002fau, 0x000500c2u, + 0x00000006u, 0x000002fcu, 0x000002fbu, 0x00000089u, 0x0004003du, 0x00000006u, 0x000002fdu, 0x00000190u, + 0x0004003du, 0x00000006u, 0x000002feu, 0x000001cfu, 0x00050080u, 0x00000006u, 0x000002ffu, 0x000002fdu, + 0x000002feu, 0x00050080u, 0x00000006u, 0x00000300u, 0x000002fcu, 0x000002ffu, 0x00060041u, 0x00000203u, + 0x00000301u, 0x0000025au, 0x000000dcu, 0x00000300u, 0x0004003du, 0x000001f7u, 0x00000302u, 0x00000301u, + 0x00040071u, 0x00000006u, 0x00000303u, 0x00000302u, 0x0003003eu, 0x00000304u, 0x00000303u, 0x00050041u, + 0x00000195u, 0x00000306u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000307u, 0x00000306u, + 0x0003003eu, 0x00000305u, 0x00000307u, 0x00060039u, 0x00000008u, 0x00000308u, 0x0000001bu, 0x00000304u, + 0x00000305u, 0x0003003eu, 0x000002ecu, 0x00000308u, 0x000200f9u, 0x000002eeu, 0x000200f8u, 0x000002eeu, + 0x0004003du, 0x00000008u, 0x00000309u, 0x000002ecu, 0x0003003eu, 0x000002e6u, 0x00000309u, 0x000200f9u, + 0x000002e8u, 0x000200f8u, 0x0000030au, 0x00050041u, 0x00000195u, 0x0000030bu, 0x00000194u, 0x0000026cu, + 0x0004003du, 0x00000006u, 0x0000030cu, 0x0000030bu, 0x000500aau, 0x00000035u, 0x0000030du, 0x0000030cu, + 0x0000003fu, 0x000300f7u, 0x00000310u, 0x00000000u, 0x000400fau, 0x0000030du, 0x0000030fu, 0x0000031bu, + 0x000200f8u, 0x0000030fu, 0x00050041u, 0x00000195u, 0x00000311u, 0x00000194u, 0x00000060u, 0x0004003du, + 0x00000006u, 0x00000312u, 0x00000311u, 0x000500c2u, 0x00000006u, 0x00000313u, 0x00000312u, 0x000001a0u, + 0x0004003du, 0x00000006u, 0x00000314u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000315u, 0x000001cfu, + 0x00050080u, 0x00000006u, 0x00000316u, 0x00000314u, 0x00000315u, 0x00050080u, 0x00000006u, 0x00000317u, + 0x00000313u, 0x00000316u, 0x00060041u, 0x000001afu, 0x00000318u, 0x00000276u, 0x000000dcu, 0x00000317u, + 0x0004003du, 0x00000006u, 0x00000319u, 0x00000318u, 0x0004007cu, 0x00000008u, 0x0000031au, 0x00000319u, + 0x0003003eu, 0x0000030eu, 0x0000031au, 0x000200f9u, 0x00000310u, 0x000200f8u, 0x0000031bu, 0x00050041u, + 0x00000195u, 0x0000031cu, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x0000031du, 0x0000031cu, + 0x000500c2u, 0x00000006u, 0x0000031eu, 0x0000031du, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000031fu, + 0x00000190u, 0x0004003du, 0x00000006u, 0x00000320u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000321u, + 0x0000031fu, 0x00000320u, 0x00050080u, 0x00000006u, 0x00000322u, 0x0000031eu, 0x00000321u, 0x00060041u, + 0x00000203u, 0x00000323u, 0x00000285u, 0x000000dcu, 0x00000322u, 0x0004003du, 0x000001f7u, 0x00000324u, + 0x00000323u, 0x00040071u, 0x00000006u, 0x00000325u, 0x00000324u, 0x0003003eu, 0x00000326u, 0x00000325u, + 0x00050041u, 0x00000195u, 0x00000328u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000329u, + 0x00000328u, 0x0003003eu, 0x00000327u, 0x00000329u, 0x00060039u, 0x00000008u, 0x0000032au, 0x0000001bu, + 0x00000326u, 0x00000327u, 0x0003003eu, 0x0000030eu, 0x0000032au, 0x000200f9u, 0x00000310u, 0x000200f8u, + 0x00000310u, 0x0004003du, 0x00000008u, 0x0000032bu, 0x0000030eu, 0x0003003eu, 0x000002e6u, 0x0000032bu, + 0x000200f9u, 0x000002e8u, 0x000200f8u, 0x000002e8u, 0x0004003du, 0x00000008u, 0x0000032cu, 0x000002e6u, + 0x0003003eu, 0x000002c3u, 0x0000032cu, 0x000200f9u, 0x000002c5u, 0x000200f8u, 0x000002c5u, 0x0004003du, + 0x00000008u, 0x0000032du, 0x000002c3u, 0x0003003eu, 0x0000029cu, 0x0000032du, 0x000200f9u, 0x0000029eu, + 0x000200f8u, 0x0000029eu, 0x0004003du, 0x00000008u, 0x0000032eu, 0x0000029cu, 0x0003003eu, 0x00000299u, + 0x0000032eu, 0x000200f9u, 0x0000032fu, 0x000200f8u, 0x0000032fu, 0x000400f6u, 0x00000331u, 0x00000332u, + 0x00000000u, 0x000200f9u, 0x00000330u, 0x000200f8u, 0x00000330u, 0x0004003du, 0x00000006u, 0x00000333u, + 0x000001b2u, 0x000500aau, 0x00000035u, 0x00000334u, 0x00000333u, 0x0000015eu, 0x000300f7u, 0x00000336u, + 0x00000000u, 0x000400fau, 0x00000334u, 0x00000335u, 0x00000373u, 0x000200f8u, 0x00000335u, 0x000200f9u, + 0x00000337u, 0x000200f8u, 0x00000337u, 0x000400f6u, 0x00000339u, 0x0000033au, 0x00000000u, 0x000200f9u, + 0x00000338u, 0x000200f8u, 0x00000338u, 0x00050041u, 0x00000195u, 0x0000033bu, 0x00000194u, 0x00000240u, + 0x0004003du, 0x00000006u, 0x0000033cu, 0x0000033bu, 0x000500aau, 0x00000035u, 0x0000033du, 0x0000033cu, + 0x0000003fu, 0x000300f7u, 0x0000033fu, 0x00000000u, 0x000400fau, 0x0000033du, 0x0000033eu, 0x00000356u, + 0x000200f8u, 0x0000033eu, 0x00050041u, 0x00000195u, 0x00000340u, 0x00000194u, 0x0000024bu, 0x0004003du, + 0x00000006u, 0x00000341u, 0x00000340u, 0x000500c2u, 0x00000006u, 0x00000342u, 0x00000341u, 0x000001a0u, + 0x0004003du, 0x00000006u, 0x00000343u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000344u, 0x000001cfu, + 0x00050080u, 0x00000006u, 0x00000345u, 0x00000343u, 0x00000344u, 0x00050080u, 0x00000006u, 0x00000346u, + 0x00000342u, 0x00000345u, 0x0004003du, 0x00000006u, 0x00000347u, 0x000001a8u, 0x000500aau, 0x00000035u, + 0x00000348u, 0x00000347u, 0x0000003fu, 0x000300f7u, 0x0000034bu, 0x00000000u, 0x000400fau, 0x00000348u, + 0x0000034au, 0x0000034fu, 0x000200f8u, 0x0000034au, 0x0004003du, 0x00000008u, 0x0000034cu, 0x000001dau, + 0x0004003du, 0x00000008u, 0x0000034du, 0x00000299u, 0x00050081u, 0x00000008u, 0x0000034eu, 0x0000034cu, + 0x0000034du, 0x0003003eu, 0x00000349u, 0x0000034eu, 0x000200f9u, 0x0000034bu, 0x000200f8u, 0x0000034fu, + 0x0004003du, 0x00000008u, 0x00000350u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000351u, 0x00000299u, + 0x00050085u, 0x00000008u, 0x00000352u, 0x00000350u, 0x00000351u, 0x0003003eu, 0x00000349u, 0x00000352u, + 0x000200f9u, 0x0000034bu, 0x000200f8u, 0x0000034bu, 0x0004003du, 0x00000008u, 0x00000353u, 0x00000349u, + 0x0004007cu, 0x00000006u, 0x00000354u, 0x00000353u, 0x00060041u, 0x000001afu, 0x00000355u, 0x0000024au, + 0x000000dcu, 0x00000346u, 0x0003003eu, 0x00000355u, 0x00000354u, 0x000200f9u, 0x0000033fu, 0x000200f8u, + 0x00000356u, 0x00050041u, 0x00000195u, 0x00000357u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, + 0x00000358u, 0x00000357u, 0x000500c2u, 0x00000006u, 0x00000359u, 0x00000358u, 0x00000089u, 0x0004003du, + 0x00000006u, 0x0000035au, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000035bu, 0x000001cfu, 0x00050080u, + 0x00000006u, 0x0000035cu, 0x0000035au, 0x0000035bu, 0x00050080u, 0x00000006u, 0x0000035du, 0x00000359u, + 0x0000035cu, 0x0004003du, 0x00000006u, 0x0000035eu, 0x000001a8u, 0x000500aau, 0x00000035u, 0x0000035fu, + 0x0000035eu, 0x0000003fu, 0x000300f7u, 0x00000362u, 0x00000000u, 0x000400fau, 0x0000035fu, 0x00000361u, + 0x00000366u, 0x000200f8u, 0x00000361u, 0x0004003du, 0x00000008u, 0x00000363u, 0x000001dau, 0x0004003du, + 0x00000008u, 0x00000364u, 0x00000299u, 0x00050081u, 0x00000008u, 0x00000365u, 0x00000363u, 0x00000364u, + 0x0003003eu, 0x00000360u, 0x00000365u, 0x000200f9u, 0x00000362u, 0x000200f8u, 0x00000366u, 0x0004003du, + 0x00000008u, 0x00000367u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000368u, 0x00000299u, 0x00050085u, + 0x00000008u, 0x00000369u, 0x00000367u, 0x00000368u, 0x0003003eu, 0x00000360u, 0x00000369u, 0x000200f9u, + 0x00000362u, 0x000200f8u, 0x00000362u, 0x0004003du, 0x00000008u, 0x0000036bu, 0x00000360u, 0x0003003eu, + 0x0000036au, 0x0000036bu, 0x00050041u, 0x00000195u, 0x0000036du, 0x00000194u, 0x00000240u, 0x0004003du, + 0x00000006u, 0x0000036eu, 0x0000036du, 0x0003003eu, 0x0000036cu, 0x0000036eu, 0x00060039u, 0x00000006u, + 0x0000036fu, 0x00000020u, 0x0000036au, 0x0000036cu, 0x00040071u, 0x000001f7u, 0x00000370u, 0x0000036fu, + 0x00060041u, 0x00000203u, 0x00000371u, 0x0000025au, 0x000000dcu, 0x0000035du, 0x0003003eu, 0x00000371u, + 0x00000370u, 0x000200f9u, 0x0000033fu, 0x000200f8u, 0x0000033fu, 0x000200f9u, 0x0000033au, 0x000200f8u, + 0x0000033au, 0x000400fau, 0x00000372u, 0x00000337u, 0x00000339u, 0x000200f8u, 0x00000339u, 0x000200f9u, + 0x00000336u, 0x000200f8u, 0x00000373u, 0x000200f9u, 0x00000374u, 0x000200f8u, 0x00000374u, 0x000400f6u, + 0x00000376u, 0x00000377u, 0x00000000u, 0x000200f9u, 0x00000375u, 0x000200f8u, 0x00000375u, 0x00050041u, + 0x00000195u, 0x00000378u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000379u, 0x00000378u, + 0x000500aau, 0x00000035u, 0x0000037au, 0x00000379u, 0x0000003fu, 0x000300f7u, 0x0000037cu, 0x00000000u, + 0x000400fau, 0x0000037au, 0x0000037bu, 0x00000393u, 0x000200f8u, 0x0000037bu, 0x00050041u, 0x00000195u, + 0x0000037du, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x0000037eu, 0x0000037du, 0x000500c2u, + 0x00000006u, 0x0000037fu, 0x0000037eu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000380u, 0x00000190u, + 0x0004003du, 0x00000006u, 0x00000381u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000382u, 0x00000380u, + 0x00000381u, 0x00050080u, 0x00000006u, 0x00000383u, 0x0000037fu, 0x00000382u, 0x0004003du, 0x00000006u, + 0x00000384u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x00000385u, 0x00000384u, 0x0000003fu, 0x000300f7u, + 0x00000388u, 0x00000000u, 0x000400fau, 0x00000385u, 0x00000387u, 0x0000038cu, 0x000200f8u, 0x00000387u, + 0x0004003du, 0x00000008u, 0x00000389u, 0x000001dau, 0x0004003du, 0x00000008u, 0x0000038au, 0x00000299u, + 0x00050081u, 0x00000008u, 0x0000038bu, 0x00000389u, 0x0000038au, 0x0003003eu, 0x00000386u, 0x0000038bu, + 0x000200f9u, 0x00000388u, 0x000200f8u, 0x0000038cu, 0x0004003du, 0x00000008u, 0x0000038du, 0x000001dau, + 0x0004003du, 0x00000008u, 0x0000038eu, 0x00000299u, 0x00050085u, 0x00000008u, 0x0000038fu, 0x0000038du, + 0x0000038eu, 0x0003003eu, 0x00000386u, 0x0000038fu, 0x000200f9u, 0x00000388u, 0x000200f8u, 0x00000388u, + 0x0004003du, 0x00000008u, 0x00000390u, 0x00000386u, 0x0004007cu, 0x00000006u, 0x00000391u, 0x00000390u, + 0x00060041u, 0x000001afu, 0x00000392u, 0x00000276u, 0x000000dcu, 0x00000383u, 0x0003003eu, 0x00000392u, + 0x00000391u, 0x000200f9u, 0x0000037cu, 0x000200f8u, 0x00000393u, 0x00050041u, 0x00000195u, 0x00000394u, + 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000395u, 0x00000394u, 0x000500c2u, 0x00000006u, + 0x00000396u, 0x00000395u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000397u, 0x00000190u, 0x0004003du, + 0x00000006u, 0x00000398u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000399u, 0x00000397u, 0x00000398u, + 0x00050080u, 0x00000006u, 0x0000039au, 0x00000396u, 0x00000399u, 0x0004003du, 0x00000006u, 0x0000039bu, + 0x000001a8u, 0x000500aau, 0x00000035u, 0x0000039cu, 0x0000039bu, 0x0000003fu, 0x000300f7u, 0x0000039fu, + 0x00000000u, 0x000400fau, 0x0000039cu, 0x0000039eu, 0x000003a3u, 0x000200f8u, 0x0000039eu, 0x0004003du, + 0x00000008u, 0x000003a0u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000003a1u, 0x00000299u, 0x00050081u, + 0x00000008u, 0x000003a2u, 0x000003a0u, 0x000003a1u, 0x0003003eu, 0x0000039du, 0x000003a2u, 0x000200f9u, + 0x0000039fu, 0x000200f8u, 0x000003a3u, 0x0004003du, 0x00000008u, 0x000003a4u, 0x000001dau, 0x0004003du, + 0x00000008u, 0x000003a5u, 0x00000299u, 0x00050085u, 0x00000008u, 0x000003a6u, 0x000003a4u, 0x000003a5u, + 0x0003003eu, 0x0000039du, 0x000003a6u, 0x000200f9u, 0x0000039fu, 0x000200f8u, 0x0000039fu, 0x0004003du, + 0x00000008u, 0x000003a8u, 0x0000039du, 0x0003003eu, 0x000003a7u, 0x000003a8u, 0x00050041u, 0x00000195u, + 0x000003aau, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x000003abu, 0x000003aau, 0x0003003eu, + 0x000003a9u, 0x000003abu, 0x00060039u, 0x00000006u, 0x000003acu, 0x00000020u, 0x000003a7u, 0x000003a9u, + 0x00040071u, 0x000001f7u, 0x000003adu, 0x000003acu, 0x00060041u, 0x00000203u, 0x000003aeu, 0x00000285u, + 0x000000dcu, 0x0000039au, 0x0003003eu, 0x000003aeu, 0x000003adu, 0x000200f9u, 0x0000037cu, 0x000200f8u, + 0x0000037cu, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000377u, 0x000400fau, 0x00000372u, 0x00000374u, + 0x00000376u, 0x000200f8u, 0x00000376u, 0x000200f9u, 0x00000336u, 0x000200f8u, 0x00000336u, 0x000200f9u, + 0x00000332u, 0x000200f8u, 0x00000332u, 0x000400fau, 0x00000372u, 0x0000032fu, 0x00000331u, 0x000200f8u, + 0x00000331u, 0x000200f9u, 0x000001d4u, 0x000200f8u, 0x000001d4u, 0x0004003du, 0x00000006u, 0x000003afu, + 0x000001cfu, 0x00050080u, 0x00000006u, 0x000003b0u, 0x000003afu, 0x00000160u, 0x0003003eu, 0x000001cfu, + 0x000003b0u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d3u, 0x000200f9u, 0x000001ceu, 0x000200f8u, + 0x000003b1u, 0x0004003du, 0x00000006u, 0x000003b2u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x000003b3u, + 0x000003b2u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x000003b4u, 0x000001a8u, 0x000500aau, 0x00000035u, + 0x000003b5u, 0x000003b4u, 0x000001beu, 0x000500a6u, 0x00000035u, 0x000003b6u, 0x000003b3u, 0x000003b5u, + 0x000300f7u, 0x000003b8u, 0x00000000u, 0x000400fau, 0x000003b6u, 0x000003b7u, 0x000004d7u, 0x000200f8u, + 0x000003b7u, 0x0004003du, 0x00000006u, 0x000003bau, 0x0000018cu, 0x0003003eu, 0x000003b9u, 0x000003bau, + 0x000200f9u, 0x000003bbu, 0x000200f8u, 0x000003bbu, 0x000400f6u, 0x000003bdu, 0x000003beu, 0x00000000u, + 0x000200f9u, 0x000003bfu, 0x000200f8u, 0x000003bfu, 0x0004003du, 0x00000006u, 0x000003c0u, 0x000003b9u, + 0x00050041u, 0x00000195u, 0x000003c1u, 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000003c2u, + 0x000003c1u, 0x000500b0u, 0x00000035u, 0x000003c3u, 0x000003c0u, 0x000003c2u, 0x000400fau, 0x000003c3u, + 0x000003bcu, 0x000003bdu, 0x000200f8u, 0x000003bcu, 0x0004003du, 0x00000006u, 0x000003c5u, 0x000001b7u, + 0x000500aau, 0x00000035u, 0x000003c6u, 0x000003c5u, 0x0000003fu, 0x000300f7u, 0x000003c9u, 0x00000000u, + 0x000400fau, 0x000003c6u, 0x000003c8u, 0x000003ebu, 0x000200f8u, 0x000003c8u, 0x00050041u, 0x00000195u, + 0x000003cau, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x000003cau, 0x000500aau, + 0x00000035u, 0x000003ccu, 0x000003cbu, 0x0000003fu, 0x000300f7u, 0x000003cfu, 0x00000000u, 0x000400fau, + 0x000003ccu, 0x000003ceu, 0x000003dau, 0x000200f8u, 0x000003ceu, 0x00050041u, 0x00000195u, 0x000003d0u, + 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000003d1u, 0x000003d0u, 0x000500c2u, 0x00000006u, + 0x000003d2u, 0x000003d1u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000003d3u, 0x00000190u, 0x0004003du, + 0x00000006u, 0x000003d4u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000003d5u, 0x000003d3u, 0x000003d4u, + 0x00050080u, 0x00000006u, 0x000003d6u, 0x000003d2u, 0x000003d5u, 0x00060041u, 0x000001afu, 0x000003d7u, + 0x000001eau, 0x000000dcu, 0x000003d6u, 0x0004003du, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x0004007cu, + 0x00000008u, 0x000003d9u, 0x000003d8u, 0x0003003eu, 0x000003cdu, 0x000003d9u, 0x000200f9u, 0x000003cfu, + 0x000200f8u, 0x000003dau, 0x00050041u, 0x00000195u, 0x000003dbu, 0x00000194u, 0x000001ebu, 0x0004003du, + 0x00000006u, 0x000003dcu, 0x000003dbu, 0x000500c2u, 0x00000006u, 0x000003ddu, 0x000003dcu, 0x00000089u, + 0x0004003du, 0x00000006u, 0x000003deu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000003dfu, 0x000003b9u, + 0x00050080u, 0x00000006u, 0x000003e0u, 0x000003deu, 0x000003dfu, 0x00050080u, 0x00000006u, 0x000003e1u, + 0x000003ddu, 0x000003e0u, 0x00060041u, 0x00000203u, 0x000003e2u, 0x000001fbu, 0x000000dcu, 0x000003e1u, + 0x0004003du, 0x000001f7u, 0x000003e3u, 0x000003e2u, 0x00040071u, 0x00000006u, 0x000003e4u, 0x000003e3u, + 0x0003003eu, 0x000003e5u, 0x000003e4u, 0x00050041u, 0x00000195u, 0x000003e7u, 0x00000194u, 0x000001e0u, + 0x0004003du, 0x00000006u, 0x000003e8u, 0x000003e7u, 0x0003003eu, 0x000003e6u, 0x000003e8u, 0x00060039u, + 0x00000008u, 0x000003e9u, 0x0000001bu, 0x000003e5u, 0x000003e6u, 0x0003003eu, 0x000003cdu, 0x000003e9u, + 0x000200f9u, 0x000003cfu, 0x000200f8u, 0x000003cfu, 0x0004003du, 0x00000008u, 0x000003eau, 0x000003cdu, + 0x0003003eu, 0x000003c7u, 0x000003eau, 0x000200f9u, 0x000003c9u, 0x000200f8u, 0x000003ebu, 0x0004003du, + 0x00000006u, 0x000003ecu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x000003edu, 0x000003ecu, 0x0000004fu, + 0x000300f7u, 0x000003f0u, 0x00000000u, 0x000400fau, 0x000003edu, 0x000003efu, 0x0000040eu, 0x000200f8u, + 0x000003efu, 0x00050041u, 0x00000195u, 0x000003f1u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, + 0x000003f2u, 0x000003f1u, 0x000500aau, 0x00000035u, 0x000003f3u, 0x000003f2u, 0x0000003fu, 0x000300f7u, + 0x000003f6u, 0x00000000u, 0x000400fau, 0x000003f3u, 0x000003f5u, 0x000003ffu, 0x000200f8u, 0x000003f5u, + 0x00050041u, 0x00000195u, 0x000003f7u, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000003f8u, + 0x000003f7u, 0x000500c2u, 0x00000006u, 0x000003f9u, 0x000003f8u, 0x000001a0u, 0x0004003du, 0x00000006u, + 0x000003fau, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000003fbu, 0x000003f9u, 0x000003fau, 0x00060041u, + 0x000001afu, 0x000003fcu, 0x0000021du, 0x000000dcu, 0x000003fbu, 0x0004003du, 0x00000006u, 0x000003fdu, + 0x000003fcu, 0x0004007cu, 0x00000008u, 0x000003feu, 0x000003fdu, 0x0003003eu, 0x000003f4u, 0x000003feu, + 0x000200f9u, 0x000003f6u, 0x000200f8u, 0x000003ffu, 0x00050041u, 0x00000195u, 0x00000400u, 0x00000194u, + 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000401u, 0x00000400u, 0x000500c2u, 0x00000006u, 0x00000402u, + 0x00000401u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000403u, 0x000003b9u, 0x00050080u, 0x00000006u, + 0x00000404u, 0x00000402u, 0x00000403u, 0x00060041u, 0x00000203u, 0x00000405u, 0x0000022bu, 0x000000dcu, + 0x00000404u, 0x0004003du, 0x000001f7u, 0x00000406u, 0x00000405u, 0x00040071u, 0x00000006u, 0x00000407u, + 0x00000406u, 0x0003003eu, 0x00000408u, 0x00000407u, 0x00050041u, 0x00000195u, 0x0000040au, 0x00000194u, + 0x00000213u, 0x0004003du, 0x00000006u, 0x0000040bu, 0x0000040au, 0x0003003eu, 0x00000409u, 0x0000040bu, + 0x00060039u, 0x00000008u, 0x0000040cu, 0x0000001bu, 0x00000408u, 0x00000409u, 0x0003003eu, 0x000003f4u, + 0x0000040cu, 0x000200f9u, 0x000003f6u, 0x000200f8u, 0x000003f6u, 0x0004003du, 0x00000008u, 0x0000040du, + 0x000003f4u, 0x0003003eu, 0x000003eeu, 0x0000040du, 0x000200f9u, 0x000003f0u, 0x000200f8u, 0x0000040eu, + 0x0004003du, 0x00000006u, 0x0000040fu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x00000410u, 0x0000040fu, + 0x0000015eu, 0x000300f7u, 0x00000413u, 0x00000000u, 0x000400fau, 0x00000410u, 0x00000412u, 0x00000435u, + 0x000200f8u, 0x00000412u, 0x00050041u, 0x00000195u, 0x00000414u, 0x00000194u, 0x00000240u, 0x0004003du, + 0x00000006u, 0x00000415u, 0x00000414u, 0x000500aau, 0x00000035u, 0x00000416u, 0x00000415u, 0x0000003fu, + 0x000300f7u, 0x00000419u, 0x00000000u, 0x000400fau, 0x00000416u, 0x00000418u, 0x00000424u, 0x000200f8u, + 0x00000418u, 0x00050041u, 0x00000195u, 0x0000041au, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, + 0x0000041bu, 0x0000041au, 0x000500c2u, 0x00000006u, 0x0000041cu, 0x0000041bu, 0x000001a0u, 0x0004003du, + 0x00000006u, 0x0000041du, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000041eu, 0x000003b9u, 0x00050080u, + 0x00000006u, 0x0000041fu, 0x0000041du, 0x0000041eu, 0x00050080u, 0x00000006u, 0x00000420u, 0x0000041cu, + 0x0000041fu, 0x00060041u, 0x000001afu, 0x00000421u, 0x0000024au, 0x000000dcu, 0x00000420u, 0x0004003du, + 0x00000006u, 0x00000422u, 0x00000421u, 0x0004007cu, 0x00000008u, 0x00000423u, 0x00000422u, 0x0003003eu, + 0x00000417u, 0x00000423u, 0x000200f9u, 0x00000419u, 0x000200f8u, 0x00000424u, 0x00050041u, 0x00000195u, + 0x00000425u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000426u, 0x00000425u, 0x000500c2u, + 0x00000006u, 0x00000427u, 0x00000426u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000428u, 0x00000190u, + 0x0004003du, 0x00000006u, 0x00000429u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x0000042au, 0x00000428u, + 0x00000429u, 0x00050080u, 0x00000006u, 0x0000042bu, 0x00000427u, 0x0000042au, 0x00060041u, 0x00000203u, + 0x0000042cu, 0x0000025au, 0x000000dcu, 0x0000042bu, 0x0004003du, 0x000001f7u, 0x0000042du, 0x0000042cu, + 0x00040071u, 0x00000006u, 0x0000042eu, 0x0000042du, 0x0003003eu, 0x0000042fu, 0x0000042eu, 0x00050041u, + 0x00000195u, 0x00000431u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000432u, 0x00000431u, + 0x0003003eu, 0x00000430u, 0x00000432u, 0x00060039u, 0x00000008u, 0x00000433u, 0x0000001bu, 0x0000042fu, + 0x00000430u, 0x0003003eu, 0x00000417u, 0x00000433u, 0x000200f9u, 0x00000419u, 0x000200f8u, 0x00000419u, + 0x0004003du, 0x00000008u, 0x00000434u, 0x00000417u, 0x0003003eu, 0x00000411u, 0x00000434u, 0x000200f9u, + 0x00000413u, 0x000200f8u, 0x00000435u, 0x00050041u, 0x00000195u, 0x00000436u, 0x00000194u, 0x0000026cu, + 0x0004003du, 0x00000006u, 0x00000437u, 0x00000436u, 0x000500aau, 0x00000035u, 0x00000438u, 0x00000437u, + 0x0000003fu, 0x000300f7u, 0x0000043bu, 0x00000000u, 0x000400fau, 0x00000438u, 0x0000043au, 0x00000446u, + 0x000200f8u, 0x0000043au, 0x00050041u, 0x00000195u, 0x0000043cu, 0x00000194u, 0x00000060u, 0x0004003du, + 0x00000006u, 0x0000043du, 0x0000043cu, 0x000500c2u, 0x00000006u, 0x0000043eu, 0x0000043du, 0x000001a0u, + 0x0004003du, 0x00000006u, 0x0000043fu, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000440u, 0x000003b9u, + 0x00050080u, 0x00000006u, 0x00000441u, 0x0000043fu, 0x00000440u, 0x00050080u, 0x00000006u, 0x00000442u, + 0x0000043eu, 0x00000441u, 0x00060041u, 0x000001afu, 0x00000443u, 0x00000276u, 0x000000dcu, 0x00000442u, + 0x0004003du, 0x00000006u, 0x00000444u, 0x00000443u, 0x0004007cu, 0x00000008u, 0x00000445u, 0x00000444u, + 0x0003003eu, 0x00000439u, 0x00000445u, 0x000200f9u, 0x0000043bu, 0x000200f8u, 0x00000446u, 0x00050041u, + 0x00000195u, 0x00000447u, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000448u, 0x00000447u, + 0x000500c2u, 0x00000006u, 0x00000449u, 0x00000448u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000044au, + 0x00000190u, 0x0004003du, 0x00000006u, 0x0000044bu, 0x000003b9u, 0x00050080u, 0x00000006u, 0x0000044cu, + 0x0000044au, 0x0000044bu, 0x00050080u, 0x00000006u, 0x0000044du, 0x00000449u, 0x0000044cu, 0x00060041u, + 0x00000203u, 0x0000044eu, 0x00000285u, 0x000000dcu, 0x0000044du, 0x0004003du, 0x000001f7u, 0x0000044fu, + 0x0000044eu, 0x00040071u, 0x00000006u, 0x00000450u, 0x0000044fu, 0x0003003eu, 0x00000451u, 0x00000450u, + 0x00050041u, 0x00000195u, 0x00000453u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000454u, + 0x00000453u, 0x0003003eu, 0x00000452u, 0x00000454u, 0x00060039u, 0x00000008u, 0x00000455u, 0x0000001bu, + 0x00000451u, 0x00000452u, 0x0003003eu, 0x00000439u, 0x00000455u, 0x000200f9u, 0x0000043bu, 0x000200f8u, + 0x0000043bu, 0x0004003du, 0x00000008u, 0x00000456u, 0x00000439u, 0x0003003eu, 0x00000411u, 0x00000456u, + 0x000200f9u, 0x00000413u, 0x000200f8u, 0x00000413u, 0x0004003du, 0x00000008u, 0x00000457u, 0x00000411u, + 0x0003003eu, 0x000003eeu, 0x00000457u, 0x000200f9u, 0x000003f0u, 0x000200f8u, 0x000003f0u, 0x0004003du, + 0x00000008u, 0x00000458u, 0x000003eeu, 0x0003003eu, 0x000003c7u, 0x00000458u, 0x000200f9u, 0x000003c9u, + 0x000200f8u, 0x000003c9u, 0x0004003du, 0x00000008u, 0x00000459u, 0x000003c7u, 0x0003003eu, 0x000003c4u, + 0x00000459u, 0x0004003du, 0x00000008u, 0x0000045cu, 0x000003c4u, 0x0003003eu, 0x0000045bu, 0x0000045cu, + 0x00050039u, 0x00000008u, 0x0000045du, 0x00000024u, 0x0000045bu, 0x0003003eu, 0x0000045au, 0x0000045du, + 0x000200f9u, 0x0000045eu, 0x000200f8u, 0x0000045eu, 0x000400f6u, 0x00000460u, 0x00000461u, 0x00000000u, + 0x000200f9u, 0x0000045fu, 0x000200f8u, 0x0000045fu, 0x0004003du, 0x00000006u, 0x00000462u, 0x000001b2u, + 0x000500aau, 0x00000035u, 0x00000463u, 0x00000462u, 0x0000015eu, 0x000300f7u, 0x00000465u, 0x00000000u, + 0x000400fau, 0x00000463u, 0x00000464u, 0x0000049du, 0x000200f8u, 0x00000464u, 0x000200f9u, 0x00000466u, + 0x000200f8u, 0x00000466u, 0x000400f6u, 0x00000468u, 0x00000469u, 0x00000000u, 0x000200f9u, 0x00000467u, + 0x000200f8u, 0x00000467u, 0x00050041u, 0x00000195u, 0x0000046au, 0x00000194u, 0x00000240u, 0x0004003du, + 0x00000006u, 0x0000046bu, 0x0000046au, 0x000500aau, 0x00000035u, 0x0000046cu, 0x0000046bu, 0x0000003fu, + 0x000300f7u, 0x0000046eu, 0x00000000u, 0x000400fau, 0x0000046cu, 0x0000046du, 0x00000483u, 0x000200f8u, + 0x0000046du, 0x00050041u, 0x00000195u, 0x0000046fu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, + 0x00000470u, 0x0000046fu, 0x000500c2u, 0x00000006u, 0x00000471u, 0x00000470u, 0x000001a0u, 0x0004003du, + 0x00000006u, 0x00000472u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000473u, 0x000003b9u, 0x00050080u, + 0x00000006u, 0x00000474u, 0x00000472u, 0x00000473u, 0x00050080u, 0x00000006u, 0x00000475u, 0x00000471u, + 0x00000474u, 0x0004003du, 0x00000006u, 0x00000476u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x00000477u, + 0x00000476u, 0x0000015eu, 0x000300f7u, 0x0000047au, 0x00000000u, 0x000400fau, 0x00000477u, 0x00000479u, + 0x0000047eu, 0x000200f8u, 0x00000479u, 0x0004003du, 0x00000008u, 0x0000047bu, 0x000003c4u, 0x0004003du, + 0x00000008u, 0x0000047cu, 0x0000045au, 0x00050085u, 0x00000008u, 0x0000047du, 0x0000047bu, 0x0000047cu, + 0x0003003eu, 0x00000478u, 0x0000047du, 0x000200f9u, 0x0000047au, 0x000200f8u, 0x0000047eu, 0x0004003du, + 0x00000008u, 0x0000047fu, 0x0000045au, 0x0003003eu, 0x00000478u, 0x0000047fu, 0x000200f9u, 0x0000047au, + 0x000200f8u, 0x0000047au, 0x0004003du, 0x00000008u, 0x00000480u, 0x00000478u, 0x0004007cu, 0x00000006u, + 0x00000481u, 0x00000480u, 0x00060041u, 0x000001afu, 0x00000482u, 0x0000024au, 0x000000dcu, 0x00000475u, + 0x0003003eu, 0x00000482u, 0x00000481u, 0x000200f9u, 0x0000046eu, 0x000200f8u, 0x00000483u, 0x00050041u, + 0x00000195u, 0x00000484u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000485u, 0x00000484u, + 0x000500c2u, 0x00000006u, 0x00000486u, 0x00000485u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000487u, + 0x00000190u, 0x0004003du, 0x00000006u, 0x00000488u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x00000489u, + 0x00000487u, 0x00000488u, 0x00050080u, 0x00000006u, 0x0000048au, 0x00000486u, 0x00000489u, 0x0004003du, + 0x00000006u, 0x0000048bu, 0x000001a8u, 0x000500aau, 0x00000035u, 0x0000048cu, 0x0000048bu, 0x0000015eu, + 0x000300f7u, 0x0000048fu, 0x00000000u, 0x000400fau, 0x0000048cu, 0x0000048eu, 0x00000493u, 0x000200f8u, + 0x0000048eu, 0x0004003du, 0x00000008u, 0x00000490u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000491u, + 0x0000045au, 0x00050085u, 0x00000008u, 0x00000492u, 0x00000490u, 0x00000491u, 0x0003003eu, 0x0000048du, + 0x00000492u, 0x000200f9u, 0x0000048fu, 0x000200f8u, 0x00000493u, 0x0004003du, 0x00000008u, 0x00000494u, + 0x0000045au, 0x0003003eu, 0x0000048du, 0x00000494u, 0x000200f9u, 0x0000048fu, 0x000200f8u, 0x0000048fu, + 0x0004003du, 0x00000008u, 0x00000496u, 0x0000048du, 0x0003003eu, 0x00000495u, 0x00000496u, 0x00050041u, + 0x00000195u, 0x00000498u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000499u, 0x00000498u, + 0x0003003eu, 0x00000497u, 0x00000499u, 0x00060039u, 0x00000006u, 0x0000049au, 0x00000020u, 0x00000495u, + 0x00000497u, 0x00040071u, 0x000001f7u, 0x0000049bu, 0x0000049au, 0x00060041u, 0x00000203u, 0x0000049cu, + 0x0000025au, 0x000000dcu, 0x0000048au, 0x0003003eu, 0x0000049cu, 0x0000049bu, 0x000200f9u, 0x0000046eu, + 0x000200f8u, 0x0000046eu, 0x000200f9u, 0x00000469u, 0x000200f8u, 0x00000469u, 0x000400fau, 0x00000372u, + 0x00000466u, 0x00000468u, 0x000200f8u, 0x00000468u, 0x000200f9u, 0x00000465u, 0x000200f8u, 0x0000049du, + 0x000200f9u, 0x0000049eu, 0x000200f8u, 0x0000049eu, 0x000400f6u, 0x000004a0u, 0x000004a1u, 0x00000000u, + 0x000200f9u, 0x0000049fu, 0x000200f8u, 0x0000049fu, 0x00050041u, 0x00000195u, 0x000004a2u, 0x00000194u, + 0x0000026cu, 0x0004003du, 0x00000006u, 0x000004a3u, 0x000004a2u, 0x000500aau, 0x00000035u, 0x000004a4u, + 0x000004a3u, 0x0000003fu, 0x000300f7u, 0x000004a6u, 0x00000000u, 0x000400fau, 0x000004a4u, 0x000004a5u, + 0x000004bbu, 0x000200f8u, 0x000004a5u, 0x00050041u, 0x00000195u, 0x000004a7u, 0x00000194u, 0x00000060u, + 0x0004003du, 0x00000006u, 0x000004a8u, 0x000004a7u, 0x000500c2u, 0x00000006u, 0x000004a9u, 0x000004a8u, + 0x000001a0u, 0x0004003du, 0x00000006u, 0x000004aau, 0x00000190u, 0x0004003du, 0x00000006u, 0x000004abu, + 0x000003b9u, 0x00050080u, 0x00000006u, 0x000004acu, 0x000004aau, 0x000004abu, 0x00050080u, 0x00000006u, + 0x000004adu, 0x000004a9u, 0x000004acu, 0x0004003du, 0x00000006u, 0x000004aeu, 0x000001a8u, 0x000500aau, + 0x00000035u, 0x000004afu, 0x000004aeu, 0x0000015eu, 0x000300f7u, 0x000004b2u, 0x00000000u, 0x000400fau, + 0x000004afu, 0x000004b1u, 0x000004b6u, 0x000200f8u, 0x000004b1u, 0x0004003du, 0x00000008u, 0x000004b3u, + 0x000003c4u, 0x0004003du, 0x00000008u, 0x000004b4u, 0x0000045au, 0x00050085u, 0x00000008u, 0x000004b5u, + 0x000004b3u, 0x000004b4u, 0x0003003eu, 0x000004b0u, 0x000004b5u, 0x000200f9u, 0x000004b2u, 0x000200f8u, + 0x000004b6u, 0x0004003du, 0x00000008u, 0x000004b7u, 0x0000045au, 0x0003003eu, 0x000004b0u, 0x000004b7u, + 0x000200f9u, 0x000004b2u, 0x000200f8u, 0x000004b2u, 0x0004003du, 0x00000008u, 0x000004b8u, 0x000004b0u, + 0x0004007cu, 0x00000006u, 0x000004b9u, 0x000004b8u, 0x00060041u, 0x000001afu, 0x000004bau, 0x00000276u, + 0x000000dcu, 0x000004adu, 0x0003003eu, 0x000004bau, 0x000004b9u, 0x000200f9u, 0x000004a6u, 0x000200f8u, + 0x000004bbu, 0x00050041u, 0x00000195u, 0x000004bcu, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, + 0x000004bdu, 0x000004bcu, 0x000500c2u, 0x00000006u, 0x000004beu, 0x000004bdu, 0x00000089u, 0x0004003du, + 0x00000006u, 0x000004bfu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000004c0u, 0x000003b9u, 0x00050080u, + 0x00000006u, 0x000004c1u, 0x000004bfu, 0x000004c0u, 0x00050080u, 0x00000006u, 0x000004c2u, 0x000004beu, + 0x000004c1u, 0x0004003du, 0x00000006u, 0x000004c3u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x000004c4u, + 0x000004c3u, 0x0000015eu, 0x000300f7u, 0x000004c7u, 0x00000000u, 0x000400fau, 0x000004c4u, 0x000004c6u, + 0x000004cbu, 0x000200f8u, 0x000004c6u, 0x0004003du, 0x00000008u, 0x000004c8u, 0x000003c4u, 0x0004003du, + 0x00000008u, 0x000004c9u, 0x0000045au, 0x00050085u, 0x00000008u, 0x000004cau, 0x000004c8u, 0x000004c9u, + 0x0003003eu, 0x000004c5u, 0x000004cau, 0x000200f9u, 0x000004c7u, 0x000200f8u, 0x000004cbu, 0x0004003du, + 0x00000008u, 0x000004ccu, 0x0000045au, 0x0003003eu, 0x000004c5u, 0x000004ccu, 0x000200f9u, 0x000004c7u, + 0x000200f8u, 0x000004c7u, 0x0004003du, 0x00000008u, 0x000004ceu, 0x000004c5u, 0x0003003eu, 0x000004cdu, + 0x000004ceu, 0x00050041u, 0x00000195u, 0x000004d0u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, + 0x000004d1u, 0x000004d0u, 0x0003003eu, 0x000004cfu, 0x000004d1u, 0x00060039u, 0x00000006u, 0x000004d2u, + 0x00000020u, 0x000004cdu, 0x000004cfu, 0x00040071u, 0x000001f7u, 0x000004d3u, 0x000004d2u, 0x00060041u, + 0x00000203u, 0x000004d4u, 0x00000285u, 0x000000dcu, 0x000004c2u, 0x0003003eu, 0x000004d4u, 0x000004d3u, + 0x000200f9u, 0x000004a6u, 0x000200f8u, 0x000004a6u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x000004a1u, + 0x000400fau, 0x00000372u, 0x0000049eu, 0x000004a0u, 0x000200f8u, 0x000004a0u, 0x000200f9u, 0x00000465u, + 0x000200f8u, 0x00000465u, 0x000200f9u, 0x00000461u, 0x000200f8u, 0x00000461u, 0x000400fau, 0x00000372u, + 0x0000045eu, 0x00000460u, 0x000200f8u, 0x00000460u, 0x000200f9u, 0x000003beu, 0x000200f8u, 0x000003beu, + 0x0004003du, 0x00000006u, 0x000004d5u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000004d6u, 0x000004d5u, + 0x00000160u, 0x0003003eu, 0x000003b9u, 0x000004d6u, 0x000200f9u, 0x000003bbu, 0x000200f8u, 0x000003bdu, + 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000004d7u, 0x0003003eu, 0x000004d8u, 0x000004d9u, 0x0004003du, + 0x00000006u, 0x000004dbu, 0x0000018cu, 0x0003003eu, 0x000004dau, 0x000004dbu, 0x000200f9u, 0x000004dcu, + 0x000200f8u, 0x000004dcu, 0x000400f6u, 0x000004deu, 0x000004dfu, 0x00000000u, 0x000200f9u, 0x000004e0u, + 0x000200f8u, 0x000004e0u, 0x0004003du, 0x00000006u, 0x000004e1u, 0x000004dau, 0x00050041u, 0x00000195u, + 0x000004e2u, 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000004e3u, 0x000004e2u, 0x000500b0u, + 0x00000035u, 0x000004e4u, 0x000004e1u, 0x000004e3u, 0x000400fau, 0x000004e4u, 0x000004ddu, 0x000004deu, + 0x000200f8u, 0x000004ddu, 0x0004003du, 0x00000006u, 0x000004e6u, 0x000001b7u, 0x000500aau, 0x00000035u, + 0x000004e7u, 0x000004e6u, 0x0000003fu, 0x000300f7u, 0x000004eau, 0x00000000u, 0x000400fau, 0x000004e7u, + 0x000004e9u, 0x0000050cu, 0x000200f8u, 0x000004e9u, 0x00050041u, 0x00000195u, 0x000004ebu, 0x00000194u, + 0x000001e0u, 0x0004003du, 0x00000006u, 0x000004ecu, 0x000004ebu, 0x000500aau, 0x00000035u, 0x000004edu, + 0x000004ecu, 0x0000003fu, 0x000300f7u, 0x000004f0u, 0x00000000u, 0x000400fau, 0x000004edu, 0x000004efu, + 0x000004fbu, 0x000200f8u, 0x000004efu, 0x00050041u, 0x00000195u, 0x000004f1u, 0x00000194u, 0x000001ebu, + 0x0004003du, 0x00000006u, 0x000004f2u, 0x000004f1u, 0x000500c2u, 0x00000006u, 0x000004f3u, 0x000004f2u, + 0x000001a0u, 0x0004003du, 0x00000006u, 0x000004f4u, 0x00000190u, 0x0004003du, 0x00000006u, 0x000004f5u, + 0x000004dau, 0x00050080u, 0x00000006u, 0x000004f6u, 0x000004f4u, 0x000004f5u, 0x00050080u, 0x00000006u, + 0x000004f7u, 0x000004f3u, 0x000004f6u, 0x00060041u, 0x000001afu, 0x000004f8u, 0x000001eau, 0x000000dcu, + 0x000004f7u, 0x0004003du, 0x00000006u, 0x000004f9u, 0x000004f8u, 0x0004007cu, 0x00000008u, 0x000004fau, + 0x000004f9u, 0x0003003eu, 0x000004eeu, 0x000004fau, 0x000200f9u, 0x000004f0u, 0x000200f8u, 0x000004fbu, + 0x00050041u, 0x00000195u, 0x000004fcu, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000004fdu, + 0x000004fcu, 0x000500c2u, 0x00000006u, 0x000004feu, 0x000004fdu, 0x00000089u, 0x0004003du, 0x00000006u, + 0x000004ffu, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000500u, 0x000004dau, 0x00050080u, 0x00000006u, + 0x00000501u, 0x000004ffu, 0x00000500u, 0x00050080u, 0x00000006u, 0x00000502u, 0x000004feu, 0x00000501u, + 0x00060041u, 0x00000203u, 0x00000503u, 0x000001fbu, 0x000000dcu, 0x00000502u, 0x0004003du, 0x000001f7u, + 0x00000504u, 0x00000503u, 0x00040071u, 0x00000006u, 0x00000505u, 0x00000504u, 0x0003003eu, 0x00000506u, + 0x00000505u, 0x00050041u, 0x00000195u, 0x00000508u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, + 0x00000509u, 0x00000508u, 0x0003003eu, 0x00000507u, 0x00000509u, 0x00060039u, 0x00000008u, 0x0000050au, + 0x0000001bu, 0x00000506u, 0x00000507u, 0x0003003eu, 0x000004eeu, 0x0000050au, 0x000200f9u, 0x000004f0u, + 0x000200f8u, 0x000004f0u, 0x0004003du, 0x00000008u, 0x0000050bu, 0x000004eeu, 0x0003003eu, 0x000004e8u, + 0x0000050bu, 0x000200f9u, 0x000004eau, 0x000200f8u, 0x0000050cu, 0x0004003du, 0x00000006u, 0x0000050du, + 0x000001b7u, 0x000500aau, 0x00000035u, 0x0000050eu, 0x0000050du, 0x0000004fu, 0x000300f7u, 0x00000511u, + 0x00000000u, 0x000400fau, 0x0000050eu, 0x00000510u, 0x0000052fu, 0x000200f8u, 0x00000510u, 0x00050041u, + 0x00000195u, 0x00000512u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x00000513u, 0x00000512u, + 0x000500aau, 0x00000035u, 0x00000514u, 0x00000513u, 0x0000003fu, 0x000300f7u, 0x00000517u, 0x00000000u, + 0x000400fau, 0x00000514u, 0x00000516u, 0x00000520u, 0x000200f8u, 0x00000516u, 0x00050041u, 0x00000195u, + 0x00000518u, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000519u, 0x00000518u, 0x000500c2u, + 0x00000006u, 0x0000051au, 0x00000519u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000051bu, 0x000004dau, + 0x00050080u, 0x00000006u, 0x0000051cu, 0x0000051au, 0x0000051bu, 0x00060041u, 0x000001afu, 0x0000051du, + 0x0000021du, 0x000000dcu, 0x0000051cu, 0x0004003du, 0x00000006u, 0x0000051eu, 0x0000051du, 0x0004007cu, + 0x00000008u, 0x0000051fu, 0x0000051eu, 0x0003003eu, 0x00000515u, 0x0000051fu, 0x000200f9u, 0x00000517u, + 0x000200f8u, 0x00000520u, 0x00050041u, 0x00000195u, 0x00000521u, 0x00000194u, 0x0000021eu, 0x0004003du, + 0x00000006u, 0x00000522u, 0x00000521u, 0x000500c2u, 0x00000006u, 0x00000523u, 0x00000522u, 0x00000089u, + 0x0004003du, 0x00000006u, 0x00000524u, 0x000004dau, 0x00050080u, 0x00000006u, 0x00000525u, 0x00000523u, + 0x00000524u, 0x00060041u, 0x00000203u, 0x00000526u, 0x0000022bu, 0x000000dcu, 0x00000525u, 0x0004003du, + 0x000001f7u, 0x00000527u, 0x00000526u, 0x00040071u, 0x00000006u, 0x00000528u, 0x00000527u, 0x0003003eu, + 0x00000529u, 0x00000528u, 0x00050041u, 0x00000195u, 0x0000052bu, 0x00000194u, 0x00000213u, 0x0004003du, + 0x00000006u, 0x0000052cu, 0x0000052bu, 0x0003003eu, 0x0000052au, 0x0000052cu, 0x00060039u, 0x00000008u, + 0x0000052du, 0x0000001bu, 0x00000529u, 0x0000052au, 0x0003003eu, 0x00000515u, 0x0000052du, 0x000200f9u, + 0x00000517u, 0x000200f8u, 0x00000517u, 0x0004003du, 0x00000008u, 0x0000052eu, 0x00000515u, 0x0003003eu, + 0x0000050fu, 0x0000052eu, 0x000200f9u, 0x00000511u, 0x000200f8u, 0x0000052fu, 0x0004003du, 0x00000006u, + 0x00000530u, 0x000001b7u, 0x000500aau, 0x00000035u, 0x00000531u, 0x00000530u, 0x0000015eu, 0x000300f7u, + 0x00000534u, 0x00000000u, 0x000400fau, 0x00000531u, 0x00000533u, 0x00000556u, 0x000200f8u, 0x00000533u, + 0x00050041u, 0x00000195u, 0x00000535u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000536u, + 0x00000535u, 0x000500aau, 0x00000035u, 0x00000537u, 0x00000536u, 0x0000003fu, 0x000300f7u, 0x0000053au, + 0x00000000u, 0x000400fau, 0x00000537u, 0x00000539u, 0x00000545u, 0x000200f8u, 0x00000539u, 0x00050041u, + 0x00000195u, 0x0000053bu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x0000053cu, 0x0000053bu, + 0x000500c2u, 0x00000006u, 0x0000053du, 0x0000053cu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000053eu, + 0x00000190u, 0x0004003du, 0x00000006u, 0x0000053fu, 0x000004dau, 0x00050080u, 0x00000006u, 0x00000540u, + 0x0000053eu, 0x0000053fu, 0x00050080u, 0x00000006u, 0x00000541u, 0x0000053du, 0x00000540u, 0x00060041u, + 0x000001afu, 0x00000542u, 0x0000024au, 0x000000dcu, 0x00000541u, 0x0004003du, 0x00000006u, 0x00000543u, + 0x00000542u, 0x0004007cu, 0x00000008u, 0x00000544u, 0x00000543u, 0x0003003eu, 0x00000538u, 0x00000544u, + 0x000200f9u, 0x0000053au, 0x000200f8u, 0x00000545u, 0x00050041u, 0x00000195u, 0x00000546u, 0x00000194u, + 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000547u, 0x00000546u, 0x000500c2u, 0x00000006u, 0x00000548u, + 0x00000547u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000549u, 0x00000190u, 0x0004003du, 0x00000006u, + 0x0000054au, 0x000004dau, 0x00050080u, 0x00000006u, 0x0000054bu, 0x00000549u, 0x0000054au, 0x00050080u, + 0x00000006u, 0x0000054cu, 0x00000548u, 0x0000054bu, 0x00060041u, 0x00000203u, 0x0000054du, 0x0000025au, + 0x000000dcu, 0x0000054cu, 0x0004003du, 0x000001f7u, 0x0000054eu, 0x0000054du, 0x00040071u, 0x00000006u, + 0x0000054fu, 0x0000054eu, 0x0003003eu, 0x00000550u, 0x0000054fu, 0x00050041u, 0x00000195u, 0x00000552u, + 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000553u, 0x00000552u, 0x0003003eu, 0x00000551u, + 0x00000553u, 0x00060039u, 0x00000008u, 0x00000554u, 0x0000001bu, 0x00000550u, 0x00000551u, 0x0003003eu, + 0x00000538u, 0x00000554u, 0x000200f9u, 0x0000053au, 0x000200f8u, 0x0000053au, 0x0004003du, 0x00000008u, + 0x00000555u, 0x00000538u, 0x0003003eu, 0x00000532u, 0x00000555u, 0x000200f9u, 0x00000534u, 0x000200f8u, + 0x00000556u, 0x00050041u, 0x00000195u, 0x00000557u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, + 0x00000558u, 0x00000557u, 0x000500aau, 0x00000035u, 0x00000559u, 0x00000558u, 0x0000003fu, 0x000300f7u, + 0x0000055cu, 0x00000000u, 0x000400fau, 0x00000559u, 0x0000055bu, 0x00000567u, 0x000200f8u, 0x0000055bu, + 0x00050041u, 0x00000195u, 0x0000055du, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x0000055eu, + 0x0000055du, 0x000500c2u, 0x00000006u, 0x0000055fu, 0x0000055eu, 0x000001a0u, 0x0004003du, 0x00000006u, + 0x00000560u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000561u, 0x000004dau, 0x00050080u, 0x00000006u, + 0x00000562u, 0x00000560u, 0x00000561u, 0x00050080u, 0x00000006u, 0x00000563u, 0x0000055fu, 0x00000562u, + 0x00060041u, 0x000001afu, 0x00000564u, 0x00000276u, 0x000000dcu, 0x00000563u, 0x0004003du, 0x00000006u, + 0x00000565u, 0x00000564u, 0x0004007cu, 0x00000008u, 0x00000566u, 0x00000565u, 0x0003003eu, 0x0000055au, + 0x00000566u, 0x000200f9u, 0x0000055cu, 0x000200f8u, 0x00000567u, 0x00050041u, 0x00000195u, 0x00000568u, + 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000569u, 0x00000568u, 0x000500c2u, 0x00000006u, + 0x0000056au, 0x00000569u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000056bu, 0x00000190u, 0x0004003du, + 0x00000006u, 0x0000056cu, 0x000004dau, 0x00050080u, 0x00000006u, 0x0000056du, 0x0000056bu, 0x0000056cu, + 0x00050080u, 0x00000006u, 0x0000056eu, 0x0000056au, 0x0000056du, 0x00060041u, 0x00000203u, 0x0000056fu, + 0x00000285u, 0x000000dcu, 0x0000056eu, 0x0004003du, 0x000001f7u, 0x00000570u, 0x0000056fu, 0x00040071u, + 0x00000006u, 0x00000571u, 0x00000570u, 0x0003003eu, 0x00000572u, 0x00000571u, 0x00050041u, 0x00000195u, + 0x00000574u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000575u, 0x00000574u, 0x0003003eu, + 0x00000573u, 0x00000575u, 0x00060039u, 0x00000008u, 0x00000576u, 0x0000001bu, 0x00000572u, 0x00000573u, + 0x0003003eu, 0x0000055au, 0x00000576u, 0x000200f9u, 0x0000055cu, 0x000200f8u, 0x0000055cu, 0x0004003du, + 0x00000008u, 0x00000577u, 0x0000055au, 0x0003003eu, 0x00000532u, 0x00000577u, 0x000200f9u, 0x00000534u, + 0x000200f8u, 0x00000534u, 0x0004003du, 0x00000008u, 0x00000578u, 0x00000532u, 0x0003003eu, 0x0000050fu, + 0x00000578u, 0x000200f9u, 0x00000511u, 0x000200f8u, 0x00000511u, 0x0004003du, 0x00000008u, 0x00000579u, + 0x0000050fu, 0x0003003eu, 0x000004e8u, 0x00000579u, 0x000200f9u, 0x000004eau, 0x000200f8u, 0x000004eau, + 0x0004003du, 0x00000008u, 0x0000057au, 0x000004e8u, 0x0003003eu, 0x000004e5u, 0x0000057au, 0x0004003du, + 0x00000008u, 0x0000057bu, 0x000004e5u, 0x0004003du, 0x00000008u, 0x0000057cu, 0x000004e5u, 0x00050085u, + 0x00000008u, 0x0000057du, 0x0000057bu, 0x0000057cu, 0x0004003du, 0x00000008u, 0x0000057eu, 0x000004d8u, + 0x00050081u, 0x00000008u, 0x0000057fu, 0x0000057eu, 0x0000057du, 0x0003003eu, 0x000004d8u, 0x0000057fu, + 0x000200f9u, 0x000004dfu, 0x000200f8u, 0x000004dfu, 0x0004003du, 0x00000006u, 0x00000580u, 0x000004dau, + 0x00050080u, 0x00000006u, 0x00000581u, 0x00000580u, 0x00000160u, 0x0003003eu, 0x000004dau, 0x00000581u, + 0x000200f9u, 0x000004dcu, 0x000200f8u, 0x000004deu, 0x0004003du, 0x00000006u, 0x00000584u, 0x0000018cu, + 0x0003003eu, 0x00000583u, 0x00000584u, 0x0004003du, 0x00000008u, 0x00000586u, 0x000004d8u, 0x0003003eu, + 0x00000585u, 0x00000586u, 0x00060039u, 0x00000008u, 0x00000587u, 0x00000029u, 0x00000583u, 0x00000585u, + 0x00050041u, 0x00000195u, 0x00000588u, 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000589u, + 0x00000588u, 0x00040070u, 0x00000008u, 0x0000058au, 0x00000589u, 0x00050088u, 0x00000008u, 0x0000058bu, + 0x00000587u, 0x0000058au, 0x00050041u, 0x0000058du, 0x0000058eu, 0x00000194u, 0x0000058cu, 0x0004003du, + 0x00000008u, 0x0000058fu, 0x0000058eu, 0x00050081u, 0x00000008u, 0x00000590u, 0x0000058bu, 0x0000058fu, + 0x0006000cu, 0x00000008u, 0x00000591u, 0x00000001u, 0x0000001fu, 0x00000590u, 0x00050088u, 0x00000008u, + 0x00000592u, 0x00000156u, 0x00000591u, 0x0003003eu, 0x00000582u, 0x00000592u, 0x0004003du, 0x00000006u, + 0x00000594u, 0x0000018cu, 0x0003003eu, 0x00000593u, 0x00000594u, 0x000200f9u, 0x00000595u, 0x000200f8u, + 0x00000595u, 0x000400f6u, 0x00000597u, 0x00000598u, 0x00000000u, 0x000200f9u, 0x00000599u, 0x000200f8u, + 0x00000599u, 0x0004003du, 0x00000006u, 0x0000059au, 0x00000593u, 0x00050041u, 0x00000195u, 0x0000059bu, + 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000059cu, 0x0000059bu, 0x000500b0u, 0x00000035u, + 0x0000059du, 0x0000059au, 0x0000059cu, 0x000400fau, 0x0000059du, 0x00000596u, 0x00000597u, 0x000200f8u, + 0x00000596u, 0x0004003du, 0x00000006u, 0x0000059fu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x000005a0u, + 0x0000059fu, 0x0000003fu, 0x000300f7u, 0x000005a3u, 0x00000000u, 0x000400fau, 0x000005a0u, 0x000005a2u, + 0x000005c5u, 0x000200f8u, 0x000005a2u, 0x00050041u, 0x00000195u, 0x000005a4u, 0x00000194u, 0x000001e0u, + 0x0004003du, 0x00000006u, 0x000005a5u, 0x000005a4u, 0x000500aau, 0x00000035u, 0x000005a6u, 0x000005a5u, + 0x0000003fu, 0x000300f7u, 0x000005a9u, 0x00000000u, 0x000400fau, 0x000005a6u, 0x000005a8u, 0x000005b4u, + 0x000200f8u, 0x000005a8u, 0x00050041u, 0x00000195u, 0x000005aau, 0x00000194u, 0x000001ebu, 0x0004003du, + 0x00000006u, 0x000005abu, 0x000005aau, 0x000500c2u, 0x00000006u, 0x000005acu, 0x000005abu, 0x000001a0u, + 0x0004003du, 0x00000006u, 0x000005adu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000005aeu, 0x00000593u, + 0x00050080u, 0x00000006u, 0x000005afu, 0x000005adu, 0x000005aeu, 0x00050080u, 0x00000006u, 0x000005b0u, + 0x000005acu, 0x000005afu, 0x00060041u, 0x000001afu, 0x000005b1u, 0x000001eau, 0x000000dcu, 0x000005b0u, + 0x0004003du, 0x00000006u, 0x000005b2u, 0x000005b1u, 0x0004007cu, 0x00000008u, 0x000005b3u, 0x000005b2u, + 0x0003003eu, 0x000005a7u, 0x000005b3u, 0x000200f9u, 0x000005a9u, 0x000200f8u, 0x000005b4u, 0x00050041u, + 0x00000195u, 0x000005b5u, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000005b6u, 0x000005b5u, + 0x000500c2u, 0x00000006u, 0x000005b7u, 0x000005b6u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000005b8u, + 0x00000190u, 0x0004003du, 0x00000006u, 0x000005b9u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000005bau, + 0x000005b8u, 0x000005b9u, 0x00050080u, 0x00000006u, 0x000005bbu, 0x000005b7u, 0x000005bau, 0x00060041u, + 0x00000203u, 0x000005bcu, 0x000001fbu, 0x000000dcu, 0x000005bbu, 0x0004003du, 0x000001f7u, 0x000005bdu, + 0x000005bcu, 0x00040071u, 0x00000006u, 0x000005beu, 0x000005bdu, 0x0003003eu, 0x000005bfu, 0x000005beu, + 0x00050041u, 0x00000195u, 0x000005c1u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000005c2u, + 0x000005c1u, 0x0003003eu, 0x000005c0u, 0x000005c2u, 0x00060039u, 0x00000008u, 0x000005c3u, 0x0000001bu, + 0x000005bfu, 0x000005c0u, 0x0003003eu, 0x000005a7u, 0x000005c3u, 0x000200f9u, 0x000005a9u, 0x000200f8u, + 0x000005a9u, 0x0004003du, 0x00000008u, 0x000005c4u, 0x000005a7u, 0x0003003eu, 0x000005a1u, 0x000005c4u, + 0x000200f9u, 0x000005a3u, 0x000200f8u, 0x000005c5u, 0x0004003du, 0x00000006u, 0x000005c6u, 0x000001b7u, + 0x000500aau, 0x00000035u, 0x000005c7u, 0x000005c6u, 0x0000004fu, 0x000300f7u, 0x000005cau, 0x00000000u, + 0x000400fau, 0x000005c7u, 0x000005c9u, 0x000005e8u, 0x000200f8u, 0x000005c9u, 0x00050041u, 0x00000195u, + 0x000005cbu, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x000005ccu, 0x000005cbu, 0x000500aau, + 0x00000035u, 0x000005cdu, 0x000005ccu, 0x0000003fu, 0x000300f7u, 0x000005d0u, 0x00000000u, 0x000400fau, + 0x000005cdu, 0x000005cfu, 0x000005d9u, 0x000200f8u, 0x000005cfu, 0x00050041u, 0x00000195u, 0x000005d1u, + 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000005d2u, 0x000005d1u, 0x000500c2u, 0x00000006u, + 0x000005d3u, 0x000005d2u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000005d4u, 0x00000593u, 0x00050080u, + 0x00000006u, 0x000005d5u, 0x000005d3u, 0x000005d4u, 0x00060041u, 0x000001afu, 0x000005d6u, 0x0000021du, + 0x000000dcu, 0x000005d5u, 0x0004003du, 0x00000006u, 0x000005d7u, 0x000005d6u, 0x0004007cu, 0x00000008u, + 0x000005d8u, 0x000005d7u, 0x0003003eu, 0x000005ceu, 0x000005d8u, 0x000200f9u, 0x000005d0u, 0x000200f8u, + 0x000005d9u, 0x00050041u, 0x00000195u, 0x000005dau, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, + 0x000005dbu, 0x000005dau, 0x000500c2u, 0x00000006u, 0x000005dcu, 0x000005dbu, 0x00000089u, 0x0004003du, + 0x00000006u, 0x000005ddu, 0x00000593u, 0x00050080u, 0x00000006u, 0x000005deu, 0x000005dcu, 0x000005ddu, + 0x00060041u, 0x00000203u, 0x000005dfu, 0x0000022bu, 0x000000dcu, 0x000005deu, 0x0004003du, 0x000001f7u, + 0x000005e0u, 0x000005dfu, 0x00040071u, 0x00000006u, 0x000005e1u, 0x000005e0u, 0x0003003eu, 0x000005e2u, + 0x000005e1u, 0x00050041u, 0x00000195u, 0x000005e4u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, + 0x000005e5u, 0x000005e4u, 0x0003003eu, 0x000005e3u, 0x000005e5u, 0x00060039u, 0x00000008u, 0x000005e6u, + 0x0000001bu, 0x000005e2u, 0x000005e3u, 0x0003003eu, 0x000005ceu, 0x000005e6u, 0x000200f9u, 0x000005d0u, + 0x000200f8u, 0x000005d0u, 0x0004003du, 0x00000008u, 0x000005e7u, 0x000005ceu, 0x0003003eu, 0x000005c8u, + 0x000005e7u, 0x000200f9u, 0x000005cau, 0x000200f8u, 0x000005e8u, 0x0004003du, 0x00000006u, 0x000005e9u, + 0x000001b7u, 0x000500aau, 0x00000035u, 0x000005eau, 0x000005e9u, 0x0000015eu, 0x000300f7u, 0x000005edu, + 0x00000000u, 0x000400fau, 0x000005eau, 0x000005ecu, 0x0000060fu, 0x000200f8u, 0x000005ecu, 0x00050041u, + 0x00000195u, 0x000005eeu, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x000005efu, 0x000005eeu, + 0x000500aau, 0x00000035u, 0x000005f0u, 0x000005efu, 0x0000003fu, 0x000300f7u, 0x000005f3u, 0x00000000u, + 0x000400fau, 0x000005f0u, 0x000005f2u, 0x000005feu, 0x000200f8u, 0x000005f2u, 0x00050041u, 0x00000195u, + 0x000005f4u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000005f5u, 0x000005f4u, 0x000500c2u, + 0x00000006u, 0x000005f6u, 0x000005f5u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000005f7u, 0x00000190u, + 0x0004003du, 0x00000006u, 0x000005f8u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000005f9u, 0x000005f7u, + 0x000005f8u, 0x00050080u, 0x00000006u, 0x000005fau, 0x000005f6u, 0x000005f9u, 0x00060041u, 0x000001afu, + 0x000005fbu, 0x0000024au, 0x000000dcu, 0x000005fau, 0x0004003du, 0x00000006u, 0x000005fcu, 0x000005fbu, + 0x0004007cu, 0x00000008u, 0x000005fdu, 0x000005fcu, 0x0003003eu, 0x000005f1u, 0x000005fdu, 0x000200f9u, + 0x000005f3u, 0x000200f8u, 0x000005feu, 0x00050041u, 0x00000195u, 0x000005ffu, 0x00000194u, 0x0000024bu, + 0x0004003du, 0x00000006u, 0x00000600u, 0x000005ffu, 0x000500c2u, 0x00000006u, 0x00000601u, 0x00000600u, + 0x00000089u, 0x0004003du, 0x00000006u, 0x00000602u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000603u, + 0x00000593u, 0x00050080u, 0x00000006u, 0x00000604u, 0x00000602u, 0x00000603u, 0x00050080u, 0x00000006u, + 0x00000605u, 0x00000601u, 0x00000604u, 0x00060041u, 0x00000203u, 0x00000606u, 0x0000025au, 0x000000dcu, + 0x00000605u, 0x0004003du, 0x000001f7u, 0x00000607u, 0x00000606u, 0x00040071u, 0x00000006u, 0x00000608u, + 0x00000607u, 0x0003003eu, 0x00000609u, 0x00000608u, 0x00050041u, 0x00000195u, 0x0000060bu, 0x00000194u, + 0x00000240u, 0x0004003du, 0x00000006u, 0x0000060cu, 0x0000060bu, 0x0003003eu, 0x0000060au, 0x0000060cu, + 0x00060039u, 0x00000008u, 0x0000060du, 0x0000001bu, 0x00000609u, 0x0000060au, 0x0003003eu, 0x000005f1u, + 0x0000060du, 0x000200f9u, 0x000005f3u, 0x000200f8u, 0x000005f3u, 0x0004003du, 0x00000008u, 0x0000060eu, + 0x000005f1u, 0x0003003eu, 0x000005ebu, 0x0000060eu, 0x000200f9u, 0x000005edu, 0x000200f8u, 0x0000060fu, + 0x00050041u, 0x00000195u, 0x00000610u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000611u, + 0x00000610u, 0x000500aau, 0x00000035u, 0x00000612u, 0x00000611u, 0x0000003fu, 0x000300f7u, 0x00000615u, + 0x00000000u, 0x000400fau, 0x00000612u, 0x00000614u, 0x00000620u, 0x000200f8u, 0x00000614u, 0x00050041u, + 0x00000195u, 0x00000616u, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000617u, 0x00000616u, + 0x000500c2u, 0x00000006u, 0x00000618u, 0x00000617u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000619u, + 0x00000190u, 0x0004003du, 0x00000006u, 0x0000061au, 0x00000593u, 0x00050080u, 0x00000006u, 0x0000061bu, + 0x00000619u, 0x0000061au, 0x00050080u, 0x00000006u, 0x0000061cu, 0x00000618u, 0x0000061bu, 0x00060041u, + 0x000001afu, 0x0000061du, 0x00000276u, 0x000000dcu, 0x0000061cu, 0x0004003du, 0x00000006u, 0x0000061eu, + 0x0000061du, 0x0004007cu, 0x00000008u, 0x0000061fu, 0x0000061eu, 0x0003003eu, 0x00000613u, 0x0000061fu, + 0x000200f9u, 0x00000615u, 0x000200f8u, 0x00000620u, 0x00050041u, 0x00000195u, 0x00000621u, 0x00000194u, + 0x00000060u, 0x0004003du, 0x00000006u, 0x00000622u, 0x00000621u, 0x000500c2u, 0x00000006u, 0x00000623u, + 0x00000622u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000624u, 0x00000190u, 0x0004003du, 0x00000006u, + 0x00000625u, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000626u, 0x00000624u, 0x00000625u, 0x00050080u, + 0x00000006u, 0x00000627u, 0x00000623u, 0x00000626u, 0x00060041u, 0x00000203u, 0x00000628u, 0x00000285u, + 0x000000dcu, 0x00000627u, 0x0004003du, 0x000001f7u, 0x00000629u, 0x00000628u, 0x00040071u, 0x00000006u, + 0x0000062au, 0x00000629u, 0x0003003eu, 0x0000062bu, 0x0000062au, 0x00050041u, 0x00000195u, 0x0000062du, + 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x0000062eu, 0x0000062du, 0x0003003eu, 0x0000062cu, + 0x0000062eu, 0x00060039u, 0x00000008u, 0x0000062fu, 0x0000001bu, 0x0000062bu, 0x0000062cu, 0x0003003eu, + 0x00000613u, 0x0000062fu, 0x000200f9u, 0x00000615u, 0x000200f8u, 0x00000615u, 0x0004003du, 0x00000008u, + 0x00000630u, 0x00000613u, 0x0003003eu, 0x000005ebu, 0x00000630u, 0x000200f9u, 0x000005edu, 0x000200f8u, + 0x000005edu, 0x0004003du, 0x00000008u, 0x00000631u, 0x000005ebu, 0x0003003eu, 0x000005c8u, 0x00000631u, + 0x000200f9u, 0x000005cau, 0x000200f8u, 0x000005cau, 0x0004003du, 0x00000008u, 0x00000632u, 0x000005c8u, + 0x0003003eu, 0x000005a1u, 0x00000632u, 0x000200f9u, 0x000005a3u, 0x000200f8u, 0x000005a3u, 0x0004003du, + 0x00000008u, 0x00000633u, 0x000005a1u, 0x0003003eu, 0x0000059eu, 0x00000633u, 0x0004003du, 0x00000006u, + 0x00000635u, 0x000001bcu, 0x000500aau, 0x00000035u, 0x00000636u, 0x00000635u, 0x0000003fu, 0x000300f7u, + 0x00000639u, 0x00000000u, 0x000400fau, 0x00000636u, 0x00000638u, 0x0000065bu, 0x000200f8u, 0x00000638u, + 0x00050041u, 0x00000195u, 0x0000063au, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x0000063bu, + 0x0000063au, 0x000500aau, 0x00000035u, 0x0000063cu, 0x0000063bu, 0x0000003fu, 0x000300f7u, 0x0000063fu, + 0x00000000u, 0x000400fau, 0x0000063cu, 0x0000063eu, 0x0000064au, 0x000200f8u, 0x0000063eu, 0x00050041u, + 0x00000195u, 0x00000640u, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x00000641u, 0x00000640u, + 0x000500c2u, 0x00000006u, 0x00000642u, 0x00000641u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000643u, + 0x00000190u, 0x0004003du, 0x00000006u, 0x00000644u, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000645u, + 0x00000643u, 0x00000644u, 0x00050080u, 0x00000006u, 0x00000646u, 0x00000642u, 0x00000645u, 0x00060041u, + 0x000001afu, 0x00000647u, 0x000001eau, 0x000000dcu, 0x00000646u, 0x0004003du, 0x00000006u, 0x00000648u, + 0x00000647u, 0x0004007cu, 0x00000008u, 0x00000649u, 0x00000648u, 0x0003003eu, 0x0000063du, 0x00000649u, + 0x000200f9u, 0x0000063fu, 0x000200f8u, 0x0000064au, 0x00050041u, 0x00000195u, 0x0000064bu, 0x00000194u, + 0x000001ebu, 0x0004003du, 0x00000006u, 0x0000064cu, 0x0000064bu, 0x000500c2u, 0x00000006u, 0x0000064du, + 0x0000064cu, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000064eu, 0x00000190u, 0x0004003du, 0x00000006u, + 0x0000064fu, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000650u, 0x0000064eu, 0x0000064fu, 0x00050080u, + 0x00000006u, 0x00000651u, 0x0000064du, 0x00000650u, 0x00060041u, 0x00000203u, 0x00000652u, 0x000001fbu, + 0x000000dcu, 0x00000651u, 0x0004003du, 0x000001f7u, 0x00000653u, 0x00000652u, 0x00040071u, 0x00000006u, + 0x00000654u, 0x00000653u, 0x0003003eu, 0x00000655u, 0x00000654u, 0x00050041u, 0x00000195u, 0x00000657u, + 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x00000658u, 0x00000657u, 0x0003003eu, 0x00000656u, + 0x00000658u, 0x00060039u, 0x00000008u, 0x00000659u, 0x0000001bu, 0x00000655u, 0x00000656u, 0x0003003eu, + 0x0000063du, 0x00000659u, 0x000200f9u, 0x0000063fu, 0x000200f8u, 0x0000063fu, 0x0004003du, 0x00000008u, + 0x0000065au, 0x0000063du, 0x0003003eu, 0x00000637u, 0x0000065au, 0x000200f9u, 0x00000639u, 0x000200f8u, + 0x0000065bu, 0x0004003du, 0x00000006u, 0x0000065cu, 0x000001bcu, 0x000500aau, 0x00000035u, 0x0000065du, + 0x0000065cu, 0x0000004fu, 0x000300f7u, 0x00000660u, 0x00000000u, 0x000400fau, 0x0000065du, 0x0000065fu, + 0x0000067eu, 0x000200f8u, 0x0000065fu, 0x00050041u, 0x00000195u, 0x00000661u, 0x00000194u, 0x00000213u, + 0x0004003du, 0x00000006u, 0x00000662u, 0x00000661u, 0x000500aau, 0x00000035u, 0x00000663u, 0x00000662u, + 0x0000003fu, 0x000300f7u, 0x00000666u, 0x00000000u, 0x000400fau, 0x00000663u, 0x00000665u, 0x0000066fu, + 0x000200f8u, 0x00000665u, 0x00050041u, 0x00000195u, 0x00000667u, 0x00000194u, 0x0000021eu, 0x0004003du, + 0x00000006u, 0x00000668u, 0x00000667u, 0x000500c2u, 0x00000006u, 0x00000669u, 0x00000668u, 0x000001a0u, + 0x0004003du, 0x00000006u, 0x0000066au, 0x00000593u, 0x00050080u, 0x00000006u, 0x0000066bu, 0x00000669u, + 0x0000066au, 0x00060041u, 0x000001afu, 0x0000066cu, 0x0000021du, 0x000000dcu, 0x0000066bu, 0x0004003du, + 0x00000006u, 0x0000066du, 0x0000066cu, 0x0004007cu, 0x00000008u, 0x0000066eu, 0x0000066du, 0x0003003eu, + 0x00000664u, 0x0000066eu, 0x000200f9u, 0x00000666u, 0x000200f8u, 0x0000066fu, 0x00050041u, 0x00000195u, + 0x00000670u, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000671u, 0x00000670u, 0x000500c2u, + 0x00000006u, 0x00000672u, 0x00000671u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000673u, 0x00000593u, + 0x00050080u, 0x00000006u, 0x00000674u, 0x00000672u, 0x00000673u, 0x00060041u, 0x00000203u, 0x00000675u, + 0x0000022bu, 0x000000dcu, 0x00000674u, 0x0004003du, 0x000001f7u, 0x00000676u, 0x00000675u, 0x00040071u, + 0x00000006u, 0x00000677u, 0x00000676u, 0x0003003eu, 0x00000678u, 0x00000677u, 0x00050041u, 0x00000195u, + 0x0000067au, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x0000067bu, 0x0000067au, 0x0003003eu, + 0x00000679u, 0x0000067bu, 0x00060039u, 0x00000008u, 0x0000067cu, 0x0000001bu, 0x00000678u, 0x00000679u, + 0x0003003eu, 0x00000664u, 0x0000067cu, 0x000200f9u, 0x00000666u, 0x000200f8u, 0x00000666u, 0x0004003du, + 0x00000008u, 0x0000067du, 0x00000664u, 0x0003003eu, 0x0000065eu, 0x0000067du, 0x000200f9u, 0x00000660u, + 0x000200f8u, 0x0000067eu, 0x0004003du, 0x00000006u, 0x0000067fu, 0x000001bcu, 0x000500aau, 0x00000035u, + 0x00000680u, 0x0000067fu, 0x0000015eu, 0x000300f7u, 0x00000683u, 0x00000000u, 0x000400fau, 0x00000680u, + 0x00000682u, 0x000006a5u, 0x000200f8u, 0x00000682u, 0x00050041u, 0x00000195u, 0x00000684u, 0x00000194u, + 0x00000240u, 0x0004003du, 0x00000006u, 0x00000685u, 0x00000684u, 0x000500aau, 0x00000035u, 0x00000686u, + 0x00000685u, 0x0000003fu, 0x000300f7u, 0x00000689u, 0x00000000u, 0x000400fau, 0x00000686u, 0x00000688u, + 0x00000694u, 0x000200f8u, 0x00000688u, 0x00050041u, 0x00000195u, 0x0000068au, 0x00000194u, 0x0000024bu, + 0x0004003du, 0x00000006u, 0x0000068bu, 0x0000068au, 0x000500c2u, 0x00000006u, 0x0000068cu, 0x0000068bu, + 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000068du, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000068eu, + 0x00000593u, 0x00050080u, 0x00000006u, 0x0000068fu, 0x0000068du, 0x0000068eu, 0x00050080u, 0x00000006u, + 0x00000690u, 0x0000068cu, 0x0000068fu, 0x00060041u, 0x000001afu, 0x00000691u, 0x0000024au, 0x000000dcu, + 0x00000690u, 0x0004003du, 0x00000006u, 0x00000692u, 0x00000691u, 0x0004007cu, 0x00000008u, 0x00000693u, + 0x00000692u, 0x0003003eu, 0x00000687u, 0x00000693u, 0x000200f9u, 0x00000689u, 0x000200f8u, 0x00000694u, + 0x00050041u, 0x00000195u, 0x00000695u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000696u, + 0x00000695u, 0x000500c2u, 0x00000006u, 0x00000697u, 0x00000696u, 0x00000089u, 0x0004003du, 0x00000006u, + 0x00000698u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000699u, 0x00000593u, 0x00050080u, 0x00000006u, + 0x0000069au, 0x00000698u, 0x00000699u, 0x00050080u, 0x00000006u, 0x0000069bu, 0x00000697u, 0x0000069au, + 0x00060041u, 0x00000203u, 0x0000069cu, 0x0000025au, 0x000000dcu, 0x0000069bu, 0x0004003du, 0x000001f7u, + 0x0000069du, 0x0000069cu, 0x00040071u, 0x00000006u, 0x0000069eu, 0x0000069du, 0x0003003eu, 0x0000069fu, + 0x0000069eu, 0x00050041u, 0x00000195u, 0x000006a1u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, + 0x000006a2u, 0x000006a1u, 0x0003003eu, 0x000006a0u, 0x000006a2u, 0x00060039u, 0x00000008u, 0x000006a3u, + 0x0000001bu, 0x0000069fu, 0x000006a0u, 0x0003003eu, 0x00000687u, 0x000006a3u, 0x000200f9u, 0x00000689u, + 0x000200f8u, 0x00000689u, 0x0004003du, 0x00000008u, 0x000006a4u, 0x00000687u, 0x0003003eu, 0x00000681u, + 0x000006a4u, 0x000200f9u, 0x00000683u, 0x000200f8u, 0x000006a5u, 0x00050041u, 0x00000195u, 0x000006a6u, + 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x000006a7u, 0x000006a6u, 0x000500aau, 0x00000035u, + 0x000006a8u, 0x000006a7u, 0x0000003fu, 0x000300f7u, 0x000006abu, 0x00000000u, 0x000400fau, 0x000006a8u, + 0x000006aau, 0x000006b6u, 0x000200f8u, 0x000006aau, 0x00050041u, 0x00000195u, 0x000006acu, 0x00000194u, + 0x00000060u, 0x0004003du, 0x00000006u, 0x000006adu, 0x000006acu, 0x000500c2u, 0x00000006u, 0x000006aeu, + 0x000006adu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000006afu, 0x00000190u, 0x0004003du, 0x00000006u, + 0x000006b0u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000006b1u, 0x000006afu, 0x000006b0u, 0x00050080u, + 0x00000006u, 0x000006b2u, 0x000006aeu, 0x000006b1u, 0x00060041u, 0x000001afu, 0x000006b3u, 0x00000276u, + 0x000000dcu, 0x000006b2u, 0x0004003du, 0x00000006u, 0x000006b4u, 0x000006b3u, 0x0004007cu, 0x00000008u, + 0x000006b5u, 0x000006b4u, 0x0003003eu, 0x000006a9u, 0x000006b5u, 0x000200f9u, 0x000006abu, 0x000200f8u, + 0x000006b6u, 0x00050041u, 0x00000195u, 0x000006b7u, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, + 0x000006b8u, 0x000006b7u, 0x000500c2u, 0x00000006u, 0x000006b9u, 0x000006b8u, 0x00000089u, 0x0004003du, + 0x00000006u, 0x000006bau, 0x00000190u, 0x0004003du, 0x00000006u, 0x000006bbu, 0x00000593u, 0x00050080u, + 0x00000006u, 0x000006bcu, 0x000006bau, 0x000006bbu, 0x00050080u, 0x00000006u, 0x000006bdu, 0x000006b9u, + 0x000006bcu, 0x00060041u, 0x00000203u, 0x000006beu, 0x00000285u, 0x000000dcu, 0x000006bdu, 0x0004003du, + 0x000001f7u, 0x000006bfu, 0x000006beu, 0x00040071u, 0x00000006u, 0x000006c0u, 0x000006bfu, 0x0003003eu, + 0x000006c1u, 0x000006c0u, 0x00050041u, 0x00000195u, 0x000006c3u, 0x00000194u, 0x0000026cu, 0x0004003du, + 0x00000006u, 0x000006c4u, 0x000006c3u, 0x0003003eu, 0x000006c2u, 0x000006c4u, 0x00060039u, 0x00000008u, + 0x000006c5u, 0x0000001bu, 0x000006c1u, 0x000006c2u, 0x0003003eu, 0x000006a9u, 0x000006c5u, 0x000200f9u, + 0x000006abu, 0x000200f8u, 0x000006abu, 0x0004003du, 0x00000008u, 0x000006c6u, 0x000006a9u, 0x0003003eu, + 0x00000681u, 0x000006c6u, 0x000200f9u, 0x00000683u, 0x000200f8u, 0x00000683u, 0x0004003du, 0x00000008u, + 0x000006c7u, 0x00000681u, 0x0003003eu, 0x0000065eu, 0x000006c7u, 0x000200f9u, 0x00000660u, 0x000200f8u, + 0x00000660u, 0x0004003du, 0x00000008u, 0x000006c8u, 0x0000065eu, 0x0003003eu, 0x00000637u, 0x000006c8u, + 0x000200f9u, 0x00000639u, 0x000200f8u, 0x00000639u, 0x0004003du, 0x00000008u, 0x000006c9u, 0x00000637u, + 0x0003003eu, 0x00000634u, 0x000006c9u, 0x0004003du, 0x00000006u, 0x000006cau, 0x000001c2u, 0x000500abu, + 0x00000035u, 0x000006cbu, 0x000006cau, 0x0000003fu, 0x000300f7u, 0x000006cdu, 0x00000000u, 0x000400fau, + 0x000006cbu, 0x000006ccu, 0x000006cdu, 0x000200f8u, 0x000006ccu, 0x0004003du, 0x00000008u, 0x000006ceu, + 0x00000634u, 0x00050081u, 0x00000008u, 0x000006cfu, 0x000006ceu, 0x00000156u, 0x0003003eu, 0x00000634u, + 0x000006cfu, 0x000200f9u, 0x000006cdu, 0x000200f8u, 0x000006cdu, 0x000200f9u, 0x000006d0u, 0x000200f8u, + 0x000006d0u, 0x000400f6u, 0x000006d2u, 0x000006d3u, 0x00000000u, 0x000200f9u, 0x000006d1u, 0x000200f8u, + 0x000006d1u, 0x0004003du, 0x00000006u, 0x000006d4u, 0x000001b2u, 0x000500aau, 0x00000035u, 0x000006d5u, + 0x000006d4u, 0x0000015eu, 0x000300f7u, 0x000006d7u, 0x00000000u, 0x000400fau, 0x000006d5u, 0x000006d6u, + 0x00000703u, 0x000200f8u, 0x000006d6u, 0x000200f9u, 0x000006d8u, 0x000200f8u, 0x000006d8u, 0x000400f6u, + 0x000006dau, 0x000006dbu, 0x00000000u, 0x000200f9u, 0x000006d9u, 0x000200f8u, 0x000006d9u, 0x00050041u, + 0x00000195u, 0x000006dcu, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x000006ddu, 0x000006dcu, + 0x000500aau, 0x00000035u, 0x000006deu, 0x000006ddu, 0x0000003fu, 0x000300f7u, 0x000006e0u, 0x00000000u, + 0x000400fau, 0x000006deu, 0x000006dfu, 0x000006efu, 0x000200f8u, 0x000006dfu, 0x00050041u, 0x00000195u, + 0x000006e1u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000006e2u, 0x000006e1u, 0x000500c2u, + 0x00000006u, 0x000006e3u, 0x000006e2u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000006e4u, 0x00000190u, + 0x0004003du, 0x00000006u, 0x000006e5u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000006e6u, 0x000006e4u, + 0x000006e5u, 0x00050080u, 0x00000006u, 0x000006e7u, 0x000006e3u, 0x000006e6u, 0x0004003du, 0x00000008u, + 0x000006e8u, 0x0000059eu, 0x0004003du, 0x00000008u, 0x000006e9u, 0x00000582u, 0x00050085u, 0x00000008u, + 0x000006eau, 0x000006e8u, 0x000006e9u, 0x0004003du, 0x00000008u, 0x000006ebu, 0x00000634u, 0x00050085u, + 0x00000008u, 0x000006ecu, 0x000006eau, 0x000006ebu, 0x0004007cu, 0x00000006u, 0x000006edu, 0x000006ecu, + 0x00060041u, 0x000001afu, 0x000006eeu, 0x0000024au, 0x000000dcu, 0x000006e7u, 0x0003003eu, 0x000006eeu, + 0x000006edu, 0x000200f9u, 0x000006e0u, 0x000200f8u, 0x000006efu, 0x00050041u, 0x00000195u, 0x000006f0u, + 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000006f1u, 0x000006f0u, 0x000500c2u, 0x00000006u, + 0x000006f2u, 0x000006f1u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000006f3u, 0x00000190u, 0x0004003du, + 0x00000006u, 0x000006f4u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000006f5u, 0x000006f3u, 0x000006f4u, + 0x00050080u, 0x00000006u, 0x000006f6u, 0x000006f2u, 0x000006f5u, 0x0004003du, 0x00000008u, 0x000006f7u, + 0x0000059eu, 0x0004003du, 0x00000008u, 0x000006f8u, 0x00000582u, 0x00050085u, 0x00000008u, 0x000006f9u, + 0x000006f7u, 0x000006f8u, 0x0004003du, 0x00000008u, 0x000006fau, 0x00000634u, 0x00050085u, 0x00000008u, + 0x000006fbu, 0x000006f9u, 0x000006fau, 0x0003003eu, 0x000006fcu, 0x000006fbu, 0x00050041u, 0x00000195u, + 0x000006feu, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x000006ffu, 0x000006feu, 0x0003003eu, + 0x000006fdu, 0x000006ffu, 0x00060039u, 0x00000006u, 0x00000700u, 0x00000020u, 0x000006fcu, 0x000006fdu, + 0x00040071u, 0x000001f7u, 0x00000701u, 0x00000700u, 0x00060041u, 0x00000203u, 0x00000702u, 0x0000025au, + 0x000000dcu, 0x000006f6u, 0x0003003eu, 0x00000702u, 0x00000701u, 0x000200f9u, 0x000006e0u, 0x000200f8u, + 0x000006e0u, 0x000200f9u, 0x000006dbu, 0x000200f8u, 0x000006dbu, 0x000400fau, 0x00000372u, 0x000006d8u, + 0x000006dau, 0x000200f8u, 0x000006dau, 0x000200f9u, 0x000006d7u, 0x000200f8u, 0x00000703u, 0x000200f9u, + 0x00000704u, 0x000200f8u, 0x00000704u, 0x000400f6u, 0x00000706u, 0x00000707u, 0x00000000u, 0x000200f9u, + 0x00000705u, 0x000200f8u, 0x00000705u, 0x00050041u, 0x00000195u, 0x00000708u, 0x00000194u, 0x0000026cu, + 0x0004003du, 0x00000006u, 0x00000709u, 0x00000708u, 0x000500aau, 0x00000035u, 0x0000070au, 0x00000709u, + 0x0000003fu, 0x000300f7u, 0x0000070cu, 0x00000000u, 0x000400fau, 0x0000070au, 0x0000070bu, 0x0000071bu, + 0x000200f8u, 0x0000070bu, 0x00050041u, 0x00000195u, 0x0000070du, 0x00000194u, 0x00000060u, 0x0004003du, + 0x00000006u, 0x0000070eu, 0x0000070du, 0x000500c2u, 0x00000006u, 0x0000070fu, 0x0000070eu, 0x000001a0u, + 0x0004003du, 0x00000006u, 0x00000710u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000711u, 0x00000593u, + 0x00050080u, 0x00000006u, 0x00000712u, 0x00000710u, 0x00000711u, 0x00050080u, 0x00000006u, 0x00000713u, + 0x0000070fu, 0x00000712u, 0x0004003du, 0x00000008u, 0x00000714u, 0x0000059eu, 0x0004003du, 0x00000008u, + 0x00000715u, 0x00000582u, 0x00050085u, 0x00000008u, 0x00000716u, 0x00000714u, 0x00000715u, 0x0004003du, + 0x00000008u, 0x00000717u, 0x00000634u, 0x00050085u, 0x00000008u, 0x00000718u, 0x00000716u, 0x00000717u, + 0x0004007cu, 0x00000006u, 0x00000719u, 0x00000718u, 0x00060041u, 0x000001afu, 0x0000071au, 0x00000276u, + 0x000000dcu, 0x00000713u, 0x0003003eu, 0x0000071au, 0x00000719u, 0x000200f9u, 0x0000070cu, 0x000200f8u, + 0x0000071bu, 0x00050041u, 0x00000195u, 0x0000071cu, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, + 0x0000071du, 0x0000071cu, 0x000500c2u, 0x00000006u, 0x0000071eu, 0x0000071du, 0x00000089u, 0x0004003du, + 0x00000006u, 0x0000071fu, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000720u, 0x00000593u, 0x00050080u, + 0x00000006u, 0x00000721u, 0x0000071fu, 0x00000720u, 0x00050080u, 0x00000006u, 0x00000722u, 0x0000071eu, + 0x00000721u, 0x0004003du, 0x00000008u, 0x00000723u, 0x0000059eu, 0x0004003du, 0x00000008u, 0x00000724u, + 0x00000582u, 0x00050085u, 0x00000008u, 0x00000725u, 0x00000723u, 0x00000724u, 0x0004003du, 0x00000008u, + 0x00000726u, 0x00000634u, 0x00050085u, 0x00000008u, 0x00000727u, 0x00000725u, 0x00000726u, 0x0003003eu, + 0x00000728u, 0x00000727u, 0x00050041u, 0x00000195u, 0x0000072au, 0x00000194u, 0x0000026cu, 0x0004003du, + 0x00000006u, 0x0000072bu, 0x0000072au, 0x0003003eu, 0x00000729u, 0x0000072bu, 0x00060039u, 0x00000006u, + 0x0000072cu, 0x00000020u, 0x00000728u, 0x00000729u, 0x00040071u, 0x000001f7u, 0x0000072du, 0x0000072cu, + 0x00060041u, 0x00000203u, 0x0000072eu, 0x00000285u, 0x000000dcu, 0x00000722u, 0x0003003eu, 0x0000072eu, + 0x0000072du, 0x000200f9u, 0x0000070cu, 0x000200f8u, 0x0000070cu, 0x000200f9u, 0x00000707u, 0x000200f8u, + 0x00000707u, 0x000400fau, 0x00000372u, 0x00000704u, 0x00000706u, 0x000200f8u, 0x00000706u, 0x000200f9u, + 0x000006d7u, 0x000200f8u, 0x000006d7u, 0x000200f9u, 0x000006d3u, 0x000200f8u, 0x000006d3u, 0x000400fau, + 0x00000372u, 0x000006d0u, 0x000006d2u, 0x000200f8u, 0x000006d2u, 0x000200f9u, 0x00000598u, 0x000200f8u, + 0x00000598u, 0x0004003du, 0x00000006u, 0x0000072fu, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000730u, + 0x0000072fu, 0x00000160u, 0x0003003eu, 0x00000593u, 0x00000730u, 0x000200f9u, 0x00000595u, 0x000200f8u, + 0x00000597u, 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000003b8u, 0x000200f9u, 0x000001ceu, 0x000200f8u, + 0x000001ceu, 0x000300e1u, 0x0000004fu, 0x00000731u, 0x000400e0u, 0x0000015eu, 0x0000015eu, 0x0000015fu, + 0x000200f9u, 0x0000019du, 0x000200f8u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000732u, 0x00000199u, + 0x00050080u, 0x00000006u, 0x00000733u, 0x00000732u, 0x00000089u, 0x0003003eu, 0x00000199u, 0x00000733u, + 0x000200f9u, 0x0000019au, 0x000200f8u, 0x0000019cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, + 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, + 0x0004003du, 0x00000006u, 0x0000002bu, 0x0000000au, 0x000500c4u, 0x00000006u, 0x0000002eu, 0x0000002bu, + 0x0000002du, 0x0004007cu, 0x00000008u, 0x0000002fu, 0x0000002eu, 0x000200feu, 0x0000002fu, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, + 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000032u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000004bu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000033u, 0x0000000fu, 0x0004007cu, 0x00000006u, + 0x00000034u, 0x00000033u, 0x0003003eu, 0x00000032u, 0x00000034u, 0x0004003du, 0x00000006u, 0x00000036u, + 0x00000032u, 0x000500c7u, 0x00000006u, 0x00000038u, 0x00000036u, 0x00000037u, 0x000500aau, 0x00000035u, + 0x00000039u, 0x00000038u, 0x00000037u, 0x000300f7u, 0x0000003bu, 0x00000000u, 0x000400fau, 0x00000039u, + 0x0000003au, 0x0000003bu, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x0000003cu, 0x00000032u, + 0x000500c7u, 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500abu, 0x00000035u, 0x00000040u, + 0x0000003eu, 0x0000003fu, 0x000200f9u, 0x0000003bu, 0x000200f8u, 0x0000003bu, 0x000700f5u, 0x00000035u, + 0x00000041u, 0x00000039u, 0x00000011u, 0x00000040u, 0x0000003au, 0x000300f7u, 0x00000043u, 0x00000000u, + 0x000400fau, 0x00000041u, 0x00000042u, 0x00000043u, 0x000200f8u, 0x00000042u, 0x0004003du, 0x00000006u, + 0x00000044u, 0x00000032u, 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x0000002du, 0x000500c5u, + 0x00000006u, 0x00000047u, 0x00000045u, 0x00000046u, 0x000500c7u, 0x00000006u, 0x00000049u, 0x00000047u, + 0x00000048u, 0x000200feu, 0x00000049u, 0x000200f8u, 0x00000043u, 0x0004003du, 0x00000006u, 0x0000004du, + 0x00000032u, 0x000500c2u, 0x00000006u, 0x0000004eu, 0x0000004du, 0x0000002du, 0x000500c7u, 0x00000006u, + 0x00000050u, 0x0000004eu, 0x0000004fu, 0x00050080u, 0x00000006u, 0x00000051u, 0x0000004cu, 0x00000050u, + 0x0003003eu, 0x0000004bu, 0x00000051u, 0x0004003du, 0x00000006u, 0x00000052u, 0x00000032u, 0x0004003du, + 0x00000006u, 0x00000053u, 0x0000004bu, 0x00050080u, 0x00000006u, 0x00000054u, 0x00000052u, 0x00000053u, + 0x000500c2u, 0x00000006u, 0x00000055u, 0x00000054u, 0x0000002du, 0x000500c7u, 0x00000006u, 0x00000056u, + 0x00000055u, 0x00000048u, 0x000200feu, 0x00000056u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, + 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, + 0x00000007u, 0x00000059u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005eu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000064u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007fu, 0x00000007u, 0x0004003du, + 0x00000006u, 0x0000005au, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005cu, 0x0000005au, 0x0000005bu, + 0x000500c4u, 0x00000006u, 0x0000005du, 0x0000005cu, 0x0000002du, 0x0003003eu, 0x00000059u, 0x0000005du, + 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000061u, 0x0000005fu, + 0x00000060u, 0x000500c7u, 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x0003003eu, 0x0000005eu, + 0x00000063u, 0x0004003du, 0x00000006u, 0x00000065u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000067u, + 0x00000065u, 0x00000066u, 0x0003003eu, 0x00000064u, 0x00000067u, 0x0004003du, 0x00000006u, 0x00000068u, + 0x0000005eu, 0x000500aau, 0x00000035u, 0x00000069u, 0x00000068u, 0x00000062u, 0x000300f7u, 0x0000006bu, + 0x00000000u, 0x000400fau, 0x00000069u, 0x0000006au, 0x0000006bu, 0x000200f8u, 0x0000006au, 0x0004003du, + 0x00000006u, 0x0000006cu, 0x00000059u, 0x000500c5u, 0x00000006u, 0x0000006du, 0x0000006cu, 0x00000037u, + 0x0004003du, 0x00000006u, 0x0000006eu, 0x00000064u, 0x000500c4u, 0x00000006u, 0x00000070u, 0x0000006eu, + 0x0000006fu, 0x000500c5u, 0x00000006u, 0x00000071u, 0x0000006du, 0x00000070u, 0x0004007cu, 0x00000008u, + 0x00000072u, 0x00000071u, 0x000200feu, 0x00000072u, 0x000200f8u, 0x0000006bu, 0x0004003du, 0x00000006u, + 0x00000074u, 0x0000005eu, 0x000500aau, 0x00000035u, 0x00000075u, 0x00000074u, 0x0000003fu, 0x000300f7u, + 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, + 0x0004003du, 0x00000006u, 0x00000078u, 0x00000064u, 0x000500aau, 0x00000035u, 0x00000079u, 0x00000078u, + 0x0000003fu, 0x000300f7u, 0x0000007bu, 0x00000000u, 0x000400fau, 0x00000079u, 0x0000007au, 0x0000007bu, + 0x000200f8u, 0x0000007au, 0x0004003du, 0x00000006u, 0x0000007cu, 0x00000059u, 0x0004007cu, 0x00000008u, + 0x0000007du, 0x0000007cu, 0x000200feu, 0x0000007du, 0x000200f8u, 0x0000007bu, 0x0003003eu, 0x0000007fu, + 0x0000003fu, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000080u, 0x000400f6u, 0x00000082u, 0x00000083u, + 0x00000000u, 0x000200f9u, 0x00000084u, 0x000200f8u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000085u, + 0x00000064u, 0x000500c7u, 0x00000006u, 0x00000087u, 0x00000085u, 0x00000086u, 0x000500aau, 0x00000035u, + 0x00000088u, 0x00000087u, 0x0000003fu, 0x000400fau, 0x00000088u, 0x00000081u, 0x00000082u, 0x000200f8u, + 0x00000081u, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000064u, 0x000500c4u, 0x00000006u, 0x0000008bu, + 0x0000008au, 0x00000089u, 0x0003003eu, 0x00000064u, 0x0000008bu, 0x0004003du, 0x00000006u, 0x0000008cu, + 0x0000007fu, 0x00050080u, 0x00000006u, 0x0000008du, 0x0000008cu, 0x0000004fu, 0x0003003eu, 0x0000007fu, + 0x0000008du, 0x000200f9u, 0x00000083u, 0x000200f8u, 0x00000083u, 0x000200f9u, 0x00000080u, 0x000200f8u, + 0x00000082u, 0x0004003du, 0x00000006u, 0x0000008eu, 0x00000064u, 0x000500c7u, 0x00000006u, 0x0000008fu, + 0x0000008eu, 0x00000066u, 0x0003003eu, 0x00000064u, 0x0000008fu, 0x0004003du, 0x00000006u, 0x00000090u, + 0x00000059u, 0x0004003du, 0x00000006u, 0x00000092u, 0x0000007fu, 0x00050082u, 0x00000006u, 0x00000093u, + 0x00000091u, 0x00000092u, 0x000500c4u, 0x00000006u, 0x00000095u, 0x00000093u, 0x00000094u, 0x000500c5u, + 0x00000006u, 0x00000096u, 0x00000090u, 0x00000095u, 0x0004003du, 0x00000006u, 0x00000097u, 0x00000064u, + 0x000500c4u, 0x00000006u, 0x00000098u, 0x00000097u, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x00000099u, + 0x00000096u, 0x00000098u, 0x0004007cu, 0x00000008u, 0x0000009au, 0x00000099u, 0x000200feu, 0x0000009au, + 0x000200f8u, 0x00000077u, 0x0004003du, 0x00000006u, 0x0000009cu, 0x00000059u, 0x0004003du, 0x00000006u, + 0x0000009du, 0x0000005eu, 0x00050080u, 0x00000006u, 0x0000009fu, 0x0000009du, 0x0000009eu, 0x000500c4u, + 0x00000006u, 0x000000a0u, 0x0000009fu, 0x00000094u, 0x000500c5u, 0x00000006u, 0x000000a1u, 0x0000009cu, + 0x000000a0u, 0x0004003du, 0x00000006u, 0x000000a2u, 0x00000064u, 0x000500c4u, 0x00000006u, 0x000000a3u, + 0x000000a2u, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x000000a4u, 0x000000a1u, 0x000000a3u, 0x0004007cu, + 0x00000008u, 0x000000a5u, 0x000000a4u, 0x000200feu, 0x000000a5u, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, + 0x0004003bu, 0x00000007u, 0x000000a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000abu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x000000b4u, 0x000000b5u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000c8u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000efu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f9u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000115u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000011cu, 0x00000007u, + 0x0004003du, 0x00000008u, 0x000000a9u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000aau, 0x000000a9u, + 0x0003003eu, 0x000000a8u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000acu, 0x000000a8u, 0x000500c2u, + 0x00000006u, 0x000000adu, 0x000000acu, 0x0000002du, 0x000500c7u, 0x00000006u, 0x000000aeu, 0x000000adu, + 0x0000005bu, 0x0003003eu, 0x000000abu, 0x000000aeu, 0x0004003du, 0x00000006u, 0x000000b0u, 0x000000a8u, + 0x000500c2u, 0x00000006u, 0x000000b1u, 0x000000b0u, 0x00000094u, 0x000500c7u, 0x00000006u, 0x000000b3u, + 0x000000b1u, 0x000000b2u, 0x0003003eu, 0x000000afu, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000b6u, + 0x000000afu, 0x0004007cu, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x00050082u, 0x0000002cu, 0x000000b9u, + 0x000000b7u, 0x000000b8u, 0x00050080u, 0x0000002cu, 0x000000bbu, 0x000000b9u, 0x000000bau, 0x0003003eu, + 0x000000b5u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000a8u, 0x000500c7u, 0x00000006u, + 0x000000beu, 0x000000bdu, 0x0000003du, 0x0003003eu, 0x000000bcu, 0x000000beu, 0x0004003du, 0x00000006u, + 0x000000bfu, 0x000000afu, 0x000500aau, 0x00000035u, 0x000000c0u, 0x000000bfu, 0x000000b2u, 0x000300f7u, + 0x000000c2u, 0x00000000u, 0x000400fau, 0x000000c0u, 0x000000c1u, 0x000000c2u, 0x000200f8u, 0x000000c1u, + 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000abu, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c3u, + 0x000000c4u, 0x0004003du, 0x00000006u, 0x000000c6u, 0x000000bcu, 0x000500abu, 0x00000035u, 0x000000c7u, + 0x000000c6u, 0x0000003fu, 0x000300f7u, 0x000000cau, 0x00000000u, 0x000400fau, 0x000000c7u, 0x000000c9u, + 0x000000cfu, 0x000200f8u, 0x000000c9u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000bcu, 0x000500c2u, + 0x00000006u, 0x000000cdu, 0x000000ccu, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x000000ceu, 0x000000cbu, + 0x000000cdu, 0x0003003eu, 0x000000c8u, 0x000000ceu, 0x000200f9u, 0x000000cau, 0x000200f8u, 0x000000cfu, + 0x0003003eu, 0x000000c8u, 0x0000003fu, 0x000200f9u, 0x000000cau, 0x000200f8u, 0x000000cau, 0x0004003du, + 0x00000006u, 0x000000d0u, 0x000000c8u, 0x000500c5u, 0x00000006u, 0x000000d1u, 0x000000c5u, 0x000000d0u, + 0x000200feu, 0x000000d1u, 0x000200f8u, 0x000000c2u, 0x0004003du, 0x0000002cu, 0x000000d3u, 0x000000b5u, + 0x000500afu, 0x00000035u, 0x000000d5u, 0x000000d3u, 0x000000d4u, 0x000300f7u, 0x000000d7u, 0x00000000u, + 0x000400fau, 0x000000d5u, 0x000000d6u, 0x000000d7u, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000006u, + 0x000000d8u, 0x000000abu, 0x000500c5u, 0x00000006u, 0x000000d9u, 0x000000d8u, 0x000000c4u, 0x000200feu, + 0x000000d9u, 0x000200f8u, 0x000000d7u, 0x0004003du, 0x0000002cu, 0x000000dbu, 0x000000b5u, 0x000500b3u, + 0x00000035u, 0x000000ddu, 0x000000dbu, 0x000000dcu, 0x000300f7u, 0x000000dfu, 0x00000000u, 0x000400fau, + 0x000000ddu, 0x000000deu, 0x000000dfu, 0x000200f8u, 0x000000deu, 0x0004003du, 0x0000002cu, 0x000000e0u, + 0x000000b5u, 0x000500b1u, 0x00000035u, 0x000000e2u, 0x000000e0u, 0x000000e1u, 0x000300f7u, 0x000000e4u, + 0x00000000u, 0x000400fau, 0x000000e2u, 0x000000e3u, 0x000000e4u, 0x000200f8u, 0x000000e3u, 0x0004003du, + 0x00000006u, 0x000000e5u, 0x000000abu, 0x000200feu, 0x000000e5u, 0x000200f8u, 0x000000e4u, 0x0004003du, + 0x00000006u, 0x000000e8u, 0x000000bcu, 0x000500c5u, 0x00000006u, 0x000000e9u, 0x000000e8u, 0x000000e7u, + 0x0003003eu, 0x000000bcu, 0x000000e9u, 0x0004003du, 0x0000002cu, 0x000000ecu, 0x000000b5u, 0x00050082u, + 0x0000002cu, 0x000000edu, 0x000000ebu, 0x000000ecu, 0x0004007cu, 0x00000006u, 0x000000eeu, 0x000000edu, + 0x0003003eu, 0x000000eau, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, 0x000000bcu, 0x0004003du, + 0x00000006u, 0x000000f1u, 0x000000eau, 0x000500c2u, 0x00000006u, 0x000000f2u, 0x000000f0u, 0x000000f1u, + 0x0003003eu, 0x000000efu, 0x000000f2u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000bcu, 0x0004003du, + 0x00000006u, 0x000000f5u, 0x000000eau, 0x000500c4u, 0x00000006u, 0x000000f6u, 0x0000004fu, 0x000000f5u, + 0x00050082u, 0x00000006u, 0x000000f7u, 0x000000f6u, 0x0000004fu, 0x000500c7u, 0x00000006u, 0x000000f8u, + 0x000000f4u, 0x000000f7u, 0x0003003eu, 0x000000f3u, 0x000000f8u, 0x0004003du, 0x00000006u, 0x000000fau, + 0x000000eau, 0x00050082u, 0x00000006u, 0x000000fbu, 0x000000fau, 0x0000004fu, 0x000500c4u, 0x00000006u, + 0x000000fcu, 0x0000004fu, 0x000000fbu, 0x0003003eu, 0x000000f9u, 0x000000fcu, 0x0004003du, 0x00000006u, + 0x000000fdu, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000feu, 0x000000f9u, 0x000500acu, 0x00000035u, + 0x000000ffu, 0x000000fdu, 0x000000feu, 0x000400a8u, 0x00000035u, 0x00000100u, 0x000000ffu, 0x000300f7u, + 0x00000102u, 0x00000000u, 0x000400fau, 0x00000100u, 0x00000101u, 0x00000102u, 0x000200f8u, 0x00000101u, + 0x0004003du, 0x00000006u, 0x00000103u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x00000104u, 0x000000f9u, + 0x000500aau, 0x00000035u, 0x00000105u, 0x00000103u, 0x00000104u, 0x000300f7u, 0x00000107u, 0x00000000u, + 0x000400fau, 0x00000105u, 0x00000106u, 0x00000107u, 0x000200f8u, 0x00000106u, 0x0004003du, 0x00000006u, + 0x00000108u, 0x000000efu, 0x000500c7u, 0x00000006u, 0x00000109u, 0x00000108u, 0x0000004fu, 0x000500abu, + 0x00000035u, 0x0000010au, 0x00000109u, 0x0000003fu, 0x000200f9u, 0x00000107u, 0x000200f8u, 0x00000107u, + 0x000700f5u, 0x00000035u, 0x0000010bu, 0x00000105u, 0x00000101u, 0x0000010au, 0x00000106u, 0x000200f9u, + 0x00000102u, 0x000200f8u, 0x00000102u, 0x000700f5u, 0x00000035u, 0x0000010cu, 0x000000ffu, 0x000000e4u, + 0x0000010bu, 0x00000107u, 0x000300f7u, 0x0000010eu, 0x00000000u, 0x000400fau, 0x0000010cu, 0x0000010du, + 0x0000010eu, 0x000200f8u, 0x0000010du, 0x0004003du, 0x00000006u, 0x0000010fu, 0x000000efu, 0x00050080u, + 0x00000006u, 0x00000110u, 0x0000010fu, 0x0000004fu, 0x0003003eu, 0x000000efu, 0x00000110u, 0x000200f9u, + 0x0000010eu, 0x000200f8u, 0x0000010eu, 0x0004003du, 0x00000006u, 0x00000111u, 0x000000abu, 0x0004003du, + 0x00000006u, 0x00000112u, 0x000000efu, 0x000500c5u, 0x00000006u, 0x00000113u, 0x00000111u, 0x00000112u, + 0x000200feu, 0x00000113u, 0x000200f8u, 0x000000dfu, 0x0004003du, 0x0000002cu, 0x00000116u, 0x000000b5u, + 0x0004007cu, 0x00000006u, 0x00000117u, 0x00000116u, 0x000500c4u, 0x00000006u, 0x00000118u, 0x00000117u, + 0x00000060u, 0x0004003du, 0x00000006u, 0x00000119u, 0x000000bcu, 0x000500c2u, 0x00000006u, 0x0000011au, + 0x00000119u, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x0000011bu, 0x00000118u, 0x0000011au, 0x0003003eu, + 0x00000115u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x000000bcu, 0x000500c7u, 0x00000006u, + 0x0000011fu, 0x0000011du, 0x0000011eu, 0x0003003eu, 0x0000011cu, 0x0000011fu, 0x0004003du, 0x00000006u, + 0x00000120u, 0x0000011cu, 0x000500acu, 0x00000035u, 0x00000122u, 0x00000120u, 0x00000121u, 0x000400a8u, + 0x00000035u, 0x00000123u, 0x00000122u, 0x000300f7u, 0x00000125u, 0x00000000u, 0x000400fau, 0x00000123u, + 0x00000124u, 0x00000125u, 0x000200f8u, 0x00000124u, 0x0004003du, 0x00000006u, 0x00000126u, 0x0000011cu, + 0x000500aau, 0x00000035u, 0x00000127u, 0x00000126u, 0x00000121u, 0x000300f7u, 0x00000129u, 0x00000000u, + 0x000400fau, 0x00000127u, 0x00000128u, 0x00000129u, 0x000200f8u, 0x00000128u, 0x0004003du, 0x00000006u, + 0x0000012au, 0x00000115u, 0x000500c7u, 0x00000006u, 0x0000012bu, 0x0000012au, 0x0000004fu, 0x000500abu, + 0x00000035u, 0x0000012cu, 0x0000012bu, 0x0000003fu, 0x000200f9u, 0x00000129u, 0x000200f8u, 0x00000129u, + 0x000700f5u, 0x00000035u, 0x0000012du, 0x00000127u, 0x00000124u, 0x0000012cu, 0x00000128u, 0x000200f9u, + 0x00000125u, 0x000200f8u, 0x00000125u, 0x000700f5u, 0x00000035u, 0x0000012eu, 0x00000122u, 0x000000dfu, + 0x0000012du, 0x00000129u, 0x000300f7u, 0x00000130u, 0x00000000u, 0x000400fau, 0x0000012eu, 0x0000012fu, + 0x00000130u, 0x000200f8u, 0x0000012fu, 0x0004003du, 0x00000006u, 0x00000131u, 0x00000115u, 0x00050080u, + 0x00000006u, 0x00000132u, 0x00000131u, 0x0000004fu, 0x0003003eu, 0x00000115u, 0x00000132u, 0x000200f9u, + 0x00000130u, 0x000200f8u, 0x00000130u, 0x0004003du, 0x00000006u, 0x00000133u, 0x000000abu, 0x0004003du, + 0x00000006u, 0x00000134u, 0x00000115u, 0x000500c5u, 0x00000006u, 0x00000135u, 0x00000133u, 0x00000134u, + 0x000200feu, 0x00000135u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, + 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, + 0x0004003bu, 0x0000000du, 0x0000013au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013du, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000141u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000138u, 0x0000001au, + 0x000500aau, 0x00000035u, 0x00000139u, 0x00000138u, 0x0000004fu, 0x000300f7u, 0x0000013cu, 0x00000000u, + 0x000400fau, 0x00000139u, 0x0000013bu, 0x00000140u, 0x000200f8u, 0x0000013bu, 0x0004003du, 0x00000006u, + 0x0000013eu, 0x00000019u, 0x0003003eu, 0x0000013du, 0x0000013eu, 0x00050039u, 0x00000008u, 0x0000013fu, + 0x00000013u, 0x0000013du, 0x0003003eu, 0x0000013au, 0x0000013fu, 0x000200f9u, 0x0000013cu, 0x000200f8u, + 0x00000140u, 0x0004003du, 0x00000006u, 0x00000142u, 0x00000019u, 0x0003003eu, 0x00000141u, 0x00000142u, + 0x00050039u, 0x00000008u, 0x00000143u, 0x0000000bu, 0x00000141u, 0x0003003eu, 0x0000013au, 0x00000143u, + 0x000200f9u, 0x0000013cu, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000008u, 0x00000144u, 0x0000013au, + 0x000200feu, 0x00000144u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, + 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, + 0x0004003bu, 0x00000007u, 0x00000149u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014cu, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x00000150u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000147u, 0x0000001fu, + 0x000500aau, 0x00000035u, 0x00000148u, 0x00000147u, 0x0000004fu, 0x000300f7u, 0x0000014bu, 0x00000000u, + 0x000400fau, 0x00000148u, 0x0000014au, 0x0000014fu, 0x000200f8u, 0x0000014au, 0x0004003du, 0x00000008u, + 0x0000014du, 0x0000001eu, 0x0003003eu, 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000006u, 0x0000014eu, + 0x00000016u, 0x0000014cu, 0x0003003eu, 0x00000149u, 0x0000014eu, 0x000200f9u, 0x0000014bu, 0x000200f8u, + 0x0000014fu, 0x0004003du, 0x00000008u, 0x00000151u, 0x0000001eu, 0x0003003eu, 0x00000150u, 0x00000151u, + 0x00050039u, 0x00000006u, 0x00000152u, 0x00000010u, 0x00000150u, 0x0003003eu, 0x00000149u, 0x00000152u, + 0x000200f9u, 0x0000014bu, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000149u, + 0x000200feu, 0x00000153u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000024u, 0x00000000u, 0x00000022u, + 0x00030037u, 0x0000000du, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003du, 0x00000008u, 0x00000157u, + 0x00000023u, 0x0004007fu, 0x00000008u, 0x00000158u, 0x00000157u, 0x0006000cu, 0x00000008u, 0x00000159u, + 0x00000001u, 0x0000001bu, 0x00000158u, 0x00050081u, 0x00000008u, 0x0000015au, 0x00000156u, 0x00000159u, + 0x00050088u, 0x00000008u, 0x0000015bu, 0x00000156u, 0x0000015au, 0x000200feu, 0x0000015bu, 0x00010038u, + 0x00050036u, 0x00000008u, 0x00000029u, 0x00000000u, 0x00000026u, 0x00030037u, 0x00000007u, 0x00000027u, + 0x00030037u, 0x0000000du, 0x00000028u, 0x000200f8u, 0x0000002au, 0x0004003bu, 0x00000007u, 0x00000168u, + 0x00000007u, 0x000400e0u, 0x0000015eu, 0x0000015eu, 0x0000015fu, 0x0004003du, 0x00000006u, 0x00000164u, + 0x00000027u, 0x0004003du, 0x00000008u, 0x00000165u, 0x00000028u, 0x00050041u, 0x00000166u, 0x00000167u, + 0x00000163u, 0x00000164u, 0x0003003eu, 0x00000167u, 0x00000165u, 0x000400e0u, 0x0000015eu, 0x0000015eu, + 0x0000015fu, 0x0003003eu, 0x00000168u, 0x00000046u, 0x000200f9u, 0x00000169u, 0x000200f8u, 0x00000169u, + 0x000400f6u, 0x0000016bu, 0x0000016cu, 0x00000000u, 0x000200f9u, 0x0000016du, 0x000200f8u, 0x0000016du, + 0x0004003du, 0x00000006u, 0x0000016eu, 0x00000168u, 0x000500acu, 0x00000035u, 0x0000016fu, 0x0000016eu, + 0x0000003fu, 0x000400fau, 0x0000016fu, 0x0000016au, 0x0000016bu, 0x000200f8u, 0x0000016au, 0x0004003du, + 0x00000006u, 0x00000170u, 0x00000027u, 0x0004003du, 0x00000006u, 0x00000171u, 0x00000168u, 0x000500b0u, + 0x00000035u, 0x00000172u, 0x00000170u, 0x00000171u, 0x000300f7u, 0x00000174u, 0x00000000u, 0x000400fau, + 0x00000172u, 0x00000173u, 0x00000174u, 0x000200f8u, 0x00000173u, 0x0004003du, 0x00000006u, 0x00000175u, + 0x00000027u, 0x0004003du, 0x00000006u, 0x00000176u, 0x00000027u, 0x0004003du, 0x00000006u, 0x00000177u, + 0x00000168u, 0x00050080u, 0x00000006u, 0x00000178u, 0x00000176u, 0x00000177u, 0x00050041u, 0x00000166u, + 0x00000179u, 0x00000163u, 0x00000178u, 0x0004003du, 0x00000008u, 0x0000017au, 0x00000179u, 0x00050041u, + 0x00000166u, 0x0000017bu, 0x00000163u, 0x00000175u, 0x0004003du, 0x00000008u, 0x0000017cu, 0x0000017bu, + 0x00050081u, 0x00000008u, 0x0000017du, 0x0000017cu, 0x0000017au, 0x00050041u, 0x00000166u, 0x0000017eu, + 0x00000163u, 0x00000175u, 0x0003003eu, 0x0000017eu, 0x0000017du, 0x000200f9u, 0x00000174u, 0x000200f8u, + 0x00000174u, 0x000400e0u, 0x0000015eu, 0x0000015eu, 0x0000015fu, 0x000200f9u, 0x0000016cu, 0x000200f8u, + 0x0000016cu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x00000168u, 0x000500c2u, 0x00000006u, 0x00000180u, + 0x0000017fu, 0x00000089u, 0x0003003eu, 0x00000168u, 0x00000180u, 0x000200f9u, 0x00000169u, 0x000200f8u, + 0x0000016bu, 0x00050041u, 0x00000166u, 0x00000181u, 0x00000163u, 0x000000dcu, 0x0004003du, 0x00000008u, + 0x00000182u, 0x00000181u, 0x000200feu, 0x00000182u, 0x00010038u, +}; + +constexpr uint32_t kSpv_vt_layer_norm[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000002deu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000017cu, + 0x00000181u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x0000017cu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000181u, 0x0000000bu, 0x0000001bu, 0x00030047u, + 0x00000186u, 0x00000002u, 0x00050048u, 0x00000186u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, + 0x00000186u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000186u, 0x00000002u, 0x00000023u, + 0x00000008u, 0x00050048u, 0x00000186u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000186u, + 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000186u, 0x00000005u, 0x00000023u, 0x00000014u, + 0x00050048u, 0x00000186u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000186u, 0x00000007u, + 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000186u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, + 0x00000186u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000186u, 0x0000000au, 0x00000023u, + 0x00000028u, 0x00050048u, 0x00000186u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000186u, + 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000001a1u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000001a2u, 0x00000002u, 0x00040048u, 0x000001a2u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a2u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001a4u, 0x00000018u, 0x00040047u, 0x000001a4u, + 0x00000021u, 0x00000000u, 0x00040047u, 0x000001a4u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001b3u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x000001b4u, 0x00000002u, 0x00040048u, 0x000001b4u, 0x00000000u, + 0x00000018u, 0x00050048u, 0x000001b4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b6u, + 0x00000018u, 0x00040047u, 0x000001b6u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001b6u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x0000025du, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000025eu, 0x00000002u, + 0x00040048u, 0x0000025eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000025eu, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x00000260u, 0x00000018u, 0x00040047u, 0x00000260u, 0x00000021u, 0x00000002u, + 0x00040047u, 0x00000260u, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000026bu, 0x00000006u, 0x00000002u, + 0x00030047u, 0x0000026cu, 0x00000002u, 0x00040048u, 0x0000026cu, 0x00000000u, 0x00000018u, 0x00050048u, + 0x0000026cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000026eu, 0x00000018u, 0x00040047u, + 0x0000026eu, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000026eu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x0000028cu, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000028du, 0x00000002u, 0x00040048u, 0x0000028du, + 0x00000000u, 0x00000018u, 0x00050048u, 0x0000028du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x0000028fu, 0x00000018u, 0x00040047u, 0x0000028fu, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000028fu, + 0x00000022u, 0x00000000u, 0x00040047u, 0x00000299u, 0x00000006u, 0x00000002u, 0x00030047u, 0x0000029au, + 0x00000002u, 0x00040048u, 0x0000029au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000029au, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x0000029cu, 0x00000018u, 0x00040047u, 0x0000029cu, 0x00000021u, + 0x00000005u, 0x00040047u, 0x0000029cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002b7u, 0x00000006u, + 0x00000004u, 0x00030047u, 0x000002b8u, 0x00000002u, 0x00050048u, 0x000002b8u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00040047u, 0x000002bau, 0x00000021u, 0x00000006u, 0x00040047u, 0x000002bau, 0x00000022u, + 0x00000000u, 0x00040047u, 0x000002c7u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000002c8u, 0x00000002u, + 0x00050048u, 0x000002c8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000002cau, 0x00000021u, + 0x00000007u, 0x00040047u, 0x000002cau, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ddu, 0x0000000bu, + 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, + 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, + 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, + 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, + 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00050021u, + 0x00000022u, 0x00000008u, 0x00000007u, 0x0000000du, 0x00040015u, 0x00000028u, 0x00000020u, 0x00000001u, + 0x0004002bu, 0x00000028u, 0x00000029u, 0x00000010u, 0x00020014u, 0x00000031u, 0x0004002bu, 0x00000006u, + 0x00000033u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000039u, 0x007fffffu, 0x0004002bu, 0x00000006u, + 0x0000003bu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000042u, 0x00000040u, 0x0004002bu, 0x00000006u, + 0x00000044u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000048u, 0x00007fffu, 0x0004002bu, 0x00000006u, + 0x0000004bu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000057u, 0x00008000u, 0x0004002bu, 0x00000028u, + 0x0000005cu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000005eu, 0x0000001fu, 0x0004002bu, 0x00000006u, + 0x00000062u, 0x000003ffu, 0x0004002bu, 0x00000028u, 0x0000006bu, 0x0000000du, 0x0004002bu, 0x00000006u, + 0x00000082u, 0x00000400u, 0x0004002bu, 0x00000028u, 0x00000085u, 0x00000001u, 0x0004002bu, 0x00000006u, + 0x0000008du, 0x00000071u, 0x0004002bu, 0x00000028u, 0x00000090u, 0x00000017u, 0x0004002bu, 0x00000006u, + 0x0000009au, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000aeu, 0x000000ffu, 0x00040020u, 0x000000b0u, + 0x00000007u, 0x00000028u, 0x0004002bu, 0x00000028u, 0x000000b4u, 0x0000007fu, 0x0004002bu, 0x00000028u, + 0x000000b6u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000c0u, 0x00007c00u, 0x0004002bu, 0x00000006u, + 0x000000c7u, 0x00000200u, 0x0004002bu, 0x00000028u, 0x000000d0u, 0x0000001fu, 0x0004002bu, 0x00000028u, + 0x000000d8u, 0x00000000u, 0x0004002bu, 0x00000028u, 0x000000ddu, 0xfffffff6u, 0x0004002bu, 0x00000006u, + 0x000000e3u, 0x00800000u, 0x0004002bu, 0x00000028u, 0x000000e7u, 0x0000000eu, 0x0004002bu, 0x00000006u, + 0x0000011au, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x0000011du, 0x00001000u, 0x0004002bu, 0x00000006u, + 0x00000152u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000153u, 0x00000108u, 0x0004002bu, 0x00000006u, + 0x00000154u, 0x00000080u, 0x0004001cu, 0x00000155u, 0x00000008u, 0x00000154u, 0x00040020u, 0x00000156u, + 0x00000004u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000004u, 0x00040020u, 0x0000015au, + 0x00000004u, 0x00000008u, 0x00040017u, 0x0000017au, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000017bu, + 0x00000001u, 0x0000017au, 0x0004003bu, 0x0000017bu, 0x0000017cu, 0x00000001u, 0x00040020u, 0x0000017du, + 0x00000001u, 0x00000006u, 0x0004003bu, 0x0000017bu, 0x00000181u, 0x00000001u, 0x000f001eu, 0x00000186u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000187u, 0x00000009u, + 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, 0x00000009u, 0x00040020u, 0x00000189u, 0x00000009u, + 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000018eu, 0x00000000u, 0x0004002bu, 0x00000028u, 0x0000019au, + 0x00000002u, 0x0003001du, 0x000001a1u, 0x00000006u, 0x0003001eu, 0x000001a2u, 0x000001a1u, 0x00040020u, + 0x000001a3u, 0x0000000cu, 0x000001a2u, 0x0004003bu, 0x000001a3u, 0x000001a4u, 0x0000000cu, 0x0004002bu, + 0x00000028u, 0x000001a5u, 0x00000008u, 0x00040020u, 0x000001adu, 0x0000000cu, 0x00000006u, 0x00040015u, + 0x000001b2u, 0x00000010u, 0x00000000u, 0x0003001du, 0x000001b3u, 0x000001b2u, 0x0003001eu, 0x000001b4u, + 0x000001b3u, 0x00040020u, 0x000001b5u, 0x0000000cu, 0x000001b4u, 0x0004003bu, 0x000001b5u, 0x000001b6u, + 0x0000000cu, 0x00040020u, 0x000001beu, 0x0000000cu, 0x000001b2u, 0x0004002bu, 0x00000008u, 0x0000020eu, + 0x3f800000u, 0x0004002bu, 0x00000028u, 0x00000218u, 0x0000000cu, 0x00040020u, 0x00000219u, 0x00000009u, + 0x00000008u, 0x0004002bu, 0x00000028u, 0x00000250u, 0x00000006u, 0x0004002bu, 0x00000028u, 0x00000256u, + 0x00000003u, 0x0003001du, 0x0000025du, 0x00000006u, 0x0003001eu, 0x0000025eu, 0x0000025du, 0x00040020u, + 0x0000025fu, 0x0000000cu, 0x0000025eu, 0x0004003bu, 0x0000025fu, 0x00000260u, 0x0000000cu, 0x0004002bu, + 0x00000028u, 0x00000261u, 0x00000009u, 0x0003001du, 0x0000026bu, 0x000001b2u, 0x0003001eu, 0x0000026cu, + 0x0000026bu, 0x00040020u, 0x0000026du, 0x0000000cu, 0x0000026cu, 0x0004003bu, 0x0000026du, 0x0000026eu, + 0x0000000cu, 0x0004002bu, 0x00000028u, 0x0000027fu, 0x00000007u, 0x0004002bu, 0x00000028u, 0x00000285u, + 0x00000004u, 0x0003001du, 0x0000028cu, 0x00000006u, 0x0003001eu, 0x0000028du, 0x0000028cu, 0x00040020u, + 0x0000028eu, 0x0000000cu, 0x0000028du, 0x0004003bu, 0x0000028eu, 0x0000028fu, 0x0000000cu, 0x0003001du, + 0x00000299u, 0x000001b2u, 0x0003001eu, 0x0000029au, 0x00000299u, 0x00040020u, 0x0000029bu, 0x0000000cu, + 0x0000029au, 0x0004003bu, 0x0000029bu, 0x0000029cu, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000002b1u, + 0x00000005u, 0x0003001du, 0x000002b7u, 0x00000006u, 0x0003001eu, 0x000002b8u, 0x000002b7u, 0x00040020u, + 0x000002b9u, 0x0000000cu, 0x000002b8u, 0x0004003bu, 0x000002b9u, 0x000002bau, 0x0000000cu, 0x0004002bu, + 0x00000028u, 0x000002bbu, 0x0000000bu, 0x0003001du, 0x000002c7u, 0x000001b2u, 0x0003001eu, 0x000002c8u, + 0x000002c7u, 0x00040020u, 0x000002c9u, 0x0000000cu, 0x000002c8u, 0x0004003bu, 0x000002c9u, 0x000002cau, + 0x0000000cu, 0x0003002au, 0x00000031u, 0x000002dau, 0x0006002cu, 0x0000017au, 0x000002ddu, 0x00000154u, + 0x0000004bu, 0x0000004bu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, + 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000179u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000180u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000184u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000018du, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000019eu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c3u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001cdu, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001cfu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001d6u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d7u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e2u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001feu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001ffu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000020du, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000020fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000211u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000021fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000022au, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000022eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000246u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000247u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000025au, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000277u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000278u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000289u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002a5u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002a6u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002d2u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002d4u, 0x00000007u, 0x00050041u, 0x0000017du, 0x0000017eu, + 0x0000017cu, 0x0000003bu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x0000017eu, 0x0003003eu, 0x00000179u, + 0x0000017fu, 0x00050041u, 0x0000017du, 0x00000182u, 0x00000181u, 0x0000003bu, 0x0004003du, 0x00000006u, + 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000180u, 0x00000183u, 0x0004003du, 0x00000006u, 0x00000185u, + 0x00000179u, 0x00050041u, 0x00000189u, 0x0000018au, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, + 0x0000018bu, 0x0000018au, 0x00050084u, 0x00000006u, 0x0000018cu, 0x00000185u, 0x0000018bu, 0x0003003eu, + 0x00000184u, 0x0000018cu, 0x0003003eu, 0x0000018du, 0x0000018eu, 0x0004003du, 0x00000006u, 0x00000190u, + 0x00000180u, 0x0003003eu, 0x0000018fu, 0x00000190u, 0x000200f9u, 0x00000191u, 0x000200f8u, 0x00000191u, + 0x000400f6u, 0x00000193u, 0x00000194u, 0x00000000u, 0x000200f9u, 0x00000195u, 0x000200f8u, 0x00000195u, + 0x0004003du, 0x00000006u, 0x00000196u, 0x0000018fu, 0x00050041u, 0x00000189u, 0x00000197u, 0x00000188u, + 0x00000085u, 0x0004003du, 0x00000006u, 0x00000198u, 0x00000197u, 0x000500b0u, 0x00000031u, 0x00000199u, + 0x00000196u, 0x00000198u, 0x000400fau, 0x00000199u, 0x00000192u, 0x00000193u, 0x000200f8u, 0x00000192u, + 0x00050041u, 0x00000189u, 0x0000019bu, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x0000019cu, + 0x0000019bu, 0x000500aau, 0x00000031u, 0x0000019du, 0x0000019cu, 0x0000003bu, 0x000300f7u, 0x000001a0u, + 0x00000000u, 0x000400fau, 0x0000019du, 0x0000019fu, 0x000001b1u, 0x000200f8u, 0x0000019fu, 0x00050041u, + 0x00000189u, 0x000001a6u, 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001a7u, 0x000001a6u, + 0x000500c2u, 0x00000006u, 0x000001a8u, 0x000001a7u, 0x0000019au, 0x0004003du, 0x00000006u, 0x000001a9u, + 0x00000184u, 0x0004003du, 0x00000006u, 0x000001aau, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001abu, + 0x000001a9u, 0x000001aau, 0x00050080u, 0x00000006u, 0x000001acu, 0x000001a8u, 0x000001abu, 0x00060041u, + 0x000001adu, 0x000001aeu, 0x000001a4u, 0x000000d8u, 0x000001acu, 0x0004003du, 0x00000006u, 0x000001afu, + 0x000001aeu, 0x0004007cu, 0x00000008u, 0x000001b0u, 0x000001afu, 0x0003003eu, 0x0000019eu, 0x000001b0u, + 0x000200f9u, 0x000001a0u, 0x000200f8u, 0x000001b1u, 0x00050041u, 0x00000189u, 0x000001b7u, 0x00000188u, + 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, 0x000500c2u, 0x00000006u, 0x000001b9u, + 0x000001b8u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001bau, 0x00000184u, 0x0004003du, 0x00000006u, + 0x000001bbu, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001bcu, 0x000001bau, 0x000001bbu, 0x00050080u, + 0x00000006u, 0x000001bdu, 0x000001b9u, 0x000001bcu, 0x00060041u, 0x000001beu, 0x000001bfu, 0x000001b6u, + 0x000000d8u, 0x000001bdu, 0x0004003du, 0x000001b2u, 0x000001c0u, 0x000001bfu, 0x00040071u, 0x00000006u, + 0x000001c1u, 0x000001c0u, 0x0003003eu, 0x000001c2u, 0x000001c1u, 0x00050041u, 0x00000189u, 0x000001c4u, + 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x000001c5u, 0x000001c4u, 0x0003003eu, 0x000001c3u, + 0x000001c5u, 0x00060039u, 0x00000008u, 0x000001c6u, 0x0000001bu, 0x000001c2u, 0x000001c3u, 0x0003003eu, + 0x0000019eu, 0x000001c6u, 0x000200f9u, 0x000001a0u, 0x000200f8u, 0x000001a0u, 0x0004003du, 0x00000008u, + 0x000001c7u, 0x0000019eu, 0x0004003du, 0x00000008u, 0x000001c8u, 0x0000018du, 0x00050081u, 0x00000008u, + 0x000001c9u, 0x000001c8u, 0x000001c7u, 0x0003003eu, 0x0000018du, 0x000001c9u, 0x000200f9u, 0x00000194u, + 0x000200f8u, 0x00000194u, 0x0004003du, 0x00000006u, 0x000001cau, 0x0000018fu, 0x00050080u, 0x00000006u, + 0x000001cbu, 0x000001cau, 0x00000154u, 0x0003003eu, 0x0000018fu, 0x000001cbu, 0x000200f9u, 0x00000191u, + 0x000200f8u, 0x00000193u, 0x0004003du, 0x00000006u, 0x000001ceu, 0x00000180u, 0x0003003eu, 0x000001cdu, + 0x000001ceu, 0x0004003du, 0x00000008u, 0x000001d0u, 0x0000018du, 0x0003003eu, 0x000001cfu, 0x000001d0u, + 0x00060039u, 0x00000008u, 0x000001d1u, 0x00000025u, 0x000001cdu, 0x000001cfu, 0x00050041u, 0x00000189u, + 0x000001d2u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001d3u, 0x000001d2u, 0x00040070u, + 0x00000008u, 0x000001d4u, 0x000001d3u, 0x00050088u, 0x00000008u, 0x000001d5u, 0x000001d1u, 0x000001d4u, + 0x0003003eu, 0x000001ccu, 0x000001d5u, 0x0003003eu, 0x000001d6u, 0x0000018eu, 0x0004003du, 0x00000006u, + 0x000001d8u, 0x00000180u, 0x0003003eu, 0x000001d7u, 0x000001d8u, 0x000200f9u, 0x000001d9u, 0x000200f8u, + 0x000001d9u, 0x000400f6u, 0x000001dbu, 0x000001dcu, 0x00000000u, 0x000200f9u, 0x000001ddu, 0x000200f8u, + 0x000001ddu, 0x0004003du, 0x00000006u, 0x000001deu, 0x000001d7u, 0x00050041u, 0x00000189u, 0x000001dfu, + 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001e0u, 0x000001dfu, 0x000500b0u, 0x00000031u, + 0x000001e1u, 0x000001deu, 0x000001e0u, 0x000400fau, 0x000001e1u, 0x000001dau, 0x000001dbu, 0x000200f8u, + 0x000001dau, 0x00050041u, 0x00000189u, 0x000001e3u, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, + 0x000001e4u, 0x000001e3u, 0x000500aau, 0x00000031u, 0x000001e5u, 0x000001e4u, 0x0000003bu, 0x000300f7u, + 0x000001e8u, 0x00000000u, 0x000400fau, 0x000001e5u, 0x000001e7u, 0x000001f3u, 0x000200f8u, 0x000001e7u, + 0x00050041u, 0x00000189u, 0x000001e9u, 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001eau, + 0x000001e9u, 0x000500c2u, 0x00000006u, 0x000001ebu, 0x000001eau, 0x0000019au, 0x0004003du, 0x00000006u, + 0x000001ecu, 0x00000184u, 0x0004003du, 0x00000006u, 0x000001edu, 0x000001d7u, 0x00050080u, 0x00000006u, + 0x000001eeu, 0x000001ecu, 0x000001edu, 0x00050080u, 0x00000006u, 0x000001efu, 0x000001ebu, 0x000001eeu, + 0x00060041u, 0x000001adu, 0x000001f0u, 0x000001a4u, 0x000000d8u, 0x000001efu, 0x0004003du, 0x00000006u, + 0x000001f1u, 0x000001f0u, 0x0004007cu, 0x00000008u, 0x000001f2u, 0x000001f1u, 0x0003003eu, 0x000001e6u, + 0x000001f2u, 0x000200f9u, 0x000001e8u, 0x000200f8u, 0x000001f3u, 0x00050041u, 0x00000189u, 0x000001f4u, + 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001f5u, 0x000001f4u, 0x000500c2u, 0x00000006u, + 0x000001f6u, 0x000001f5u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001f7u, 0x00000184u, 0x0004003du, + 0x00000006u, 0x000001f8u, 0x000001d7u, 0x00050080u, 0x00000006u, 0x000001f9u, 0x000001f7u, 0x000001f8u, + 0x00050080u, 0x00000006u, 0x000001fau, 0x000001f6u, 0x000001f9u, 0x00060041u, 0x000001beu, 0x000001fbu, + 0x000001b6u, 0x000000d8u, 0x000001fau, 0x0004003du, 0x000001b2u, 0x000001fcu, 0x000001fbu, 0x00040071u, + 0x00000006u, 0x000001fdu, 0x000001fcu, 0x0003003eu, 0x000001feu, 0x000001fdu, 0x00050041u, 0x00000189u, + 0x00000200u, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000201u, 0x00000200u, 0x0003003eu, + 0x000001ffu, 0x00000201u, 0x00060039u, 0x00000008u, 0x00000202u, 0x0000001bu, 0x000001feu, 0x000001ffu, + 0x0003003eu, 0x000001e6u, 0x00000202u, 0x000200f9u, 0x000001e8u, 0x000200f8u, 0x000001e8u, 0x0004003du, + 0x00000008u, 0x00000203u, 0x000001e6u, 0x0004003du, 0x00000008u, 0x00000204u, 0x000001ccu, 0x00050083u, + 0x00000008u, 0x00000205u, 0x00000203u, 0x00000204u, 0x0003003eu, 0x000001e2u, 0x00000205u, 0x0004003du, + 0x00000008u, 0x00000206u, 0x000001e2u, 0x0004003du, 0x00000008u, 0x00000207u, 0x000001e2u, 0x00050085u, + 0x00000008u, 0x00000208u, 0x00000206u, 0x00000207u, 0x0004003du, 0x00000008u, 0x00000209u, 0x000001d6u, + 0x00050081u, 0x00000008u, 0x0000020au, 0x00000209u, 0x00000208u, 0x0003003eu, 0x000001d6u, 0x0000020au, + 0x000200f9u, 0x000001dcu, 0x000200f8u, 0x000001dcu, 0x0004003du, 0x00000006u, 0x0000020bu, 0x000001d7u, + 0x00050080u, 0x00000006u, 0x0000020cu, 0x0000020bu, 0x00000154u, 0x0003003eu, 0x000001d7u, 0x0000020cu, + 0x000200f9u, 0x000001d9u, 0x000200f8u, 0x000001dbu, 0x0004003du, 0x00000006u, 0x00000210u, 0x00000180u, + 0x0003003eu, 0x0000020fu, 0x00000210u, 0x0004003du, 0x00000008u, 0x00000212u, 0x000001d6u, 0x0003003eu, + 0x00000211u, 0x00000212u, 0x00060039u, 0x00000008u, 0x00000213u, 0x00000025u, 0x0000020fu, 0x00000211u, + 0x00050041u, 0x00000189u, 0x00000214u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000215u, + 0x00000214u, 0x00040070u, 0x00000008u, 0x00000216u, 0x00000215u, 0x00050088u, 0x00000008u, 0x00000217u, + 0x00000213u, 0x00000216u, 0x00050041u, 0x00000219u, 0x0000021au, 0x00000188u, 0x00000218u, 0x0004003du, + 0x00000008u, 0x0000021bu, 0x0000021au, 0x00050081u, 0x00000008u, 0x0000021cu, 0x00000217u, 0x0000021bu, + 0x0006000cu, 0x00000008u, 0x0000021du, 0x00000001u, 0x0000001fu, 0x0000021cu, 0x00050088u, 0x00000008u, + 0x0000021eu, 0x0000020eu, 0x0000021du, 0x0003003eu, 0x0000020du, 0x0000021eu, 0x0004003du, 0x00000006u, + 0x00000220u, 0x00000180u, 0x0003003eu, 0x0000021fu, 0x00000220u, 0x000200f9u, 0x00000221u, 0x000200f8u, + 0x00000221u, 0x000400f6u, 0x00000223u, 0x00000224u, 0x00000000u, 0x000200f9u, 0x00000225u, 0x000200f8u, + 0x00000225u, 0x0004003du, 0x00000006u, 0x00000226u, 0x0000021fu, 0x00050041u, 0x00000189u, 0x00000227u, + 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000228u, 0x00000227u, 0x000500b0u, 0x00000031u, + 0x00000229u, 0x00000226u, 0x00000228u, 0x000400fau, 0x00000229u, 0x00000222u, 0x00000223u, 0x000200f8u, + 0x00000222u, 0x00050041u, 0x00000189u, 0x0000022bu, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, + 0x0000022cu, 0x0000022bu, 0x000500aau, 0x00000031u, 0x0000022du, 0x0000022cu, 0x0000003bu, 0x000300f7u, + 0x00000230u, 0x00000000u, 0x000400fau, 0x0000022du, 0x0000022fu, 0x0000023bu, 0x000200f8u, 0x0000022fu, + 0x00050041u, 0x00000189u, 0x00000231u, 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x00000232u, + 0x00000231u, 0x000500c2u, 0x00000006u, 0x00000233u, 0x00000232u, 0x0000019au, 0x0004003du, 0x00000006u, + 0x00000234u, 0x00000184u, 0x0004003du, 0x00000006u, 0x00000235u, 0x0000021fu, 0x00050080u, 0x00000006u, + 0x00000236u, 0x00000234u, 0x00000235u, 0x00050080u, 0x00000006u, 0x00000237u, 0x00000233u, 0x00000236u, + 0x00060041u, 0x000001adu, 0x00000238u, 0x000001a4u, 0x000000d8u, 0x00000237u, 0x0004003du, 0x00000006u, + 0x00000239u, 0x00000238u, 0x0004007cu, 0x00000008u, 0x0000023au, 0x00000239u, 0x0003003eu, 0x0000022eu, + 0x0000023au, 0x000200f9u, 0x00000230u, 0x000200f8u, 0x0000023bu, 0x00050041u, 0x00000189u, 0x0000023cu, + 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x0000023du, 0x0000023cu, 0x000500c2u, 0x00000006u, + 0x0000023eu, 0x0000023du, 0x00000085u, 0x0004003du, 0x00000006u, 0x0000023fu, 0x00000184u, 0x0004003du, + 0x00000006u, 0x00000240u, 0x0000021fu, 0x00050080u, 0x00000006u, 0x00000241u, 0x0000023fu, 0x00000240u, + 0x00050080u, 0x00000006u, 0x00000242u, 0x0000023eu, 0x00000241u, 0x00060041u, 0x000001beu, 0x00000243u, + 0x000001b6u, 0x000000d8u, 0x00000242u, 0x0004003du, 0x000001b2u, 0x00000244u, 0x00000243u, 0x00040071u, + 0x00000006u, 0x00000245u, 0x00000244u, 0x0003003eu, 0x00000246u, 0x00000245u, 0x00050041u, 0x00000189u, + 0x00000248u, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000249u, 0x00000248u, 0x0003003eu, + 0x00000247u, 0x00000249u, 0x00060039u, 0x00000008u, 0x0000024au, 0x0000001bu, 0x00000246u, 0x00000247u, + 0x0003003eu, 0x0000022eu, 0x0000024au, 0x000200f9u, 0x00000230u, 0x000200f8u, 0x00000230u, 0x0004003du, + 0x00000008u, 0x0000024bu, 0x0000022eu, 0x0004003du, 0x00000008u, 0x0000024cu, 0x000001ccu, 0x00050083u, + 0x00000008u, 0x0000024du, 0x0000024bu, 0x0000024cu, 0x0004003du, 0x00000008u, 0x0000024eu, 0x0000020du, + 0x00050085u, 0x00000008u, 0x0000024fu, 0x0000024du, 0x0000024eu, 0x0003003eu, 0x0000022au, 0x0000024fu, + 0x00050041u, 0x00000189u, 0x00000251u, 0x00000188u, 0x00000250u, 0x0004003du, 0x00000006u, 0x00000252u, + 0x00000251u, 0x000500abu, 0x00000031u, 0x00000253u, 0x00000252u, 0x0000003bu, 0x000300f7u, 0x00000255u, + 0x00000000u, 0x000400fau, 0x00000253u, 0x00000254u, 0x00000255u, 0x000200f8u, 0x00000254u, 0x00050041u, + 0x00000189u, 0x00000257u, 0x00000188u, 0x00000256u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000257u, + 0x000500aau, 0x00000031u, 0x00000259u, 0x00000258u, 0x0000003bu, 0x000300f7u, 0x0000025cu, 0x00000000u, + 0x000400fau, 0x00000259u, 0x0000025bu, 0x0000026au, 0x000200f8u, 0x0000025bu, 0x00050041u, 0x00000189u, + 0x00000262u, 0x00000188u, 0x00000261u, 0x0004003du, 0x00000006u, 0x00000263u, 0x00000262u, 0x000500c2u, + 0x00000006u, 0x00000264u, 0x00000263u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000265u, 0x0000021fu, + 0x00050080u, 0x00000006u, 0x00000266u, 0x00000264u, 0x00000265u, 0x00060041u, 0x000001adu, 0x00000267u, + 0x00000260u, 0x000000d8u, 0x00000266u, 0x0004003du, 0x00000006u, 0x00000268u, 0x00000267u, 0x0004007cu, + 0x00000008u, 0x00000269u, 0x00000268u, 0x0003003eu, 0x0000025au, 0x00000269u, 0x000200f9u, 0x0000025cu, + 0x000200f8u, 0x0000026au, 0x00050041u, 0x00000189u, 0x0000026fu, 0x00000188u, 0x00000261u, 0x0004003du, + 0x00000006u, 0x00000270u, 0x0000026fu, 0x000500c2u, 0x00000006u, 0x00000271u, 0x00000270u, 0x00000085u, + 0x0004003du, 0x00000006u, 0x00000272u, 0x0000021fu, 0x00050080u, 0x00000006u, 0x00000273u, 0x00000271u, + 0x00000272u, 0x00060041u, 0x000001beu, 0x00000274u, 0x0000026eu, 0x000000d8u, 0x00000273u, 0x0004003du, + 0x000001b2u, 0x00000275u, 0x00000274u, 0x00040071u, 0x00000006u, 0x00000276u, 0x00000275u, 0x0003003eu, + 0x00000277u, 0x00000276u, 0x00050041u, 0x00000189u, 0x00000279u, 0x00000188u, 0x00000256u, 0x0004003du, + 0x00000006u, 0x0000027au, 0x00000279u, 0x0003003eu, 0x00000278u, 0x0000027au, 0x00060039u, 0x00000008u, + 0x0000027bu, 0x0000001bu, 0x00000277u, 0x00000278u, 0x0003003eu, 0x0000025au, 0x0000027bu, 0x000200f9u, + 0x0000025cu, 0x000200f8u, 0x0000025cu, 0x0004003du, 0x00000008u, 0x0000027cu, 0x0000025au, 0x0004003du, + 0x00000008u, 0x0000027du, 0x0000022au, 0x00050085u, 0x00000008u, 0x0000027eu, 0x0000027du, 0x0000027cu, + 0x0003003eu, 0x0000022au, 0x0000027eu, 0x000200f9u, 0x00000255u, 0x000200f8u, 0x00000255u, 0x00050041u, + 0x00000189u, 0x00000280u, 0x00000188u, 0x0000027fu, 0x0004003du, 0x00000006u, 0x00000281u, 0x00000280u, + 0x000500abu, 0x00000031u, 0x00000282u, 0x00000281u, 0x0000003bu, 0x000300f7u, 0x00000284u, 0x00000000u, + 0x000400fau, 0x00000282u, 0x00000283u, 0x00000284u, 0x000200f8u, 0x00000283u, 0x00050041u, 0x00000189u, + 0x00000286u, 0x00000188u, 0x00000285u, 0x0004003du, 0x00000006u, 0x00000287u, 0x00000286u, 0x000500aau, + 0x00000031u, 0x00000288u, 0x00000287u, 0x0000003bu, 0x000300f7u, 0x0000028bu, 0x00000000u, 0x000400fau, + 0x00000288u, 0x0000028au, 0x00000298u, 0x000200f8u, 0x0000028au, 0x00050041u, 0x00000189u, 0x00000290u, + 0x00000188u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000291u, 0x00000290u, 0x000500c2u, 0x00000006u, + 0x00000292u, 0x00000291u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000293u, 0x0000021fu, 0x00050080u, + 0x00000006u, 0x00000294u, 0x00000292u, 0x00000293u, 0x00060041u, 0x000001adu, 0x00000295u, 0x0000028fu, + 0x000000d8u, 0x00000294u, 0x0004003du, 0x00000006u, 0x00000296u, 0x00000295u, 0x0004007cu, 0x00000008u, + 0x00000297u, 0x00000296u, 0x0003003eu, 0x00000289u, 0x00000297u, 0x000200f9u, 0x0000028bu, 0x000200f8u, + 0x00000298u, 0x00050041u, 0x00000189u, 0x0000029du, 0x00000188u, 0x0000005cu, 0x0004003du, 0x00000006u, + 0x0000029eu, 0x0000029du, 0x000500c2u, 0x00000006u, 0x0000029fu, 0x0000029eu, 0x00000085u, 0x0004003du, + 0x00000006u, 0x000002a0u, 0x0000021fu, 0x00050080u, 0x00000006u, 0x000002a1u, 0x0000029fu, 0x000002a0u, + 0x00060041u, 0x000001beu, 0x000002a2u, 0x0000029cu, 0x000000d8u, 0x000002a1u, 0x0004003du, 0x000001b2u, + 0x000002a3u, 0x000002a2u, 0x00040071u, 0x00000006u, 0x000002a4u, 0x000002a3u, 0x0003003eu, 0x000002a5u, + 0x000002a4u, 0x00050041u, 0x00000189u, 0x000002a7u, 0x00000188u, 0x00000285u, 0x0004003du, 0x00000006u, + 0x000002a8u, 0x000002a7u, 0x0003003eu, 0x000002a6u, 0x000002a8u, 0x00060039u, 0x00000008u, 0x000002a9u, + 0x0000001bu, 0x000002a5u, 0x000002a6u, 0x0003003eu, 0x00000289u, 0x000002a9u, 0x000200f9u, 0x0000028bu, + 0x000200f8u, 0x0000028bu, 0x0004003du, 0x00000008u, 0x000002aau, 0x00000289u, 0x0004003du, 0x00000008u, + 0x000002abu, 0x0000022au, 0x00050081u, 0x00000008u, 0x000002acu, 0x000002abu, 0x000002aau, 0x0003003eu, + 0x0000022au, 0x000002acu, 0x000200f9u, 0x00000284u, 0x000200f8u, 0x00000284u, 0x000200f9u, 0x000002adu, + 0x000200f8u, 0x000002adu, 0x000400f6u, 0x000002afu, 0x000002b0u, 0x00000000u, 0x000200f9u, 0x000002aeu, + 0x000200f8u, 0x000002aeu, 0x00050041u, 0x00000189u, 0x000002b2u, 0x00000188u, 0x000002b1u, 0x0004003du, + 0x00000006u, 0x000002b3u, 0x000002b2u, 0x000500aau, 0x00000031u, 0x000002b4u, 0x000002b3u, 0x0000003bu, + 0x000300f7u, 0x000002b6u, 0x00000000u, 0x000400fau, 0x000002b4u, 0x000002b5u, 0x000002c6u, 0x000200f8u, + 0x000002b5u, 0x00050041u, 0x00000189u, 0x000002bcu, 0x00000188u, 0x000002bbu, 0x0004003du, 0x00000006u, + 0x000002bdu, 0x000002bcu, 0x000500c2u, 0x00000006u, 0x000002beu, 0x000002bdu, 0x0000019au, 0x0004003du, + 0x00000006u, 0x000002bfu, 0x00000184u, 0x0004003du, 0x00000006u, 0x000002c0u, 0x0000021fu, 0x00050080u, + 0x00000006u, 0x000002c1u, 0x000002bfu, 0x000002c0u, 0x00050080u, 0x00000006u, 0x000002c2u, 0x000002beu, + 0x000002c1u, 0x0004003du, 0x00000008u, 0x000002c3u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x000002c4u, + 0x000002c3u, 0x00060041u, 0x000001adu, 0x000002c5u, 0x000002bau, 0x000000d8u, 0x000002c2u, 0x0003003eu, + 0x000002c5u, 0x000002c4u, 0x000200f9u, 0x000002b6u, 0x000200f8u, 0x000002c6u, 0x00050041u, 0x00000189u, + 0x000002cbu, 0x00000188u, 0x000002bbu, 0x0004003du, 0x00000006u, 0x000002ccu, 0x000002cbu, 0x000500c2u, + 0x00000006u, 0x000002cdu, 0x000002ccu, 0x00000085u, 0x0004003du, 0x00000006u, 0x000002ceu, 0x00000184u, + 0x0004003du, 0x00000006u, 0x000002cfu, 0x0000021fu, 0x00050080u, 0x00000006u, 0x000002d0u, 0x000002ceu, + 0x000002cfu, 0x00050080u, 0x00000006u, 0x000002d1u, 0x000002cdu, 0x000002d0u, 0x0004003du, 0x00000008u, + 0x000002d3u, 0x0000022au, 0x0003003eu, 0x000002d2u, 0x000002d3u, 0x00050041u, 0x00000189u, 0x000002d5u, + 0x00000188u, 0x000002b1u, 0x0004003du, 0x00000006u, 0x000002d6u, 0x000002d5u, 0x0003003eu, 0x000002d4u, + 0x000002d6u, 0x00060039u, 0x00000006u, 0x000002d7u, 0x00000020u, 0x000002d2u, 0x000002d4u, 0x00040071u, + 0x000001b2u, 0x000002d8u, 0x000002d7u, 0x00060041u, 0x000001beu, 0x000002d9u, 0x000002cau, 0x000000d8u, + 0x000002d1u, 0x0003003eu, 0x000002d9u, 0x000002d8u, 0x000200f9u, 0x000002b6u, 0x000200f8u, 0x000002b6u, + 0x000200f9u, 0x000002b0u, 0x000200f8u, 0x000002b0u, 0x000400fau, 0x000002dau, 0x000002adu, 0x000002afu, + 0x000200f8u, 0x000002afu, 0x000200f9u, 0x00000224u, 0x000200f8u, 0x00000224u, 0x0004003du, 0x00000006u, + 0x000002dbu, 0x0000021fu, 0x00050080u, 0x00000006u, 0x000002dcu, 0x000002dbu, 0x00000154u, 0x0003003eu, + 0x0000021fu, 0x000002dcu, 0x000200f9u, 0x00000221u, 0x000200f8u, 0x00000223u, 0x000100fdu, 0x00010038u, + 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, + 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000027u, 0x0000000au, 0x000500c4u, 0x00000006u, + 0x0000002au, 0x00000027u, 0x00000029u, 0x0004007cu, 0x00000008u, 0x0000002bu, 0x0000002au, 0x000200feu, + 0x0000002bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, + 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000002eu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000047u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002fu, 0x0000000fu, + 0x0004007cu, 0x00000006u, 0x00000030u, 0x0000002fu, 0x0003003eu, 0x0000002eu, 0x00000030u, 0x0004003du, + 0x00000006u, 0x00000032u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x00000034u, 0x00000032u, 0x00000033u, + 0x000500aau, 0x00000031u, 0x00000035u, 0x00000034u, 0x00000033u, 0x000300f7u, 0x00000037u, 0x00000000u, + 0x000400fau, 0x00000035u, 0x00000036u, 0x00000037u, 0x000200f8u, 0x00000036u, 0x0004003du, 0x00000006u, + 0x00000038u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x0000003au, 0x00000038u, 0x00000039u, 0x000500abu, + 0x00000031u, 0x0000003cu, 0x0000003au, 0x0000003bu, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000037u, + 0x000700f5u, 0x00000031u, 0x0000003du, 0x00000035u, 0x00000011u, 0x0000003cu, 0x00000036u, 0x000300f7u, + 0x0000003fu, 0x00000000u, 0x000400fau, 0x0000003du, 0x0000003eu, 0x0000003fu, 0x000200f8u, 0x0000003eu, + 0x0004003du, 0x00000006u, 0x00000040u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x00000041u, 0x00000040u, + 0x00000029u, 0x000500c5u, 0x00000006u, 0x00000043u, 0x00000041u, 0x00000042u, 0x000500c7u, 0x00000006u, + 0x00000045u, 0x00000043u, 0x00000044u, 0x000200feu, 0x00000045u, 0x000200f8u, 0x0000003fu, 0x0004003du, + 0x00000006u, 0x00000049u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x0000004au, 0x00000049u, 0x00000029u, + 0x000500c7u, 0x00000006u, 0x0000004cu, 0x0000004au, 0x0000004bu, 0x00050080u, 0x00000006u, 0x0000004du, + 0x00000048u, 0x0000004cu, 0x0003003eu, 0x00000047u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000004eu, + 0x0000002eu, 0x0004003du, 0x00000006u, 0x0000004fu, 0x00000047u, 0x00050080u, 0x00000006u, 0x00000050u, + 0x0000004eu, 0x0000004fu, 0x000500c2u, 0x00000006u, 0x00000051u, 0x00000050u, 0x00000029u, 0x000500c7u, + 0x00000006u, 0x00000052u, 0x00000051u, 0x00000044u, 0x000200feu, 0x00000052u, 0x00010038u, 0x00050036u, + 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, + 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005au, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000060u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007bu, + 0x00000007u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000058u, + 0x00000056u, 0x00000057u, 0x000500c4u, 0x00000006u, 0x00000059u, 0x00000058u, 0x00000029u, 0x0003003eu, + 0x00000055u, 0x00000059u, 0x0004003du, 0x00000006u, 0x0000005bu, 0x00000012u, 0x000500c2u, 0x00000006u, + 0x0000005du, 0x0000005bu, 0x0000005cu, 0x000500c7u, 0x00000006u, 0x0000005fu, 0x0000005du, 0x0000005eu, + 0x0003003eu, 0x0000005au, 0x0000005fu, 0x0004003du, 0x00000006u, 0x00000061u, 0x00000012u, 0x000500c7u, + 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x0003003eu, 0x00000060u, 0x00000063u, 0x0004003du, + 0x00000006u, 0x00000064u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000065u, 0x00000064u, 0x0000005eu, + 0x000300f7u, 0x00000067u, 0x00000000u, 0x000400fau, 0x00000065u, 0x00000066u, 0x00000067u, 0x000200f8u, + 0x00000066u, 0x0004003du, 0x00000006u, 0x00000068u, 0x00000055u, 0x000500c5u, 0x00000006u, 0x00000069u, + 0x00000068u, 0x00000033u, 0x0004003du, 0x00000006u, 0x0000006au, 0x00000060u, 0x000500c4u, 0x00000006u, + 0x0000006cu, 0x0000006au, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x0000006du, 0x00000069u, 0x0000006cu, + 0x0004007cu, 0x00000008u, 0x0000006eu, 0x0000006du, 0x000200feu, 0x0000006eu, 0x000200f8u, 0x00000067u, + 0x0004003du, 0x00000006u, 0x00000070u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000071u, 0x00000070u, + 0x0000003bu, 0x000300f7u, 0x00000073u, 0x00000000u, 0x000400fau, 0x00000071u, 0x00000072u, 0x00000073u, + 0x000200f8u, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000074u, 0x00000060u, 0x000500aau, 0x00000031u, + 0x00000075u, 0x00000074u, 0x0000003bu, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, + 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, 0x0004003du, 0x00000006u, 0x00000078u, 0x00000055u, + 0x0004007cu, 0x00000008u, 0x00000079u, 0x00000078u, 0x000200feu, 0x00000079u, 0x000200f8u, 0x00000077u, + 0x0003003eu, 0x0000007bu, 0x0000003bu, 0x000200f9u, 0x0000007cu, 0x000200f8u, 0x0000007cu, 0x000400f6u, + 0x0000007eu, 0x0000007fu, 0x00000000u, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x00000081u, 0x00000060u, 0x000500c7u, 0x00000006u, 0x00000083u, 0x00000081u, 0x00000082u, + 0x000500aau, 0x00000031u, 0x00000084u, 0x00000083u, 0x0000003bu, 0x000400fau, 0x00000084u, 0x0000007du, + 0x0000007eu, 0x000200f8u, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000086u, 0x00000060u, 0x000500c4u, + 0x00000006u, 0x00000087u, 0x00000086u, 0x00000085u, 0x0003003eu, 0x00000060u, 0x00000087u, 0x0004003du, + 0x00000006u, 0x00000088u, 0x0000007bu, 0x00050080u, 0x00000006u, 0x00000089u, 0x00000088u, 0x0000004bu, + 0x0003003eu, 0x0000007bu, 0x00000089u, 0x000200f9u, 0x0000007fu, 0x000200f8u, 0x0000007fu, 0x000200f9u, + 0x0000007cu, 0x000200f8u, 0x0000007eu, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000060u, 0x000500c7u, + 0x00000006u, 0x0000008bu, 0x0000008au, 0x00000062u, 0x0003003eu, 0x00000060u, 0x0000008bu, 0x0004003du, + 0x00000006u, 0x0000008cu, 0x00000055u, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000007bu, 0x00050082u, + 0x00000006u, 0x0000008fu, 0x0000008du, 0x0000008eu, 0x000500c4u, 0x00000006u, 0x00000091u, 0x0000008fu, + 0x00000090u, 0x000500c5u, 0x00000006u, 0x00000092u, 0x0000008cu, 0x00000091u, 0x0004003du, 0x00000006u, + 0x00000093u, 0x00000060u, 0x000500c4u, 0x00000006u, 0x00000094u, 0x00000093u, 0x0000006bu, 0x000500c5u, + 0x00000006u, 0x00000095u, 0x00000092u, 0x00000094u, 0x0004007cu, 0x00000008u, 0x00000096u, 0x00000095u, + 0x000200feu, 0x00000096u, 0x000200f8u, 0x00000073u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000055u, + 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005au, 0x00050080u, 0x00000006u, 0x0000009bu, 0x00000099u, + 0x0000009au, 0x000500c4u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x00000090u, 0x000500c5u, 0x00000006u, + 0x0000009du, 0x00000098u, 0x0000009cu, 0x0004003du, 0x00000006u, 0x0000009eu, 0x00000060u, 0x000500c4u, + 0x00000006u, 0x0000009fu, 0x0000009eu, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x000000a0u, 0x0000009du, + 0x0000009fu, 0x0004007cu, 0x00000008u, 0x000000a1u, 0x000000a0u, 0x000200feu, 0x000000a1u, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, + 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000abu, 0x00000007u, 0x0004003bu, 0x000000b0u, + 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000efu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000111u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000118u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a5u, 0x00000015u, 0x0004007cu, 0x00000006u, + 0x000000a6u, 0x000000a5u, 0x0003003eu, 0x000000a4u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000000a8u, + 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000a9u, 0x000000a8u, 0x00000029u, 0x000500c7u, 0x00000006u, + 0x000000aau, 0x000000a9u, 0x00000057u, 0x0003003eu, 0x000000a7u, 0x000000aau, 0x0004003du, 0x00000006u, + 0x000000acu, 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000adu, 0x000000acu, 0x00000090u, 0x000500c7u, + 0x00000006u, 0x000000afu, 0x000000adu, 0x000000aeu, 0x0003003eu, 0x000000abu, 0x000000afu, 0x0004003du, + 0x00000006u, 0x000000b2u, 0x000000abu, 0x0004007cu, 0x00000028u, 0x000000b3u, 0x000000b2u, 0x00050082u, + 0x00000028u, 0x000000b5u, 0x000000b3u, 0x000000b4u, 0x00050080u, 0x00000028u, 0x000000b7u, 0x000000b5u, + 0x000000b6u, 0x0003003eu, 0x000000b1u, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000b9u, 0x000000a4u, + 0x000500c7u, 0x00000006u, 0x000000bau, 0x000000b9u, 0x00000039u, 0x0003003eu, 0x000000b8u, 0x000000bau, + 0x0004003du, 0x00000006u, 0x000000bbu, 0x000000abu, 0x000500aau, 0x00000031u, 0x000000bcu, 0x000000bbu, + 0x000000aeu, 0x000300f7u, 0x000000beu, 0x00000000u, 0x000400fau, 0x000000bcu, 0x000000bdu, 0x000000beu, + 0x000200f8u, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000bfu, 0x000000a7u, 0x000500c5u, 0x00000006u, + 0x000000c1u, 0x000000bfu, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c2u, 0x000000b8u, 0x000500abu, + 0x00000031u, 0x000000c3u, 0x000000c2u, 0x0000003bu, 0x000300f7u, 0x000000c6u, 0x00000000u, 0x000400fau, + 0x000000c3u, 0x000000c5u, 0x000000cbu, 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000c8u, + 0x000000b8u, 0x000500c2u, 0x00000006u, 0x000000c9u, 0x000000c8u, 0x0000006bu, 0x000500c5u, 0x00000006u, + 0x000000cau, 0x000000c7u, 0x000000c9u, 0x0003003eu, 0x000000c4u, 0x000000cau, 0x000200f9u, 0x000000c6u, + 0x000200f8u, 0x000000cbu, 0x0003003eu, 0x000000c4u, 0x0000003bu, 0x000200f9u, 0x000000c6u, 0x000200f8u, + 0x000000c6u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000c4u, 0x000500c5u, 0x00000006u, 0x000000cdu, + 0x000000c1u, 0x000000ccu, 0x000200feu, 0x000000cdu, 0x000200f8u, 0x000000beu, 0x0004003du, 0x00000028u, + 0x000000cfu, 0x000000b1u, 0x000500afu, 0x00000031u, 0x000000d1u, 0x000000cfu, 0x000000d0u, 0x000300f7u, + 0x000000d3u, 0x00000000u, 0x000400fau, 0x000000d1u, 0x000000d2u, 0x000000d3u, 0x000200f8u, 0x000000d2u, + 0x0004003du, 0x00000006u, 0x000000d4u, 0x000000a7u, 0x000500c5u, 0x00000006u, 0x000000d5u, 0x000000d4u, + 0x000000c0u, 0x000200feu, 0x000000d5u, 0x000200f8u, 0x000000d3u, 0x0004003du, 0x00000028u, 0x000000d7u, + 0x000000b1u, 0x000500b3u, 0x00000031u, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, + 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, + 0x00000028u, 0x000000dcu, 0x000000b1u, 0x000500b1u, 0x00000031u, 0x000000deu, 0x000000dcu, 0x000000ddu, + 0x000300f7u, 0x000000e0u, 0x00000000u, 0x000400fau, 0x000000deu, 0x000000dfu, 0x000000e0u, 0x000200f8u, + 0x000000dfu, 0x0004003du, 0x00000006u, 0x000000e1u, 0x000000a7u, 0x000200feu, 0x000000e1u, 0x000200f8u, + 0x000000e0u, 0x0004003du, 0x00000006u, 0x000000e4u, 0x000000b8u, 0x000500c5u, 0x00000006u, 0x000000e5u, + 0x000000e4u, 0x000000e3u, 0x0003003eu, 0x000000b8u, 0x000000e5u, 0x0004003du, 0x00000028u, 0x000000e8u, + 0x000000b1u, 0x00050082u, 0x00000028u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0004007cu, 0x00000006u, + 0x000000eau, 0x000000e9u, 0x0003003eu, 0x000000e6u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000ecu, + 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000edu, 0x000000e6u, 0x000500c2u, 0x00000006u, 0x000000eeu, + 0x000000ecu, 0x000000edu, 0x0003003eu, 0x000000ebu, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, + 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e6u, 0x000500c4u, 0x00000006u, 0x000000f2u, + 0x0000004bu, 0x000000f1u, 0x00050082u, 0x00000006u, 0x000000f3u, 0x000000f2u, 0x0000004bu, 0x000500c7u, + 0x00000006u, 0x000000f4u, 0x000000f0u, 0x000000f3u, 0x0003003eu, 0x000000efu, 0x000000f4u, 0x0004003du, + 0x00000006u, 0x000000f6u, 0x000000e6u, 0x00050082u, 0x00000006u, 0x000000f7u, 0x000000f6u, 0x0000004bu, + 0x000500c4u, 0x00000006u, 0x000000f8u, 0x0000004bu, 0x000000f7u, 0x0003003eu, 0x000000f5u, 0x000000f8u, + 0x0004003du, 0x00000006u, 0x000000f9u, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000f5u, + 0x000500acu, 0x00000031u, 0x000000fbu, 0x000000f9u, 0x000000fau, 0x000400a8u, 0x00000031u, 0x000000fcu, + 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, + 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000efu, 0x0004003du, 0x00000006u, + 0x00000100u, 0x000000f5u, 0x000500aau, 0x00000031u, 0x00000101u, 0x000000ffu, 0x00000100u, 0x000300f7u, + 0x00000103u, 0x00000000u, 0x000400fau, 0x00000101u, 0x00000102u, 0x00000103u, 0x000200f8u, 0x00000102u, + 0x0004003du, 0x00000006u, 0x00000104u, 0x000000ebu, 0x000500c7u, 0x00000006u, 0x00000105u, 0x00000104u, + 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000106u, 0x00000105u, 0x0000003bu, 0x000200f9u, 0x00000103u, + 0x000200f8u, 0x00000103u, 0x000700f5u, 0x00000031u, 0x00000107u, 0x00000101u, 0x000000fdu, 0x00000106u, + 0x00000102u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x00000031u, 0x00000108u, + 0x000000fbu, 0x000000e0u, 0x00000107u, 0x00000103u, 0x000300f7u, 0x0000010au, 0x00000000u, 0x000400fau, + 0x00000108u, 0x00000109u, 0x0000010au, 0x000200f8u, 0x00000109u, 0x0004003du, 0x00000006u, 0x0000010bu, + 0x000000ebu, 0x00050080u, 0x00000006u, 0x0000010cu, 0x0000010bu, 0x0000004bu, 0x0003003eu, 0x000000ebu, + 0x0000010cu, 0x000200f9u, 0x0000010au, 0x000200f8u, 0x0000010au, 0x0004003du, 0x00000006u, 0x0000010du, + 0x000000a7u, 0x0004003du, 0x00000006u, 0x0000010eu, 0x000000ebu, 0x000500c5u, 0x00000006u, 0x0000010fu, + 0x0000010du, 0x0000010eu, 0x000200feu, 0x0000010fu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000028u, + 0x00000112u, 0x000000b1u, 0x0004007cu, 0x00000006u, 0x00000113u, 0x00000112u, 0x000500c4u, 0x00000006u, + 0x00000114u, 0x00000113u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000115u, 0x000000b8u, 0x000500c2u, + 0x00000006u, 0x00000116u, 0x00000115u, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x00000117u, 0x00000114u, + 0x00000116u, 0x0003003eu, 0x00000111u, 0x00000117u, 0x0004003du, 0x00000006u, 0x00000119u, 0x000000b8u, + 0x000500c7u, 0x00000006u, 0x0000011bu, 0x00000119u, 0x0000011au, 0x0003003eu, 0x00000118u, 0x0000011bu, + 0x0004003du, 0x00000006u, 0x0000011cu, 0x00000118u, 0x000500acu, 0x00000031u, 0x0000011eu, 0x0000011cu, + 0x0000011du, 0x000400a8u, 0x00000031u, 0x0000011fu, 0x0000011eu, 0x000300f7u, 0x00000121u, 0x00000000u, + 0x000400fau, 0x0000011fu, 0x00000120u, 0x00000121u, 0x000200f8u, 0x00000120u, 0x0004003du, 0x00000006u, + 0x00000122u, 0x00000118u, 0x000500aau, 0x00000031u, 0x00000123u, 0x00000122u, 0x0000011du, 0x000300f7u, + 0x00000125u, 0x00000000u, 0x000400fau, 0x00000123u, 0x00000124u, 0x00000125u, 0x000200f8u, 0x00000124u, + 0x0004003du, 0x00000006u, 0x00000126u, 0x00000111u, 0x000500c7u, 0x00000006u, 0x00000127u, 0x00000126u, + 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000128u, 0x00000127u, 0x0000003bu, 0x000200f9u, 0x00000125u, + 0x000200f8u, 0x00000125u, 0x000700f5u, 0x00000031u, 0x00000129u, 0x00000123u, 0x00000120u, 0x00000128u, + 0x00000124u, 0x000200f9u, 0x00000121u, 0x000200f8u, 0x00000121u, 0x000700f5u, 0x00000031u, 0x0000012au, + 0x0000011eu, 0x000000dbu, 0x00000129u, 0x00000125u, 0x000300f7u, 0x0000012cu, 0x00000000u, 0x000400fau, + 0x0000012au, 0x0000012bu, 0x0000012cu, 0x000200f8u, 0x0000012bu, 0x0004003du, 0x00000006u, 0x0000012du, + 0x00000111u, 0x00050080u, 0x00000006u, 0x0000012eu, 0x0000012du, 0x0000004bu, 0x0003003eu, 0x00000111u, + 0x0000012eu, 0x000200f9u, 0x0000012cu, 0x000200f8u, 0x0000012cu, 0x0004003du, 0x00000006u, 0x0000012fu, + 0x000000a7u, 0x0004003du, 0x00000006u, 0x00000130u, 0x00000111u, 0x000500c5u, 0x00000006u, 0x00000131u, + 0x0000012fu, 0x00000130u, 0x000200feu, 0x00000131u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, + 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, + 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000136u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000139u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013du, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000134u, 0x0000001au, 0x000500aau, 0x00000031u, 0x00000135u, 0x00000134u, 0x0000004bu, 0x000300f7u, + 0x00000138u, 0x00000000u, 0x000400fau, 0x00000135u, 0x00000137u, 0x0000013cu, 0x000200f8u, 0x00000137u, + 0x0004003du, 0x00000006u, 0x0000013au, 0x00000019u, 0x0003003eu, 0x00000139u, 0x0000013au, 0x00050039u, + 0x00000008u, 0x0000013bu, 0x00000013u, 0x00000139u, 0x0003003eu, 0x00000136u, 0x0000013bu, 0x000200f9u, + 0x00000138u, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000006u, 0x0000013eu, 0x00000019u, 0x0003003eu, + 0x0000013du, 0x0000013eu, 0x00050039u, 0x00000008u, 0x0000013fu, 0x0000000bu, 0x0000013du, 0x0003003eu, + 0x00000136u, 0x0000013fu, 0x000200f9u, 0x00000138u, 0x000200f8u, 0x00000138u, 0x0004003du, 0x00000008u, + 0x00000140u, 0x00000136u, 0x000200feu, 0x00000140u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, + 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, + 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000145u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000148u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014cu, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000143u, 0x0000001fu, 0x000500aau, 0x00000031u, 0x00000144u, 0x00000143u, 0x0000004bu, 0x000300f7u, + 0x00000147u, 0x00000000u, 0x000400fau, 0x00000144u, 0x00000146u, 0x0000014bu, 0x000200f8u, 0x00000146u, + 0x0004003du, 0x00000008u, 0x00000149u, 0x0000001eu, 0x0003003eu, 0x00000148u, 0x00000149u, 0x00050039u, + 0x00000006u, 0x0000014au, 0x00000016u, 0x00000148u, 0x0003003eu, 0x00000145u, 0x0000014au, 0x000200f9u, + 0x00000147u, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000008u, 0x0000014du, 0x0000001eu, 0x0003003eu, + 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000006u, 0x0000014eu, 0x00000010u, 0x0000014cu, 0x0003003eu, + 0x00000145u, 0x0000014eu, 0x000200f9u, 0x00000147u, 0x000200f8u, 0x00000147u, 0x0004003du, 0x00000006u, + 0x0000014fu, 0x00000145u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000025u, + 0x00000000u, 0x00000022u, 0x00030037u, 0x00000007u, 0x00000023u, 0x00030037u, 0x0000000du, 0x00000024u, + 0x000200f8u, 0x00000026u, 0x0004003bu, 0x00000007u, 0x0000015cu, 0x00000007u, 0x000400e0u, 0x00000152u, + 0x00000152u, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000158u, 0x00000023u, 0x0004003du, 0x00000008u, + 0x00000159u, 0x00000024u, 0x00050041u, 0x0000015au, 0x0000015bu, 0x00000157u, 0x00000158u, 0x0003003eu, + 0x0000015bu, 0x00000159u, 0x000400e0u, 0x00000152u, 0x00000152u, 0x00000153u, 0x0003003eu, 0x0000015cu, + 0x00000042u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015du, 0x000400f6u, 0x0000015fu, 0x00000160u, + 0x00000000u, 0x000200f9u, 0x00000161u, 0x000200f8u, 0x00000161u, 0x0004003du, 0x00000006u, 0x00000162u, + 0x0000015cu, 0x000500acu, 0x00000031u, 0x00000163u, 0x00000162u, 0x0000003bu, 0x000400fau, 0x00000163u, + 0x0000015eu, 0x0000015fu, 0x000200f8u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x00000164u, 0x00000023u, + 0x0004003du, 0x00000006u, 0x00000165u, 0x0000015cu, 0x000500b0u, 0x00000031u, 0x00000166u, 0x00000164u, + 0x00000165u, 0x000300f7u, 0x00000168u, 0x00000000u, 0x000400fau, 0x00000166u, 0x00000167u, 0x00000168u, + 0x000200f8u, 0x00000167u, 0x0004003du, 0x00000006u, 0x00000169u, 0x00000023u, 0x0004003du, 0x00000006u, + 0x0000016au, 0x00000023u, 0x0004003du, 0x00000006u, 0x0000016bu, 0x0000015cu, 0x00050080u, 0x00000006u, + 0x0000016cu, 0x0000016au, 0x0000016bu, 0x00050041u, 0x0000015au, 0x0000016du, 0x00000157u, 0x0000016cu, + 0x0004003du, 0x00000008u, 0x0000016eu, 0x0000016du, 0x00050041u, 0x0000015au, 0x0000016fu, 0x00000157u, + 0x00000169u, 0x0004003du, 0x00000008u, 0x00000170u, 0x0000016fu, 0x00050081u, 0x00000008u, 0x00000171u, + 0x00000170u, 0x0000016eu, 0x00050041u, 0x0000015au, 0x00000172u, 0x00000157u, 0x00000169u, 0x0003003eu, + 0x00000172u, 0x00000171u, 0x000200f9u, 0x00000168u, 0x000200f8u, 0x00000168u, 0x000400e0u, 0x00000152u, + 0x00000152u, 0x00000153u, 0x000200f9u, 0x00000160u, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, + 0x00000173u, 0x0000015cu, 0x000500c2u, 0x00000006u, 0x00000174u, 0x00000173u, 0x00000085u, 0x0003003eu, + 0x0000015cu, 0x00000174u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015fu, 0x00050041u, 0x0000015au, + 0x00000175u, 0x00000157u, 0x000000d8u, 0x0004003du, 0x00000008u, 0x00000176u, 0x00000175u, 0x000200feu, + 0x00000176u, 0x00010038u, +}; + +constexpr uint32_t kSpv_vt_relu[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001bfu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00040047u, 0x00000166u, + 0x00000006u, 0x00000004u, 0x00030047u, 0x00000167u, 0x00000002u, 0x00040048u, 0x00000167u, 0x00000000u, + 0x00000018u, 0x00050048u, 0x00000167u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000169u, + 0x00000018u, 0x00040047u, 0x00000169u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000169u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x00000177u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000178u, 0x00000002u, + 0x00040048u, 0x00000178u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000178u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x0000017au, 0x00000018u, 0x00040047u, 0x0000017au, 0x00000021u, 0x00000001u, + 0x00040047u, 0x0000017au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000193u, 0x00000006u, 0x00000004u, + 0x00030047u, 0x00000194u, 0x00000002u, 0x00050048u, 0x00000194u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00040047u, 0x00000196u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000196u, 0x00000022u, 0x00000000u, + 0x00040047u, 0x000001a5u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001a6u, 0x00000002u, 0x00050048u, + 0x000001a6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001a8u, 0x00000021u, 0x00000003u, + 0x00040047u, 0x000001a8u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001beu, 0x0000000bu, 0x00000019u, + 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, + 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, + 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, + 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, + 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, + 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, + 0x0004002bu, 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, + 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, + 0x0004002bu, 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, + 0x0004002bu, 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, + 0x0004002bu, 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, + 0x0004002bu, 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, + 0x0004002bu, 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, + 0x0004002bu, 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, + 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, + 0x00040020u, 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, + 0x0004002bu, 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, + 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, + 0x0004002bu, 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, + 0x0004002bu, 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, + 0x0004002bu, 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, + 0x00040017u, 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, + 0x0004003bu, 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, + 0x0007001eu, 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, + 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, + 0x00000158u, 0x00000009u, 0x00000006u, 0x0003001du, 0x00000166u, 0x00000006u, 0x0003001eu, 0x00000167u, + 0x00000166u, 0x00040020u, 0x00000168u, 0x0000000cu, 0x00000167u, 0x0004003bu, 0x00000168u, 0x00000169u, + 0x0000000cu, 0x0004002bu, 0x00000023u, 0x0000016au, 0x00000003u, 0x0004002bu, 0x00000023u, 0x0000016du, + 0x00000002u, 0x00040020u, 0x00000171u, 0x0000000cu, 0x00000006u, 0x00040015u, 0x00000176u, 0x00000010u, + 0x00000000u, 0x0003001du, 0x00000177u, 0x00000176u, 0x0003001eu, 0x00000178u, 0x00000177u, 0x00040020u, + 0x00000179u, 0x0000000cu, 0x00000178u, 0x0004003bu, 0x00000179u, 0x0000017au, 0x0000000cu, 0x00040020u, + 0x00000180u, 0x0000000cu, 0x00000176u, 0x0003001du, 0x00000193u, 0x00000006u, 0x0003001eu, 0x00000194u, + 0x00000193u, 0x00040020u, 0x00000195u, 0x0000000cu, 0x00000194u, 0x0004003bu, 0x00000195u, 0x00000196u, + 0x0000000cu, 0x0004002bu, 0x00000023u, 0x00000197u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x0000019eu, + 0x00000000u, 0x0003001du, 0x000001a5u, 0x00000176u, 0x0003001eu, 0x000001a6u, 0x000001a5u, 0x00040020u, + 0x000001a7u, 0x0000000cu, 0x000001a6u, 0x0004003bu, 0x000001a7u, 0x000001a8u, 0x0000000cu, 0x0003002au, + 0x0000002cu, 0x000001b9u, 0x0004002bu, 0x00000006u, 0x000001bau, 0x00000080u, 0x0004001cu, 0x000001bbu, + 0x00000008u, 0x000001bau, 0x00040020u, 0x000001bcu, 0x00000004u, 0x000001bbu, 0x0004003bu, 0x000001bcu, + 0x000001bdu, 0x00000004u, 0x0006002cu, 0x0000014eu, 0x000001beu, 0x000001bau, 0x00000046u, 0x00000046u, + 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, + 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000015fu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000163u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000184u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000185u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001b2u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001b3u, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, 0x00000150u, 0x00000036u, + 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, 0x00000153u, 0x0004003du, + 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, 0x00000157u, 0x000000d3u, + 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x000500aeu, 0x0000002cu, 0x0000015bu, 0x00000154u, + 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, 0x0000015cu, 0x0000015du, + 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, 0x0000015du, 0x00050041u, 0x00000158u, 0x00000160u, + 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000161u, 0x00000160u, 0x000500aau, 0x0000002cu, + 0x00000162u, 0x00000161u, 0x00000036u, 0x000300f7u, 0x00000165u, 0x00000000u, 0x000400fau, 0x00000162u, + 0x00000164u, 0x00000175u, 0x000200f8u, 0x00000164u, 0x00050041u, 0x00000158u, 0x0000016bu, 0x00000157u, + 0x0000016au, 0x0004003du, 0x00000006u, 0x0000016cu, 0x0000016bu, 0x000500c2u, 0x00000006u, 0x0000016eu, + 0x0000016cu, 0x0000016du, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000014du, 0x00050080u, 0x00000006u, + 0x00000170u, 0x0000016eu, 0x0000016fu, 0x00060041u, 0x00000171u, 0x00000172u, 0x00000169u, 0x000000d3u, + 0x00000170u, 0x0004003du, 0x00000006u, 0x00000173u, 0x00000172u, 0x0004007cu, 0x00000008u, 0x00000174u, + 0x00000173u, 0x0003003eu, 0x00000163u, 0x00000174u, 0x000200f9u, 0x00000165u, 0x000200f8u, 0x00000175u, + 0x00050041u, 0x00000158u, 0x0000017bu, 0x00000157u, 0x0000016au, 0x0004003du, 0x00000006u, 0x0000017cu, + 0x0000017bu, 0x000500c2u, 0x00000006u, 0x0000017du, 0x0000017cu, 0x00000080u, 0x0004003du, 0x00000006u, + 0x0000017eu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000017fu, 0x0000017du, 0x0000017eu, 0x00060041u, + 0x00000180u, 0x00000181u, 0x0000017au, 0x000000d3u, 0x0000017fu, 0x0004003du, 0x00000176u, 0x00000182u, + 0x00000181u, 0x00040071u, 0x00000006u, 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000184u, 0x00000183u, + 0x00050041u, 0x00000158u, 0x00000186u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000187u, + 0x00000186u, 0x0003003eu, 0x00000185u, 0x00000187u, 0x00060039u, 0x00000008u, 0x00000188u, 0x0000001bu, + 0x00000184u, 0x00000185u, 0x0003003eu, 0x00000163u, 0x00000188u, 0x000200f9u, 0x00000165u, 0x000200f8u, + 0x00000165u, 0x0004003du, 0x00000008u, 0x00000189u, 0x00000163u, 0x0003003eu, 0x0000015fu, 0x00000189u, + 0x000200f9u, 0x0000018au, 0x000200f8u, 0x0000018au, 0x000400f6u, 0x0000018cu, 0x0000018du, 0x00000000u, + 0x000200f9u, 0x0000018bu, 0x000200f8u, 0x0000018bu, 0x00050041u, 0x00000158u, 0x0000018eu, 0x00000157u, + 0x0000016du, 0x0004003du, 0x00000006u, 0x0000018fu, 0x0000018eu, 0x000500aau, 0x0000002cu, 0x00000190u, + 0x0000018fu, 0x00000036u, 0x000300f7u, 0x00000192u, 0x00000000u, 0x000400fau, 0x00000190u, 0x00000191u, + 0x000001a4u, 0x000200f8u, 0x00000191u, 0x00050041u, 0x00000158u, 0x00000198u, 0x00000157u, 0x00000197u, + 0x0004003du, 0x00000006u, 0x00000199u, 0x00000198u, 0x000500c2u, 0x00000006u, 0x0000019au, 0x00000199u, + 0x0000016du, 0x0004003du, 0x00000006u, 0x0000019bu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000019cu, + 0x0000019au, 0x0000019bu, 0x0004003du, 0x00000008u, 0x0000019du, 0x0000015fu, 0x000500bau, 0x0000002cu, + 0x0000019fu, 0x0000019du, 0x0000019eu, 0x0004003du, 0x00000008u, 0x000001a0u, 0x0000015fu, 0x000600a9u, + 0x00000008u, 0x000001a1u, 0x0000019fu, 0x000001a0u, 0x0000019eu, 0x0004007cu, 0x00000006u, 0x000001a2u, + 0x000001a1u, 0x00060041u, 0x00000171u, 0x000001a3u, 0x00000196u, 0x000000d3u, 0x0000019cu, 0x0003003eu, + 0x000001a3u, 0x000001a2u, 0x000200f9u, 0x00000192u, 0x000200f8u, 0x000001a4u, 0x00050041u, 0x00000158u, + 0x000001a9u, 0x00000157u, 0x00000197u, 0x0004003du, 0x00000006u, 0x000001aau, 0x000001a9u, 0x000500c2u, + 0x00000006u, 0x000001abu, 0x000001aau, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001acu, 0x0000014du, + 0x00050080u, 0x00000006u, 0x000001adu, 0x000001abu, 0x000001acu, 0x0004003du, 0x00000008u, 0x000001aeu, + 0x0000015fu, 0x000500bau, 0x0000002cu, 0x000001afu, 0x000001aeu, 0x0000019eu, 0x0004003du, 0x00000008u, + 0x000001b0u, 0x0000015fu, 0x000600a9u, 0x00000008u, 0x000001b1u, 0x000001afu, 0x000001b0u, 0x0000019eu, + 0x0003003eu, 0x000001b2u, 0x000001b1u, 0x00050041u, 0x00000158u, 0x000001b4u, 0x00000157u, 0x0000016du, + 0x0004003du, 0x00000006u, 0x000001b5u, 0x000001b4u, 0x0003003eu, 0x000001b3u, 0x000001b5u, 0x00060039u, + 0x00000006u, 0x000001b6u, 0x00000020u, 0x000001b2u, 0x000001b3u, 0x00040071u, 0x00000176u, 0x000001b7u, + 0x000001b6u, 0x00060041u, 0x00000180u, 0x000001b8u, 0x000001a8u, 0x000000d3u, 0x000001adu, 0x0003003eu, + 0x000001b8u, 0x000001b7u, 0x000200f9u, 0x00000192u, 0x000200f8u, 0x00000192u, 0x000200f9u, 0x0000018du, + 0x000200f8u, 0x0000018du, 0x000400fau, 0x000001b9u, 0x0000018au, 0x0000018cu, 0x000200f8u, 0x0000018cu, + 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, + 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000022u, 0x0000000au, + 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, 0x0004007cu, 0x00000008u, 0x00000026u, + 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, + 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, + 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, 0x00000007u, 0x0004003du, 0x00000008u, + 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, 0x0000002au, 0x0003003eu, 0x00000029u, + 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, 0x000500c7u, 0x00000006u, 0x0000002fu, + 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, 0x0000002fu, 0x0000002eu, 0x000300f7u, + 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, 0x00000032u, 0x000200f8u, 0x00000031u, + 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, 0x00000006u, 0x00000035u, 0x00000033u, + 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000032u, + 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, 0x00000030u, 0x00000011u, 0x00000037u, + 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, 0x00000038u, 0x00000039u, 0x0000003au, + 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, 0x00000029u, 0x000500c2u, 0x00000006u, + 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, + 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, 0x000200feu, 0x00000040u, 0x000200f8u, + 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, 0x000500c2u, 0x00000006u, 0x00000045u, + 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, 0x00000045u, 0x00000046u, 0x00050080u, + 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, 0x00000042u, 0x00000048u, 0x0004003du, + 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, 0x0000004au, 0x00000042u, 0x00050080u, + 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, 0x00000006u, 0x0000004cu, 0x0000004bu, + 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, 0x0000003fu, 0x000200feu, 0x0000004du, + 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, + 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005bu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000051u, 0x00000012u, 0x000500c7u, + 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, 0x00000006u, 0x00000054u, 0x00000053u, + 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, + 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, 0x000500c7u, 0x00000006u, 0x0000005au, + 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, 0x0004003du, 0x00000006u, 0x0000005cu, + 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, 0x0000005du, 0x0003003eu, 0x0000005bu, + 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x00000060u, + 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, 0x000400fau, 0x00000060u, 0x00000061u, + 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, 0x00000063u, 0x00000050u, 0x000500c5u, + 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, 0x00000006u, 0x00000065u, 0x0000005bu, + 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000068u, + 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, 0x00000068u, 0x000200feu, 0x00000069u, + 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000055u, 0x000500aau, 0x0000002cu, + 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, 0x00000000u, 0x000400fau, 0x0000006cu, + 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000005bu, + 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, 0x000300f7u, 0x00000072u, 0x00000000u, + 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, + 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, 0x00000073u, 0x000200feu, 0x00000074u, + 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, 0x000200f9u, 0x00000077u, 0x000200f8u, + 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, 0x000200f9u, 0x0000007bu, 0x000200f8u, + 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000007eu, + 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, 0x0000007eu, 0x00000036u, 0x000400fau, + 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, 0x0004003du, 0x00000006u, 0x00000081u, + 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, 0x00000080u, 0x0003003eu, 0x0000005bu, + 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, 0x00050080u, 0x00000006u, 0x00000084u, + 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, 0x000200f9u, 0x0000007au, 0x000200f8u, + 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003du, 0x00000006u, 0x00000085u, + 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, 0x0000005du, 0x0003003eu, 0x0000005bu, + 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000089u, + 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, 0x00000089u, 0x000500c4u, 0x00000006u, + 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x0000008du, 0x00000087u, 0x0000008cu, + 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000008fu, 0x0000008eu, + 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, 0x0000008fu, 0x0004007cu, 0x00000008u, + 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000006u, + 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000055u, 0x00050080u, 0x00000006u, + 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, 0x00000097u, 0x00000096u, 0x0000008bu, + 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, + 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, 0x00000066u, 0x000500c5u, 0x00000006u, + 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, 0x0000009cu, 0x0000009bu, 0x000200feu, + 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, + 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x0000009fu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a6u, 0x00000007u, + 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b3u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e1u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000010cu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a0u, 0x00000015u, + 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, 0x0000009fu, 0x000000a1u, 0x0004003du, + 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a4u, 0x000000a3u, 0x00000024u, + 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, 0x0003003eu, 0x000000a2u, 0x000000a5u, + 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, + 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, 0x000000a9u, 0x0003003eu, 0x000000a6u, + 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, 0x0004007cu, 0x00000023u, 0x000000aeu, + 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, 0x000000afu, 0x00050080u, 0x00000023u, + 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, 0x000000b2u, 0x0004003du, 0x00000006u, + 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, 0x000000b4u, 0x00000034u, 0x0003003eu, + 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, 0x000000a6u, 0x000500aau, 0x0000002cu, + 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, 0x00000000u, 0x000400fau, 0x000000b7u, + 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000bau, 0x000000a2u, + 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, + 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, 0x00000036u, 0x000300f7u, 0x000000c1u, + 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, 0x000200f8u, 0x000000c0u, 0x0004003du, + 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x000000c4u, 0x000000c3u, 0x00000066u, + 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, 0x0003003eu, 0x000000bfu, 0x000000c5u, + 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, 0x000000bfu, 0x00000036u, 0x000200f9u, + 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x000000c7u, 0x000000bfu, 0x000500c5u, + 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, 0x000000c8u, 0x000200f8u, 0x000000b9u, + 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, 0x0000002cu, 0x000000ccu, 0x000000cau, + 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, 0x000000ccu, 0x000000cdu, 0x000000ceu, + 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, 0x000000a2u, 0x000500c5u, 0x00000006u, + 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, 0x000200f8u, 0x000000ceu, 0x0004003du, + 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, 0x000000d4u, 0x000000d2u, 0x000000d3u, + 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, + 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, 0x000500b1u, 0x0000002cu, 0x000000d9u, + 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, + 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, 0x000000dcu, 0x000000a2u, 0x000200feu, + 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, 0x000000dfu, 0x000000b3u, 0x000500c5u, + 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, 0x000000b3u, 0x000000e0u, 0x0004003du, + 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, 0x000000e4u, 0x000000e2u, 0x000000e3u, + 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, 0x000000e1u, 0x000000e5u, 0x0004003du, + 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000e8u, 0x000000e1u, 0x000500c2u, + 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, 0x000000e6u, 0x000000e9u, 0x0004003du, + 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000ecu, 0x000000e1u, 0x000500c4u, + 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, 0x00000006u, 0x000000eeu, 0x000000edu, + 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, 0x000000eeu, 0x0003003eu, 0x000000eau, + 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, 0x00050082u, 0x00000006u, 0x000000f2u, + 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, 0x00000046u, 0x000000f2u, 0x0003003eu, + 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000eau, 0x0004003du, 0x00000006u, + 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x000400a8u, + 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, 0x00000000u, 0x000400fau, 0x000000f7u, + 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000eau, + 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, 0x0000002cu, 0x000000fcu, 0x000000fau, + 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, + 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000e6u, 0x000500c7u, 0x00000006u, + 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000101u, 0x00000100u, 0x00000036u, + 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x0000002cu, 0x00000102u, 0x000000fcu, + 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, 0x000200f8u, 0x000000f9u, 0x000700f5u, + 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, 0x000000feu, 0x000300f7u, 0x00000105u, + 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, 0x000200f8u, 0x00000104u, 0x0004003du, + 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, 0x00000107u, 0x00000106u, 0x00000046u, + 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, 0x000200f8u, 0x00000105u, 0x0004003du, + 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, 0x00000109u, 0x000000e6u, 0x000500c5u, + 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, 0x0000010au, 0x000200f8u, 0x000000d6u, + 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, 0x00000006u, 0x0000010eu, 0x0000010du, + 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, 0x0004003du, 0x00000006u, 0x00000110u, + 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, 0x00000066u, 0x000500c5u, 0x00000006u, + 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, 0x00000112u, 0x0004003du, 0x00000006u, + 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, 0x00000114u, 0x00000115u, 0x0003003eu, + 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000113u, 0x000500acu, 0x0000002cu, + 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, 0x0000011au, 0x00000119u, 0x000300f7u, + 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, 0x0000011cu, 0x000200f8u, 0x0000011bu, + 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, 0x0000002cu, 0x0000011eu, 0x0000011du, + 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, + 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, 0x0000010cu, 0x000500c7u, 0x00000006u, + 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000123u, 0x00000122u, 0x00000036u, + 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, 0x0000002cu, 0x00000124u, 0x0000011eu, + 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, 0x000200f8u, 0x0000011cu, 0x000700f5u, + 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, 0x00000120u, 0x000300f7u, 0x00000127u, + 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, 0x000200f8u, 0x00000126u, 0x0004003du, + 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, 0x00000129u, 0x00000128u, 0x00000046u, + 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, 0x000200f8u, 0x00000127u, 0x0004003du, + 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000010cu, 0x000500c5u, + 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, + 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, + 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000131u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, + 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, 0x0000002cu, 0x00000130u, 0x0000012fu, + 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, 0x00000130u, 0x00000132u, 0x00000137u, + 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, 0x00000019u, 0x0003003eu, 0x00000134u, + 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, 0x00000134u, 0x0003003eu, 0x00000131u, + 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, + 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, 0x00000008u, 0x0000013au, 0x0000000bu, + 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, + 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, 0x0000013bu, 0x00010038u, 0x00050036u, + 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, + 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000140u, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000147u, 0x00000007u, + 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, 0x0000002cu, 0x0000013fu, 0x0000013eu, + 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, 0x0000013fu, 0x00000141u, 0x00000146u, + 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, 0x0000001eu, 0x0003003eu, 0x00000143u, + 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, 0x00000143u, 0x0003003eu, 0x00000140u, + 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, 0x0004003du, 0x00000008u, 0x00000148u, + 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, 0x00000006u, 0x00000149u, 0x00000010u, + 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000142u, + 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, 0x0000014au, 0x00010038u, +}; + +constexpr uint32_t kSpv_vt_rms_norm[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000031fu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000017cu, + 0x00000181u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x0000017cu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000181u, 0x0000000bu, 0x0000001bu, 0x00030047u, + 0x00000186u, 0x00000002u, 0x00050048u, 0x00000186u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, + 0x00000186u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000186u, 0x00000002u, 0x00000023u, + 0x00000008u, 0x00050048u, 0x00000186u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000186u, + 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000186u, 0x00000005u, 0x00000023u, 0x00000014u, + 0x00050048u, 0x00000186u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000186u, 0x00000007u, + 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000186u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, + 0x00000186u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000186u, 0x0000000au, 0x00000023u, + 0x00000028u, 0x00050048u, 0x00000186u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000186u, + 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000001a2u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000001a3u, 0x00000002u, 0x00040048u, 0x000001a3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a3u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001a5u, 0x00000018u, 0x00040047u, 0x000001a5u, + 0x00000021u, 0x00000000u, 0x00040047u, 0x000001a5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001b4u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x000001b5u, 0x00000002u, 0x00040048u, 0x000001b5u, 0x00000000u, + 0x00000018u, 0x00050048u, 0x000001b5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b7u, + 0x00000018u, 0x00040047u, 0x000001b7u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001b7u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x000001d6u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001d7u, 0x00000002u, + 0x00050048u, 0x000001d7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001d9u, 0x00000021u, + 0x00000006u, 0x00040047u, 0x000001d9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001e6u, 0x00000006u, + 0x00000002u, 0x00030047u, 0x000001e7u, 0x00000002u, 0x00050048u, 0x000001e7u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00040047u, 0x000001e9u, 0x00000021u, 0x00000007u, 0x00040047u, 0x000001e9u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x000002c0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002c1u, 0x00000002u, + 0x00040048u, 0x000002c1u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002c1u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x000002c3u, 0x00000018u, 0x00040047u, 0x000002c3u, 0x00000021u, 0x00000002u, + 0x00040047u, 0x000002c3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ceu, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000002cfu, 0x00000002u, 0x00040048u, 0x000002cfu, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000002cfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002d1u, 0x00000018u, 0x00040047u, + 0x000002d1u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002d1u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000002f2u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002f3u, 0x00000002u, 0x00050048u, 0x000002f3u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000002f5u, 0x00000021u, 0x00000004u, 0x00040047u, + 0x000002f5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000305u, 0x00000006u, 0x00000002u, 0x00030047u, + 0x00000306u, 0x00000002u, 0x00050048u, 0x00000306u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x00000308u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000308u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x0000031eu, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, + 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, + 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, + 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, + 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, + 0x00000007u, 0x00050021u, 0x00000022u, 0x00000008u, 0x00000007u, 0x0000000du, 0x00040015u, 0x00000028u, + 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000028u, 0x00000029u, 0x00000010u, 0x00020014u, 0x00000031u, + 0x0004002bu, 0x00000006u, 0x00000033u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000039u, 0x007fffffu, + 0x0004002bu, 0x00000006u, 0x0000003bu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000042u, 0x00000040u, + 0x0004002bu, 0x00000006u, 0x00000044u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000048u, 0x00007fffu, + 0x0004002bu, 0x00000006u, 0x0000004bu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000057u, 0x00008000u, + 0x0004002bu, 0x00000028u, 0x0000005cu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000005eu, 0x0000001fu, + 0x0004002bu, 0x00000006u, 0x00000062u, 0x000003ffu, 0x0004002bu, 0x00000028u, 0x0000006bu, 0x0000000du, + 0x0004002bu, 0x00000006u, 0x00000082u, 0x00000400u, 0x0004002bu, 0x00000028u, 0x00000085u, 0x00000001u, + 0x0004002bu, 0x00000006u, 0x0000008du, 0x00000071u, 0x0004002bu, 0x00000028u, 0x00000090u, 0x00000017u, + 0x0004002bu, 0x00000006u, 0x0000009au, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000aeu, 0x000000ffu, + 0x00040020u, 0x000000b0u, 0x00000007u, 0x00000028u, 0x0004002bu, 0x00000028u, 0x000000b4u, 0x0000007fu, + 0x0004002bu, 0x00000028u, 0x000000b6u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000c0u, 0x00007c00u, + 0x0004002bu, 0x00000006u, 0x000000c7u, 0x00000200u, 0x0004002bu, 0x00000028u, 0x000000d0u, 0x0000001fu, + 0x0004002bu, 0x00000028u, 0x000000d8u, 0x00000000u, 0x0004002bu, 0x00000028u, 0x000000ddu, 0xfffffff6u, + 0x0004002bu, 0x00000006u, 0x000000e3u, 0x00800000u, 0x0004002bu, 0x00000028u, 0x000000e7u, 0x0000000eu, + 0x0004002bu, 0x00000006u, 0x0000011au, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x0000011du, 0x00001000u, + 0x0004002bu, 0x00000006u, 0x00000152u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000153u, 0x00000108u, + 0x0004002bu, 0x00000006u, 0x00000154u, 0x00000080u, 0x0004001cu, 0x00000155u, 0x00000008u, 0x00000154u, + 0x00040020u, 0x00000156u, 0x00000004u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000004u, + 0x00040020u, 0x0000015au, 0x00000004u, 0x00000008u, 0x00040017u, 0x0000017au, 0x00000006u, 0x00000003u, + 0x00040020u, 0x0000017bu, 0x00000001u, 0x0000017au, 0x0004003bu, 0x0000017bu, 0x0000017cu, 0x00000001u, + 0x00040020u, 0x0000017du, 0x00000001u, 0x00000006u, 0x0004003bu, 0x0000017bu, 0x00000181u, 0x00000001u, + 0x000f001eu, 0x00000186u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, + 0x00000187u, 0x00000009u, 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, 0x00000009u, 0x00040020u, + 0x00000189u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000018eu, 0x00000000u, 0x0004002bu, + 0x00000028u, 0x0000019bu, 0x00000002u, 0x0003001du, 0x000001a2u, 0x00000006u, 0x0003001eu, 0x000001a3u, + 0x000001a2u, 0x00040020u, 0x000001a4u, 0x0000000cu, 0x000001a3u, 0x0004003bu, 0x000001a4u, 0x000001a5u, + 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000001a6u, 0x00000008u, 0x00040020u, 0x000001aeu, 0x0000000cu, + 0x00000006u, 0x00040015u, 0x000001b3u, 0x00000010u, 0x00000000u, 0x0003001du, 0x000001b4u, 0x000001b3u, + 0x0003001eu, 0x000001b5u, 0x000001b4u, 0x00040020u, 0x000001b6u, 0x0000000cu, 0x000001b5u, 0x0004003bu, + 0x000001b6u, 0x000001b7u, 0x0000000cu, 0x00040020u, 0x000001bfu, 0x0000000cu, 0x000001b3u, 0x0004002bu, + 0x00000028u, 0x000001c9u, 0x00000006u, 0x0004002bu, 0x00000028u, 0x000001cfu, 0x00000005u, 0x0003001du, + 0x000001d6u, 0x00000006u, 0x0003001eu, 0x000001d7u, 0x000001d6u, 0x00040020u, 0x000001d8u, 0x0000000cu, + 0x000001d7u, 0x0004003bu, 0x000001d8u, 0x000001d9u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000001dau, + 0x0000000bu, 0x0003001du, 0x000001e6u, 0x000001b3u, 0x0003001eu, 0x000001e7u, 0x000001e6u, 0x00040020u, + 0x000001e8u, 0x0000000cu, 0x000001e7u, 0x0004003bu, 0x000001e8u, 0x000001e9u, 0x0000000cu, 0x0003002au, + 0x00000031u, 0x0000021fu, 0x0004002bu, 0x00000006u, 0x0000024du, 0x00000048u, 0x0004002bu, 0x00000008u, + 0x00000255u, 0x3f800000u, 0x0004002bu, 0x00000028u, 0x0000025bu, 0x0000000cu, 0x00040020u, 0x0000025cu, + 0x00000009u, 0x00000008u, 0x0004002bu, 0x00000028u, 0x000002b9u, 0x00000003u, 0x0003001du, 0x000002c0u, + 0x00000006u, 0x0003001eu, 0x000002c1u, 0x000002c0u, 0x00040020u, 0x000002c2u, 0x0000000cu, 0x000002c1u, + 0x0004003bu, 0x000002c2u, 0x000002c3u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000002c4u, 0x00000009u, + 0x0003001du, 0x000002ceu, 0x000001b3u, 0x0003001eu, 0x000002cfu, 0x000002ceu, 0x00040020u, 0x000002d0u, + 0x0000000cu, 0x000002cfu, 0x0004003bu, 0x000002d0u, 0x000002d1u, 0x0000000cu, 0x0004002bu, 0x00000028u, + 0x000002e0u, 0x00000007u, 0x0004002bu, 0x00000028u, 0x000002ecu, 0x00000004u, 0x0003001du, 0x000002f2u, + 0x00000006u, 0x0003001eu, 0x000002f3u, 0x000002f2u, 0x00040020u, 0x000002f4u, 0x0000000cu, 0x000002f3u, + 0x0004003bu, 0x000002f4u, 0x000002f5u, 0x0000000cu, 0x0003001du, 0x00000305u, 0x000001b3u, 0x0003001eu, + 0x00000306u, 0x00000305u, 0x00040020u, 0x00000307u, 0x0000000cu, 0x00000306u, 0x0004003bu, 0x00000307u, + 0x00000308u, 0x0000000cu, 0x0006002cu, 0x0000017au, 0x0000031eu, 0x00000154u, 0x0000004bu, 0x0000004bu, + 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, + 0x00000007u, 0x00000179u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000180u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000184u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000018du, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000018fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000019au, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x0000019fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c3u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001c4u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001d3u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001f5u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000217u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000219u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000223u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000023bu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000023cu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000024eu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000024fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000251u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000254u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000262u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x0000026du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000271u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000277u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000028fu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000290u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000299u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000002b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b2u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x000002b8u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002bdu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000002dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002dbu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000315u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000316u, 0x00000007u, 0x00050041u, + 0x0000017du, 0x0000017eu, 0x0000017cu, 0x0000003bu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x0000017eu, + 0x0003003eu, 0x00000179u, 0x0000017fu, 0x00050041u, 0x0000017du, 0x00000182u, 0x00000181u, 0x0000003bu, + 0x0004003du, 0x00000006u, 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000180u, 0x00000183u, 0x0004003du, + 0x00000006u, 0x00000185u, 0x00000179u, 0x00050041u, 0x00000189u, 0x0000018au, 0x00000188u, 0x00000085u, + 0x0004003du, 0x00000006u, 0x0000018bu, 0x0000018au, 0x00050084u, 0x00000006u, 0x0000018cu, 0x00000185u, + 0x0000018bu, 0x0003003eu, 0x00000184u, 0x0000018cu, 0x0003003eu, 0x0000018du, 0x0000018eu, 0x0004003du, + 0x00000006u, 0x00000190u, 0x00000180u, 0x0003003eu, 0x0000018fu, 0x00000190u, 0x000200f9u, 0x00000191u, + 0x000200f8u, 0x00000191u, 0x000400f6u, 0x00000193u, 0x00000194u, 0x00000000u, 0x000200f9u, 0x00000195u, + 0x000200f8u, 0x00000195u, 0x0004003du, 0x00000006u, 0x00000196u, 0x0000018fu, 0x00050041u, 0x00000189u, + 0x00000197u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000198u, 0x00000197u, 0x000500b0u, + 0x00000031u, 0x00000199u, 0x00000196u, 0x00000198u, 0x000400fau, 0x00000199u, 0x00000192u, 0x00000193u, + 0x000200f8u, 0x00000192u, 0x00050041u, 0x00000189u, 0x0000019cu, 0x00000188u, 0x0000019bu, 0x0004003du, + 0x00000006u, 0x0000019du, 0x0000019cu, 0x000500aau, 0x00000031u, 0x0000019eu, 0x0000019du, 0x0000003bu, + 0x000300f7u, 0x000001a1u, 0x00000000u, 0x000400fau, 0x0000019eu, 0x000001a0u, 0x000001b2u, 0x000200f8u, + 0x000001a0u, 0x00050041u, 0x00000189u, 0x000001a7u, 0x00000188u, 0x000001a6u, 0x0004003du, 0x00000006u, + 0x000001a8u, 0x000001a7u, 0x000500c2u, 0x00000006u, 0x000001a9u, 0x000001a8u, 0x0000019bu, 0x0004003du, + 0x00000006u, 0x000001aau, 0x00000184u, 0x0004003du, 0x00000006u, 0x000001abu, 0x0000018fu, 0x00050080u, + 0x00000006u, 0x000001acu, 0x000001aau, 0x000001abu, 0x00050080u, 0x00000006u, 0x000001adu, 0x000001a9u, + 0x000001acu, 0x00060041u, 0x000001aeu, 0x000001afu, 0x000001a5u, 0x000000d8u, 0x000001adu, 0x0004003du, + 0x00000006u, 0x000001b0u, 0x000001afu, 0x0004007cu, 0x00000008u, 0x000001b1u, 0x000001b0u, 0x0003003eu, + 0x0000019fu, 0x000001b1u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001b2u, 0x00050041u, 0x00000189u, + 0x000001b8u, 0x00000188u, 0x000001a6u, 0x0004003du, 0x00000006u, 0x000001b9u, 0x000001b8u, 0x000500c2u, + 0x00000006u, 0x000001bau, 0x000001b9u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001bbu, 0x00000184u, + 0x0004003du, 0x00000006u, 0x000001bcu, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001bdu, 0x000001bbu, + 0x000001bcu, 0x00050080u, 0x00000006u, 0x000001beu, 0x000001bau, 0x000001bdu, 0x00060041u, 0x000001bfu, + 0x000001c0u, 0x000001b7u, 0x000000d8u, 0x000001beu, 0x0004003du, 0x000001b3u, 0x000001c1u, 0x000001c0u, + 0x00040071u, 0x00000006u, 0x000001c2u, 0x000001c1u, 0x0003003eu, 0x000001c3u, 0x000001c2u, 0x00050041u, + 0x00000189u, 0x000001c5u, 0x00000188u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000001c6u, 0x000001c5u, + 0x0003003eu, 0x000001c4u, 0x000001c6u, 0x00060039u, 0x00000008u, 0x000001c7u, 0x0000001bu, 0x000001c3u, + 0x000001c4u, 0x0003003eu, 0x0000019fu, 0x000001c7u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a1u, + 0x0004003du, 0x00000008u, 0x000001c8u, 0x0000019fu, 0x0003003eu, 0x0000019au, 0x000001c8u, 0x00050041u, + 0x00000189u, 0x000001cau, 0x00000188u, 0x000001c9u, 0x0004003du, 0x00000006u, 0x000001cbu, 0x000001cau, + 0x000500abu, 0x00000031u, 0x000001ccu, 0x000001cbu, 0x0000003bu, 0x000300f7u, 0x000001ceu, 0x00000000u, + 0x000400fau, 0x000001ccu, 0x000001cdu, 0x000001ceu, 0x000200f8u, 0x000001cdu, 0x00050041u, 0x00000189u, + 0x000001d0u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x000001d1u, 0x000001d0u, 0x000500aau, + 0x00000031u, 0x000001d2u, 0x000001d1u, 0x0000003bu, 0x000300f7u, 0x000001d5u, 0x00000000u, 0x000400fau, + 0x000001d2u, 0x000001d4u, 0x000001e5u, 0x000200f8u, 0x000001d4u, 0x00050041u, 0x00000189u, 0x000001dbu, + 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000001dcu, 0x000001dbu, 0x000500c2u, 0x00000006u, + 0x000001ddu, 0x000001dcu, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000001deu, 0x00000184u, 0x0004003du, + 0x00000006u, 0x000001dfu, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001e0u, 0x000001deu, 0x000001dfu, + 0x00050080u, 0x00000006u, 0x000001e1u, 0x000001ddu, 0x000001e0u, 0x00060041u, 0x000001aeu, 0x000001e2u, + 0x000001d9u, 0x000000d8u, 0x000001e1u, 0x0004003du, 0x00000006u, 0x000001e3u, 0x000001e2u, 0x0004007cu, + 0x00000008u, 0x000001e4u, 0x000001e3u, 0x0003003eu, 0x000001d3u, 0x000001e4u, 0x000200f9u, 0x000001d5u, + 0x000200f8u, 0x000001e5u, 0x00050041u, 0x00000189u, 0x000001eau, 0x00000188u, 0x000001dau, 0x0004003du, + 0x00000006u, 0x000001ebu, 0x000001eau, 0x000500c2u, 0x00000006u, 0x000001ecu, 0x000001ebu, 0x00000085u, + 0x0004003du, 0x00000006u, 0x000001edu, 0x00000184u, 0x0004003du, 0x00000006u, 0x000001eeu, 0x0000018fu, + 0x00050080u, 0x00000006u, 0x000001efu, 0x000001edu, 0x000001eeu, 0x00050080u, 0x00000006u, 0x000001f0u, + 0x000001ecu, 0x000001efu, 0x00060041u, 0x000001bfu, 0x000001f1u, 0x000001e9u, 0x000000d8u, 0x000001f0u, + 0x0004003du, 0x000001b3u, 0x000001f2u, 0x000001f1u, 0x00040071u, 0x00000006u, 0x000001f3u, 0x000001f2u, + 0x0003003eu, 0x000001f4u, 0x000001f3u, 0x00050041u, 0x00000189u, 0x000001f6u, 0x00000188u, 0x000001cfu, + 0x0004003du, 0x00000006u, 0x000001f7u, 0x000001f6u, 0x0003003eu, 0x000001f5u, 0x000001f7u, 0x00060039u, + 0x00000008u, 0x000001f8u, 0x0000001bu, 0x000001f4u, 0x000001f5u, 0x0003003eu, 0x000001d3u, 0x000001f8u, + 0x000200f9u, 0x000001d5u, 0x000200f8u, 0x000001d5u, 0x0004003du, 0x00000008u, 0x000001f9u, 0x000001d3u, + 0x0004003du, 0x00000008u, 0x000001fau, 0x0000019au, 0x00050081u, 0x00000008u, 0x000001fbu, 0x000001fau, + 0x000001f9u, 0x0003003eu, 0x0000019au, 0x000001fbu, 0x000200f9u, 0x000001fcu, 0x000200f8u, 0x000001fcu, + 0x000400f6u, 0x000001feu, 0x000001ffu, 0x00000000u, 0x000200f9u, 0x000001fdu, 0x000200f8u, 0x000001fdu, + 0x00050041u, 0x00000189u, 0x00000200u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000201u, + 0x00000200u, 0x000500aau, 0x00000031u, 0x00000202u, 0x00000201u, 0x0000003bu, 0x000300f7u, 0x00000204u, + 0x00000000u, 0x000400fau, 0x00000202u, 0x00000203u, 0x0000020fu, 0x000200f8u, 0x00000203u, 0x00050041u, + 0x00000189u, 0x00000205u, 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000206u, 0x00000205u, + 0x000500c2u, 0x00000006u, 0x00000207u, 0x00000206u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x00000208u, + 0x00000184u, 0x0004003du, 0x00000006u, 0x00000209u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x0000020au, + 0x00000208u, 0x00000209u, 0x00050080u, 0x00000006u, 0x0000020bu, 0x00000207u, 0x0000020au, 0x0004003du, + 0x00000008u, 0x0000020cu, 0x0000019au, 0x0004007cu, 0x00000006u, 0x0000020du, 0x0000020cu, 0x00060041u, + 0x000001aeu, 0x0000020eu, 0x000001d9u, 0x000000d8u, 0x0000020bu, 0x0003003eu, 0x0000020eu, 0x0000020du, + 0x000200f9u, 0x00000204u, 0x000200f8u, 0x0000020fu, 0x00050041u, 0x00000189u, 0x00000210u, 0x00000188u, + 0x000001dau, 0x0004003du, 0x00000006u, 0x00000211u, 0x00000210u, 0x000500c2u, 0x00000006u, 0x00000212u, + 0x00000211u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000213u, 0x00000184u, 0x0004003du, 0x00000006u, + 0x00000214u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x00000215u, 0x00000213u, 0x00000214u, 0x00050080u, + 0x00000006u, 0x00000216u, 0x00000212u, 0x00000215u, 0x0004003du, 0x00000008u, 0x00000218u, 0x0000019au, + 0x0003003eu, 0x00000217u, 0x00000218u, 0x00050041u, 0x00000189u, 0x0000021au, 0x00000188u, 0x000001cfu, + 0x0004003du, 0x00000006u, 0x0000021bu, 0x0000021au, 0x0003003eu, 0x00000219u, 0x0000021bu, 0x00060039u, + 0x00000006u, 0x0000021cu, 0x00000020u, 0x00000217u, 0x00000219u, 0x00040071u, 0x000001b3u, 0x0000021du, + 0x0000021cu, 0x00060041u, 0x000001bfu, 0x0000021eu, 0x000001e9u, 0x000000d8u, 0x00000216u, 0x0003003eu, + 0x0000021eu, 0x0000021du, 0x000200f9u, 0x00000204u, 0x000200f8u, 0x00000204u, 0x000200f9u, 0x000001ffu, + 0x000200f8u, 0x000001ffu, 0x000400fau, 0x0000021fu, 0x000001fcu, 0x000001feu, 0x000200f8u, 0x000001feu, + 0x00050041u, 0x00000189u, 0x00000220u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000221u, + 0x00000220u, 0x000500aau, 0x00000031u, 0x00000222u, 0x00000221u, 0x0000003bu, 0x000300f7u, 0x00000225u, + 0x00000000u, 0x000400fau, 0x00000222u, 0x00000224u, 0x00000230u, 0x000200f8u, 0x00000224u, 0x00050041u, + 0x00000189u, 0x00000226u, 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000227u, 0x00000226u, + 0x000500c2u, 0x00000006u, 0x00000228u, 0x00000227u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x00000229u, + 0x00000184u, 0x0004003du, 0x00000006u, 0x0000022au, 0x0000018fu, 0x00050080u, 0x00000006u, 0x0000022bu, + 0x00000229u, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000022cu, 0x00000228u, 0x0000022bu, 0x00060041u, + 0x000001aeu, 0x0000022du, 0x000001d9u, 0x000000d8u, 0x0000022cu, 0x0004003du, 0x00000006u, 0x0000022eu, + 0x0000022du, 0x0004007cu, 0x00000008u, 0x0000022fu, 0x0000022eu, 0x0003003eu, 0x00000223u, 0x0000022fu, + 0x000200f9u, 0x00000225u, 0x000200f8u, 0x00000230u, 0x00050041u, 0x00000189u, 0x00000231u, 0x00000188u, + 0x000001dau, 0x0004003du, 0x00000006u, 0x00000232u, 0x00000231u, 0x000500c2u, 0x00000006u, 0x00000233u, + 0x00000232u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000234u, 0x00000184u, 0x0004003du, 0x00000006u, + 0x00000235u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x00000236u, 0x00000234u, 0x00000235u, 0x00050080u, + 0x00000006u, 0x00000237u, 0x00000233u, 0x00000236u, 0x00060041u, 0x000001bfu, 0x00000238u, 0x000001e9u, + 0x000000d8u, 0x00000237u, 0x0004003du, 0x000001b3u, 0x00000239u, 0x00000238u, 0x00040071u, 0x00000006u, + 0x0000023au, 0x00000239u, 0x0003003eu, 0x0000023bu, 0x0000023au, 0x00050041u, 0x00000189u, 0x0000023du, + 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x0000023eu, 0x0000023du, 0x0003003eu, 0x0000023cu, + 0x0000023eu, 0x00060039u, 0x00000008u, 0x0000023fu, 0x0000001bu, 0x0000023bu, 0x0000023cu, 0x0003003eu, + 0x00000223u, 0x0000023fu, 0x000200f9u, 0x00000225u, 0x000200f8u, 0x00000225u, 0x0004003du, 0x00000008u, + 0x00000240u, 0x00000223u, 0x0003003eu, 0x0000019au, 0x00000240u, 0x000200f9u, 0x000001ceu, 0x000200f8u, + 0x000001ceu, 0x0004003du, 0x00000008u, 0x00000241u, 0x0000019au, 0x0004003du, 0x00000008u, 0x00000242u, + 0x0000019au, 0x00050085u, 0x00000008u, 0x00000243u, 0x00000241u, 0x00000242u, 0x0004003du, 0x00000008u, + 0x00000244u, 0x0000018du, 0x00050081u, 0x00000008u, 0x00000245u, 0x00000244u, 0x00000243u, 0x0003003eu, + 0x0000018du, 0x00000245u, 0x000200f9u, 0x00000194u, 0x000200f8u, 0x00000194u, 0x0004003du, 0x00000006u, + 0x00000246u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x00000247u, 0x00000246u, 0x00000154u, 0x0003003eu, + 0x0000018fu, 0x00000247u, 0x000200f9u, 0x00000191u, 0x000200f8u, 0x00000193u, 0x00050041u, 0x00000189u, + 0x00000248u, 0x00000188u, 0x000001c9u, 0x0004003du, 0x00000006u, 0x00000249u, 0x00000248u, 0x000500abu, + 0x00000031u, 0x0000024au, 0x00000249u, 0x0000003bu, 0x000300f7u, 0x0000024cu, 0x00000000u, 0x000400fau, + 0x0000024au, 0x0000024bu, 0x0000024cu, 0x000200f8u, 0x0000024bu, 0x000300e1u, 0x0000004bu, 0x0000024du, + 0x000200f9u, 0x0000024cu, 0x000200f8u, 0x0000024cu, 0x0004003du, 0x00000006u, 0x00000250u, 0x00000180u, + 0x0003003eu, 0x0000024fu, 0x00000250u, 0x0004003du, 0x00000008u, 0x00000252u, 0x0000018du, 0x0003003eu, + 0x00000251u, 0x00000252u, 0x00060039u, 0x00000008u, 0x00000253u, 0x00000025u, 0x0000024fu, 0x00000251u, + 0x0003003eu, 0x0000024eu, 0x00000253u, 0x0004003du, 0x00000008u, 0x00000256u, 0x0000024eu, 0x00050041u, + 0x00000189u, 0x00000257u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000257u, + 0x00040070u, 0x00000008u, 0x00000259u, 0x00000258u, 0x00050088u, 0x00000008u, 0x0000025au, 0x00000256u, + 0x00000259u, 0x00050041u, 0x0000025cu, 0x0000025du, 0x00000188u, 0x0000025bu, 0x0004003du, 0x00000008u, + 0x0000025eu, 0x0000025du, 0x00050081u, 0x00000008u, 0x0000025fu, 0x0000025au, 0x0000025eu, 0x0006000cu, + 0x00000008u, 0x00000260u, 0x00000001u, 0x0000001fu, 0x0000025fu, 0x00050088u, 0x00000008u, 0x00000261u, + 0x00000255u, 0x00000260u, 0x0003003eu, 0x00000254u, 0x00000261u, 0x0004003du, 0x00000006u, 0x00000263u, + 0x00000180u, 0x0003003eu, 0x00000262u, 0x00000263u, 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000264u, + 0x000400f6u, 0x00000266u, 0x00000267u, 0x00000000u, 0x000200f9u, 0x00000268u, 0x000200f8u, 0x00000268u, + 0x0004003du, 0x00000006u, 0x00000269u, 0x00000262u, 0x00050041u, 0x00000189u, 0x0000026au, 0x00000188u, + 0x00000085u, 0x0004003du, 0x00000006u, 0x0000026bu, 0x0000026au, 0x000500b0u, 0x00000031u, 0x0000026cu, + 0x00000269u, 0x0000026bu, 0x000400fau, 0x0000026cu, 0x00000265u, 0x00000266u, 0x000200f8u, 0x00000265u, + 0x00050041u, 0x00000189u, 0x0000026eu, 0x00000188u, 0x000001c9u, 0x0004003du, 0x00000006u, 0x0000026fu, + 0x0000026eu, 0x000500abu, 0x00000031u, 0x00000270u, 0x0000026fu, 0x0000003bu, 0x000300f7u, 0x00000273u, + 0x00000000u, 0x000400fau, 0x00000270u, 0x00000272u, 0x00000295u, 0x000200f8u, 0x00000272u, 0x00050041u, + 0x00000189u, 0x00000274u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000275u, 0x00000274u, + 0x000500aau, 0x00000031u, 0x00000276u, 0x00000275u, 0x0000003bu, 0x000300f7u, 0x00000279u, 0x00000000u, + 0x000400fau, 0x00000276u, 0x00000278u, 0x00000284u, 0x000200f8u, 0x00000278u, 0x00050041u, 0x00000189u, + 0x0000027au, 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000027bu, 0x0000027au, 0x000500c2u, + 0x00000006u, 0x0000027cu, 0x0000027bu, 0x0000019bu, 0x0004003du, 0x00000006u, 0x0000027du, 0x00000184u, + 0x0004003du, 0x00000006u, 0x0000027eu, 0x00000262u, 0x00050080u, 0x00000006u, 0x0000027fu, 0x0000027du, + 0x0000027eu, 0x00050080u, 0x00000006u, 0x00000280u, 0x0000027cu, 0x0000027fu, 0x00060041u, 0x000001aeu, + 0x00000281u, 0x000001d9u, 0x000000d8u, 0x00000280u, 0x0004003du, 0x00000006u, 0x00000282u, 0x00000281u, + 0x0004007cu, 0x00000008u, 0x00000283u, 0x00000282u, 0x0003003eu, 0x00000277u, 0x00000283u, 0x000200f9u, + 0x00000279u, 0x000200f8u, 0x00000284u, 0x00050041u, 0x00000189u, 0x00000285u, 0x00000188u, 0x000001dau, + 0x0004003du, 0x00000006u, 0x00000286u, 0x00000285u, 0x000500c2u, 0x00000006u, 0x00000287u, 0x00000286u, + 0x00000085u, 0x0004003du, 0x00000006u, 0x00000288u, 0x00000184u, 0x0004003du, 0x00000006u, 0x00000289u, + 0x00000262u, 0x00050080u, 0x00000006u, 0x0000028au, 0x00000288u, 0x00000289u, 0x00050080u, 0x00000006u, + 0x0000028bu, 0x00000287u, 0x0000028au, 0x00060041u, 0x000001bfu, 0x0000028cu, 0x000001e9u, 0x000000d8u, + 0x0000028bu, 0x0004003du, 0x000001b3u, 0x0000028du, 0x0000028cu, 0x00040071u, 0x00000006u, 0x0000028eu, + 0x0000028du, 0x0003003eu, 0x0000028fu, 0x0000028eu, 0x00050041u, 0x00000189u, 0x00000291u, 0x00000188u, + 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000292u, 0x00000291u, 0x0003003eu, 0x00000290u, 0x00000292u, + 0x00060039u, 0x00000008u, 0x00000293u, 0x0000001bu, 0x0000028fu, 0x00000290u, 0x0003003eu, 0x00000277u, + 0x00000293u, 0x000200f9u, 0x00000279u, 0x000200f8u, 0x00000279u, 0x0004003du, 0x00000008u, 0x00000294u, + 0x00000277u, 0x0003003eu, 0x00000271u, 0x00000294u, 0x000200f9u, 0x00000273u, 0x000200f8u, 0x00000295u, + 0x00050041u, 0x00000189u, 0x00000296u, 0x00000188u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x00000297u, + 0x00000296u, 0x000500aau, 0x00000031u, 0x00000298u, 0x00000297u, 0x0000003bu, 0x000300f7u, 0x0000029bu, + 0x00000000u, 0x000400fau, 0x00000298u, 0x0000029au, 0x000002a6u, 0x000200f8u, 0x0000029au, 0x00050041u, + 0x00000189u, 0x0000029cu, 0x00000188u, 0x000001a6u, 0x0004003du, 0x00000006u, 0x0000029du, 0x0000029cu, + 0x000500c2u, 0x00000006u, 0x0000029eu, 0x0000029du, 0x0000019bu, 0x0004003du, 0x00000006u, 0x0000029fu, + 0x00000184u, 0x0004003du, 0x00000006u, 0x000002a0u, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002a1u, + 0x0000029fu, 0x000002a0u, 0x00050080u, 0x00000006u, 0x000002a2u, 0x0000029eu, 0x000002a1u, 0x00060041u, + 0x000001aeu, 0x000002a3u, 0x000001a5u, 0x000000d8u, 0x000002a2u, 0x0004003du, 0x00000006u, 0x000002a4u, + 0x000002a3u, 0x0004007cu, 0x00000008u, 0x000002a5u, 0x000002a4u, 0x0003003eu, 0x00000299u, 0x000002a5u, + 0x000200f9u, 0x0000029bu, 0x000200f8u, 0x000002a6u, 0x00050041u, 0x00000189u, 0x000002a7u, 0x00000188u, + 0x000001a6u, 0x0004003du, 0x00000006u, 0x000002a8u, 0x000002a7u, 0x000500c2u, 0x00000006u, 0x000002a9u, + 0x000002a8u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000002aau, 0x00000184u, 0x0004003du, 0x00000006u, + 0x000002abu, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002acu, 0x000002aau, 0x000002abu, 0x00050080u, + 0x00000006u, 0x000002adu, 0x000002a9u, 0x000002acu, 0x00060041u, 0x000001bfu, 0x000002aeu, 0x000001b7u, + 0x000000d8u, 0x000002adu, 0x0004003du, 0x000001b3u, 0x000002afu, 0x000002aeu, 0x00040071u, 0x00000006u, + 0x000002b0u, 0x000002afu, 0x0003003eu, 0x000002b1u, 0x000002b0u, 0x00050041u, 0x00000189u, 0x000002b3u, + 0x00000188u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000002b4u, 0x000002b3u, 0x0003003eu, 0x000002b2u, + 0x000002b4u, 0x00060039u, 0x00000008u, 0x000002b5u, 0x0000001bu, 0x000002b1u, 0x000002b2u, 0x0003003eu, + 0x00000299u, 0x000002b5u, 0x000200f9u, 0x0000029bu, 0x000200f8u, 0x0000029bu, 0x0004003du, 0x00000008u, + 0x000002b6u, 0x00000299u, 0x0003003eu, 0x00000271u, 0x000002b6u, 0x000200f9u, 0x00000273u, 0x000200f8u, + 0x00000273u, 0x0004003du, 0x00000008u, 0x000002b7u, 0x00000271u, 0x0003003eu, 0x0000026du, 0x000002b7u, + 0x00050041u, 0x00000189u, 0x000002bau, 0x00000188u, 0x000002b9u, 0x0004003du, 0x00000006u, 0x000002bbu, + 0x000002bau, 0x000500aau, 0x00000031u, 0x000002bcu, 0x000002bbu, 0x0000003bu, 0x000300f7u, 0x000002bfu, + 0x00000000u, 0x000400fau, 0x000002bcu, 0x000002beu, 0x000002cdu, 0x000200f8u, 0x000002beu, 0x00050041u, + 0x00000189u, 0x000002c5u, 0x00000188u, 0x000002c4u, 0x0004003du, 0x00000006u, 0x000002c6u, 0x000002c5u, + 0x000500c2u, 0x00000006u, 0x000002c7u, 0x000002c6u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000002c8u, + 0x00000262u, 0x00050080u, 0x00000006u, 0x000002c9u, 0x000002c7u, 0x000002c8u, 0x00060041u, 0x000001aeu, + 0x000002cau, 0x000002c3u, 0x000000d8u, 0x000002c9u, 0x0004003du, 0x00000006u, 0x000002cbu, 0x000002cau, + 0x0004007cu, 0x00000008u, 0x000002ccu, 0x000002cbu, 0x0003003eu, 0x000002bdu, 0x000002ccu, 0x000200f9u, + 0x000002bfu, 0x000200f8u, 0x000002cdu, 0x00050041u, 0x00000189u, 0x000002d2u, 0x00000188u, 0x000002c4u, + 0x0004003du, 0x00000006u, 0x000002d3u, 0x000002d2u, 0x000500c2u, 0x00000006u, 0x000002d4u, 0x000002d3u, + 0x00000085u, 0x0004003du, 0x00000006u, 0x000002d5u, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002d6u, + 0x000002d4u, 0x000002d5u, 0x00060041u, 0x000001bfu, 0x000002d7u, 0x000002d1u, 0x000000d8u, 0x000002d6u, + 0x0004003du, 0x000001b3u, 0x000002d8u, 0x000002d7u, 0x00040071u, 0x00000006u, 0x000002d9u, 0x000002d8u, + 0x0003003eu, 0x000002dau, 0x000002d9u, 0x00050041u, 0x00000189u, 0x000002dcu, 0x00000188u, 0x000002b9u, + 0x0004003du, 0x00000006u, 0x000002ddu, 0x000002dcu, 0x0003003eu, 0x000002dbu, 0x000002ddu, 0x00060039u, + 0x00000008u, 0x000002deu, 0x0000001bu, 0x000002dau, 0x000002dbu, 0x0003003eu, 0x000002bdu, 0x000002deu, + 0x000200f9u, 0x000002bfu, 0x000200f8u, 0x000002bfu, 0x0004003du, 0x00000008u, 0x000002dfu, 0x000002bdu, + 0x0003003eu, 0x000002b8u, 0x000002dfu, 0x00050041u, 0x00000189u, 0x000002e1u, 0x00000188u, 0x000002e0u, + 0x0004003du, 0x00000006u, 0x000002e2u, 0x000002e1u, 0x000500abu, 0x00000031u, 0x000002e3u, 0x000002e2u, + 0x0000003bu, 0x000300f7u, 0x000002e5u, 0x00000000u, 0x000400fau, 0x000002e3u, 0x000002e4u, 0x000002e5u, + 0x000200f8u, 0x000002e4u, 0x0004003du, 0x00000008u, 0x000002e6u, 0x000002b8u, 0x00050081u, 0x00000008u, + 0x000002e7u, 0x000002e6u, 0x00000255u, 0x0003003eu, 0x000002b8u, 0x000002e7u, 0x000200f9u, 0x000002e5u, + 0x000200f8u, 0x000002e5u, 0x000200f9u, 0x000002e8u, 0x000200f8u, 0x000002e8u, 0x000400f6u, 0x000002eau, + 0x000002ebu, 0x00000000u, 0x000200f9u, 0x000002e9u, 0x000200f8u, 0x000002e9u, 0x00050041u, 0x00000189u, + 0x000002edu, 0x00000188u, 0x000002ecu, 0x0004003du, 0x00000006u, 0x000002eeu, 0x000002edu, 0x000500aau, + 0x00000031u, 0x000002efu, 0x000002eeu, 0x0000003bu, 0x000300f7u, 0x000002f1u, 0x00000000u, 0x000400fau, + 0x000002efu, 0x000002f0u, 0x00000304u, 0x000200f8u, 0x000002f0u, 0x00050041u, 0x00000189u, 0x000002f6u, + 0x00000188u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x000002f7u, 0x000002f6u, 0x000500c2u, 0x00000006u, + 0x000002f8u, 0x000002f7u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000002f9u, 0x00000184u, 0x0004003du, + 0x00000006u, 0x000002fau, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002fbu, 0x000002f9u, 0x000002fau, + 0x00050080u, 0x00000006u, 0x000002fcu, 0x000002f8u, 0x000002fbu, 0x0004003du, 0x00000008u, 0x000002fdu, + 0x0000026du, 0x0004003du, 0x00000008u, 0x000002feu, 0x00000254u, 0x00050085u, 0x00000008u, 0x000002ffu, + 0x000002fdu, 0x000002feu, 0x0004003du, 0x00000008u, 0x00000300u, 0x000002b8u, 0x00050085u, 0x00000008u, + 0x00000301u, 0x000002ffu, 0x00000300u, 0x0004007cu, 0x00000006u, 0x00000302u, 0x00000301u, 0x00060041u, + 0x000001aeu, 0x00000303u, 0x000002f5u, 0x000000d8u, 0x000002fcu, 0x0003003eu, 0x00000303u, 0x00000302u, + 0x000200f9u, 0x000002f1u, 0x000200f8u, 0x00000304u, 0x00050041u, 0x00000189u, 0x00000309u, 0x00000188u, + 0x0000005cu, 0x0004003du, 0x00000006u, 0x0000030au, 0x00000309u, 0x000500c2u, 0x00000006u, 0x0000030bu, + 0x0000030au, 0x00000085u, 0x0004003du, 0x00000006u, 0x0000030cu, 0x00000184u, 0x0004003du, 0x00000006u, + 0x0000030du, 0x00000262u, 0x00050080u, 0x00000006u, 0x0000030eu, 0x0000030cu, 0x0000030du, 0x00050080u, + 0x00000006u, 0x0000030fu, 0x0000030bu, 0x0000030eu, 0x0004003du, 0x00000008u, 0x00000310u, 0x0000026du, + 0x0004003du, 0x00000008u, 0x00000311u, 0x00000254u, 0x00050085u, 0x00000008u, 0x00000312u, 0x00000310u, + 0x00000311u, 0x0004003du, 0x00000008u, 0x00000313u, 0x000002b8u, 0x00050085u, 0x00000008u, 0x00000314u, + 0x00000312u, 0x00000313u, 0x0003003eu, 0x00000315u, 0x00000314u, 0x00050041u, 0x00000189u, 0x00000317u, + 0x00000188u, 0x000002ecu, 0x0004003du, 0x00000006u, 0x00000318u, 0x00000317u, 0x0003003eu, 0x00000316u, + 0x00000318u, 0x00060039u, 0x00000006u, 0x00000319u, 0x00000020u, 0x00000315u, 0x00000316u, 0x00040071u, + 0x000001b3u, 0x0000031au, 0x00000319u, 0x00060041u, 0x000001bfu, 0x0000031bu, 0x00000308u, 0x000000d8u, + 0x0000030fu, 0x0003003eu, 0x0000031bu, 0x0000031au, 0x000200f9u, 0x000002f1u, 0x000200f8u, 0x000002f1u, + 0x000200f9u, 0x000002ebu, 0x000200f8u, 0x000002ebu, 0x000400fau, 0x0000021fu, 0x000002e8u, 0x000002eau, + 0x000200f8u, 0x000002eau, 0x000200f9u, 0x00000267u, 0x000200f8u, 0x00000267u, 0x0004003du, 0x00000006u, + 0x0000031cu, 0x00000262u, 0x00050080u, 0x00000006u, 0x0000031du, 0x0000031cu, 0x00000154u, 0x0003003eu, + 0x00000262u, 0x0000031du, 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000266u, 0x000100fdu, 0x00010038u, + 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, + 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000027u, 0x0000000au, 0x000500c4u, 0x00000006u, + 0x0000002au, 0x00000027u, 0x00000029u, 0x0004007cu, 0x00000008u, 0x0000002bu, 0x0000002au, 0x000200feu, + 0x0000002bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, + 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000002eu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000047u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002fu, 0x0000000fu, + 0x0004007cu, 0x00000006u, 0x00000030u, 0x0000002fu, 0x0003003eu, 0x0000002eu, 0x00000030u, 0x0004003du, + 0x00000006u, 0x00000032u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x00000034u, 0x00000032u, 0x00000033u, + 0x000500aau, 0x00000031u, 0x00000035u, 0x00000034u, 0x00000033u, 0x000300f7u, 0x00000037u, 0x00000000u, + 0x000400fau, 0x00000035u, 0x00000036u, 0x00000037u, 0x000200f8u, 0x00000036u, 0x0004003du, 0x00000006u, + 0x00000038u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x0000003au, 0x00000038u, 0x00000039u, 0x000500abu, + 0x00000031u, 0x0000003cu, 0x0000003au, 0x0000003bu, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000037u, + 0x000700f5u, 0x00000031u, 0x0000003du, 0x00000035u, 0x00000011u, 0x0000003cu, 0x00000036u, 0x000300f7u, + 0x0000003fu, 0x00000000u, 0x000400fau, 0x0000003du, 0x0000003eu, 0x0000003fu, 0x000200f8u, 0x0000003eu, + 0x0004003du, 0x00000006u, 0x00000040u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x00000041u, 0x00000040u, + 0x00000029u, 0x000500c5u, 0x00000006u, 0x00000043u, 0x00000041u, 0x00000042u, 0x000500c7u, 0x00000006u, + 0x00000045u, 0x00000043u, 0x00000044u, 0x000200feu, 0x00000045u, 0x000200f8u, 0x0000003fu, 0x0004003du, + 0x00000006u, 0x00000049u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x0000004au, 0x00000049u, 0x00000029u, + 0x000500c7u, 0x00000006u, 0x0000004cu, 0x0000004au, 0x0000004bu, 0x00050080u, 0x00000006u, 0x0000004du, + 0x00000048u, 0x0000004cu, 0x0003003eu, 0x00000047u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000004eu, + 0x0000002eu, 0x0004003du, 0x00000006u, 0x0000004fu, 0x00000047u, 0x00050080u, 0x00000006u, 0x00000050u, + 0x0000004eu, 0x0000004fu, 0x000500c2u, 0x00000006u, 0x00000051u, 0x00000050u, 0x00000029u, 0x000500c7u, + 0x00000006u, 0x00000052u, 0x00000051u, 0x00000044u, 0x000200feu, 0x00000052u, 0x00010038u, 0x00050036u, + 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, + 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005au, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000060u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007bu, + 0x00000007u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000058u, + 0x00000056u, 0x00000057u, 0x000500c4u, 0x00000006u, 0x00000059u, 0x00000058u, 0x00000029u, 0x0003003eu, + 0x00000055u, 0x00000059u, 0x0004003du, 0x00000006u, 0x0000005bu, 0x00000012u, 0x000500c2u, 0x00000006u, + 0x0000005du, 0x0000005bu, 0x0000005cu, 0x000500c7u, 0x00000006u, 0x0000005fu, 0x0000005du, 0x0000005eu, + 0x0003003eu, 0x0000005au, 0x0000005fu, 0x0004003du, 0x00000006u, 0x00000061u, 0x00000012u, 0x000500c7u, + 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x0003003eu, 0x00000060u, 0x00000063u, 0x0004003du, + 0x00000006u, 0x00000064u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000065u, 0x00000064u, 0x0000005eu, + 0x000300f7u, 0x00000067u, 0x00000000u, 0x000400fau, 0x00000065u, 0x00000066u, 0x00000067u, 0x000200f8u, + 0x00000066u, 0x0004003du, 0x00000006u, 0x00000068u, 0x00000055u, 0x000500c5u, 0x00000006u, 0x00000069u, + 0x00000068u, 0x00000033u, 0x0004003du, 0x00000006u, 0x0000006au, 0x00000060u, 0x000500c4u, 0x00000006u, + 0x0000006cu, 0x0000006au, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x0000006du, 0x00000069u, 0x0000006cu, + 0x0004007cu, 0x00000008u, 0x0000006eu, 0x0000006du, 0x000200feu, 0x0000006eu, 0x000200f8u, 0x00000067u, + 0x0004003du, 0x00000006u, 0x00000070u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000071u, 0x00000070u, + 0x0000003bu, 0x000300f7u, 0x00000073u, 0x00000000u, 0x000400fau, 0x00000071u, 0x00000072u, 0x00000073u, + 0x000200f8u, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000074u, 0x00000060u, 0x000500aau, 0x00000031u, + 0x00000075u, 0x00000074u, 0x0000003bu, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, + 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, 0x0004003du, 0x00000006u, 0x00000078u, 0x00000055u, + 0x0004007cu, 0x00000008u, 0x00000079u, 0x00000078u, 0x000200feu, 0x00000079u, 0x000200f8u, 0x00000077u, + 0x0003003eu, 0x0000007bu, 0x0000003bu, 0x000200f9u, 0x0000007cu, 0x000200f8u, 0x0000007cu, 0x000400f6u, + 0x0000007eu, 0x0000007fu, 0x00000000u, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x00000081u, 0x00000060u, 0x000500c7u, 0x00000006u, 0x00000083u, 0x00000081u, 0x00000082u, + 0x000500aau, 0x00000031u, 0x00000084u, 0x00000083u, 0x0000003bu, 0x000400fau, 0x00000084u, 0x0000007du, + 0x0000007eu, 0x000200f8u, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000086u, 0x00000060u, 0x000500c4u, + 0x00000006u, 0x00000087u, 0x00000086u, 0x00000085u, 0x0003003eu, 0x00000060u, 0x00000087u, 0x0004003du, + 0x00000006u, 0x00000088u, 0x0000007bu, 0x00050080u, 0x00000006u, 0x00000089u, 0x00000088u, 0x0000004bu, + 0x0003003eu, 0x0000007bu, 0x00000089u, 0x000200f9u, 0x0000007fu, 0x000200f8u, 0x0000007fu, 0x000200f9u, + 0x0000007cu, 0x000200f8u, 0x0000007eu, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000060u, 0x000500c7u, + 0x00000006u, 0x0000008bu, 0x0000008au, 0x00000062u, 0x0003003eu, 0x00000060u, 0x0000008bu, 0x0004003du, + 0x00000006u, 0x0000008cu, 0x00000055u, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000007bu, 0x00050082u, + 0x00000006u, 0x0000008fu, 0x0000008du, 0x0000008eu, 0x000500c4u, 0x00000006u, 0x00000091u, 0x0000008fu, + 0x00000090u, 0x000500c5u, 0x00000006u, 0x00000092u, 0x0000008cu, 0x00000091u, 0x0004003du, 0x00000006u, + 0x00000093u, 0x00000060u, 0x000500c4u, 0x00000006u, 0x00000094u, 0x00000093u, 0x0000006bu, 0x000500c5u, + 0x00000006u, 0x00000095u, 0x00000092u, 0x00000094u, 0x0004007cu, 0x00000008u, 0x00000096u, 0x00000095u, + 0x000200feu, 0x00000096u, 0x000200f8u, 0x00000073u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000055u, + 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005au, 0x00050080u, 0x00000006u, 0x0000009bu, 0x00000099u, + 0x0000009au, 0x000500c4u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x00000090u, 0x000500c5u, 0x00000006u, + 0x0000009du, 0x00000098u, 0x0000009cu, 0x0004003du, 0x00000006u, 0x0000009eu, 0x00000060u, 0x000500c4u, + 0x00000006u, 0x0000009fu, 0x0000009eu, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x000000a0u, 0x0000009du, + 0x0000009fu, 0x0004007cu, 0x00000008u, 0x000000a1u, 0x000000a0u, 0x000200feu, 0x000000a1u, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, + 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000abu, 0x00000007u, 0x0004003bu, 0x000000b0u, + 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000efu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000111u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000118u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a5u, 0x00000015u, 0x0004007cu, 0x00000006u, + 0x000000a6u, 0x000000a5u, 0x0003003eu, 0x000000a4u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000000a8u, + 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000a9u, 0x000000a8u, 0x00000029u, 0x000500c7u, 0x00000006u, + 0x000000aau, 0x000000a9u, 0x00000057u, 0x0003003eu, 0x000000a7u, 0x000000aau, 0x0004003du, 0x00000006u, + 0x000000acu, 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000adu, 0x000000acu, 0x00000090u, 0x000500c7u, + 0x00000006u, 0x000000afu, 0x000000adu, 0x000000aeu, 0x0003003eu, 0x000000abu, 0x000000afu, 0x0004003du, + 0x00000006u, 0x000000b2u, 0x000000abu, 0x0004007cu, 0x00000028u, 0x000000b3u, 0x000000b2u, 0x00050082u, + 0x00000028u, 0x000000b5u, 0x000000b3u, 0x000000b4u, 0x00050080u, 0x00000028u, 0x000000b7u, 0x000000b5u, + 0x000000b6u, 0x0003003eu, 0x000000b1u, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000b9u, 0x000000a4u, + 0x000500c7u, 0x00000006u, 0x000000bau, 0x000000b9u, 0x00000039u, 0x0003003eu, 0x000000b8u, 0x000000bau, + 0x0004003du, 0x00000006u, 0x000000bbu, 0x000000abu, 0x000500aau, 0x00000031u, 0x000000bcu, 0x000000bbu, + 0x000000aeu, 0x000300f7u, 0x000000beu, 0x00000000u, 0x000400fau, 0x000000bcu, 0x000000bdu, 0x000000beu, + 0x000200f8u, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000bfu, 0x000000a7u, 0x000500c5u, 0x00000006u, + 0x000000c1u, 0x000000bfu, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c2u, 0x000000b8u, 0x000500abu, + 0x00000031u, 0x000000c3u, 0x000000c2u, 0x0000003bu, 0x000300f7u, 0x000000c6u, 0x00000000u, 0x000400fau, + 0x000000c3u, 0x000000c5u, 0x000000cbu, 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000c8u, + 0x000000b8u, 0x000500c2u, 0x00000006u, 0x000000c9u, 0x000000c8u, 0x0000006bu, 0x000500c5u, 0x00000006u, + 0x000000cau, 0x000000c7u, 0x000000c9u, 0x0003003eu, 0x000000c4u, 0x000000cau, 0x000200f9u, 0x000000c6u, + 0x000200f8u, 0x000000cbu, 0x0003003eu, 0x000000c4u, 0x0000003bu, 0x000200f9u, 0x000000c6u, 0x000200f8u, + 0x000000c6u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000c4u, 0x000500c5u, 0x00000006u, 0x000000cdu, + 0x000000c1u, 0x000000ccu, 0x000200feu, 0x000000cdu, 0x000200f8u, 0x000000beu, 0x0004003du, 0x00000028u, + 0x000000cfu, 0x000000b1u, 0x000500afu, 0x00000031u, 0x000000d1u, 0x000000cfu, 0x000000d0u, 0x000300f7u, + 0x000000d3u, 0x00000000u, 0x000400fau, 0x000000d1u, 0x000000d2u, 0x000000d3u, 0x000200f8u, 0x000000d2u, + 0x0004003du, 0x00000006u, 0x000000d4u, 0x000000a7u, 0x000500c5u, 0x00000006u, 0x000000d5u, 0x000000d4u, + 0x000000c0u, 0x000200feu, 0x000000d5u, 0x000200f8u, 0x000000d3u, 0x0004003du, 0x00000028u, 0x000000d7u, + 0x000000b1u, 0x000500b3u, 0x00000031u, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, + 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, + 0x00000028u, 0x000000dcu, 0x000000b1u, 0x000500b1u, 0x00000031u, 0x000000deu, 0x000000dcu, 0x000000ddu, + 0x000300f7u, 0x000000e0u, 0x00000000u, 0x000400fau, 0x000000deu, 0x000000dfu, 0x000000e0u, 0x000200f8u, + 0x000000dfu, 0x0004003du, 0x00000006u, 0x000000e1u, 0x000000a7u, 0x000200feu, 0x000000e1u, 0x000200f8u, + 0x000000e0u, 0x0004003du, 0x00000006u, 0x000000e4u, 0x000000b8u, 0x000500c5u, 0x00000006u, 0x000000e5u, + 0x000000e4u, 0x000000e3u, 0x0003003eu, 0x000000b8u, 0x000000e5u, 0x0004003du, 0x00000028u, 0x000000e8u, + 0x000000b1u, 0x00050082u, 0x00000028u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0004007cu, 0x00000006u, + 0x000000eau, 0x000000e9u, 0x0003003eu, 0x000000e6u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000ecu, + 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000edu, 0x000000e6u, 0x000500c2u, 0x00000006u, 0x000000eeu, + 0x000000ecu, 0x000000edu, 0x0003003eu, 0x000000ebu, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, + 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e6u, 0x000500c4u, 0x00000006u, 0x000000f2u, + 0x0000004bu, 0x000000f1u, 0x00050082u, 0x00000006u, 0x000000f3u, 0x000000f2u, 0x0000004bu, 0x000500c7u, + 0x00000006u, 0x000000f4u, 0x000000f0u, 0x000000f3u, 0x0003003eu, 0x000000efu, 0x000000f4u, 0x0004003du, + 0x00000006u, 0x000000f6u, 0x000000e6u, 0x00050082u, 0x00000006u, 0x000000f7u, 0x000000f6u, 0x0000004bu, + 0x000500c4u, 0x00000006u, 0x000000f8u, 0x0000004bu, 0x000000f7u, 0x0003003eu, 0x000000f5u, 0x000000f8u, + 0x0004003du, 0x00000006u, 0x000000f9u, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000f5u, + 0x000500acu, 0x00000031u, 0x000000fbu, 0x000000f9u, 0x000000fau, 0x000400a8u, 0x00000031u, 0x000000fcu, + 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, + 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000efu, 0x0004003du, 0x00000006u, + 0x00000100u, 0x000000f5u, 0x000500aau, 0x00000031u, 0x00000101u, 0x000000ffu, 0x00000100u, 0x000300f7u, + 0x00000103u, 0x00000000u, 0x000400fau, 0x00000101u, 0x00000102u, 0x00000103u, 0x000200f8u, 0x00000102u, + 0x0004003du, 0x00000006u, 0x00000104u, 0x000000ebu, 0x000500c7u, 0x00000006u, 0x00000105u, 0x00000104u, + 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000106u, 0x00000105u, 0x0000003bu, 0x000200f9u, 0x00000103u, + 0x000200f8u, 0x00000103u, 0x000700f5u, 0x00000031u, 0x00000107u, 0x00000101u, 0x000000fdu, 0x00000106u, + 0x00000102u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x00000031u, 0x00000108u, + 0x000000fbu, 0x000000e0u, 0x00000107u, 0x00000103u, 0x000300f7u, 0x0000010au, 0x00000000u, 0x000400fau, + 0x00000108u, 0x00000109u, 0x0000010au, 0x000200f8u, 0x00000109u, 0x0004003du, 0x00000006u, 0x0000010bu, + 0x000000ebu, 0x00050080u, 0x00000006u, 0x0000010cu, 0x0000010bu, 0x0000004bu, 0x0003003eu, 0x000000ebu, + 0x0000010cu, 0x000200f9u, 0x0000010au, 0x000200f8u, 0x0000010au, 0x0004003du, 0x00000006u, 0x0000010du, + 0x000000a7u, 0x0004003du, 0x00000006u, 0x0000010eu, 0x000000ebu, 0x000500c5u, 0x00000006u, 0x0000010fu, + 0x0000010du, 0x0000010eu, 0x000200feu, 0x0000010fu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000028u, + 0x00000112u, 0x000000b1u, 0x0004007cu, 0x00000006u, 0x00000113u, 0x00000112u, 0x000500c4u, 0x00000006u, + 0x00000114u, 0x00000113u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000115u, 0x000000b8u, 0x000500c2u, + 0x00000006u, 0x00000116u, 0x00000115u, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x00000117u, 0x00000114u, + 0x00000116u, 0x0003003eu, 0x00000111u, 0x00000117u, 0x0004003du, 0x00000006u, 0x00000119u, 0x000000b8u, + 0x000500c7u, 0x00000006u, 0x0000011bu, 0x00000119u, 0x0000011au, 0x0003003eu, 0x00000118u, 0x0000011bu, + 0x0004003du, 0x00000006u, 0x0000011cu, 0x00000118u, 0x000500acu, 0x00000031u, 0x0000011eu, 0x0000011cu, + 0x0000011du, 0x000400a8u, 0x00000031u, 0x0000011fu, 0x0000011eu, 0x000300f7u, 0x00000121u, 0x00000000u, + 0x000400fau, 0x0000011fu, 0x00000120u, 0x00000121u, 0x000200f8u, 0x00000120u, 0x0004003du, 0x00000006u, + 0x00000122u, 0x00000118u, 0x000500aau, 0x00000031u, 0x00000123u, 0x00000122u, 0x0000011du, 0x000300f7u, + 0x00000125u, 0x00000000u, 0x000400fau, 0x00000123u, 0x00000124u, 0x00000125u, 0x000200f8u, 0x00000124u, + 0x0004003du, 0x00000006u, 0x00000126u, 0x00000111u, 0x000500c7u, 0x00000006u, 0x00000127u, 0x00000126u, + 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000128u, 0x00000127u, 0x0000003bu, 0x000200f9u, 0x00000125u, + 0x000200f8u, 0x00000125u, 0x000700f5u, 0x00000031u, 0x00000129u, 0x00000123u, 0x00000120u, 0x00000128u, + 0x00000124u, 0x000200f9u, 0x00000121u, 0x000200f8u, 0x00000121u, 0x000700f5u, 0x00000031u, 0x0000012au, + 0x0000011eu, 0x000000dbu, 0x00000129u, 0x00000125u, 0x000300f7u, 0x0000012cu, 0x00000000u, 0x000400fau, + 0x0000012au, 0x0000012bu, 0x0000012cu, 0x000200f8u, 0x0000012bu, 0x0004003du, 0x00000006u, 0x0000012du, + 0x00000111u, 0x00050080u, 0x00000006u, 0x0000012eu, 0x0000012du, 0x0000004bu, 0x0003003eu, 0x00000111u, + 0x0000012eu, 0x000200f9u, 0x0000012cu, 0x000200f8u, 0x0000012cu, 0x0004003du, 0x00000006u, 0x0000012fu, + 0x000000a7u, 0x0004003du, 0x00000006u, 0x00000130u, 0x00000111u, 0x000500c5u, 0x00000006u, 0x00000131u, + 0x0000012fu, 0x00000130u, 0x000200feu, 0x00000131u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, + 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, + 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000136u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000139u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013du, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000134u, 0x0000001au, 0x000500aau, 0x00000031u, 0x00000135u, 0x00000134u, 0x0000004bu, 0x000300f7u, + 0x00000138u, 0x00000000u, 0x000400fau, 0x00000135u, 0x00000137u, 0x0000013cu, 0x000200f8u, 0x00000137u, + 0x0004003du, 0x00000006u, 0x0000013au, 0x00000019u, 0x0003003eu, 0x00000139u, 0x0000013au, 0x00050039u, + 0x00000008u, 0x0000013bu, 0x00000013u, 0x00000139u, 0x0003003eu, 0x00000136u, 0x0000013bu, 0x000200f9u, + 0x00000138u, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000006u, 0x0000013eu, 0x00000019u, 0x0003003eu, + 0x0000013du, 0x0000013eu, 0x00050039u, 0x00000008u, 0x0000013fu, 0x0000000bu, 0x0000013du, 0x0003003eu, + 0x00000136u, 0x0000013fu, 0x000200f9u, 0x00000138u, 0x000200f8u, 0x00000138u, 0x0004003du, 0x00000008u, + 0x00000140u, 0x00000136u, 0x000200feu, 0x00000140u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, + 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, + 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000145u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000148u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014cu, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000143u, 0x0000001fu, 0x000500aau, 0x00000031u, 0x00000144u, 0x00000143u, 0x0000004bu, 0x000300f7u, + 0x00000147u, 0x00000000u, 0x000400fau, 0x00000144u, 0x00000146u, 0x0000014bu, 0x000200f8u, 0x00000146u, + 0x0004003du, 0x00000008u, 0x00000149u, 0x0000001eu, 0x0003003eu, 0x00000148u, 0x00000149u, 0x00050039u, + 0x00000006u, 0x0000014au, 0x00000016u, 0x00000148u, 0x0003003eu, 0x00000145u, 0x0000014au, 0x000200f9u, + 0x00000147u, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000008u, 0x0000014du, 0x0000001eu, 0x0003003eu, + 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000006u, 0x0000014eu, 0x00000010u, 0x0000014cu, 0x0003003eu, + 0x00000145u, 0x0000014eu, 0x000200f9u, 0x00000147u, 0x000200f8u, 0x00000147u, 0x0004003du, 0x00000006u, + 0x0000014fu, 0x00000145u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000025u, + 0x00000000u, 0x00000022u, 0x00030037u, 0x00000007u, 0x00000023u, 0x00030037u, 0x0000000du, 0x00000024u, + 0x000200f8u, 0x00000026u, 0x0004003bu, 0x00000007u, 0x0000015cu, 0x00000007u, 0x000400e0u, 0x00000152u, + 0x00000152u, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000158u, 0x00000023u, 0x0004003du, 0x00000008u, + 0x00000159u, 0x00000024u, 0x00050041u, 0x0000015au, 0x0000015bu, 0x00000157u, 0x00000158u, 0x0003003eu, + 0x0000015bu, 0x00000159u, 0x000400e0u, 0x00000152u, 0x00000152u, 0x00000153u, 0x0003003eu, 0x0000015cu, + 0x00000042u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015du, 0x000400f6u, 0x0000015fu, 0x00000160u, + 0x00000000u, 0x000200f9u, 0x00000161u, 0x000200f8u, 0x00000161u, 0x0004003du, 0x00000006u, 0x00000162u, + 0x0000015cu, 0x000500acu, 0x00000031u, 0x00000163u, 0x00000162u, 0x0000003bu, 0x000400fau, 0x00000163u, + 0x0000015eu, 0x0000015fu, 0x000200f8u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x00000164u, 0x00000023u, + 0x0004003du, 0x00000006u, 0x00000165u, 0x0000015cu, 0x000500b0u, 0x00000031u, 0x00000166u, 0x00000164u, + 0x00000165u, 0x000300f7u, 0x00000168u, 0x00000000u, 0x000400fau, 0x00000166u, 0x00000167u, 0x00000168u, + 0x000200f8u, 0x00000167u, 0x0004003du, 0x00000006u, 0x00000169u, 0x00000023u, 0x0004003du, 0x00000006u, + 0x0000016au, 0x00000023u, 0x0004003du, 0x00000006u, 0x0000016bu, 0x0000015cu, 0x00050080u, 0x00000006u, + 0x0000016cu, 0x0000016au, 0x0000016bu, 0x00050041u, 0x0000015au, 0x0000016du, 0x00000157u, 0x0000016cu, + 0x0004003du, 0x00000008u, 0x0000016eu, 0x0000016du, 0x00050041u, 0x0000015au, 0x0000016fu, 0x00000157u, + 0x00000169u, 0x0004003du, 0x00000008u, 0x00000170u, 0x0000016fu, 0x00050081u, 0x00000008u, 0x00000171u, + 0x00000170u, 0x0000016eu, 0x00050041u, 0x0000015au, 0x00000172u, 0x00000157u, 0x00000169u, 0x0003003eu, + 0x00000172u, 0x00000171u, 0x000200f9u, 0x00000168u, 0x000200f8u, 0x00000168u, 0x000400e0u, 0x00000152u, + 0x00000152u, 0x00000153u, 0x000200f9u, 0x00000160u, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, + 0x00000173u, 0x0000015cu, 0x000500c2u, 0x00000006u, 0x00000174u, 0x00000173u, 0x00000085u, 0x0003003eu, + 0x0000015cu, 0x00000174u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015fu, 0x00050041u, 0x0000015au, + 0x00000175u, 0x00000157u, 0x000000d8u, 0x0004003du, 0x00000008u, 0x00000176u, 0x00000175u, 0x000200feu, + 0x00000176u, 0x00010038u, +}; + +constexpr uint32_t kSpv_vt_silu_and_mul[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000021bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000015cu, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000015cu, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000161u, 0x00000002u, 0x00050048u, 0x00000161u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000161u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000161u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000161u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000161u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000161u, + 0x00000005u, 0x00000023u, 0x00000014u, 0x00040047u, 0x00000187u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x00000188u, 0x00000002u, 0x00040048u, 0x00000188u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000188u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000018au, 0x00000018u, 0x00040047u, 0x0000018au, + 0x00000021u, 0x00000000u, 0x00040047u, 0x0000018au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000199u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x0000019au, 0x00000002u, 0x00040048u, 0x0000019au, 0x00000000u, + 0x00000018u, 0x00050048u, 0x0000019au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000019cu, + 0x00000018u, 0x00040047u, 0x0000019cu, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000019cu, 0x00000022u, + 0x00000000u, 0x00040047u, 0x000001e0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001e1u, 0x00000002u, + 0x00050048u, 0x000001e1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001e3u, 0x00000021u, + 0x00000002u, 0x00040047u, 0x000001e3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001f9u, 0x00000006u, + 0x00000002u, 0x00030047u, 0x000001fau, 0x00000002u, 0x00050048u, 0x000001fau, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00040047u, 0x000001fcu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000001fcu, 0x00000022u, + 0x00000000u, 0x00040047u, 0x0000021au, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, + 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, + 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, + 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, + 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, + 0x00000006u, 0x0000000du, 0x00000007u, 0x00040021u, 0x00000022u, 0x00000008u, 0x0000000du, 0x00040015u, + 0x00000027u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000027u, 0x00000028u, 0x00000010u, 0x00020014u, + 0x00000030u, 0x0004002bu, 0x00000006u, 0x00000032u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000038u, + 0x007fffffu, 0x0004002bu, 0x00000006u, 0x0000003au, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000041u, + 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000043u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000047u, + 0x00007fffu, 0x0004002bu, 0x00000006u, 0x0000004au, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000056u, + 0x00008000u, 0x0004002bu, 0x00000027u, 0x0000005bu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000005du, + 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000061u, 0x000003ffu, 0x0004002bu, 0x00000027u, 0x0000006au, + 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000081u, 0x00000400u, 0x0004002bu, 0x00000027u, 0x00000084u, + 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000008cu, 0x00000071u, 0x0004002bu, 0x00000027u, 0x0000008fu, + 0x00000017u, 0x0004002bu, 0x00000006u, 0x00000099u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000adu, + 0x000000ffu, 0x00040020u, 0x000000afu, 0x00000007u, 0x00000027u, 0x0004002bu, 0x00000027u, 0x000000b3u, + 0x0000007fu, 0x0004002bu, 0x00000027u, 0x000000b5u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bfu, + 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000c6u, 0x00000200u, 0x0004002bu, 0x00000027u, 0x000000cfu, + 0x0000001fu, 0x0004002bu, 0x00000027u, 0x000000d7u, 0x00000000u, 0x0004002bu, 0x00000027u, 0x000000dcu, + 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000e2u, 0x00800000u, 0x0004002bu, 0x00000027u, 0x000000e6u, + 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000119u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x0000011cu, + 0x00001000u, 0x0004002bu, 0x00000008u, 0x00000151u, 0x3f800000u, 0x00040017u, 0x0000015au, 0x00000006u, + 0x00000003u, 0x00040020u, 0x0000015bu, 0x00000001u, 0x0000015au, 0x0004003bu, 0x0000015bu, 0x0000015cu, + 0x00000001u, 0x00040020u, 0x0000015du, 0x00000001u, 0x00000006u, 0x0008001eu, 0x00000161u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000162u, 0x00000009u, + 0x00000161u, 0x0004003bu, 0x00000162u, 0x00000163u, 0x00000009u, 0x00040020u, 0x00000164u, 0x00000009u, + 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000017au, 0x00000002u, 0x0004002bu, 0x00000027u, 0x00000180u, + 0x00000002u, 0x0003001du, 0x00000187u, 0x00000006u, 0x0003001eu, 0x00000188u, 0x00000187u, 0x00040020u, + 0x00000189u, 0x0000000cu, 0x00000188u, 0x0004003bu, 0x00000189u, 0x0000018au, 0x0000000cu, 0x0004002bu, + 0x00000027u, 0x0000018bu, 0x00000004u, 0x00040020u, 0x00000193u, 0x0000000cu, 0x00000006u, 0x00040015u, + 0x00000198u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000199u, 0x00000198u, 0x0003001eu, 0x0000019au, + 0x00000199u, 0x00040020u, 0x0000019bu, 0x0000000cu, 0x0000019au, 0x0004003bu, 0x0000019bu, 0x0000019cu, + 0x0000000cu, 0x00040020u, 0x000001a4u, 0x0000000cu, 0x00000198u, 0x0004002bu, 0x00000027u, 0x000001dau, + 0x00000003u, 0x0003001du, 0x000001e0u, 0x00000006u, 0x0003001eu, 0x000001e1u, 0x000001e0u, 0x00040020u, + 0x000001e2u, 0x0000000cu, 0x000001e1u, 0x0004003bu, 0x000001e2u, 0x000001e3u, 0x0000000cu, 0x0004002bu, + 0x00000027u, 0x000001e4u, 0x00000005u, 0x0003001du, 0x000001f9u, 0x00000198u, 0x0003001eu, 0x000001fau, + 0x000001f9u, 0x00040020u, 0x000001fbu, 0x0000000cu, 0x000001fau, 0x0004003bu, 0x000001fbu, 0x000001fcu, + 0x0000000cu, 0x0003002au, 0x00000030u, 0x00000215u, 0x0004002bu, 0x00000006u, 0x00000216u, 0x00000080u, + 0x0004001cu, 0x00000217u, 0x00000008u, 0x00000216u, 0x00040020u, 0x00000218u, 0x00000004u, 0x00000217u, + 0x0004003bu, 0x00000218u, 0x00000219u, 0x00000004u, 0x0006002cu, 0x0000015au, 0x0000021au, 0x00000216u, + 0x0000004au, 0x0000004au, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, + 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000159u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000016eu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000173u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000178u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000017fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000184u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a9u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001aeu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001b2u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d1u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001f0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000208u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000020eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000020fu, + 0x00000007u, 0x00050041u, 0x0000015du, 0x0000015eu, 0x0000015cu, 0x0000003au, 0x0004003du, 0x00000006u, + 0x0000015fu, 0x0000015eu, 0x0003003eu, 0x00000159u, 0x0000015fu, 0x0004003du, 0x00000006u, 0x00000160u, + 0x00000159u, 0x00050041u, 0x00000164u, 0x00000165u, 0x00000163u, 0x000000d7u, 0x0004003du, 0x00000006u, + 0x00000166u, 0x00000165u, 0x00050041u, 0x00000164u, 0x00000167u, 0x00000163u, 0x00000084u, 0x0004003du, + 0x00000006u, 0x00000168u, 0x00000167u, 0x00050084u, 0x00000006u, 0x00000169u, 0x00000166u, 0x00000168u, + 0x000500aeu, 0x00000030u, 0x0000016au, 0x00000160u, 0x00000169u, 0x000300f7u, 0x0000016cu, 0x00000000u, + 0x000400fau, 0x0000016au, 0x0000016bu, 0x0000016cu, 0x000200f8u, 0x0000016bu, 0x000100fdu, 0x000200f8u, + 0x0000016cu, 0x0004003du, 0x00000006u, 0x0000016fu, 0x00000159u, 0x00050041u, 0x00000164u, 0x00000170u, + 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000171u, 0x00000170u, 0x00050086u, 0x00000006u, + 0x00000172u, 0x0000016fu, 0x00000171u, 0x0003003eu, 0x0000016eu, 0x00000172u, 0x0004003du, 0x00000006u, + 0x00000174u, 0x00000159u, 0x00050041u, 0x00000164u, 0x00000175u, 0x00000163u, 0x00000084u, 0x0004003du, + 0x00000006u, 0x00000176u, 0x00000175u, 0x00050089u, 0x00000006u, 0x00000177u, 0x00000174u, 0x00000176u, + 0x0003003eu, 0x00000173u, 0x00000177u, 0x0004003du, 0x00000006u, 0x00000179u, 0x0000016eu, 0x00050041u, + 0x00000164u, 0x0000017bu, 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x0000017cu, 0x0000017bu, + 0x00050084u, 0x00000006u, 0x0000017du, 0x0000017au, 0x0000017cu, 0x00050084u, 0x00000006u, 0x0000017eu, + 0x00000179u, 0x0000017du, 0x0003003eu, 0x00000178u, 0x0000017eu, 0x00050041u, 0x00000164u, 0x00000181u, + 0x00000163u, 0x00000180u, 0x0004003du, 0x00000006u, 0x00000182u, 0x00000181u, 0x000500aau, 0x00000030u, + 0x00000183u, 0x00000182u, 0x0000003au, 0x000300f7u, 0x00000186u, 0x00000000u, 0x000400fau, 0x00000183u, + 0x00000185u, 0x00000197u, 0x000200f8u, 0x00000185u, 0x00050041u, 0x00000164u, 0x0000018cu, 0x00000163u, + 0x0000018bu, 0x0004003du, 0x00000006u, 0x0000018du, 0x0000018cu, 0x000500c2u, 0x00000006u, 0x0000018eu, + 0x0000018du, 0x00000180u, 0x0004003du, 0x00000006u, 0x0000018fu, 0x00000178u, 0x0004003du, 0x00000006u, + 0x00000190u, 0x00000173u, 0x00050080u, 0x00000006u, 0x00000191u, 0x0000018fu, 0x00000190u, 0x00050080u, + 0x00000006u, 0x00000192u, 0x0000018eu, 0x00000191u, 0x00060041u, 0x00000193u, 0x00000194u, 0x0000018au, + 0x000000d7u, 0x00000192u, 0x0004003du, 0x00000006u, 0x00000195u, 0x00000194u, 0x0004007cu, 0x00000008u, + 0x00000196u, 0x00000195u, 0x0003003eu, 0x00000184u, 0x00000196u, 0x000200f9u, 0x00000186u, 0x000200f8u, + 0x00000197u, 0x00050041u, 0x00000164u, 0x0000019du, 0x00000163u, 0x0000018bu, 0x0004003du, 0x00000006u, + 0x0000019eu, 0x0000019du, 0x000500c2u, 0x00000006u, 0x0000019fu, 0x0000019eu, 0x00000084u, 0x0004003du, + 0x00000006u, 0x000001a0u, 0x00000178u, 0x0004003du, 0x00000006u, 0x000001a1u, 0x00000173u, 0x00050080u, + 0x00000006u, 0x000001a2u, 0x000001a0u, 0x000001a1u, 0x00050080u, 0x00000006u, 0x000001a3u, 0x0000019fu, + 0x000001a2u, 0x00060041u, 0x000001a4u, 0x000001a5u, 0x0000019cu, 0x000000d7u, 0x000001a3u, 0x0004003du, + 0x00000198u, 0x000001a6u, 0x000001a5u, 0x00040071u, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x0003003eu, + 0x000001a8u, 0x000001a7u, 0x00050041u, 0x00000164u, 0x000001aau, 0x00000163u, 0x00000180u, 0x0004003du, + 0x00000006u, 0x000001abu, 0x000001aau, 0x0003003eu, 0x000001a9u, 0x000001abu, 0x00060039u, 0x00000008u, + 0x000001acu, 0x0000001bu, 0x000001a8u, 0x000001a9u, 0x0003003eu, 0x00000184u, 0x000001acu, 0x000200f9u, + 0x00000186u, 0x000200f8u, 0x00000186u, 0x0004003du, 0x00000008u, 0x000001adu, 0x00000184u, 0x0003003eu, + 0x0000017fu, 0x000001adu, 0x00050041u, 0x00000164u, 0x000001afu, 0x00000163u, 0x00000180u, 0x0004003du, + 0x00000006u, 0x000001b0u, 0x000001afu, 0x000500aau, 0x00000030u, 0x000001b1u, 0x000001b0u, 0x0000003au, + 0x000300f7u, 0x000001b4u, 0x00000000u, 0x000400fau, 0x000001b1u, 0x000001b3u, 0x000001c2u, 0x000200f8u, + 0x000001b3u, 0x00050041u, 0x00000164u, 0x000001b5u, 0x00000163u, 0x0000018bu, 0x0004003du, 0x00000006u, + 0x000001b6u, 0x000001b5u, 0x000500c2u, 0x00000006u, 0x000001b7u, 0x000001b6u, 0x00000180u, 0x0004003du, + 0x00000006u, 0x000001b8u, 0x00000178u, 0x00050041u, 0x00000164u, 0x000001b9u, 0x00000163u, 0x00000084u, + 0x0004003du, 0x00000006u, 0x000001bau, 0x000001b9u, 0x00050080u, 0x00000006u, 0x000001bbu, 0x000001b8u, + 0x000001bau, 0x0004003du, 0x00000006u, 0x000001bcu, 0x00000173u, 0x00050080u, 0x00000006u, 0x000001bdu, + 0x000001bbu, 0x000001bcu, 0x00050080u, 0x00000006u, 0x000001beu, 0x000001b7u, 0x000001bdu, 0x00060041u, + 0x00000193u, 0x000001bfu, 0x0000018au, 0x000000d7u, 0x000001beu, 0x0004003du, 0x00000006u, 0x000001c0u, + 0x000001bfu, 0x0004007cu, 0x00000008u, 0x000001c1u, 0x000001c0u, 0x0003003eu, 0x000001b2u, 0x000001c1u, + 0x000200f9u, 0x000001b4u, 0x000200f8u, 0x000001c2u, 0x00050041u, 0x00000164u, 0x000001c3u, 0x00000163u, + 0x0000018bu, 0x0004003du, 0x00000006u, 0x000001c4u, 0x000001c3u, 0x000500c2u, 0x00000006u, 0x000001c5u, + 0x000001c4u, 0x00000084u, 0x0004003du, 0x00000006u, 0x000001c6u, 0x00000178u, 0x00050041u, 0x00000164u, + 0x000001c7u, 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x000001c8u, 0x000001c7u, 0x00050080u, + 0x00000006u, 0x000001c9u, 0x000001c6u, 0x000001c8u, 0x0004003du, 0x00000006u, 0x000001cau, 0x00000173u, + 0x00050080u, 0x00000006u, 0x000001cbu, 0x000001c9u, 0x000001cau, 0x00050080u, 0x00000006u, 0x000001ccu, + 0x000001c5u, 0x000001cbu, 0x00060041u, 0x000001a4u, 0x000001cdu, 0x0000019cu, 0x000000d7u, 0x000001ccu, + 0x0004003du, 0x00000198u, 0x000001ceu, 0x000001cdu, 0x00040071u, 0x00000006u, 0x000001cfu, 0x000001ceu, + 0x0003003eu, 0x000001d0u, 0x000001cfu, 0x00050041u, 0x00000164u, 0x000001d2u, 0x00000163u, 0x00000180u, + 0x0004003du, 0x00000006u, 0x000001d3u, 0x000001d2u, 0x0003003eu, 0x000001d1u, 0x000001d3u, 0x00060039u, + 0x00000008u, 0x000001d4u, 0x0000001bu, 0x000001d0u, 0x000001d1u, 0x0003003eu, 0x000001b2u, 0x000001d4u, + 0x000200f9u, 0x000001b4u, 0x000200f8u, 0x000001b4u, 0x0004003du, 0x00000008u, 0x000001d5u, 0x000001b2u, + 0x0003003eu, 0x000001aeu, 0x000001d5u, 0x000200f9u, 0x000001d6u, 0x000200f8u, 0x000001d6u, 0x000400f6u, + 0x000001d8u, 0x000001d9u, 0x00000000u, 0x000200f9u, 0x000001d7u, 0x000200f8u, 0x000001d7u, 0x00050041u, + 0x00000164u, 0x000001dbu, 0x00000163u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000001dcu, 0x000001dbu, + 0x000500aau, 0x00000030u, 0x000001ddu, 0x000001dcu, 0x0000003au, 0x000300f7u, 0x000001dfu, 0x00000000u, + 0x000400fau, 0x000001ddu, 0x000001deu, 0x000001f8u, 0x000200f8u, 0x000001deu, 0x00050041u, 0x00000164u, + 0x000001e5u, 0x00000163u, 0x000001e4u, 0x0004003du, 0x00000006u, 0x000001e6u, 0x000001e5u, 0x000500c2u, + 0x00000006u, 0x000001e7u, 0x000001e6u, 0x00000180u, 0x0004003du, 0x00000006u, 0x000001e8u, 0x0000016eu, + 0x00050041u, 0x00000164u, 0x000001e9u, 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x000001eau, + 0x000001e9u, 0x00050084u, 0x00000006u, 0x000001ebu, 0x000001e8u, 0x000001eau, 0x0004003du, 0x00000006u, + 0x000001ecu, 0x00000173u, 0x00050080u, 0x00000006u, 0x000001edu, 0x000001ebu, 0x000001ecu, 0x00050080u, + 0x00000006u, 0x000001eeu, 0x000001e7u, 0x000001edu, 0x0004003du, 0x00000008u, 0x000001efu, 0x0000017fu, + 0x0004003du, 0x00000008u, 0x000001f1u, 0x0000017fu, 0x0003003eu, 0x000001f0u, 0x000001f1u, 0x00050039u, + 0x00000008u, 0x000001f2u, 0x00000024u, 0x000001f0u, 0x00050085u, 0x00000008u, 0x000001f3u, 0x000001efu, + 0x000001f2u, 0x0004003du, 0x00000008u, 0x000001f4u, 0x000001aeu, 0x00050085u, 0x00000008u, 0x000001f5u, + 0x000001f3u, 0x000001f4u, 0x0004007cu, 0x00000006u, 0x000001f6u, 0x000001f5u, 0x00060041u, 0x00000193u, + 0x000001f7u, 0x000001e3u, 0x000000d7u, 0x000001eeu, 0x0003003eu, 0x000001f7u, 0x000001f6u, 0x000200f9u, + 0x000001dfu, 0x000200f8u, 0x000001f8u, 0x00050041u, 0x00000164u, 0x000001fdu, 0x00000163u, 0x000001e4u, + 0x0004003du, 0x00000006u, 0x000001feu, 0x000001fdu, 0x000500c2u, 0x00000006u, 0x000001ffu, 0x000001feu, + 0x00000084u, 0x0004003du, 0x00000006u, 0x00000200u, 0x0000016eu, 0x00050041u, 0x00000164u, 0x00000201u, + 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000202u, 0x00000201u, 0x00050084u, 0x00000006u, + 0x00000203u, 0x00000200u, 0x00000202u, 0x0004003du, 0x00000006u, 0x00000204u, 0x00000173u, 0x00050080u, + 0x00000006u, 0x00000205u, 0x00000203u, 0x00000204u, 0x00050080u, 0x00000006u, 0x00000206u, 0x000001ffu, + 0x00000205u, 0x0004003du, 0x00000008u, 0x00000207u, 0x0000017fu, 0x0004003du, 0x00000008u, 0x00000209u, + 0x0000017fu, 0x0003003eu, 0x00000208u, 0x00000209u, 0x00050039u, 0x00000008u, 0x0000020au, 0x00000024u, + 0x00000208u, 0x00050085u, 0x00000008u, 0x0000020bu, 0x00000207u, 0x0000020au, 0x0004003du, 0x00000008u, + 0x0000020cu, 0x000001aeu, 0x00050085u, 0x00000008u, 0x0000020du, 0x0000020bu, 0x0000020cu, 0x0003003eu, + 0x0000020eu, 0x0000020du, 0x00050041u, 0x00000164u, 0x00000210u, 0x00000163u, 0x000001dau, 0x0004003du, + 0x00000006u, 0x00000211u, 0x00000210u, 0x0003003eu, 0x0000020fu, 0x00000211u, 0x00060039u, 0x00000006u, + 0x00000212u, 0x00000020u, 0x0000020eu, 0x0000020fu, 0x00040071u, 0x00000198u, 0x00000213u, 0x00000212u, + 0x00060041u, 0x000001a4u, 0x00000214u, 0x000001fcu, 0x000000d7u, 0x00000206u, 0x0003003eu, 0x00000214u, + 0x00000213u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x000200f9u, 0x000001d9u, 0x000200f8u, + 0x000001d9u, 0x000400fau, 0x00000215u, 0x000001d6u, 0x000001d8u, 0x000200f8u, 0x000001d8u, 0x000100fdu, + 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, + 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000026u, 0x0000000au, 0x000500c4u, + 0x00000006u, 0x00000029u, 0x00000026u, 0x00000028u, 0x0004007cu, 0x00000008u, 0x0000002au, 0x00000029u, + 0x000200feu, 0x0000002au, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, + 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000002du, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000046u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002eu, + 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002fu, 0x0000002eu, 0x0003003eu, 0x0000002du, 0x0000002fu, + 0x0004003du, 0x00000006u, 0x00000031u, 0x0000002du, 0x000500c7u, 0x00000006u, 0x00000033u, 0x00000031u, + 0x00000032u, 0x000500aau, 0x00000030u, 0x00000034u, 0x00000033u, 0x00000032u, 0x000300f7u, 0x00000036u, + 0x00000000u, 0x000400fau, 0x00000034u, 0x00000035u, 0x00000036u, 0x000200f8u, 0x00000035u, 0x0004003du, + 0x00000006u, 0x00000037u, 0x0000002du, 0x000500c7u, 0x00000006u, 0x00000039u, 0x00000037u, 0x00000038u, + 0x000500abu, 0x00000030u, 0x0000003bu, 0x00000039u, 0x0000003au, 0x000200f9u, 0x00000036u, 0x000200f8u, + 0x00000036u, 0x000700f5u, 0x00000030u, 0x0000003cu, 0x00000034u, 0x00000011u, 0x0000003bu, 0x00000035u, + 0x000300f7u, 0x0000003eu, 0x00000000u, 0x000400fau, 0x0000003cu, 0x0000003du, 0x0000003eu, 0x000200f8u, + 0x0000003du, 0x0004003du, 0x00000006u, 0x0000003fu, 0x0000002du, 0x000500c2u, 0x00000006u, 0x00000040u, + 0x0000003fu, 0x00000028u, 0x000500c5u, 0x00000006u, 0x00000042u, 0x00000040u, 0x00000041u, 0x000500c7u, + 0x00000006u, 0x00000044u, 0x00000042u, 0x00000043u, 0x000200feu, 0x00000044u, 0x000200f8u, 0x0000003eu, + 0x0004003du, 0x00000006u, 0x00000048u, 0x0000002du, 0x000500c2u, 0x00000006u, 0x00000049u, 0x00000048u, + 0x00000028u, 0x000500c7u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x00050080u, 0x00000006u, + 0x0000004cu, 0x00000047u, 0x0000004bu, 0x0003003eu, 0x00000046u, 0x0000004cu, 0x0004003du, 0x00000006u, + 0x0000004du, 0x0000002du, 0x0004003du, 0x00000006u, 0x0000004eu, 0x00000046u, 0x00050080u, 0x00000006u, + 0x0000004fu, 0x0000004du, 0x0000004eu, 0x000500c2u, 0x00000006u, 0x00000050u, 0x0000004fu, 0x00000028u, + 0x000500c7u, 0x00000006u, 0x00000051u, 0x00000050u, 0x00000043u, 0x000200feu, 0x00000051u, 0x00010038u, + 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, + 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000054u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000059u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005fu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000007au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000055u, 0x00000012u, 0x000500c7u, 0x00000006u, + 0x00000057u, 0x00000055u, 0x00000056u, 0x000500c4u, 0x00000006u, 0x00000058u, 0x00000057u, 0x00000028u, + 0x0003003eu, 0x00000054u, 0x00000058u, 0x0004003du, 0x00000006u, 0x0000005au, 0x00000012u, 0x000500c2u, + 0x00000006u, 0x0000005cu, 0x0000005au, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, + 0x0000005du, 0x0003003eu, 0x00000059u, 0x0000005eu, 0x0004003du, 0x00000006u, 0x00000060u, 0x00000012u, + 0x000500c7u, 0x00000006u, 0x00000062u, 0x00000060u, 0x00000061u, 0x0003003eu, 0x0000005fu, 0x00000062u, + 0x0004003du, 0x00000006u, 0x00000063u, 0x00000059u, 0x000500aau, 0x00000030u, 0x00000064u, 0x00000063u, + 0x0000005du, 0x000300f7u, 0x00000066u, 0x00000000u, 0x000400fau, 0x00000064u, 0x00000065u, 0x00000066u, + 0x000200f8u, 0x00000065u, 0x0004003du, 0x00000006u, 0x00000067u, 0x00000054u, 0x000500c5u, 0x00000006u, + 0x00000068u, 0x00000067u, 0x00000032u, 0x0004003du, 0x00000006u, 0x00000069u, 0x0000005fu, 0x000500c4u, + 0x00000006u, 0x0000006bu, 0x00000069u, 0x0000006au, 0x000500c5u, 0x00000006u, 0x0000006cu, 0x00000068u, + 0x0000006bu, 0x0004007cu, 0x00000008u, 0x0000006du, 0x0000006cu, 0x000200feu, 0x0000006du, 0x000200f8u, + 0x00000066u, 0x0004003du, 0x00000006u, 0x0000006fu, 0x00000059u, 0x000500aau, 0x00000030u, 0x00000070u, + 0x0000006fu, 0x0000003au, 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, + 0x00000072u, 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x0000005fu, 0x000500aau, + 0x00000030u, 0x00000074u, 0x00000073u, 0x0000003au, 0x000300f7u, 0x00000076u, 0x00000000u, 0x000400fau, + 0x00000074u, 0x00000075u, 0x00000076u, 0x000200f8u, 0x00000075u, 0x0004003du, 0x00000006u, 0x00000077u, + 0x00000054u, 0x0004007cu, 0x00000008u, 0x00000078u, 0x00000077u, 0x000200feu, 0x00000078u, 0x000200f8u, + 0x00000076u, 0x0003003eu, 0x0000007au, 0x0000003au, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, + 0x000400f6u, 0x0000007du, 0x0000007eu, 0x00000000u, 0x000200f9u, 0x0000007fu, 0x000200f8u, 0x0000007fu, + 0x0004003du, 0x00000006u, 0x00000080u, 0x0000005fu, 0x000500c7u, 0x00000006u, 0x00000082u, 0x00000080u, + 0x00000081u, 0x000500aau, 0x00000030u, 0x00000083u, 0x00000082u, 0x0000003au, 0x000400fau, 0x00000083u, + 0x0000007cu, 0x0000007du, 0x000200f8u, 0x0000007cu, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005fu, + 0x000500c4u, 0x00000006u, 0x00000086u, 0x00000085u, 0x00000084u, 0x0003003eu, 0x0000005fu, 0x00000086u, + 0x0004003du, 0x00000006u, 0x00000087u, 0x0000007au, 0x00050080u, 0x00000006u, 0x00000088u, 0x00000087u, + 0x0000004au, 0x0003003eu, 0x0000007au, 0x00000088u, 0x000200f9u, 0x0000007eu, 0x000200f8u, 0x0000007eu, + 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000089u, 0x0000005fu, + 0x000500c7u, 0x00000006u, 0x0000008au, 0x00000089u, 0x00000061u, 0x0003003eu, 0x0000005fu, 0x0000008au, + 0x0004003du, 0x00000006u, 0x0000008bu, 0x00000054u, 0x0004003du, 0x00000006u, 0x0000008du, 0x0000007au, + 0x00050082u, 0x00000006u, 0x0000008eu, 0x0000008cu, 0x0000008du, 0x000500c4u, 0x00000006u, 0x00000090u, + 0x0000008eu, 0x0000008fu, 0x000500c5u, 0x00000006u, 0x00000091u, 0x0000008bu, 0x00000090u, 0x0004003du, + 0x00000006u, 0x00000092u, 0x0000005fu, 0x000500c4u, 0x00000006u, 0x00000093u, 0x00000092u, 0x0000006au, + 0x000500c5u, 0x00000006u, 0x00000094u, 0x00000091u, 0x00000093u, 0x0004007cu, 0x00000008u, 0x00000095u, + 0x00000094u, 0x000200feu, 0x00000095u, 0x000200f8u, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000097u, + 0x00000054u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000059u, 0x00050080u, 0x00000006u, 0x0000009au, + 0x00000098u, 0x00000099u, 0x000500c4u, 0x00000006u, 0x0000009bu, 0x0000009au, 0x0000008fu, 0x000500c5u, + 0x00000006u, 0x0000009cu, 0x00000097u, 0x0000009bu, 0x0004003du, 0x00000006u, 0x0000009du, 0x0000005fu, + 0x000500c4u, 0x00000006u, 0x0000009eu, 0x0000009du, 0x0000006au, 0x000500c5u, 0x00000006u, 0x0000009fu, + 0x0000009cu, 0x0000009eu, 0x0004007cu, 0x00000008u, 0x000000a0u, 0x0000009fu, 0x000200feu, 0x000000a0u, + 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, + 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000a3u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000aau, 0x00000007u, 0x0004003bu, + 0x000000afu, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b7u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e5u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000eeu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000110u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000117u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a4u, 0x00000015u, 0x0004007cu, + 0x00000006u, 0x000000a5u, 0x000000a4u, 0x0003003eu, 0x000000a3u, 0x000000a5u, 0x0004003du, 0x00000006u, + 0x000000a7u, 0x000000a3u, 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x00000028u, 0x000500c7u, + 0x00000006u, 0x000000a9u, 0x000000a8u, 0x00000056u, 0x0003003eu, 0x000000a6u, 0x000000a9u, 0x0004003du, + 0x00000006u, 0x000000abu, 0x000000a3u, 0x000500c2u, 0x00000006u, 0x000000acu, 0x000000abu, 0x0000008fu, + 0x000500c7u, 0x00000006u, 0x000000aeu, 0x000000acu, 0x000000adu, 0x0003003eu, 0x000000aau, 0x000000aeu, + 0x0004003du, 0x00000006u, 0x000000b1u, 0x000000aau, 0x0004007cu, 0x00000027u, 0x000000b2u, 0x000000b1u, + 0x00050082u, 0x00000027u, 0x000000b4u, 0x000000b2u, 0x000000b3u, 0x00050080u, 0x00000027u, 0x000000b6u, + 0x000000b4u, 0x000000b5u, 0x0003003eu, 0x000000b0u, 0x000000b6u, 0x0004003du, 0x00000006u, 0x000000b8u, + 0x000000a3u, 0x000500c7u, 0x00000006u, 0x000000b9u, 0x000000b8u, 0x00000038u, 0x0003003eu, 0x000000b7u, + 0x000000b9u, 0x0004003du, 0x00000006u, 0x000000bau, 0x000000aau, 0x000500aau, 0x00000030u, 0x000000bbu, + 0x000000bau, 0x000000adu, 0x000300f7u, 0x000000bdu, 0x00000000u, 0x000400fau, 0x000000bbu, 0x000000bcu, + 0x000000bdu, 0x000200f8u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x000000beu, 0x000000a6u, 0x000500c5u, + 0x00000006u, 0x000000c0u, 0x000000beu, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000000c1u, 0x000000b7u, + 0x000500abu, 0x00000030u, 0x000000c2u, 0x000000c1u, 0x0000003au, 0x000300f7u, 0x000000c5u, 0x00000000u, + 0x000400fau, 0x000000c2u, 0x000000c4u, 0x000000cau, 0x000200f8u, 0x000000c4u, 0x0004003du, 0x00000006u, + 0x000000c7u, 0x000000b7u, 0x000500c2u, 0x00000006u, 0x000000c8u, 0x000000c7u, 0x0000006au, 0x000500c5u, + 0x00000006u, 0x000000c9u, 0x000000c6u, 0x000000c8u, 0x0003003eu, 0x000000c3u, 0x000000c9u, 0x000200f9u, + 0x000000c5u, 0x000200f8u, 0x000000cau, 0x0003003eu, 0x000000c3u, 0x0000003au, 0x000200f9u, 0x000000c5u, + 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000cbu, 0x000000c3u, 0x000500c5u, 0x00000006u, + 0x000000ccu, 0x000000c0u, 0x000000cbu, 0x000200feu, 0x000000ccu, 0x000200f8u, 0x000000bdu, 0x0004003du, + 0x00000027u, 0x000000ceu, 0x000000b0u, 0x000500afu, 0x00000030u, 0x000000d0u, 0x000000ceu, 0x000000cfu, + 0x000300f7u, 0x000000d2u, 0x00000000u, 0x000400fau, 0x000000d0u, 0x000000d1u, 0x000000d2u, 0x000200f8u, + 0x000000d1u, 0x0004003du, 0x00000006u, 0x000000d3u, 0x000000a6u, 0x000500c5u, 0x00000006u, 0x000000d4u, + 0x000000d3u, 0x000000bfu, 0x000200feu, 0x000000d4u, 0x000200f8u, 0x000000d2u, 0x0004003du, 0x00000027u, + 0x000000d6u, 0x000000b0u, 0x000500b3u, 0x00000030u, 0x000000d8u, 0x000000d6u, 0x000000d7u, 0x000300f7u, + 0x000000dau, 0x00000000u, 0x000400fau, 0x000000d8u, 0x000000d9u, 0x000000dau, 0x000200f8u, 0x000000d9u, + 0x0004003du, 0x00000027u, 0x000000dbu, 0x000000b0u, 0x000500b1u, 0x00000030u, 0x000000ddu, 0x000000dbu, + 0x000000dcu, 0x000300f7u, 0x000000dfu, 0x00000000u, 0x000400fau, 0x000000ddu, 0x000000deu, 0x000000dfu, + 0x000200f8u, 0x000000deu, 0x0004003du, 0x00000006u, 0x000000e0u, 0x000000a6u, 0x000200feu, 0x000000e0u, + 0x000200f8u, 0x000000dfu, 0x0004003du, 0x00000006u, 0x000000e3u, 0x000000b7u, 0x000500c5u, 0x00000006u, + 0x000000e4u, 0x000000e3u, 0x000000e2u, 0x0003003eu, 0x000000b7u, 0x000000e4u, 0x0004003du, 0x00000027u, + 0x000000e7u, 0x000000b0u, 0x00050082u, 0x00000027u, 0x000000e8u, 0x000000e6u, 0x000000e7u, 0x0004007cu, + 0x00000006u, 0x000000e9u, 0x000000e8u, 0x0003003eu, 0x000000e5u, 0x000000e9u, 0x0004003du, 0x00000006u, + 0x000000ebu, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000ecu, 0x000000e5u, 0x000500c2u, 0x00000006u, + 0x000000edu, 0x000000ebu, 0x000000ecu, 0x0003003eu, 0x000000eau, 0x000000edu, 0x0004003du, 0x00000006u, + 0x000000efu, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000f0u, 0x000000e5u, 0x000500c4u, 0x00000006u, + 0x000000f1u, 0x0000004au, 0x000000f0u, 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x0000004au, + 0x000500c7u, 0x00000006u, 0x000000f3u, 0x000000efu, 0x000000f2u, 0x0003003eu, 0x000000eeu, 0x000000f3u, + 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000e5u, 0x00050082u, 0x00000006u, 0x000000f6u, 0x000000f5u, + 0x0000004au, 0x000500c4u, 0x00000006u, 0x000000f7u, 0x0000004au, 0x000000f6u, 0x0003003eu, 0x000000f4u, + 0x000000f7u, 0x0004003du, 0x00000006u, 0x000000f8u, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f9u, + 0x000000f4u, 0x000500acu, 0x00000030u, 0x000000fau, 0x000000f8u, 0x000000f9u, 0x000400a8u, 0x00000030u, + 0x000000fbu, 0x000000fau, 0x000300f7u, 0x000000fdu, 0x00000000u, 0x000400fau, 0x000000fbu, 0x000000fcu, + 0x000000fdu, 0x000200f8u, 0x000000fcu, 0x0004003du, 0x00000006u, 0x000000feu, 0x000000eeu, 0x0004003du, + 0x00000006u, 0x000000ffu, 0x000000f4u, 0x000500aau, 0x00000030u, 0x00000100u, 0x000000feu, 0x000000ffu, + 0x000300f7u, 0x00000102u, 0x00000000u, 0x000400fau, 0x00000100u, 0x00000101u, 0x00000102u, 0x000200f8u, + 0x00000101u, 0x0004003du, 0x00000006u, 0x00000103u, 0x000000eau, 0x000500c7u, 0x00000006u, 0x00000104u, + 0x00000103u, 0x0000004au, 0x000500abu, 0x00000030u, 0x00000105u, 0x00000104u, 0x0000003au, 0x000200f9u, + 0x00000102u, 0x000200f8u, 0x00000102u, 0x000700f5u, 0x00000030u, 0x00000106u, 0x00000100u, 0x000000fcu, + 0x00000105u, 0x00000101u, 0x000200f9u, 0x000000fdu, 0x000200f8u, 0x000000fdu, 0x000700f5u, 0x00000030u, + 0x00000107u, 0x000000fau, 0x000000dfu, 0x00000106u, 0x00000102u, 0x000300f7u, 0x00000109u, 0x00000000u, + 0x000400fau, 0x00000107u, 0x00000108u, 0x00000109u, 0x000200f8u, 0x00000108u, 0x0004003du, 0x00000006u, + 0x0000010au, 0x000000eau, 0x00050080u, 0x00000006u, 0x0000010bu, 0x0000010au, 0x0000004au, 0x0003003eu, + 0x000000eau, 0x0000010bu, 0x000200f9u, 0x00000109u, 0x000200f8u, 0x00000109u, 0x0004003du, 0x00000006u, + 0x0000010cu, 0x000000a6u, 0x0004003du, 0x00000006u, 0x0000010du, 0x000000eau, 0x000500c5u, 0x00000006u, + 0x0000010eu, 0x0000010cu, 0x0000010du, 0x000200feu, 0x0000010eu, 0x000200f8u, 0x000000dau, 0x0004003du, + 0x00000027u, 0x00000111u, 0x000000b0u, 0x0004007cu, 0x00000006u, 0x00000112u, 0x00000111u, 0x000500c4u, + 0x00000006u, 0x00000113u, 0x00000112u, 0x0000005bu, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b7u, + 0x000500c2u, 0x00000006u, 0x00000115u, 0x00000114u, 0x0000006au, 0x000500c5u, 0x00000006u, 0x00000116u, + 0x00000113u, 0x00000115u, 0x0003003eu, 0x00000110u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000118u, + 0x000000b7u, 0x000500c7u, 0x00000006u, 0x0000011au, 0x00000118u, 0x00000119u, 0x0003003eu, 0x00000117u, + 0x0000011au, 0x0004003du, 0x00000006u, 0x0000011bu, 0x00000117u, 0x000500acu, 0x00000030u, 0x0000011du, + 0x0000011bu, 0x0000011cu, 0x000400a8u, 0x00000030u, 0x0000011eu, 0x0000011du, 0x000300f7u, 0x00000120u, + 0x00000000u, 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, + 0x00000006u, 0x00000121u, 0x00000117u, 0x000500aau, 0x00000030u, 0x00000122u, 0x00000121u, 0x0000011cu, + 0x000300f7u, 0x00000124u, 0x00000000u, 0x000400fau, 0x00000122u, 0x00000123u, 0x00000124u, 0x000200f8u, + 0x00000123u, 0x0004003du, 0x00000006u, 0x00000125u, 0x00000110u, 0x000500c7u, 0x00000006u, 0x00000126u, + 0x00000125u, 0x0000004au, 0x000500abu, 0x00000030u, 0x00000127u, 0x00000126u, 0x0000003au, 0x000200f9u, + 0x00000124u, 0x000200f8u, 0x00000124u, 0x000700f5u, 0x00000030u, 0x00000128u, 0x00000122u, 0x0000011fu, + 0x00000127u, 0x00000123u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, 0x00000030u, + 0x00000129u, 0x0000011du, 0x000000dau, 0x00000128u, 0x00000124u, 0x000300f7u, 0x0000012bu, 0x00000000u, + 0x000400fau, 0x00000129u, 0x0000012au, 0x0000012bu, 0x000200f8u, 0x0000012au, 0x0004003du, 0x00000006u, + 0x0000012cu, 0x00000110u, 0x00050080u, 0x00000006u, 0x0000012du, 0x0000012cu, 0x0000004au, 0x0003003eu, + 0x00000110u, 0x0000012du, 0x000200f9u, 0x0000012bu, 0x000200f8u, 0x0000012bu, 0x0004003du, 0x00000006u, + 0x0000012eu, 0x000000a6u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x00000110u, 0x000500c5u, 0x00000006u, + 0x00000130u, 0x0000012eu, 0x0000012fu, 0x000200feu, 0x00000130u, 0x00010038u, 0x00050036u, 0x00000008u, + 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, + 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000135u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013cu, 0x00000007u, 0x0004003du, + 0x00000006u, 0x00000133u, 0x0000001au, 0x000500aau, 0x00000030u, 0x00000134u, 0x00000133u, 0x0000004au, + 0x000300f7u, 0x00000137u, 0x00000000u, 0x000400fau, 0x00000134u, 0x00000136u, 0x0000013bu, 0x000200f8u, + 0x00000136u, 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, + 0x00050039u, 0x00000008u, 0x0000013au, 0x00000013u, 0x00000138u, 0x0003003eu, 0x00000135u, 0x0000013au, + 0x000200f9u, 0x00000137u, 0x000200f8u, 0x0000013bu, 0x0004003du, 0x00000006u, 0x0000013du, 0x00000019u, + 0x0003003eu, 0x0000013cu, 0x0000013du, 0x00050039u, 0x00000008u, 0x0000013eu, 0x0000000bu, 0x0000013cu, + 0x0003003eu, 0x00000135u, 0x0000013eu, 0x000200f9u, 0x00000137u, 0x000200f8u, 0x00000137u, 0x0004003du, + 0x00000008u, 0x0000013fu, 0x00000135u, 0x000200feu, 0x0000013fu, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, + 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000144u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014bu, 0x00000007u, 0x0004003du, + 0x00000006u, 0x00000142u, 0x0000001fu, 0x000500aau, 0x00000030u, 0x00000143u, 0x00000142u, 0x0000004au, + 0x000300f7u, 0x00000146u, 0x00000000u, 0x000400fau, 0x00000143u, 0x00000145u, 0x0000014au, 0x000200f8u, + 0x00000145u, 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, + 0x00050039u, 0x00000006u, 0x00000149u, 0x00000016u, 0x00000147u, 0x0003003eu, 0x00000144u, 0x00000149u, + 0x000200f9u, 0x00000146u, 0x000200f8u, 0x0000014au, 0x0004003du, 0x00000008u, 0x0000014cu, 0x0000001eu, + 0x0003003eu, 0x0000014bu, 0x0000014cu, 0x00050039u, 0x00000006u, 0x0000014du, 0x00000010u, 0x0000014bu, + 0x0003003eu, 0x00000144u, 0x0000014du, 0x000200f9u, 0x00000146u, 0x000200f8u, 0x00000146u, 0x0004003du, + 0x00000006u, 0x0000014eu, 0x00000144u, 0x000200feu, 0x0000014eu, 0x00010038u, 0x00050036u, 0x00000008u, + 0x00000024u, 0x00000000u, 0x00000022u, 0x00030037u, 0x0000000du, 0x00000023u, 0x000200f8u, 0x00000025u, + 0x0004003du, 0x00000008u, 0x00000152u, 0x00000023u, 0x0004007fu, 0x00000008u, 0x00000153u, 0x00000152u, + 0x0006000cu, 0x00000008u, 0x00000154u, 0x00000001u, 0x0000001bu, 0x00000153u, 0x00050081u, 0x00000008u, + 0x00000155u, 0x00000151u, 0x00000154u, 0x00050088u, 0x00000008u, 0x00000156u, 0x00000151u, 0x00000155u, + 0x000200feu, 0x00000156u, 0x00010038u, +}; + +constexpr uint32_t kSpecIds_vt_cast[] = { + 0u, 1u, +}; + +} // namespace + +const SpirvModule kSpirvModules[] = { + {"vt_add", kSpv_vt_add, sizeof(kSpv_vt_add) / sizeof(uint32_t), nullptr, 0}, + {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t), kSpecIds_vt_cast, 2}, + {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t), nullptr, 0}, + {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, + {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, + {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t), nullptr, 0}, + {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t), nullptr, 0}, +}; +const size_t kSpirvModuleCount = sizeof(kSpirvModules) / sizeof(kSpirvModules[0]); + +} // namespace vt::vulkan diff --git a/src/vt/vulkan/vulkan_spirv.h b/src/vt/vulkan/vulkan_spirv.h index bdb05a5a..b7623bf9 100644 --- a/src/vt/vulkan/vulkan_spirv.h +++ b/src/vt/vulkan/vulkan_spirv.h @@ -1,17 +1,22 @@ -// GENERATED FILE — DO NOT EDIT BY HAND. +// GENERATED FILE - DO NOT EDIT BY HAND. // Regenerate with: scripts/gen-vulkan-spirv.py // -// SPIR-V for the Vulkan backend's compute kernels (BACKEND-VULKAN, W0), +// SPIR-V for the Vulkan backend's compute kernels (BACKEND-VULKAN), // compiled from the GLSL in src/vt/vulkan/shaders/*.comp. // // WHY THE SPIR-V IS COMMITTED rather than compiled by the build, as -// llama.cpp's vulkan-shaders-gen does at build time: neither of our boxes -// has a GLSL compiler (no glslc/glslangValidator/libshaderc, no sudo), and -// libshaderc would be a compiled third-party dependency, which -// .agents/discipline.md forbids. Committing the SPIR-V makes the build -// hermetic everywhere — including CI and the aarch64 gate box — at the cost -// of re-running the generator when a .comp changes. See the generator's -// docstring for the full rationale. +// llama.cpp's vulkan-shaders-gen does at build time: the build then needs NO +// shader toolchain on any machine, which is hermetic everywhere including CI +// and the aarch64 gate box. libshaderc would also be a compiled third-party +// dependency, which .agents/discipline.md forbids. The cost is an obligation +// to re-run this generator when a .comp changes, which the +// vulkan-spirv-freshness CI job enforces. +// +// WHY THE WORDS LIVE IN THE .cpp AND NOT THE HEADER (VK-A1): at the target +// shader surface the blobs are megabytes of array initializer, and anything in +// the header is re-parsed by every including TU. The header carries the struct +// and extern declarations; vulkan_spirv.cpp carries the data, so adding shaders +// costs one TU's compile time rather than all of them. // // Produced by: Glslang Version: 11:16.5.0 // Target environment: vulkan1.1 @@ -23,3456 +28,14 @@ namespace vt::vulkan { -inline constexpr uint32_t kSpv_vt_add[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001f0u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, - 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, - 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, - 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, - 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, - 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000155u, - 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000155u, 0x00000006u, 0x00000023u, 0x00000018u, - 0x00050048u, 0x00000155u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000155u, 0x00000008u, - 0x00000023u, 0x00000020u, 0x00040047u, 0x00000176u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000177u, - 0x00000002u, 0x00040048u, 0x00000177u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000177u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x00000179u, 0x00000018u, 0x00040047u, 0x00000179u, 0x00000021u, - 0x00000000u, 0x00040047u, 0x00000179u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000186u, 0x00000006u, - 0x00000002u, 0x00030047u, 0x00000187u, 0x00000002u, 0x00040048u, 0x00000187u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x00000187u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000189u, 0x00000018u, - 0x00040047u, 0x00000189u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000189u, 0x00000022u, 0x00000000u, - 0x00040047u, 0x000001a0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001a1u, 0x00000002u, 0x00040048u, - 0x000001a1u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a1u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x000001a3u, 0x00000018u, 0x00040047u, 0x000001a3u, 0x00000021u, 0x00000002u, 0x00040047u, - 0x000001a3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001aeu, 0x00000006u, 0x00000002u, 0x00030047u, - 0x000001afu, 0x00000002u, 0x00040048u, 0x000001afu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001afu, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b1u, 0x00000018u, 0x00040047u, 0x000001b1u, - 0x00000021u, 0x00000003u, 0x00040047u, 0x000001b1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001cbu, - 0x00000006u, 0x00000004u, 0x00030047u, 0x000001ccu, 0x00000002u, 0x00050048u, 0x000001ccu, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00040047u, 0x000001ceu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000001ceu, - 0x00000022u, 0x00000000u, 0x00040047u, 0x000001d9u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001dau, - 0x00000002u, 0x00050048u, 0x000001dau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001dcu, - 0x00000021u, 0x00000005u, 0x00040047u, 0x000001dcu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001efu, - 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, - 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, - 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, - 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, - 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, - 0x00040015u, 0x00000023u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, - 0x00020014u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, - 0x00000034u, 0x007fffffu, 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, - 0x0000003du, 0x00000040u, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, - 0x00000043u, 0x00007fffu, 0x0004002bu, 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, - 0x00000052u, 0x00008000u, 0x0004002bu, 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, - 0x00000059u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, - 0x00000066u, 0x0000000du, 0x0004002bu, 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, - 0x00000080u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, - 0x0000008bu, 0x00000017u, 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, - 0x000000a9u, 0x000000ffu, 0x00040020u, 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, - 0x000000afu, 0x0000007fu, 0x0004002bu, 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, - 0x000000bbu, 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, - 0x000000cbu, 0x0000001fu, 0x0004002bu, 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, - 0x000000d8u, 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, - 0x000000e2u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, - 0x00000118u, 0x00001000u, 0x00040017u, 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, - 0x00000001u, 0x0000014eu, 0x0004003bu, 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, - 0x00000001u, 0x00000006u, 0x000b001eu, 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, - 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, - 0x00000006u, 0x0004002bu, 0x00000023u, 0x00000160u, 0x00000005u, 0x0004002bu, 0x00000023u, 0x0000016fu, - 0x00000002u, 0x0003001du, 0x00000176u, 0x00000006u, 0x0003001eu, 0x00000177u, 0x00000176u, 0x00040020u, - 0x00000178u, 0x0000000cu, 0x00000177u, 0x0004003bu, 0x00000178u, 0x00000179u, 0x0000000cu, 0x0004002bu, - 0x00000023u, 0x0000017au, 0x00000006u, 0x00040020u, 0x00000180u, 0x0000000cu, 0x00000006u, 0x00040015u, - 0x00000185u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000186u, 0x00000185u, 0x0003001eu, 0x00000187u, - 0x00000186u, 0x00040020u, 0x00000188u, 0x0000000cu, 0x00000187u, 0x0004003bu, 0x00000188u, 0x00000189u, - 0x0000000cu, 0x00040020u, 0x0000018fu, 0x0000000cu, 0x00000185u, 0x0004002bu, 0x00000023u, 0x00000199u, - 0x00000003u, 0x0003001du, 0x000001a0u, 0x00000006u, 0x0003001eu, 0x000001a1u, 0x000001a0u, 0x00040020u, - 0x000001a2u, 0x0000000cu, 0x000001a1u, 0x0004003bu, 0x000001a2u, 0x000001a3u, 0x0000000cu, 0x0004002bu, - 0x00000023u, 0x000001a4u, 0x00000007u, 0x0003001du, 0x000001aeu, 0x00000185u, 0x0003001eu, 0x000001afu, - 0x000001aeu, 0x00040020u, 0x000001b0u, 0x0000000cu, 0x000001afu, 0x0004003bu, 0x000001b0u, 0x000001b1u, - 0x0000000cu, 0x0004002bu, 0x00000023u, 0x000001c5u, 0x00000004u, 0x0003001du, 0x000001cbu, 0x00000006u, - 0x0003001eu, 0x000001ccu, 0x000001cbu, 0x00040020u, 0x000001cdu, 0x0000000cu, 0x000001ccu, 0x0004003bu, - 0x000001cdu, 0x000001ceu, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x000001cfu, 0x00000008u, 0x0003001du, - 0x000001d9u, 0x00000185u, 0x0003001eu, 0x000001dau, 0x000001d9u, 0x00040020u, 0x000001dbu, 0x0000000cu, - 0x000001dau, 0x0004003bu, 0x000001dbu, 0x000001dcu, 0x0000000cu, 0x0003002au, 0x0000002cu, 0x000001eau, - 0x0004002bu, 0x00000006u, 0x000001ebu, 0x00000080u, 0x0004001cu, 0x000001ecu, 0x00000008u, 0x000001ebu, - 0x00040020u, 0x000001edu, 0x00000004u, 0x000001ecu, 0x0004003bu, 0x000001edu, 0x000001eeu, 0x00000004u, - 0x0006002cu, 0x0000014eu, 0x000001efu, 0x000001ebu, 0x00000046u, 0x00000046u, 0x00050036u, 0x00000002u, - 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000015fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000164u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000016eu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000173u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000193u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000194u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000019du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bau, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bbu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e2u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001e4u, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, - 0x00000150u, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, - 0x00000153u, 0x0004003du, 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, - 0x00000157u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x000500aeu, 0x0000002cu, - 0x0000015bu, 0x00000154u, 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, - 0x0000015cu, 0x0000015du, 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, 0x0000015du, 0x00050041u, - 0x00000158u, 0x00000161u, 0x00000157u, 0x00000160u, 0x0004003du, 0x00000006u, 0x00000162u, 0x00000161u, - 0x000500abu, 0x0000002cu, 0x00000163u, 0x00000162u, 0x00000036u, 0x000300f7u, 0x00000166u, 0x00000000u, - 0x000400fau, 0x00000163u, 0x00000165u, 0x0000016bu, 0x000200f8u, 0x00000165u, 0x0004003du, 0x00000006u, - 0x00000167u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000168u, 0x00000157u, 0x00000080u, 0x0004003du, - 0x00000006u, 0x00000169u, 0x00000168u, 0x00050089u, 0x00000006u, 0x0000016au, 0x00000167u, 0x00000169u, - 0x0003003eu, 0x00000164u, 0x0000016au, 0x000200f9u, 0x00000166u, 0x000200f8u, 0x0000016bu, 0x0004003du, - 0x00000006u, 0x0000016cu, 0x0000014du, 0x0003003eu, 0x00000164u, 0x0000016cu, 0x000200f9u, 0x00000166u, - 0x000200f8u, 0x00000166u, 0x0004003du, 0x00000006u, 0x0000016du, 0x00000164u, 0x0003003eu, 0x0000015fu, - 0x0000016du, 0x00050041u, 0x00000158u, 0x00000170u, 0x00000157u, 0x0000016fu, 0x0004003du, 0x00000006u, - 0x00000171u, 0x00000170u, 0x000500aau, 0x0000002cu, 0x00000172u, 0x00000171u, 0x00000036u, 0x000300f7u, - 0x00000175u, 0x00000000u, 0x000400fau, 0x00000172u, 0x00000174u, 0x00000184u, 0x000200f8u, 0x00000174u, - 0x00050041u, 0x00000158u, 0x0000017bu, 0x00000157u, 0x0000017au, 0x0004003du, 0x00000006u, 0x0000017cu, - 0x0000017bu, 0x000500c2u, 0x00000006u, 0x0000017du, 0x0000017cu, 0x0000016fu, 0x0004003du, 0x00000006u, - 0x0000017eu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000017fu, 0x0000017du, 0x0000017eu, 0x00060041u, - 0x00000180u, 0x00000181u, 0x00000179u, 0x000000d3u, 0x0000017fu, 0x0004003du, 0x00000006u, 0x00000182u, - 0x00000181u, 0x0004007cu, 0x00000008u, 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000173u, 0x00000183u, - 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000184u, 0x00050041u, 0x00000158u, 0x0000018au, 0x00000157u, - 0x0000017au, 0x0004003du, 0x00000006u, 0x0000018bu, 0x0000018au, 0x000500c2u, 0x00000006u, 0x0000018cu, - 0x0000018bu, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000018du, 0x0000014du, 0x00050080u, 0x00000006u, - 0x0000018eu, 0x0000018cu, 0x0000018du, 0x00060041u, 0x0000018fu, 0x00000190u, 0x00000189u, 0x000000d3u, - 0x0000018eu, 0x0004003du, 0x00000185u, 0x00000191u, 0x00000190u, 0x00040071u, 0x00000006u, 0x00000192u, - 0x00000191u, 0x0003003eu, 0x00000193u, 0x00000192u, 0x00050041u, 0x00000158u, 0x00000195u, 0x00000157u, - 0x0000016fu, 0x0004003du, 0x00000006u, 0x00000196u, 0x00000195u, 0x0003003eu, 0x00000194u, 0x00000196u, - 0x00060039u, 0x00000008u, 0x00000197u, 0x0000001bu, 0x00000193u, 0x00000194u, 0x0003003eu, 0x00000173u, - 0x00000197u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000175u, 0x0004003du, 0x00000008u, 0x00000198u, - 0x00000173u, 0x00050041u, 0x00000158u, 0x0000019au, 0x00000157u, 0x00000199u, 0x0004003du, 0x00000006u, - 0x0000019bu, 0x0000019au, 0x000500aau, 0x0000002cu, 0x0000019cu, 0x0000019bu, 0x00000036u, 0x000300f7u, - 0x0000019fu, 0x00000000u, 0x000400fau, 0x0000019cu, 0x0000019eu, 0x000001adu, 0x000200f8u, 0x0000019eu, - 0x00050041u, 0x00000158u, 0x000001a5u, 0x00000157u, 0x000001a4u, 0x0004003du, 0x00000006u, 0x000001a6u, - 0x000001a5u, 0x000500c2u, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x0000016fu, 0x0004003du, 0x00000006u, - 0x000001a8u, 0x0000015fu, 0x00050080u, 0x00000006u, 0x000001a9u, 0x000001a7u, 0x000001a8u, 0x00060041u, - 0x00000180u, 0x000001aau, 0x000001a3u, 0x000000d3u, 0x000001a9u, 0x0004003du, 0x00000006u, 0x000001abu, - 0x000001aau, 0x0004007cu, 0x00000008u, 0x000001acu, 0x000001abu, 0x0003003eu, 0x0000019du, 0x000001acu, - 0x000200f9u, 0x0000019fu, 0x000200f8u, 0x000001adu, 0x00050041u, 0x00000158u, 0x000001b2u, 0x00000157u, - 0x000001a4u, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001b2u, 0x000500c2u, 0x00000006u, 0x000001b4u, - 0x000001b3u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001b5u, 0x0000015fu, 0x00050080u, 0x00000006u, - 0x000001b6u, 0x000001b4u, 0x000001b5u, 0x00060041u, 0x0000018fu, 0x000001b7u, 0x000001b1u, 0x000000d3u, - 0x000001b6u, 0x0004003du, 0x00000185u, 0x000001b8u, 0x000001b7u, 0x00040071u, 0x00000006u, 0x000001b9u, - 0x000001b8u, 0x0003003eu, 0x000001bau, 0x000001b9u, 0x00050041u, 0x00000158u, 0x000001bcu, 0x00000157u, - 0x00000199u, 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001bcu, 0x0003003eu, 0x000001bbu, 0x000001bdu, - 0x00060039u, 0x00000008u, 0x000001beu, 0x0000001bu, 0x000001bau, 0x000001bbu, 0x0003003eu, 0x0000019du, - 0x000001beu, 0x000200f9u, 0x0000019fu, 0x000200f8u, 0x0000019fu, 0x0004003du, 0x00000008u, 0x000001bfu, - 0x0000019du, 0x00050081u, 0x00000008u, 0x000001c0u, 0x00000198u, 0x000001bfu, 0x0003003eu, 0x0000016eu, - 0x000001c0u, 0x000200f9u, 0x000001c1u, 0x000200f8u, 0x000001c1u, 0x000400f6u, 0x000001c3u, 0x000001c4u, - 0x00000000u, 0x000200f9u, 0x000001c2u, 0x000200f8u, 0x000001c2u, 0x00050041u, 0x00000158u, 0x000001c6u, - 0x00000157u, 0x000001c5u, 0x0004003du, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x000500aau, 0x0000002cu, - 0x000001c8u, 0x000001c7u, 0x00000036u, 0x000300f7u, 0x000001cau, 0x00000000u, 0x000400fau, 0x000001c8u, - 0x000001c9u, 0x000001d8u, 0x000200f8u, 0x000001c9u, 0x00050041u, 0x00000158u, 0x000001d0u, 0x00000157u, - 0x000001cfu, 0x0004003du, 0x00000006u, 0x000001d1u, 0x000001d0u, 0x000500c2u, 0x00000006u, 0x000001d2u, - 0x000001d1u, 0x0000016fu, 0x0004003du, 0x00000006u, 0x000001d3u, 0x0000014du, 0x00050080u, 0x00000006u, - 0x000001d4u, 0x000001d2u, 0x000001d3u, 0x0004003du, 0x00000008u, 0x000001d5u, 0x0000016eu, 0x0004007cu, - 0x00000006u, 0x000001d6u, 0x000001d5u, 0x00060041u, 0x00000180u, 0x000001d7u, 0x000001ceu, 0x000000d3u, - 0x000001d4u, 0x0003003eu, 0x000001d7u, 0x000001d6u, 0x000200f9u, 0x000001cau, 0x000200f8u, 0x000001d8u, - 0x00050041u, 0x00000158u, 0x000001ddu, 0x00000157u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x000001deu, - 0x000001ddu, 0x000500c2u, 0x00000006u, 0x000001dfu, 0x000001deu, 0x00000080u, 0x0004003du, 0x00000006u, - 0x000001e0u, 0x0000014du, 0x00050080u, 0x00000006u, 0x000001e1u, 0x000001dfu, 0x000001e0u, 0x0004003du, - 0x00000008u, 0x000001e3u, 0x0000016eu, 0x0003003eu, 0x000001e2u, 0x000001e3u, 0x00050041u, 0x00000158u, - 0x000001e5u, 0x00000157u, 0x000001c5u, 0x0004003du, 0x00000006u, 0x000001e6u, 0x000001e5u, 0x0003003eu, - 0x000001e4u, 0x000001e6u, 0x00060039u, 0x00000006u, 0x000001e7u, 0x00000020u, 0x000001e2u, 0x000001e4u, - 0x00040071u, 0x00000185u, 0x000001e8u, 0x000001e7u, 0x00060041u, 0x0000018fu, 0x000001e9u, 0x000001dcu, - 0x000000d3u, 0x000001e1u, 0x0003003eu, 0x000001e9u, 0x000001e8u, 0x000200f9u, 0x000001cau, 0x000200f8u, - 0x000001cau, 0x000200f9u, 0x000001c4u, 0x000200f8u, 0x000001c4u, 0x000400fau, 0x000001eau, 0x000001c1u, - 0x000001c3u, 0x000200f8u, 0x000001c3u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, - 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, - 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, - 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, - 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, - 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, - 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, - 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, - 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, - 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, - 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, - 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, - 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, - 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, - 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, - 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, - 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, - 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, - 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, - 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, - 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, - 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, - 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, - 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, - 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, - 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, - 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, - 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, - 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, - 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, - 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, - 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, - 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, - 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, - 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, - 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, - 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, - 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, - 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, - 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, - 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, - 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, - 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, - 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, - 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, - 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, - 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, - 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, - 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, - 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, - 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, - 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, - 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, - 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, - 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, - 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, - 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, - 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, - 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, - 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, - 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, - 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, - 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, - 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, - 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, - 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, - 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, - 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, - 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, - 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, - 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, - 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, - 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, - 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, - 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, - 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, - 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, - 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, - 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, - 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, - 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, - 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, - 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, - 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, - 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, - 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, - 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, - 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, - 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, - 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, - 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, - 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, - 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, - 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, - 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, - 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, - 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, - 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, - 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, - 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, - 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, - 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, - 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, - 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, - 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, - 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, - 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, - 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, - 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, - 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, - 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, - 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, - 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, - 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, - 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, - 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, - 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, - 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, - 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, - 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, - 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, - 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, - 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, - 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, - 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, - 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, - 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, - 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, - 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, - 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, - 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, - 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, - 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, - 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, - 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, - 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, - 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, - 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, - 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, - 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, - 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, - 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, - 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, - 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, - 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, - 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, - 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, - 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, - 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, - 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, - 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, - 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, - 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, - 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, - 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, - 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, - 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, - 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, - 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, - 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, - 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, - 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, - 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, - 0x0000014au, 0x00010038u, -}; - -inline constexpr uint32_t kSpv_vt_cast[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001c6u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, - 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, - 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, - 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, - 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000163u, 0x00000001u, 0x00000001u, - 0x00040047u, 0x00000167u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000168u, 0x00000002u, 0x00050048u, - 0x00000168u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000016au, 0x00000021u, 0x00000002u, - 0x00040047u, 0x0000016au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000171u, 0x00000001u, 0x00000000u, - 0x00040047u, 0x00000176u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000177u, 0x00000002u, 0x00040048u, - 0x00000177u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000177u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x00000179u, 0x00000018u, 0x00040047u, 0x00000179u, 0x00000021u, 0x00000000u, 0x00040047u, - 0x00000179u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000185u, 0x00000006u, 0x00000002u, 0x00030047u, - 0x00000186u, 0x00000002u, 0x00040048u, 0x00000186u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000186u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000188u, 0x00000018u, 0x00040047u, 0x00000188u, - 0x00000021u, 0x00000001u, 0x00040047u, 0x00000188u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000199u, - 0x00000006u, 0x00000002u, 0x00030047u, 0x0000019au, 0x00000002u, 0x00050048u, 0x0000019au, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00040047u, 0x0000019cu, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000019cu, - 0x00000022u, 0x00000000u, 0x00040047u, 0x000001c5u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, - 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, - 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, - 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, - 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, - 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, 0x00000020u, 0x00000001u, - 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, 0x0004002bu, 0x00000006u, - 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, 0x0004002bu, 0x00000006u, - 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, 0x0004002bu, 0x00000006u, - 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, 0x0004002bu, 0x00000006u, - 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, 0x0004002bu, 0x00000023u, - 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, 0x0004002bu, 0x00000006u, - 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, 0x0004002bu, 0x00000006u, - 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, 0x0004002bu, 0x00000006u, - 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, 0x0004002bu, 0x00000006u, - 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, 0x00040020u, 0x000000abu, - 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, 0x0004002bu, 0x00000023u, - 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, 0x0004002bu, 0x00000006u, - 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, 0x0004002bu, 0x00000023u, - 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, 0x0004002bu, 0x00000006u, - 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, 0x0004002bu, 0x00000006u, - 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, 0x00040017u, 0x0000014eu, - 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, 0x0004003bu, 0x0000014fu, - 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, 0x0005001eu, 0x00000155u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, - 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, 0x00000006u, 0x00040032u, - 0x00000006u, 0x00000163u, 0x00000000u, 0x00060034u, 0x0000002cu, 0x00000164u, 0x000000aau, 0x00000163u, - 0x00000036u, 0x0003001du, 0x00000167u, 0x00000006u, 0x0003001eu, 0x00000168u, 0x00000167u, 0x00040020u, - 0x00000169u, 0x0000000cu, 0x00000168u, 0x0004003bu, 0x00000169u, 0x0000016au, 0x0000000cu, 0x0004002bu, - 0x00000023u, 0x0000016bu, 0x00000002u, 0x00040032u, 0x00000006u, 0x00000171u, 0x00000000u, 0x00060034u, - 0x0000002cu, 0x00000172u, 0x000000aau, 0x00000171u, 0x00000036u, 0x0003001du, 0x00000176u, 0x00000006u, - 0x0003001eu, 0x00000177u, 0x00000176u, 0x00040020u, 0x00000178u, 0x0000000cu, 0x00000177u, 0x0004003bu, - 0x00000178u, 0x00000179u, 0x0000000cu, 0x00040020u, 0x0000017fu, 0x0000000cu, 0x00000006u, 0x00040015u, - 0x00000184u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000185u, 0x00000184u, 0x0003001eu, 0x00000186u, - 0x00000185u, 0x00040020u, 0x00000187u, 0x0000000cu, 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, - 0x0000000cu, 0x00040020u, 0x0000018eu, 0x0000000cu, 0x00000184u, 0x0003001du, 0x00000199u, 0x00000184u, - 0x0003001eu, 0x0000019au, 0x00000199u, 0x00040020u, 0x0000019bu, 0x0000000cu, 0x0000019au, 0x0004003bu, - 0x0000019bu, 0x0000019cu, 0x0000000cu, 0x00060034u, 0x0000002cu, 0x000001a2u, 0x000000aau, 0x00000171u, - 0x00000036u, 0x0003002au, 0x0000002cu, 0x000001c0u, 0x0004002bu, 0x00000006u, 0x000001c1u, 0x00000080u, - 0x0004001cu, 0x000001c2u, 0x00000008u, 0x000001c1u, 0x00040020u, 0x000001c3u, 0x00000004u, 0x000001c2u, - 0x0004003bu, 0x000001c3u, 0x000001c4u, 0x00000004u, 0x0006002cu, 0x0000014eu, 0x000001c5u, 0x000001c1u, - 0x00000046u, 0x00000046u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, - 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000173u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000192u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000193u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b7u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b8u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001bau, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bcu, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, - 0x00000150u, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, - 0x00000153u, 0x0004003du, 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, - 0x00000157u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x000500aeu, 0x0000002cu, - 0x0000015bu, 0x00000154u, 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, - 0x0000015cu, 0x0000015du, 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, 0x0000015du, 0x000200f9u, - 0x0000015fu, 0x000200f8u, 0x0000015fu, 0x000400f6u, 0x00000161u, 0x00000162u, 0x00000000u, 0x000200f9u, - 0x00000160u, 0x000200f8u, 0x00000160u, 0x000300f7u, 0x00000166u, 0x00000000u, 0x000400fau, 0x00000164u, - 0x00000165u, 0x00000198u, 0x000200f8u, 0x00000165u, 0x00050041u, 0x00000158u, 0x0000016cu, 0x00000157u, - 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016du, 0x0000016cu, 0x000500c2u, 0x00000006u, 0x0000016eu, - 0x0000016du, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000014du, 0x00050080u, 0x00000006u, - 0x00000170u, 0x0000016eu, 0x0000016fu, 0x000300f7u, 0x00000175u, 0x00000000u, 0x000400fau, 0x00000172u, - 0x00000174u, 0x00000183u, 0x000200f8u, 0x00000174u, 0x00050041u, 0x00000158u, 0x0000017au, 0x00000157u, - 0x00000080u, 0x0004003du, 0x00000006u, 0x0000017bu, 0x0000017au, 0x000500c2u, 0x00000006u, 0x0000017cu, - 0x0000017bu, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000017du, 0x0000014du, 0x00050080u, 0x00000006u, - 0x0000017eu, 0x0000017cu, 0x0000017du, 0x00060041u, 0x0000017fu, 0x00000180u, 0x00000179u, 0x000000d3u, - 0x0000017eu, 0x0004003du, 0x00000006u, 0x00000181u, 0x00000180u, 0x0004007cu, 0x00000008u, 0x00000182u, - 0x00000181u, 0x0003003eu, 0x00000173u, 0x00000182u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000183u, - 0x00050041u, 0x00000158u, 0x00000189u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000018au, - 0x00000189u, 0x000500c2u, 0x00000006u, 0x0000018bu, 0x0000018au, 0x00000080u, 0x0004003du, 0x00000006u, - 0x0000018cu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000018du, 0x0000018bu, 0x0000018cu, 0x00060041u, - 0x0000018eu, 0x0000018fu, 0x00000188u, 0x000000d3u, 0x0000018du, 0x0004003du, 0x00000184u, 0x00000190u, - 0x0000018fu, 0x00040071u, 0x00000006u, 0x00000191u, 0x00000190u, 0x0003003eu, 0x00000192u, 0x00000191u, - 0x0003003eu, 0x00000193u, 0x00000171u, 0x00060039u, 0x00000008u, 0x00000194u, 0x0000001bu, 0x00000192u, - 0x00000193u, 0x0003003eu, 0x00000173u, 0x00000194u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000175u, - 0x0004003du, 0x00000008u, 0x00000195u, 0x00000173u, 0x0004007cu, 0x00000006u, 0x00000196u, 0x00000195u, - 0x00060041u, 0x0000017fu, 0x00000197u, 0x0000016au, 0x000000d3u, 0x00000170u, 0x0003003eu, 0x00000197u, - 0x00000196u, 0x000200f9u, 0x00000166u, 0x000200f8u, 0x00000198u, 0x00050041u, 0x00000158u, 0x0000019du, - 0x00000157u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000019eu, 0x0000019du, 0x000500c2u, 0x00000006u, - 0x0000019fu, 0x0000019eu, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001a0u, 0x0000014du, 0x00050080u, - 0x00000006u, 0x000001a1u, 0x0000019fu, 0x000001a0u, 0x000300f7u, 0x000001a5u, 0x00000000u, 0x000400fau, - 0x000001a2u, 0x000001a4u, 0x000001aeu, 0x000200f8u, 0x000001a4u, 0x00050041u, 0x00000158u, 0x000001a6u, - 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x000500c2u, 0x00000006u, - 0x000001a8u, 0x000001a7u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x000001a9u, 0x0000014du, 0x00050080u, - 0x00000006u, 0x000001aau, 0x000001a8u, 0x000001a9u, 0x00060041u, 0x0000017fu, 0x000001abu, 0x00000179u, - 0x000000d3u, 0x000001aau, 0x0004003du, 0x00000006u, 0x000001acu, 0x000001abu, 0x0004007cu, 0x00000008u, - 0x000001adu, 0x000001acu, 0x0003003eu, 0x000001a3u, 0x000001adu, 0x000200f9u, 0x000001a5u, 0x000200f8u, - 0x000001aeu, 0x00050041u, 0x00000158u, 0x000001afu, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, - 0x000001b0u, 0x000001afu, 0x000500c2u, 0x00000006u, 0x000001b1u, 0x000001b0u, 0x00000080u, 0x0004003du, - 0x00000006u, 0x000001b2u, 0x0000014du, 0x00050080u, 0x00000006u, 0x000001b3u, 0x000001b1u, 0x000001b2u, - 0x00060041u, 0x0000018eu, 0x000001b4u, 0x00000188u, 0x000000d3u, 0x000001b3u, 0x0004003du, 0x00000184u, - 0x000001b5u, 0x000001b4u, 0x00040071u, 0x00000006u, 0x000001b6u, 0x000001b5u, 0x0003003eu, 0x000001b7u, - 0x000001b6u, 0x0003003eu, 0x000001b8u, 0x00000171u, 0x00060039u, 0x00000008u, 0x000001b9u, 0x0000001bu, - 0x000001b7u, 0x000001b8u, 0x0003003eu, 0x000001a3u, 0x000001b9u, 0x000200f9u, 0x000001a5u, 0x000200f8u, - 0x000001a5u, 0x0004003du, 0x00000008u, 0x000001bbu, 0x000001a3u, 0x0003003eu, 0x000001bau, 0x000001bbu, - 0x0003003eu, 0x000001bcu, 0x00000163u, 0x00060039u, 0x00000006u, 0x000001bdu, 0x00000020u, 0x000001bau, - 0x000001bcu, 0x00040071u, 0x00000184u, 0x000001beu, 0x000001bdu, 0x00060041u, 0x0000018eu, 0x000001bfu, - 0x0000019cu, 0x000000d3u, 0x000001a1u, 0x0003003eu, 0x000001bfu, 0x000001beu, 0x000200f9u, 0x00000166u, - 0x000200f8u, 0x00000166u, 0x000200f9u, 0x00000162u, 0x000200f8u, 0x00000162u, 0x000400fau, 0x000001c0u, - 0x0000015fu, 0x00000161u, 0x000200f8u, 0x00000161u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, - 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, - 0x0004003du, 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, - 0x00000024u, 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, - 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, - 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000042u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, - 0x0000002bu, 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, - 0x00000029u, 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, - 0x00000030u, 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, - 0x00000031u, 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, - 0x000500c7u, 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, - 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, - 0x00000038u, 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, - 0x000400fau, 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, - 0x0000003bu, 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, - 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, - 0x0000003fu, 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, - 0x00000029u, 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, - 0x00000047u, 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, - 0x0003003eu, 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, - 0x00000006u, 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, - 0x000500c2u, 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, - 0x0000004cu, 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, - 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, - 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, - 0x00000006u, 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, - 0x000500c4u, 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, - 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, - 0x00000057u, 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, - 0x0000005au, 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, - 0x0000005cu, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, - 0x00000055u, 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, - 0x00000000u, 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, - 0x00000006u, 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, - 0x0004003du, 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, - 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, - 0x00000069u, 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, - 0x0000006bu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, - 0x0000006eu, 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, - 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, - 0x00000036u, 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, - 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, - 0x00000074u, 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, - 0x00000036u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, - 0x00000000u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, - 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, - 0x0000007fu, 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, - 0x00000078u, 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, - 0x00000081u, 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, - 0x00000076u, 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, - 0x00000084u, 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, - 0x00000079u, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, - 0x00000085u, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, - 0x00000050u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, - 0x00000088u, 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, - 0x00000006u, 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, - 0x000500c4u, 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, - 0x0000008du, 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, - 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, - 0x00000094u, 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, - 0x00000006u, 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, - 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, - 0x00000099u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, - 0x00000008u, 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, - 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, - 0x0004003bu, 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, - 0x0004003du, 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, - 0x0003003eu, 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, - 0x00000006u, 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, - 0x00000052u, 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, - 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, - 0x000000a8u, 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, - 0x000000a6u, 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, - 0x000000aeu, 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, - 0x000000acu, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, - 0x000000b5u, 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, - 0x000000b6u, 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, - 0x000000b9u, 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, - 0x0004003du, 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, - 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, - 0x000000bdu, 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, - 0x000000c6u, 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, - 0x00000006u, 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, - 0x000000c4u, 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, - 0x0003003eu, 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, - 0x00000006u, 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, - 0x000200feu, 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, - 0x000500afu, 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, - 0x000400fau, 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, - 0x000000cfu, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, - 0x000000d0u, 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, - 0x0000002cu, 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, - 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, - 0x000000acu, 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, - 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, - 0x00000006u, 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, - 0x00000006u, 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, - 0x0003003eu, 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, - 0x00000023u, 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, - 0x0003003eu, 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, - 0x00000006u, 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, - 0x0003003eu, 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, - 0x00000006u, 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, - 0x00050082u, 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, - 0x000000ebu, 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, - 0x000000e1u, 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, - 0x000000f3u, 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, - 0x000000f4u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, - 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, - 0x000000f9u, 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, - 0x0004003du, 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, - 0x000500aau, 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, - 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, - 0x000000ffu, 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, - 0x0000002cu, 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, - 0x000700f5u, 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, - 0x000000f9u, 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, - 0x00000102u, 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, - 0x00000105u, 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, - 0x00000006u, 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, - 0x00000105u, 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, - 0x00000006u, 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, - 0x000200feu, 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, - 0x0004007cu, 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, - 0x00000057u, 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, - 0x00000110u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, - 0x0000010cu, 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, - 0x00000116u, 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, - 0x00000117u, 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, - 0x0000002cu, 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, - 0x0000011bu, 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, - 0x000500aau, 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, - 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, - 0x00000121u, 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, - 0x0000002cu, 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, - 0x000700f5u, 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, - 0x0000011cu, 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, - 0x00000124u, 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, - 0x00000127u, 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, - 0x00000006u, 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, - 0x00000127u, 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, - 0x00000006u, 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, - 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, - 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, - 0x0004003bu, 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, - 0x000500aau, 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, - 0x000400fau, 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, - 0x00000135u, 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, - 0x00000013u, 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, - 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, - 0x00050039u, 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, - 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, - 0x000200feu, 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, - 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, - 0x0004003bu, 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, - 0x0004003bu, 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, - 0x000500aau, 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, - 0x000400fau, 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, - 0x00000144u, 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, - 0x00000016u, 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, - 0x00000146u, 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, - 0x00050039u, 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, - 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, - 0x000200feu, 0x0000014au, 0x00010038u, -}; - -inline constexpr uint32_t kSpv_vt_fused_chain[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000735u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, - 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000188u, - 0x0000018du, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, - 0x00000188u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x0000018du, 0x0000000bu, 0x0000001bu, 0x00030047u, - 0x00000192u, 0x00000002u, 0x00050048u, 0x00000192u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000192u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000192u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000192u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000192u, - 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000192u, 0x00000005u, 0x00000023u, 0x00000014u, - 0x00050048u, 0x00000192u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000192u, 0x00000007u, - 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000192u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, - 0x00000192u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000192u, 0x0000000au, 0x00000023u, - 0x00000028u, 0x00050048u, 0x00000192u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00040047u, 0x000001a9u, - 0x00000006u, 0x00000004u, 0x00030047u, 0x000001aau, 0x00000002u, 0x00040048u, 0x000001aau, 0x00000000u, - 0x00000018u, 0x00050048u, 0x000001aau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001acu, - 0x00000018u, 0x00040047u, 0x000001acu, 0x00000021u, 0x00000008u, 0x00040047u, 0x000001acu, 0x00000022u, - 0x00000000u, 0x00040047u, 0x000001e7u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001e8u, 0x00000002u, - 0x00040048u, 0x000001e8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001e8u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x000001eau, 0x00000018u, 0x00040047u, 0x000001eau, 0x00000021u, 0x00000000u, - 0x00040047u, 0x000001eau, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001f8u, 0x00000006u, 0x00000002u, - 0x00030047u, 0x000001f9u, 0x00000002u, 0x00040048u, 0x000001f9u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x000001f9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001fbu, 0x00000018u, 0x00040047u, - 0x000001fbu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001fbu, 0x00000022u, 0x00000000u, 0x00040047u, - 0x0000021au, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000021bu, 0x00000002u, 0x00040048u, 0x0000021bu, - 0x00000000u, 0x00000018u, 0x00050048u, 0x0000021bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x0000021du, 0x00000018u, 0x00040047u, 0x0000021du, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000021du, - 0x00000022u, 0x00000000u, 0x00040047u, 0x00000228u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000229u, - 0x00000002u, 0x00040048u, 0x00000229u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000229u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x0000022bu, 0x00000018u, 0x00040047u, 0x0000022bu, 0x00000021u, - 0x00000003u, 0x00040047u, 0x0000022bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000247u, 0x00000006u, - 0x00000004u, 0x00030047u, 0x00000248u, 0x00000002u, 0x00050048u, 0x00000248u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00040047u, 0x0000024au, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000024au, 0x00000022u, - 0x00000000u, 0x00040047u, 0x00000257u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000258u, 0x00000002u, - 0x00050048u, 0x00000258u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000025au, 0x00000021u, - 0x00000005u, 0x00040047u, 0x0000025au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000273u, 0x00000006u, - 0x00000004u, 0x00030047u, 0x00000274u, 0x00000002u, 0x00050048u, 0x00000274u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00040047u, 0x00000276u, 0x00000021u, 0x00000006u, 0x00040047u, 0x00000276u, 0x00000022u, - 0x00000000u, 0x00040047u, 0x00000282u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000283u, 0x00000002u, - 0x00050048u, 0x00000283u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000285u, 0x00000021u, - 0x00000007u, 0x00040047u, 0x00000285u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000734u, 0x0000000bu, - 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, - 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, - 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, - 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, - 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040021u, - 0x00000022u, 0x00000008u, 0x0000000du, 0x00050021u, 0x00000026u, 0x00000008u, 0x00000007u, 0x0000000du, - 0x00040015u, 0x0000002cu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000002cu, 0x0000002du, 0x00000010u, - 0x00020014u, 0x00000035u, 0x0004002bu, 0x00000006u, 0x00000037u, 0x7f800000u, 0x0004002bu, 0x00000006u, - 0x0000003du, 0x007fffffu, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x00000000u, 0x0004002bu, 0x00000006u, - 0x00000046u, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000048u, 0x0000ffffu, 0x0004002bu, 0x00000006u, - 0x0000004cu, 0x00007fffu, 0x0004002bu, 0x00000006u, 0x0000004fu, 0x00000001u, 0x0004002bu, 0x00000006u, - 0x0000005bu, 0x00008000u, 0x0004002bu, 0x0000002cu, 0x00000060u, 0x0000000au, 0x0004002bu, 0x00000006u, - 0x00000062u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000066u, 0x000003ffu, 0x0004002bu, 0x0000002cu, - 0x0000006fu, 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000086u, 0x00000400u, 0x0004002bu, 0x0000002cu, - 0x00000089u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000091u, 0x00000071u, 0x0004002bu, 0x0000002cu, - 0x00000094u, 0x00000017u, 0x0004002bu, 0x00000006u, 0x0000009eu, 0x00000070u, 0x0004002bu, 0x00000006u, - 0x000000b2u, 0x000000ffu, 0x00040020u, 0x000000b4u, 0x00000007u, 0x0000002cu, 0x0004002bu, 0x0000002cu, - 0x000000b8u, 0x0000007fu, 0x0004002bu, 0x0000002cu, 0x000000bau, 0x0000000fu, 0x0004002bu, 0x00000006u, - 0x000000c4u, 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000cbu, 0x00000200u, 0x0004002bu, 0x0000002cu, - 0x000000d4u, 0x0000001fu, 0x0004002bu, 0x0000002cu, 0x000000dcu, 0x00000000u, 0x0004002bu, 0x0000002cu, - 0x000000e1u, 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000e7u, 0x00800000u, 0x0004002bu, 0x0000002cu, - 0x000000ebu, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x0000011eu, 0x00001fffu, 0x0004002bu, 0x00000006u, - 0x00000121u, 0x00001000u, 0x0004002bu, 0x00000008u, 0x00000156u, 0x3f800000u, 0x0004002bu, 0x00000006u, - 0x0000015eu, 0x00000002u, 0x0004002bu, 0x00000006u, 0x0000015fu, 0x00000108u, 0x0004002bu, 0x00000006u, - 0x00000160u, 0x00000080u, 0x0004001cu, 0x00000161u, 0x00000008u, 0x00000160u, 0x00040020u, 0x00000162u, - 0x00000004u, 0x00000161u, 0x0004003bu, 0x00000162u, 0x00000163u, 0x00000004u, 0x00040020u, 0x00000166u, - 0x00000004u, 0x00000008u, 0x00040017u, 0x00000186u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000187u, - 0x00000001u, 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, 0x00000001u, 0x00040020u, 0x00000189u, - 0x00000001u, 0x00000006u, 0x0004003bu, 0x00000187u, 0x0000018du, 0x00000001u, 0x000e001eu, 0x00000192u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000193u, 0x00000009u, 0x00000192u, - 0x0004003bu, 0x00000193u, 0x00000194u, 0x00000009u, 0x00040020u, 0x00000195u, 0x00000009u, 0x00000006u, - 0x0004002bu, 0x0000002cu, 0x000001a0u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x000001a6u, 0x00000005u, - 0x0003001du, 0x000001a9u, 0x00000006u, 0x0003001eu, 0x000001aau, 0x000001a9u, 0x00040020u, 0x000001abu, - 0x0000000cu, 0x000001aau, 0x0004003bu, 0x000001abu, 0x000001acu, 0x0000000cu, 0x00040020u, 0x000001afu, - 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000001beu, 0x00000003u, 0x0004002bu, 0x00000006u, - 0x000001c4u, 0x00000004u, 0x0004002bu, 0x0000002cu, 0x000001e0u, 0x00000003u, 0x0003001du, 0x000001e7u, - 0x00000006u, 0x0003001eu, 0x000001e8u, 0x000001e7u, 0x00040020u, 0x000001e9u, 0x0000000cu, 0x000001e8u, - 0x0004003bu, 0x000001e9u, 0x000001eau, 0x0000000cu, 0x0004002bu, 0x0000002cu, 0x000001ebu, 0x00000007u, - 0x00040015u, 0x000001f7u, 0x00000010u, 0x00000000u, 0x0003001du, 0x000001f8u, 0x000001f7u, 0x0003001eu, - 0x000001f9u, 0x000001f8u, 0x00040020u, 0x000001fau, 0x0000000cu, 0x000001f9u, 0x0004003bu, 0x000001fau, - 0x000001fbu, 0x0000000cu, 0x00040020u, 0x00000203u, 0x0000000cu, 0x000001f7u, 0x0004002bu, 0x0000002cu, - 0x00000213u, 0x00000004u, 0x0003001du, 0x0000021au, 0x00000006u, 0x0003001eu, 0x0000021bu, 0x0000021au, - 0x00040020u, 0x0000021cu, 0x0000000cu, 0x0000021bu, 0x0004003bu, 0x0000021cu, 0x0000021du, 0x0000000cu, - 0x0004002bu, 0x0000002cu, 0x0000021eu, 0x00000008u, 0x0003001du, 0x00000228u, 0x000001f7u, 0x0003001eu, - 0x00000229u, 0x00000228u, 0x00040020u, 0x0000022au, 0x0000000cu, 0x00000229u, 0x0004003bu, 0x0000022au, - 0x0000022bu, 0x0000000cu, 0x0004002bu, 0x0000002cu, 0x00000240u, 0x00000005u, 0x0003001du, 0x00000247u, - 0x00000006u, 0x0003001eu, 0x00000248u, 0x00000247u, 0x00040020u, 0x00000249u, 0x0000000cu, 0x00000248u, - 0x0004003bu, 0x00000249u, 0x0000024au, 0x0000000cu, 0x0004002bu, 0x0000002cu, 0x0000024bu, 0x00000009u, - 0x0003001du, 0x00000257u, 0x000001f7u, 0x0003001eu, 0x00000258u, 0x00000257u, 0x00040020u, 0x00000259u, - 0x0000000cu, 0x00000258u, 0x0004003bu, 0x00000259u, 0x0000025au, 0x0000000cu, 0x0004002bu, 0x0000002cu, - 0x0000026cu, 0x00000006u, 0x0003001du, 0x00000273u, 0x00000006u, 0x0003001eu, 0x00000274u, 0x00000273u, - 0x00040020u, 0x00000275u, 0x0000000cu, 0x00000274u, 0x0004003bu, 0x00000275u, 0x00000276u, 0x0000000cu, - 0x0003001du, 0x00000282u, 0x000001f7u, 0x0003001eu, 0x00000283u, 0x00000282u, 0x00040020u, 0x00000284u, - 0x0000000cu, 0x00000283u, 0x0004003bu, 0x00000284u, 0x00000285u, 0x0000000cu, 0x0003002au, 0x00000035u, - 0x00000372u, 0x0004002bu, 0x00000008u, 0x000004d9u, 0x00000000u, 0x0004002bu, 0x0000002cu, 0x0000058cu, - 0x0000000bu, 0x00040020u, 0x0000058du, 0x00000009u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000731u, - 0x00000048u, 0x0006002cu, 0x00000186u, 0x00000734u, 0x00000160u, 0x0000004fu, 0x0000004fu, 0x00050036u, - 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, - 0x00000185u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018cu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000190u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000199u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000001a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a8u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000001b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b7u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000001bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c2u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000001cfu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001dau, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000001ddu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e4u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000207u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000208u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000210u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000217u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000234u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000235u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x0000023du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000244u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000265u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000266u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000270u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000290u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000291u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000299u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x0000029cu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002a2u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000002bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002bbu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000002c3u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002c9u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000002ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002deu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000002e6u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002ecu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000304u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000305u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x0000030eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000326u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000327u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000349u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000360u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000036au, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000036cu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000386u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x0000039du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000003a7u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000003a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003b9u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000003c4u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000003c7u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000003cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003e5u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000003e6u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000003eeu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000003f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000408u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000409u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000411u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000417u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000042fu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000430u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000439u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000452u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x0000045au, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000045bu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000478u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000048du, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000495u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000497u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000004b0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000004c5u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000004cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004cfu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000004d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004dau, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000004e5u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000004e8u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000004eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000506u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000507u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000050fu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000515u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000529u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000052au, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000532u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000538u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000550u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000551u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000055au, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000572u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000573u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000582u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000583u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000585u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000593u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x0000059eu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000005a1u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000005a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000005c0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000005c8u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000005ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005e2u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000005e3u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000005ebu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000005f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000609u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000060au, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000613u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000062bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000062cu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000634u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000637u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x0000063du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000655u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000656u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000065eu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000664u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000678u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000679u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000681u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000687u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000069fu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000006a0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000006a9u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000006c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006c2u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x000006fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006fdu, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000728u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000729u, 0x00000007u, 0x00050041u, 0x00000189u, - 0x0000018au, 0x00000188u, 0x0000003fu, 0x0004003du, 0x00000006u, 0x0000018bu, 0x0000018au, 0x0003003eu, - 0x00000185u, 0x0000018bu, 0x00050041u, 0x00000189u, 0x0000018eu, 0x0000018du, 0x0000003fu, 0x0004003du, - 0x00000006u, 0x0000018fu, 0x0000018eu, 0x0003003eu, 0x0000018cu, 0x0000018fu, 0x0004003du, 0x00000006u, - 0x00000191u, 0x00000185u, 0x00050041u, 0x00000195u, 0x00000196u, 0x00000194u, 0x00000089u, 0x0004003du, - 0x00000006u, 0x00000197u, 0x00000196u, 0x00050084u, 0x00000006u, 0x00000198u, 0x00000191u, 0x00000197u, - 0x0003003eu, 0x00000190u, 0x00000198u, 0x0003003eu, 0x00000199u, 0x0000003fu, 0x000200f9u, 0x0000019au, - 0x000200f8u, 0x0000019au, 0x000400f6u, 0x0000019cu, 0x0000019du, 0x00000000u, 0x000200f9u, 0x0000019eu, - 0x000200f8u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x0000019fu, 0x00000199u, 0x00050041u, 0x00000195u, - 0x000001a1u, 0x00000194u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000001a2u, 0x000001a1u, 0x000500b0u, - 0x00000035u, 0x000001a3u, 0x0000019fu, 0x000001a2u, 0x000400fau, 0x000001a3u, 0x0000019bu, 0x0000019cu, - 0x000200f8u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000001a5u, 0x00000199u, 0x00050084u, 0x00000006u, - 0x000001a7u, 0x000001a5u, 0x000001a6u, 0x0003003eu, 0x000001a4u, 0x000001a7u, 0x0004003du, 0x00000006u, - 0x000001adu, 0x000001a4u, 0x00050080u, 0x00000006u, 0x000001aeu, 0x000001adu, 0x0000003fu, 0x00060041u, - 0x000001afu, 0x000001b0u, 0x000001acu, 0x000000dcu, 0x000001aeu, 0x0004003du, 0x00000006u, 0x000001b1u, - 0x000001b0u, 0x0003003eu, 0x000001a8u, 0x000001b1u, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001a4u, - 0x00050080u, 0x00000006u, 0x000001b4u, 0x000001b3u, 0x0000004fu, 0x00060041u, 0x000001afu, 0x000001b5u, - 0x000001acu, 0x000000dcu, 0x000001b4u, 0x0004003du, 0x00000006u, 0x000001b6u, 0x000001b5u, 0x0003003eu, - 0x000001b2u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001a4u, 0x00050080u, 0x00000006u, - 0x000001b9u, 0x000001b8u, 0x0000015eu, 0x00060041u, 0x000001afu, 0x000001bau, 0x000001acu, 0x000000dcu, - 0x000001b9u, 0x0004003du, 0x00000006u, 0x000001bbu, 0x000001bau, 0x0003003eu, 0x000001b7u, 0x000001bbu, - 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001a4u, 0x00050080u, 0x00000006u, 0x000001bfu, 0x000001bdu, - 0x000001beu, 0x00060041u, 0x000001afu, 0x000001c0u, 0x000001acu, 0x000000dcu, 0x000001bfu, 0x0004003du, - 0x00000006u, 0x000001c1u, 0x000001c0u, 0x0003003eu, 0x000001bcu, 0x000001c1u, 0x0004003du, 0x00000006u, - 0x000001c3u, 0x000001a4u, 0x00050080u, 0x00000006u, 0x000001c5u, 0x000001c3u, 0x000001c4u, 0x00060041u, - 0x000001afu, 0x000001c6u, 0x000001acu, 0x000000dcu, 0x000001c5u, 0x0004003du, 0x00000006u, 0x000001c7u, - 0x000001c6u, 0x0003003eu, 0x000001c2u, 0x000001c7u, 0x0004003du, 0x00000006u, 0x000001c8u, 0x000001a8u, - 0x000500aau, 0x00000035u, 0x000001c9u, 0x000001c8u, 0x0000003fu, 0x0004003du, 0x00000006u, 0x000001cau, - 0x000001a8u, 0x000500aau, 0x00000035u, 0x000001cbu, 0x000001cau, 0x0000004fu, 0x000500a6u, 0x00000035u, - 0x000001ccu, 0x000001c9u, 0x000001cbu, 0x000300f7u, 0x000001ceu, 0x00000000u, 0x000400fau, 0x000001ccu, - 0x000001cdu, 0x000003b1u, 0x000200f8u, 0x000001cdu, 0x0004003du, 0x00000006u, 0x000001d0u, 0x0000018cu, - 0x0003003eu, 0x000001cfu, 0x000001d0u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d1u, 0x000400f6u, - 0x000001d3u, 0x000001d4u, 0x00000000u, 0x000200f9u, 0x000001d5u, 0x000200f8u, 0x000001d5u, 0x0004003du, - 0x00000006u, 0x000001d6u, 0x000001cfu, 0x00050041u, 0x00000195u, 0x000001d7u, 0x00000194u, 0x00000089u, - 0x0004003du, 0x00000006u, 0x000001d8u, 0x000001d7u, 0x000500b0u, 0x00000035u, 0x000001d9u, 0x000001d6u, - 0x000001d8u, 0x000400fau, 0x000001d9u, 0x000001d2u, 0x000001d3u, 0x000200f8u, 0x000001d2u, 0x0004003du, - 0x00000006u, 0x000001dbu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x000001dcu, 0x000001dbu, 0x0000003fu, - 0x000300f7u, 0x000001dfu, 0x00000000u, 0x000400fau, 0x000001dcu, 0x000001deu, 0x0000020du, 0x000200f8u, - 0x000001deu, 0x00050041u, 0x00000195u, 0x000001e1u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, - 0x000001e2u, 0x000001e1u, 0x000500aau, 0x00000035u, 0x000001e3u, 0x000001e2u, 0x0000003fu, 0x000300f7u, - 0x000001e6u, 0x00000000u, 0x000400fau, 0x000001e3u, 0x000001e5u, 0x000001f6u, 0x000200f8u, 0x000001e5u, - 0x00050041u, 0x00000195u, 0x000001ecu, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000001edu, - 0x000001ecu, 0x000500c2u, 0x00000006u, 0x000001eeu, 0x000001edu, 0x000001a0u, 0x0004003du, 0x00000006u, - 0x000001efu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000001f0u, 0x000001cfu, 0x00050080u, 0x00000006u, - 0x000001f1u, 0x000001efu, 0x000001f0u, 0x00050080u, 0x00000006u, 0x000001f2u, 0x000001eeu, 0x000001f1u, - 0x00060041u, 0x000001afu, 0x000001f3u, 0x000001eau, 0x000000dcu, 0x000001f2u, 0x0004003du, 0x00000006u, - 0x000001f4u, 0x000001f3u, 0x0004007cu, 0x00000008u, 0x000001f5u, 0x000001f4u, 0x0003003eu, 0x000001e4u, - 0x000001f5u, 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001f6u, 0x00050041u, 0x00000195u, 0x000001fcu, - 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000001fdu, 0x000001fcu, 0x000500c2u, 0x00000006u, - 0x000001feu, 0x000001fdu, 0x00000089u, 0x0004003du, 0x00000006u, 0x000001ffu, 0x00000190u, 0x0004003du, - 0x00000006u, 0x00000200u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000201u, 0x000001ffu, 0x00000200u, - 0x00050080u, 0x00000006u, 0x00000202u, 0x000001feu, 0x00000201u, 0x00060041u, 0x00000203u, 0x00000204u, - 0x000001fbu, 0x000000dcu, 0x00000202u, 0x0004003du, 0x000001f7u, 0x00000205u, 0x00000204u, 0x00040071u, - 0x00000006u, 0x00000206u, 0x00000205u, 0x0003003eu, 0x00000207u, 0x00000206u, 0x00050041u, 0x00000195u, - 0x00000209u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x0000020au, 0x00000209u, 0x0003003eu, - 0x00000208u, 0x0000020au, 0x00060039u, 0x00000008u, 0x0000020bu, 0x0000001bu, 0x00000207u, 0x00000208u, - 0x0003003eu, 0x000001e4u, 0x0000020bu, 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001e6u, 0x0004003du, - 0x00000008u, 0x0000020cu, 0x000001e4u, 0x0003003eu, 0x000001ddu, 0x0000020cu, 0x000200f9u, 0x000001dfu, - 0x000200f8u, 0x0000020du, 0x0004003du, 0x00000006u, 0x0000020eu, 0x000001b7u, 0x000500aau, 0x00000035u, - 0x0000020fu, 0x0000020eu, 0x0000004fu, 0x000300f7u, 0x00000212u, 0x00000000u, 0x000400fau, 0x0000020fu, - 0x00000211u, 0x0000023au, 0x000200f8u, 0x00000211u, 0x00050041u, 0x00000195u, 0x00000214u, 0x00000194u, - 0x00000213u, 0x0004003du, 0x00000006u, 0x00000215u, 0x00000214u, 0x000500aau, 0x00000035u, 0x00000216u, - 0x00000215u, 0x0000003fu, 0x000300f7u, 0x00000219u, 0x00000000u, 0x000400fau, 0x00000216u, 0x00000218u, - 0x00000227u, 0x000200f8u, 0x00000218u, 0x00050041u, 0x00000195u, 0x0000021fu, 0x00000194u, 0x0000021eu, - 0x0004003du, 0x00000006u, 0x00000220u, 0x0000021fu, 0x000500c2u, 0x00000006u, 0x00000221u, 0x00000220u, - 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000222u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000223u, - 0x00000221u, 0x00000222u, 0x00060041u, 0x000001afu, 0x00000224u, 0x0000021du, 0x000000dcu, 0x00000223u, - 0x0004003du, 0x00000006u, 0x00000225u, 0x00000224u, 0x0004007cu, 0x00000008u, 0x00000226u, 0x00000225u, - 0x0003003eu, 0x00000217u, 0x00000226u, 0x000200f9u, 0x00000219u, 0x000200f8u, 0x00000227u, 0x00050041u, - 0x00000195u, 0x0000022cu, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x0000022du, 0x0000022cu, - 0x000500c2u, 0x00000006u, 0x0000022eu, 0x0000022du, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000022fu, - 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000230u, 0x0000022eu, 0x0000022fu, 0x00060041u, 0x00000203u, - 0x00000231u, 0x0000022bu, 0x000000dcu, 0x00000230u, 0x0004003du, 0x000001f7u, 0x00000232u, 0x00000231u, - 0x00040071u, 0x00000006u, 0x00000233u, 0x00000232u, 0x0003003eu, 0x00000234u, 0x00000233u, 0x00050041u, - 0x00000195u, 0x00000236u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x00000237u, 0x00000236u, - 0x0003003eu, 0x00000235u, 0x00000237u, 0x00060039u, 0x00000008u, 0x00000238u, 0x0000001bu, 0x00000234u, - 0x00000235u, 0x0003003eu, 0x00000217u, 0x00000238u, 0x000200f9u, 0x00000219u, 0x000200f8u, 0x00000219u, - 0x0004003du, 0x00000008u, 0x00000239u, 0x00000217u, 0x0003003eu, 0x00000210u, 0x00000239u, 0x000200f9u, - 0x00000212u, 0x000200f8u, 0x0000023au, 0x0004003du, 0x00000006u, 0x0000023bu, 0x000001b7u, 0x000500aau, - 0x00000035u, 0x0000023cu, 0x0000023bu, 0x0000015eu, 0x000300f7u, 0x0000023fu, 0x00000000u, 0x000400fau, - 0x0000023cu, 0x0000023eu, 0x0000026bu, 0x000200f8u, 0x0000023eu, 0x00050041u, 0x00000195u, 0x00000241u, - 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000242u, 0x00000241u, 0x000500aau, 0x00000035u, - 0x00000243u, 0x00000242u, 0x0000003fu, 0x000300f7u, 0x00000246u, 0x00000000u, 0x000400fau, 0x00000243u, - 0x00000245u, 0x00000256u, 0x000200f8u, 0x00000245u, 0x00050041u, 0x00000195u, 0x0000024cu, 0x00000194u, - 0x0000024bu, 0x0004003du, 0x00000006u, 0x0000024du, 0x0000024cu, 0x000500c2u, 0x00000006u, 0x0000024eu, - 0x0000024du, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000024fu, 0x00000190u, 0x0004003du, 0x00000006u, - 0x00000250u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000251u, 0x0000024fu, 0x00000250u, 0x00050080u, - 0x00000006u, 0x00000252u, 0x0000024eu, 0x00000251u, 0x00060041u, 0x000001afu, 0x00000253u, 0x0000024au, - 0x000000dcu, 0x00000252u, 0x0004003du, 0x00000006u, 0x00000254u, 0x00000253u, 0x0004007cu, 0x00000008u, - 0x00000255u, 0x00000254u, 0x0003003eu, 0x00000244u, 0x00000255u, 0x000200f9u, 0x00000246u, 0x000200f8u, - 0x00000256u, 0x00050041u, 0x00000195u, 0x0000025bu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, - 0x0000025cu, 0x0000025bu, 0x000500c2u, 0x00000006u, 0x0000025du, 0x0000025cu, 0x00000089u, 0x0004003du, - 0x00000006u, 0x0000025eu, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000025fu, 0x000001cfu, 0x00050080u, - 0x00000006u, 0x00000260u, 0x0000025eu, 0x0000025fu, 0x00050080u, 0x00000006u, 0x00000261u, 0x0000025du, - 0x00000260u, 0x00060041u, 0x00000203u, 0x00000262u, 0x0000025au, 0x000000dcu, 0x00000261u, 0x0004003du, - 0x000001f7u, 0x00000263u, 0x00000262u, 0x00040071u, 0x00000006u, 0x00000264u, 0x00000263u, 0x0003003eu, - 0x00000265u, 0x00000264u, 0x00050041u, 0x00000195u, 0x00000267u, 0x00000194u, 0x00000240u, 0x0004003du, - 0x00000006u, 0x00000268u, 0x00000267u, 0x0003003eu, 0x00000266u, 0x00000268u, 0x00060039u, 0x00000008u, - 0x00000269u, 0x0000001bu, 0x00000265u, 0x00000266u, 0x0003003eu, 0x00000244u, 0x00000269u, 0x000200f9u, - 0x00000246u, 0x000200f8u, 0x00000246u, 0x0004003du, 0x00000008u, 0x0000026au, 0x00000244u, 0x0003003eu, - 0x0000023du, 0x0000026au, 0x000200f9u, 0x0000023fu, 0x000200f8u, 0x0000026bu, 0x00050041u, 0x00000195u, - 0x0000026du, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x0000026eu, 0x0000026du, 0x000500aau, - 0x00000035u, 0x0000026fu, 0x0000026eu, 0x0000003fu, 0x000300f7u, 0x00000272u, 0x00000000u, 0x000400fau, - 0x0000026fu, 0x00000271u, 0x00000281u, 0x000200f8u, 0x00000271u, 0x00050041u, 0x00000195u, 0x00000277u, - 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000278u, 0x00000277u, 0x000500c2u, 0x00000006u, - 0x00000279u, 0x00000278u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000027au, 0x00000190u, 0x0004003du, - 0x00000006u, 0x0000027bu, 0x000001cfu, 0x00050080u, 0x00000006u, 0x0000027cu, 0x0000027au, 0x0000027bu, - 0x00050080u, 0x00000006u, 0x0000027du, 0x00000279u, 0x0000027cu, 0x00060041u, 0x000001afu, 0x0000027eu, - 0x00000276u, 0x000000dcu, 0x0000027du, 0x0004003du, 0x00000006u, 0x0000027fu, 0x0000027eu, 0x0004007cu, - 0x00000008u, 0x00000280u, 0x0000027fu, 0x0003003eu, 0x00000270u, 0x00000280u, 0x000200f9u, 0x00000272u, - 0x000200f8u, 0x00000281u, 0x00050041u, 0x00000195u, 0x00000286u, 0x00000194u, 0x00000060u, 0x0004003du, - 0x00000006u, 0x00000287u, 0x00000286u, 0x000500c2u, 0x00000006u, 0x00000288u, 0x00000287u, 0x00000089u, - 0x0004003du, 0x00000006u, 0x00000289u, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000028au, 0x000001cfu, - 0x00050080u, 0x00000006u, 0x0000028bu, 0x00000289u, 0x0000028au, 0x00050080u, 0x00000006u, 0x0000028cu, - 0x00000288u, 0x0000028bu, 0x00060041u, 0x00000203u, 0x0000028du, 0x00000285u, 0x000000dcu, 0x0000028cu, - 0x0004003du, 0x000001f7u, 0x0000028eu, 0x0000028du, 0x00040071u, 0x00000006u, 0x0000028fu, 0x0000028eu, - 0x0003003eu, 0x00000290u, 0x0000028fu, 0x00050041u, 0x00000195u, 0x00000292u, 0x00000194u, 0x0000026cu, - 0x0004003du, 0x00000006u, 0x00000293u, 0x00000292u, 0x0003003eu, 0x00000291u, 0x00000293u, 0x00060039u, - 0x00000008u, 0x00000294u, 0x0000001bu, 0x00000290u, 0x00000291u, 0x0003003eu, 0x00000270u, 0x00000294u, - 0x000200f9u, 0x00000272u, 0x000200f8u, 0x00000272u, 0x0004003du, 0x00000008u, 0x00000295u, 0x00000270u, - 0x0003003eu, 0x0000023du, 0x00000295u, 0x000200f9u, 0x0000023fu, 0x000200f8u, 0x0000023fu, 0x0004003du, - 0x00000008u, 0x00000296u, 0x0000023du, 0x0003003eu, 0x00000210u, 0x00000296u, 0x000200f9u, 0x00000212u, - 0x000200f8u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000297u, 0x00000210u, 0x0003003eu, 0x000001ddu, - 0x00000297u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x0004003du, 0x00000008u, 0x00000298u, - 0x000001ddu, 0x0003003eu, 0x000001dau, 0x00000298u, 0x0004003du, 0x00000006u, 0x0000029au, 0x000001bcu, - 0x000500aau, 0x00000035u, 0x0000029bu, 0x0000029au, 0x0000003fu, 0x000300f7u, 0x0000029eu, 0x00000000u, - 0x000400fau, 0x0000029bu, 0x0000029du, 0x000002c0u, 0x000200f8u, 0x0000029du, 0x00050041u, 0x00000195u, - 0x0000029fu, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000002a0u, 0x0000029fu, 0x000500aau, - 0x00000035u, 0x000002a1u, 0x000002a0u, 0x0000003fu, 0x000300f7u, 0x000002a4u, 0x00000000u, 0x000400fau, - 0x000002a1u, 0x000002a3u, 0x000002afu, 0x000200f8u, 0x000002a3u, 0x00050041u, 0x00000195u, 0x000002a5u, - 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000002a6u, 0x000002a5u, 0x000500c2u, 0x00000006u, - 0x000002a7u, 0x000002a6u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000002a8u, 0x00000190u, 0x0004003du, - 0x00000006u, 0x000002a9u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x000002aau, 0x000002a8u, 0x000002a9u, - 0x00050080u, 0x00000006u, 0x000002abu, 0x000002a7u, 0x000002aau, 0x00060041u, 0x000001afu, 0x000002acu, - 0x000001eau, 0x000000dcu, 0x000002abu, 0x0004003du, 0x00000006u, 0x000002adu, 0x000002acu, 0x0004007cu, - 0x00000008u, 0x000002aeu, 0x000002adu, 0x0003003eu, 0x000002a2u, 0x000002aeu, 0x000200f9u, 0x000002a4u, - 0x000200f8u, 0x000002afu, 0x00050041u, 0x00000195u, 0x000002b0u, 0x00000194u, 0x000001ebu, 0x0004003du, - 0x00000006u, 0x000002b1u, 0x000002b0u, 0x000500c2u, 0x00000006u, 0x000002b2u, 0x000002b1u, 0x00000089u, - 0x0004003du, 0x00000006u, 0x000002b3u, 0x00000190u, 0x0004003du, 0x00000006u, 0x000002b4u, 0x000001cfu, - 0x00050080u, 0x00000006u, 0x000002b5u, 0x000002b3u, 0x000002b4u, 0x00050080u, 0x00000006u, 0x000002b6u, - 0x000002b2u, 0x000002b5u, 0x00060041u, 0x00000203u, 0x000002b7u, 0x000001fbu, 0x000000dcu, 0x000002b6u, - 0x0004003du, 0x000001f7u, 0x000002b8u, 0x000002b7u, 0x00040071u, 0x00000006u, 0x000002b9u, 0x000002b8u, - 0x0003003eu, 0x000002bau, 0x000002b9u, 0x00050041u, 0x00000195u, 0x000002bcu, 0x00000194u, 0x000001e0u, - 0x0004003du, 0x00000006u, 0x000002bdu, 0x000002bcu, 0x0003003eu, 0x000002bbu, 0x000002bdu, 0x00060039u, - 0x00000008u, 0x000002beu, 0x0000001bu, 0x000002bau, 0x000002bbu, 0x0003003eu, 0x000002a2u, 0x000002beu, - 0x000200f9u, 0x000002a4u, 0x000200f8u, 0x000002a4u, 0x0004003du, 0x00000008u, 0x000002bfu, 0x000002a2u, - 0x0003003eu, 0x0000029cu, 0x000002bfu, 0x000200f9u, 0x0000029eu, 0x000200f8u, 0x000002c0u, 0x0004003du, - 0x00000006u, 0x000002c1u, 0x000001bcu, 0x000500aau, 0x00000035u, 0x000002c2u, 0x000002c1u, 0x0000004fu, - 0x000300f7u, 0x000002c5u, 0x00000000u, 0x000400fau, 0x000002c2u, 0x000002c4u, 0x000002e3u, 0x000200f8u, - 0x000002c4u, 0x00050041u, 0x00000195u, 0x000002c6u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, - 0x000002c7u, 0x000002c6u, 0x000500aau, 0x00000035u, 0x000002c8u, 0x000002c7u, 0x0000003fu, 0x000300f7u, - 0x000002cbu, 0x00000000u, 0x000400fau, 0x000002c8u, 0x000002cau, 0x000002d4u, 0x000200f8u, 0x000002cau, - 0x00050041u, 0x00000195u, 0x000002ccu, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000002cdu, - 0x000002ccu, 0x000500c2u, 0x00000006u, 0x000002ceu, 0x000002cdu, 0x000001a0u, 0x0004003du, 0x00000006u, - 0x000002cfu, 0x000001cfu, 0x00050080u, 0x00000006u, 0x000002d0u, 0x000002ceu, 0x000002cfu, 0x00060041u, - 0x000001afu, 0x000002d1u, 0x0000021du, 0x000000dcu, 0x000002d0u, 0x0004003du, 0x00000006u, 0x000002d2u, - 0x000002d1u, 0x0004007cu, 0x00000008u, 0x000002d3u, 0x000002d2u, 0x0003003eu, 0x000002c9u, 0x000002d3u, - 0x000200f9u, 0x000002cbu, 0x000200f8u, 0x000002d4u, 0x00050041u, 0x00000195u, 0x000002d5u, 0x00000194u, - 0x0000021eu, 0x0004003du, 0x00000006u, 0x000002d6u, 0x000002d5u, 0x000500c2u, 0x00000006u, 0x000002d7u, - 0x000002d6u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000002d8u, 0x000001cfu, 0x00050080u, 0x00000006u, - 0x000002d9u, 0x000002d7u, 0x000002d8u, 0x00060041u, 0x00000203u, 0x000002dau, 0x0000022bu, 0x000000dcu, - 0x000002d9u, 0x0004003du, 0x000001f7u, 0x000002dbu, 0x000002dau, 0x00040071u, 0x00000006u, 0x000002dcu, - 0x000002dbu, 0x0003003eu, 0x000002ddu, 0x000002dcu, 0x00050041u, 0x00000195u, 0x000002dfu, 0x00000194u, - 0x00000213u, 0x0004003du, 0x00000006u, 0x000002e0u, 0x000002dfu, 0x0003003eu, 0x000002deu, 0x000002e0u, - 0x00060039u, 0x00000008u, 0x000002e1u, 0x0000001bu, 0x000002ddu, 0x000002deu, 0x0003003eu, 0x000002c9u, - 0x000002e1u, 0x000200f9u, 0x000002cbu, 0x000200f8u, 0x000002cbu, 0x0004003du, 0x00000008u, 0x000002e2u, - 0x000002c9u, 0x0003003eu, 0x000002c3u, 0x000002e2u, 0x000200f9u, 0x000002c5u, 0x000200f8u, 0x000002e3u, - 0x0004003du, 0x00000006u, 0x000002e4u, 0x000001bcu, 0x000500aau, 0x00000035u, 0x000002e5u, 0x000002e4u, - 0x0000015eu, 0x000300f7u, 0x000002e8u, 0x00000000u, 0x000400fau, 0x000002e5u, 0x000002e7u, 0x0000030au, - 0x000200f8u, 0x000002e7u, 0x00050041u, 0x00000195u, 0x000002e9u, 0x00000194u, 0x00000240u, 0x0004003du, - 0x00000006u, 0x000002eau, 0x000002e9u, 0x000500aau, 0x00000035u, 0x000002ebu, 0x000002eau, 0x0000003fu, - 0x000300f7u, 0x000002eeu, 0x00000000u, 0x000400fau, 0x000002ebu, 0x000002edu, 0x000002f9u, 0x000200f8u, - 0x000002edu, 0x00050041u, 0x00000195u, 0x000002efu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, - 0x000002f0u, 0x000002efu, 0x000500c2u, 0x00000006u, 0x000002f1u, 0x000002f0u, 0x000001a0u, 0x0004003du, - 0x00000006u, 0x000002f2u, 0x00000190u, 0x0004003du, 0x00000006u, 0x000002f3u, 0x000001cfu, 0x00050080u, - 0x00000006u, 0x000002f4u, 0x000002f2u, 0x000002f3u, 0x00050080u, 0x00000006u, 0x000002f5u, 0x000002f1u, - 0x000002f4u, 0x00060041u, 0x000001afu, 0x000002f6u, 0x0000024au, 0x000000dcu, 0x000002f5u, 0x0004003du, - 0x00000006u, 0x000002f7u, 0x000002f6u, 0x0004007cu, 0x00000008u, 0x000002f8u, 0x000002f7u, 0x0003003eu, - 0x000002ecu, 0x000002f8u, 0x000200f9u, 0x000002eeu, 0x000200f8u, 0x000002f9u, 0x00050041u, 0x00000195u, - 0x000002fau, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000002fbu, 0x000002fau, 0x000500c2u, - 0x00000006u, 0x000002fcu, 0x000002fbu, 0x00000089u, 0x0004003du, 0x00000006u, 0x000002fdu, 0x00000190u, - 0x0004003du, 0x00000006u, 0x000002feu, 0x000001cfu, 0x00050080u, 0x00000006u, 0x000002ffu, 0x000002fdu, - 0x000002feu, 0x00050080u, 0x00000006u, 0x00000300u, 0x000002fcu, 0x000002ffu, 0x00060041u, 0x00000203u, - 0x00000301u, 0x0000025au, 0x000000dcu, 0x00000300u, 0x0004003du, 0x000001f7u, 0x00000302u, 0x00000301u, - 0x00040071u, 0x00000006u, 0x00000303u, 0x00000302u, 0x0003003eu, 0x00000304u, 0x00000303u, 0x00050041u, - 0x00000195u, 0x00000306u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000307u, 0x00000306u, - 0x0003003eu, 0x00000305u, 0x00000307u, 0x00060039u, 0x00000008u, 0x00000308u, 0x0000001bu, 0x00000304u, - 0x00000305u, 0x0003003eu, 0x000002ecu, 0x00000308u, 0x000200f9u, 0x000002eeu, 0x000200f8u, 0x000002eeu, - 0x0004003du, 0x00000008u, 0x00000309u, 0x000002ecu, 0x0003003eu, 0x000002e6u, 0x00000309u, 0x000200f9u, - 0x000002e8u, 0x000200f8u, 0x0000030au, 0x00050041u, 0x00000195u, 0x0000030bu, 0x00000194u, 0x0000026cu, - 0x0004003du, 0x00000006u, 0x0000030cu, 0x0000030bu, 0x000500aau, 0x00000035u, 0x0000030du, 0x0000030cu, - 0x0000003fu, 0x000300f7u, 0x00000310u, 0x00000000u, 0x000400fau, 0x0000030du, 0x0000030fu, 0x0000031bu, - 0x000200f8u, 0x0000030fu, 0x00050041u, 0x00000195u, 0x00000311u, 0x00000194u, 0x00000060u, 0x0004003du, - 0x00000006u, 0x00000312u, 0x00000311u, 0x000500c2u, 0x00000006u, 0x00000313u, 0x00000312u, 0x000001a0u, - 0x0004003du, 0x00000006u, 0x00000314u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000315u, 0x000001cfu, - 0x00050080u, 0x00000006u, 0x00000316u, 0x00000314u, 0x00000315u, 0x00050080u, 0x00000006u, 0x00000317u, - 0x00000313u, 0x00000316u, 0x00060041u, 0x000001afu, 0x00000318u, 0x00000276u, 0x000000dcu, 0x00000317u, - 0x0004003du, 0x00000006u, 0x00000319u, 0x00000318u, 0x0004007cu, 0x00000008u, 0x0000031au, 0x00000319u, - 0x0003003eu, 0x0000030eu, 0x0000031au, 0x000200f9u, 0x00000310u, 0x000200f8u, 0x0000031bu, 0x00050041u, - 0x00000195u, 0x0000031cu, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x0000031du, 0x0000031cu, - 0x000500c2u, 0x00000006u, 0x0000031eu, 0x0000031du, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000031fu, - 0x00000190u, 0x0004003du, 0x00000006u, 0x00000320u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000321u, - 0x0000031fu, 0x00000320u, 0x00050080u, 0x00000006u, 0x00000322u, 0x0000031eu, 0x00000321u, 0x00060041u, - 0x00000203u, 0x00000323u, 0x00000285u, 0x000000dcu, 0x00000322u, 0x0004003du, 0x000001f7u, 0x00000324u, - 0x00000323u, 0x00040071u, 0x00000006u, 0x00000325u, 0x00000324u, 0x0003003eu, 0x00000326u, 0x00000325u, - 0x00050041u, 0x00000195u, 0x00000328u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000329u, - 0x00000328u, 0x0003003eu, 0x00000327u, 0x00000329u, 0x00060039u, 0x00000008u, 0x0000032au, 0x0000001bu, - 0x00000326u, 0x00000327u, 0x0003003eu, 0x0000030eu, 0x0000032au, 0x000200f9u, 0x00000310u, 0x000200f8u, - 0x00000310u, 0x0004003du, 0x00000008u, 0x0000032bu, 0x0000030eu, 0x0003003eu, 0x000002e6u, 0x0000032bu, - 0x000200f9u, 0x000002e8u, 0x000200f8u, 0x000002e8u, 0x0004003du, 0x00000008u, 0x0000032cu, 0x000002e6u, - 0x0003003eu, 0x000002c3u, 0x0000032cu, 0x000200f9u, 0x000002c5u, 0x000200f8u, 0x000002c5u, 0x0004003du, - 0x00000008u, 0x0000032du, 0x000002c3u, 0x0003003eu, 0x0000029cu, 0x0000032du, 0x000200f9u, 0x0000029eu, - 0x000200f8u, 0x0000029eu, 0x0004003du, 0x00000008u, 0x0000032eu, 0x0000029cu, 0x0003003eu, 0x00000299u, - 0x0000032eu, 0x000200f9u, 0x0000032fu, 0x000200f8u, 0x0000032fu, 0x000400f6u, 0x00000331u, 0x00000332u, - 0x00000000u, 0x000200f9u, 0x00000330u, 0x000200f8u, 0x00000330u, 0x0004003du, 0x00000006u, 0x00000333u, - 0x000001b2u, 0x000500aau, 0x00000035u, 0x00000334u, 0x00000333u, 0x0000015eu, 0x000300f7u, 0x00000336u, - 0x00000000u, 0x000400fau, 0x00000334u, 0x00000335u, 0x00000373u, 0x000200f8u, 0x00000335u, 0x000200f9u, - 0x00000337u, 0x000200f8u, 0x00000337u, 0x000400f6u, 0x00000339u, 0x0000033au, 0x00000000u, 0x000200f9u, - 0x00000338u, 0x000200f8u, 0x00000338u, 0x00050041u, 0x00000195u, 0x0000033bu, 0x00000194u, 0x00000240u, - 0x0004003du, 0x00000006u, 0x0000033cu, 0x0000033bu, 0x000500aau, 0x00000035u, 0x0000033du, 0x0000033cu, - 0x0000003fu, 0x000300f7u, 0x0000033fu, 0x00000000u, 0x000400fau, 0x0000033du, 0x0000033eu, 0x00000356u, - 0x000200f8u, 0x0000033eu, 0x00050041u, 0x00000195u, 0x00000340u, 0x00000194u, 0x0000024bu, 0x0004003du, - 0x00000006u, 0x00000341u, 0x00000340u, 0x000500c2u, 0x00000006u, 0x00000342u, 0x00000341u, 0x000001a0u, - 0x0004003du, 0x00000006u, 0x00000343u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000344u, 0x000001cfu, - 0x00050080u, 0x00000006u, 0x00000345u, 0x00000343u, 0x00000344u, 0x00050080u, 0x00000006u, 0x00000346u, - 0x00000342u, 0x00000345u, 0x0004003du, 0x00000006u, 0x00000347u, 0x000001a8u, 0x000500aau, 0x00000035u, - 0x00000348u, 0x00000347u, 0x0000003fu, 0x000300f7u, 0x0000034bu, 0x00000000u, 0x000400fau, 0x00000348u, - 0x0000034au, 0x0000034fu, 0x000200f8u, 0x0000034au, 0x0004003du, 0x00000008u, 0x0000034cu, 0x000001dau, - 0x0004003du, 0x00000008u, 0x0000034du, 0x00000299u, 0x00050081u, 0x00000008u, 0x0000034eu, 0x0000034cu, - 0x0000034du, 0x0003003eu, 0x00000349u, 0x0000034eu, 0x000200f9u, 0x0000034bu, 0x000200f8u, 0x0000034fu, - 0x0004003du, 0x00000008u, 0x00000350u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000351u, 0x00000299u, - 0x00050085u, 0x00000008u, 0x00000352u, 0x00000350u, 0x00000351u, 0x0003003eu, 0x00000349u, 0x00000352u, - 0x000200f9u, 0x0000034bu, 0x000200f8u, 0x0000034bu, 0x0004003du, 0x00000008u, 0x00000353u, 0x00000349u, - 0x0004007cu, 0x00000006u, 0x00000354u, 0x00000353u, 0x00060041u, 0x000001afu, 0x00000355u, 0x0000024au, - 0x000000dcu, 0x00000346u, 0x0003003eu, 0x00000355u, 0x00000354u, 0x000200f9u, 0x0000033fu, 0x000200f8u, - 0x00000356u, 0x00050041u, 0x00000195u, 0x00000357u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, - 0x00000358u, 0x00000357u, 0x000500c2u, 0x00000006u, 0x00000359u, 0x00000358u, 0x00000089u, 0x0004003du, - 0x00000006u, 0x0000035au, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000035bu, 0x000001cfu, 0x00050080u, - 0x00000006u, 0x0000035cu, 0x0000035au, 0x0000035bu, 0x00050080u, 0x00000006u, 0x0000035du, 0x00000359u, - 0x0000035cu, 0x0004003du, 0x00000006u, 0x0000035eu, 0x000001a8u, 0x000500aau, 0x00000035u, 0x0000035fu, - 0x0000035eu, 0x0000003fu, 0x000300f7u, 0x00000362u, 0x00000000u, 0x000400fau, 0x0000035fu, 0x00000361u, - 0x00000366u, 0x000200f8u, 0x00000361u, 0x0004003du, 0x00000008u, 0x00000363u, 0x000001dau, 0x0004003du, - 0x00000008u, 0x00000364u, 0x00000299u, 0x00050081u, 0x00000008u, 0x00000365u, 0x00000363u, 0x00000364u, - 0x0003003eu, 0x00000360u, 0x00000365u, 0x000200f9u, 0x00000362u, 0x000200f8u, 0x00000366u, 0x0004003du, - 0x00000008u, 0x00000367u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000368u, 0x00000299u, 0x00050085u, - 0x00000008u, 0x00000369u, 0x00000367u, 0x00000368u, 0x0003003eu, 0x00000360u, 0x00000369u, 0x000200f9u, - 0x00000362u, 0x000200f8u, 0x00000362u, 0x0004003du, 0x00000008u, 0x0000036bu, 0x00000360u, 0x0003003eu, - 0x0000036au, 0x0000036bu, 0x00050041u, 0x00000195u, 0x0000036du, 0x00000194u, 0x00000240u, 0x0004003du, - 0x00000006u, 0x0000036eu, 0x0000036du, 0x0003003eu, 0x0000036cu, 0x0000036eu, 0x00060039u, 0x00000006u, - 0x0000036fu, 0x00000020u, 0x0000036au, 0x0000036cu, 0x00040071u, 0x000001f7u, 0x00000370u, 0x0000036fu, - 0x00060041u, 0x00000203u, 0x00000371u, 0x0000025au, 0x000000dcu, 0x0000035du, 0x0003003eu, 0x00000371u, - 0x00000370u, 0x000200f9u, 0x0000033fu, 0x000200f8u, 0x0000033fu, 0x000200f9u, 0x0000033au, 0x000200f8u, - 0x0000033au, 0x000400fau, 0x00000372u, 0x00000337u, 0x00000339u, 0x000200f8u, 0x00000339u, 0x000200f9u, - 0x00000336u, 0x000200f8u, 0x00000373u, 0x000200f9u, 0x00000374u, 0x000200f8u, 0x00000374u, 0x000400f6u, - 0x00000376u, 0x00000377u, 0x00000000u, 0x000200f9u, 0x00000375u, 0x000200f8u, 0x00000375u, 0x00050041u, - 0x00000195u, 0x00000378u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000379u, 0x00000378u, - 0x000500aau, 0x00000035u, 0x0000037au, 0x00000379u, 0x0000003fu, 0x000300f7u, 0x0000037cu, 0x00000000u, - 0x000400fau, 0x0000037au, 0x0000037bu, 0x00000393u, 0x000200f8u, 0x0000037bu, 0x00050041u, 0x00000195u, - 0x0000037du, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x0000037eu, 0x0000037du, 0x000500c2u, - 0x00000006u, 0x0000037fu, 0x0000037eu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000380u, 0x00000190u, - 0x0004003du, 0x00000006u, 0x00000381u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000382u, 0x00000380u, - 0x00000381u, 0x00050080u, 0x00000006u, 0x00000383u, 0x0000037fu, 0x00000382u, 0x0004003du, 0x00000006u, - 0x00000384u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x00000385u, 0x00000384u, 0x0000003fu, 0x000300f7u, - 0x00000388u, 0x00000000u, 0x000400fau, 0x00000385u, 0x00000387u, 0x0000038cu, 0x000200f8u, 0x00000387u, - 0x0004003du, 0x00000008u, 0x00000389u, 0x000001dau, 0x0004003du, 0x00000008u, 0x0000038au, 0x00000299u, - 0x00050081u, 0x00000008u, 0x0000038bu, 0x00000389u, 0x0000038au, 0x0003003eu, 0x00000386u, 0x0000038bu, - 0x000200f9u, 0x00000388u, 0x000200f8u, 0x0000038cu, 0x0004003du, 0x00000008u, 0x0000038du, 0x000001dau, - 0x0004003du, 0x00000008u, 0x0000038eu, 0x00000299u, 0x00050085u, 0x00000008u, 0x0000038fu, 0x0000038du, - 0x0000038eu, 0x0003003eu, 0x00000386u, 0x0000038fu, 0x000200f9u, 0x00000388u, 0x000200f8u, 0x00000388u, - 0x0004003du, 0x00000008u, 0x00000390u, 0x00000386u, 0x0004007cu, 0x00000006u, 0x00000391u, 0x00000390u, - 0x00060041u, 0x000001afu, 0x00000392u, 0x00000276u, 0x000000dcu, 0x00000383u, 0x0003003eu, 0x00000392u, - 0x00000391u, 0x000200f9u, 0x0000037cu, 0x000200f8u, 0x00000393u, 0x00050041u, 0x00000195u, 0x00000394u, - 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000395u, 0x00000394u, 0x000500c2u, 0x00000006u, - 0x00000396u, 0x00000395u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000397u, 0x00000190u, 0x0004003du, - 0x00000006u, 0x00000398u, 0x000001cfu, 0x00050080u, 0x00000006u, 0x00000399u, 0x00000397u, 0x00000398u, - 0x00050080u, 0x00000006u, 0x0000039au, 0x00000396u, 0x00000399u, 0x0004003du, 0x00000006u, 0x0000039bu, - 0x000001a8u, 0x000500aau, 0x00000035u, 0x0000039cu, 0x0000039bu, 0x0000003fu, 0x000300f7u, 0x0000039fu, - 0x00000000u, 0x000400fau, 0x0000039cu, 0x0000039eu, 0x000003a3u, 0x000200f8u, 0x0000039eu, 0x0004003du, - 0x00000008u, 0x000003a0u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000003a1u, 0x00000299u, 0x00050081u, - 0x00000008u, 0x000003a2u, 0x000003a0u, 0x000003a1u, 0x0003003eu, 0x0000039du, 0x000003a2u, 0x000200f9u, - 0x0000039fu, 0x000200f8u, 0x000003a3u, 0x0004003du, 0x00000008u, 0x000003a4u, 0x000001dau, 0x0004003du, - 0x00000008u, 0x000003a5u, 0x00000299u, 0x00050085u, 0x00000008u, 0x000003a6u, 0x000003a4u, 0x000003a5u, - 0x0003003eu, 0x0000039du, 0x000003a6u, 0x000200f9u, 0x0000039fu, 0x000200f8u, 0x0000039fu, 0x0004003du, - 0x00000008u, 0x000003a8u, 0x0000039du, 0x0003003eu, 0x000003a7u, 0x000003a8u, 0x00050041u, 0x00000195u, - 0x000003aau, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x000003abu, 0x000003aau, 0x0003003eu, - 0x000003a9u, 0x000003abu, 0x00060039u, 0x00000006u, 0x000003acu, 0x00000020u, 0x000003a7u, 0x000003a9u, - 0x00040071u, 0x000001f7u, 0x000003adu, 0x000003acu, 0x00060041u, 0x00000203u, 0x000003aeu, 0x00000285u, - 0x000000dcu, 0x0000039au, 0x0003003eu, 0x000003aeu, 0x000003adu, 0x000200f9u, 0x0000037cu, 0x000200f8u, - 0x0000037cu, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000377u, 0x000400fau, 0x00000372u, 0x00000374u, - 0x00000376u, 0x000200f8u, 0x00000376u, 0x000200f9u, 0x00000336u, 0x000200f8u, 0x00000336u, 0x000200f9u, - 0x00000332u, 0x000200f8u, 0x00000332u, 0x000400fau, 0x00000372u, 0x0000032fu, 0x00000331u, 0x000200f8u, - 0x00000331u, 0x000200f9u, 0x000001d4u, 0x000200f8u, 0x000001d4u, 0x0004003du, 0x00000006u, 0x000003afu, - 0x000001cfu, 0x00050080u, 0x00000006u, 0x000003b0u, 0x000003afu, 0x00000160u, 0x0003003eu, 0x000001cfu, - 0x000003b0u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d3u, 0x000200f9u, 0x000001ceu, 0x000200f8u, - 0x000003b1u, 0x0004003du, 0x00000006u, 0x000003b2u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x000003b3u, - 0x000003b2u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x000003b4u, 0x000001a8u, 0x000500aau, 0x00000035u, - 0x000003b5u, 0x000003b4u, 0x000001beu, 0x000500a6u, 0x00000035u, 0x000003b6u, 0x000003b3u, 0x000003b5u, - 0x000300f7u, 0x000003b8u, 0x00000000u, 0x000400fau, 0x000003b6u, 0x000003b7u, 0x000004d7u, 0x000200f8u, - 0x000003b7u, 0x0004003du, 0x00000006u, 0x000003bau, 0x0000018cu, 0x0003003eu, 0x000003b9u, 0x000003bau, - 0x000200f9u, 0x000003bbu, 0x000200f8u, 0x000003bbu, 0x000400f6u, 0x000003bdu, 0x000003beu, 0x00000000u, - 0x000200f9u, 0x000003bfu, 0x000200f8u, 0x000003bfu, 0x0004003du, 0x00000006u, 0x000003c0u, 0x000003b9u, - 0x00050041u, 0x00000195u, 0x000003c1u, 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000003c2u, - 0x000003c1u, 0x000500b0u, 0x00000035u, 0x000003c3u, 0x000003c0u, 0x000003c2u, 0x000400fau, 0x000003c3u, - 0x000003bcu, 0x000003bdu, 0x000200f8u, 0x000003bcu, 0x0004003du, 0x00000006u, 0x000003c5u, 0x000001b7u, - 0x000500aau, 0x00000035u, 0x000003c6u, 0x000003c5u, 0x0000003fu, 0x000300f7u, 0x000003c9u, 0x00000000u, - 0x000400fau, 0x000003c6u, 0x000003c8u, 0x000003ebu, 0x000200f8u, 0x000003c8u, 0x00050041u, 0x00000195u, - 0x000003cau, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x000003cau, 0x000500aau, - 0x00000035u, 0x000003ccu, 0x000003cbu, 0x0000003fu, 0x000300f7u, 0x000003cfu, 0x00000000u, 0x000400fau, - 0x000003ccu, 0x000003ceu, 0x000003dau, 0x000200f8u, 0x000003ceu, 0x00050041u, 0x00000195u, 0x000003d0u, - 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000003d1u, 0x000003d0u, 0x000500c2u, 0x00000006u, - 0x000003d2u, 0x000003d1u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000003d3u, 0x00000190u, 0x0004003du, - 0x00000006u, 0x000003d4u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000003d5u, 0x000003d3u, 0x000003d4u, - 0x00050080u, 0x00000006u, 0x000003d6u, 0x000003d2u, 0x000003d5u, 0x00060041u, 0x000001afu, 0x000003d7u, - 0x000001eau, 0x000000dcu, 0x000003d6u, 0x0004003du, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x0004007cu, - 0x00000008u, 0x000003d9u, 0x000003d8u, 0x0003003eu, 0x000003cdu, 0x000003d9u, 0x000200f9u, 0x000003cfu, - 0x000200f8u, 0x000003dau, 0x00050041u, 0x00000195u, 0x000003dbu, 0x00000194u, 0x000001ebu, 0x0004003du, - 0x00000006u, 0x000003dcu, 0x000003dbu, 0x000500c2u, 0x00000006u, 0x000003ddu, 0x000003dcu, 0x00000089u, - 0x0004003du, 0x00000006u, 0x000003deu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000003dfu, 0x000003b9u, - 0x00050080u, 0x00000006u, 0x000003e0u, 0x000003deu, 0x000003dfu, 0x00050080u, 0x00000006u, 0x000003e1u, - 0x000003ddu, 0x000003e0u, 0x00060041u, 0x00000203u, 0x000003e2u, 0x000001fbu, 0x000000dcu, 0x000003e1u, - 0x0004003du, 0x000001f7u, 0x000003e3u, 0x000003e2u, 0x00040071u, 0x00000006u, 0x000003e4u, 0x000003e3u, - 0x0003003eu, 0x000003e5u, 0x000003e4u, 0x00050041u, 0x00000195u, 0x000003e7u, 0x00000194u, 0x000001e0u, - 0x0004003du, 0x00000006u, 0x000003e8u, 0x000003e7u, 0x0003003eu, 0x000003e6u, 0x000003e8u, 0x00060039u, - 0x00000008u, 0x000003e9u, 0x0000001bu, 0x000003e5u, 0x000003e6u, 0x0003003eu, 0x000003cdu, 0x000003e9u, - 0x000200f9u, 0x000003cfu, 0x000200f8u, 0x000003cfu, 0x0004003du, 0x00000008u, 0x000003eau, 0x000003cdu, - 0x0003003eu, 0x000003c7u, 0x000003eau, 0x000200f9u, 0x000003c9u, 0x000200f8u, 0x000003ebu, 0x0004003du, - 0x00000006u, 0x000003ecu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x000003edu, 0x000003ecu, 0x0000004fu, - 0x000300f7u, 0x000003f0u, 0x00000000u, 0x000400fau, 0x000003edu, 0x000003efu, 0x0000040eu, 0x000200f8u, - 0x000003efu, 0x00050041u, 0x00000195u, 0x000003f1u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, - 0x000003f2u, 0x000003f1u, 0x000500aau, 0x00000035u, 0x000003f3u, 0x000003f2u, 0x0000003fu, 0x000300f7u, - 0x000003f6u, 0x00000000u, 0x000400fau, 0x000003f3u, 0x000003f5u, 0x000003ffu, 0x000200f8u, 0x000003f5u, - 0x00050041u, 0x00000195u, 0x000003f7u, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000003f8u, - 0x000003f7u, 0x000500c2u, 0x00000006u, 0x000003f9u, 0x000003f8u, 0x000001a0u, 0x0004003du, 0x00000006u, - 0x000003fau, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000003fbu, 0x000003f9u, 0x000003fau, 0x00060041u, - 0x000001afu, 0x000003fcu, 0x0000021du, 0x000000dcu, 0x000003fbu, 0x0004003du, 0x00000006u, 0x000003fdu, - 0x000003fcu, 0x0004007cu, 0x00000008u, 0x000003feu, 0x000003fdu, 0x0003003eu, 0x000003f4u, 0x000003feu, - 0x000200f9u, 0x000003f6u, 0x000200f8u, 0x000003ffu, 0x00050041u, 0x00000195u, 0x00000400u, 0x00000194u, - 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000401u, 0x00000400u, 0x000500c2u, 0x00000006u, 0x00000402u, - 0x00000401u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000403u, 0x000003b9u, 0x00050080u, 0x00000006u, - 0x00000404u, 0x00000402u, 0x00000403u, 0x00060041u, 0x00000203u, 0x00000405u, 0x0000022bu, 0x000000dcu, - 0x00000404u, 0x0004003du, 0x000001f7u, 0x00000406u, 0x00000405u, 0x00040071u, 0x00000006u, 0x00000407u, - 0x00000406u, 0x0003003eu, 0x00000408u, 0x00000407u, 0x00050041u, 0x00000195u, 0x0000040au, 0x00000194u, - 0x00000213u, 0x0004003du, 0x00000006u, 0x0000040bu, 0x0000040au, 0x0003003eu, 0x00000409u, 0x0000040bu, - 0x00060039u, 0x00000008u, 0x0000040cu, 0x0000001bu, 0x00000408u, 0x00000409u, 0x0003003eu, 0x000003f4u, - 0x0000040cu, 0x000200f9u, 0x000003f6u, 0x000200f8u, 0x000003f6u, 0x0004003du, 0x00000008u, 0x0000040du, - 0x000003f4u, 0x0003003eu, 0x000003eeu, 0x0000040du, 0x000200f9u, 0x000003f0u, 0x000200f8u, 0x0000040eu, - 0x0004003du, 0x00000006u, 0x0000040fu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x00000410u, 0x0000040fu, - 0x0000015eu, 0x000300f7u, 0x00000413u, 0x00000000u, 0x000400fau, 0x00000410u, 0x00000412u, 0x00000435u, - 0x000200f8u, 0x00000412u, 0x00050041u, 0x00000195u, 0x00000414u, 0x00000194u, 0x00000240u, 0x0004003du, - 0x00000006u, 0x00000415u, 0x00000414u, 0x000500aau, 0x00000035u, 0x00000416u, 0x00000415u, 0x0000003fu, - 0x000300f7u, 0x00000419u, 0x00000000u, 0x000400fau, 0x00000416u, 0x00000418u, 0x00000424u, 0x000200f8u, - 0x00000418u, 0x00050041u, 0x00000195u, 0x0000041au, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, - 0x0000041bu, 0x0000041au, 0x000500c2u, 0x00000006u, 0x0000041cu, 0x0000041bu, 0x000001a0u, 0x0004003du, - 0x00000006u, 0x0000041du, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000041eu, 0x000003b9u, 0x00050080u, - 0x00000006u, 0x0000041fu, 0x0000041du, 0x0000041eu, 0x00050080u, 0x00000006u, 0x00000420u, 0x0000041cu, - 0x0000041fu, 0x00060041u, 0x000001afu, 0x00000421u, 0x0000024au, 0x000000dcu, 0x00000420u, 0x0004003du, - 0x00000006u, 0x00000422u, 0x00000421u, 0x0004007cu, 0x00000008u, 0x00000423u, 0x00000422u, 0x0003003eu, - 0x00000417u, 0x00000423u, 0x000200f9u, 0x00000419u, 0x000200f8u, 0x00000424u, 0x00050041u, 0x00000195u, - 0x00000425u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000426u, 0x00000425u, 0x000500c2u, - 0x00000006u, 0x00000427u, 0x00000426u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000428u, 0x00000190u, - 0x0004003du, 0x00000006u, 0x00000429u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x0000042au, 0x00000428u, - 0x00000429u, 0x00050080u, 0x00000006u, 0x0000042bu, 0x00000427u, 0x0000042au, 0x00060041u, 0x00000203u, - 0x0000042cu, 0x0000025au, 0x000000dcu, 0x0000042bu, 0x0004003du, 0x000001f7u, 0x0000042du, 0x0000042cu, - 0x00040071u, 0x00000006u, 0x0000042eu, 0x0000042du, 0x0003003eu, 0x0000042fu, 0x0000042eu, 0x00050041u, - 0x00000195u, 0x00000431u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000432u, 0x00000431u, - 0x0003003eu, 0x00000430u, 0x00000432u, 0x00060039u, 0x00000008u, 0x00000433u, 0x0000001bu, 0x0000042fu, - 0x00000430u, 0x0003003eu, 0x00000417u, 0x00000433u, 0x000200f9u, 0x00000419u, 0x000200f8u, 0x00000419u, - 0x0004003du, 0x00000008u, 0x00000434u, 0x00000417u, 0x0003003eu, 0x00000411u, 0x00000434u, 0x000200f9u, - 0x00000413u, 0x000200f8u, 0x00000435u, 0x00050041u, 0x00000195u, 0x00000436u, 0x00000194u, 0x0000026cu, - 0x0004003du, 0x00000006u, 0x00000437u, 0x00000436u, 0x000500aau, 0x00000035u, 0x00000438u, 0x00000437u, - 0x0000003fu, 0x000300f7u, 0x0000043bu, 0x00000000u, 0x000400fau, 0x00000438u, 0x0000043au, 0x00000446u, - 0x000200f8u, 0x0000043au, 0x00050041u, 0x00000195u, 0x0000043cu, 0x00000194u, 0x00000060u, 0x0004003du, - 0x00000006u, 0x0000043du, 0x0000043cu, 0x000500c2u, 0x00000006u, 0x0000043eu, 0x0000043du, 0x000001a0u, - 0x0004003du, 0x00000006u, 0x0000043fu, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000440u, 0x000003b9u, - 0x00050080u, 0x00000006u, 0x00000441u, 0x0000043fu, 0x00000440u, 0x00050080u, 0x00000006u, 0x00000442u, - 0x0000043eu, 0x00000441u, 0x00060041u, 0x000001afu, 0x00000443u, 0x00000276u, 0x000000dcu, 0x00000442u, - 0x0004003du, 0x00000006u, 0x00000444u, 0x00000443u, 0x0004007cu, 0x00000008u, 0x00000445u, 0x00000444u, - 0x0003003eu, 0x00000439u, 0x00000445u, 0x000200f9u, 0x0000043bu, 0x000200f8u, 0x00000446u, 0x00050041u, - 0x00000195u, 0x00000447u, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000448u, 0x00000447u, - 0x000500c2u, 0x00000006u, 0x00000449u, 0x00000448u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000044au, - 0x00000190u, 0x0004003du, 0x00000006u, 0x0000044bu, 0x000003b9u, 0x00050080u, 0x00000006u, 0x0000044cu, - 0x0000044au, 0x0000044bu, 0x00050080u, 0x00000006u, 0x0000044du, 0x00000449u, 0x0000044cu, 0x00060041u, - 0x00000203u, 0x0000044eu, 0x00000285u, 0x000000dcu, 0x0000044du, 0x0004003du, 0x000001f7u, 0x0000044fu, - 0x0000044eu, 0x00040071u, 0x00000006u, 0x00000450u, 0x0000044fu, 0x0003003eu, 0x00000451u, 0x00000450u, - 0x00050041u, 0x00000195u, 0x00000453u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000454u, - 0x00000453u, 0x0003003eu, 0x00000452u, 0x00000454u, 0x00060039u, 0x00000008u, 0x00000455u, 0x0000001bu, - 0x00000451u, 0x00000452u, 0x0003003eu, 0x00000439u, 0x00000455u, 0x000200f9u, 0x0000043bu, 0x000200f8u, - 0x0000043bu, 0x0004003du, 0x00000008u, 0x00000456u, 0x00000439u, 0x0003003eu, 0x00000411u, 0x00000456u, - 0x000200f9u, 0x00000413u, 0x000200f8u, 0x00000413u, 0x0004003du, 0x00000008u, 0x00000457u, 0x00000411u, - 0x0003003eu, 0x000003eeu, 0x00000457u, 0x000200f9u, 0x000003f0u, 0x000200f8u, 0x000003f0u, 0x0004003du, - 0x00000008u, 0x00000458u, 0x000003eeu, 0x0003003eu, 0x000003c7u, 0x00000458u, 0x000200f9u, 0x000003c9u, - 0x000200f8u, 0x000003c9u, 0x0004003du, 0x00000008u, 0x00000459u, 0x000003c7u, 0x0003003eu, 0x000003c4u, - 0x00000459u, 0x0004003du, 0x00000008u, 0x0000045cu, 0x000003c4u, 0x0003003eu, 0x0000045bu, 0x0000045cu, - 0x00050039u, 0x00000008u, 0x0000045du, 0x00000024u, 0x0000045bu, 0x0003003eu, 0x0000045au, 0x0000045du, - 0x000200f9u, 0x0000045eu, 0x000200f8u, 0x0000045eu, 0x000400f6u, 0x00000460u, 0x00000461u, 0x00000000u, - 0x000200f9u, 0x0000045fu, 0x000200f8u, 0x0000045fu, 0x0004003du, 0x00000006u, 0x00000462u, 0x000001b2u, - 0x000500aau, 0x00000035u, 0x00000463u, 0x00000462u, 0x0000015eu, 0x000300f7u, 0x00000465u, 0x00000000u, - 0x000400fau, 0x00000463u, 0x00000464u, 0x0000049du, 0x000200f8u, 0x00000464u, 0x000200f9u, 0x00000466u, - 0x000200f8u, 0x00000466u, 0x000400f6u, 0x00000468u, 0x00000469u, 0x00000000u, 0x000200f9u, 0x00000467u, - 0x000200f8u, 0x00000467u, 0x00050041u, 0x00000195u, 0x0000046au, 0x00000194u, 0x00000240u, 0x0004003du, - 0x00000006u, 0x0000046bu, 0x0000046au, 0x000500aau, 0x00000035u, 0x0000046cu, 0x0000046bu, 0x0000003fu, - 0x000300f7u, 0x0000046eu, 0x00000000u, 0x000400fau, 0x0000046cu, 0x0000046du, 0x00000483u, 0x000200f8u, - 0x0000046du, 0x00050041u, 0x00000195u, 0x0000046fu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, - 0x00000470u, 0x0000046fu, 0x000500c2u, 0x00000006u, 0x00000471u, 0x00000470u, 0x000001a0u, 0x0004003du, - 0x00000006u, 0x00000472u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000473u, 0x000003b9u, 0x00050080u, - 0x00000006u, 0x00000474u, 0x00000472u, 0x00000473u, 0x00050080u, 0x00000006u, 0x00000475u, 0x00000471u, - 0x00000474u, 0x0004003du, 0x00000006u, 0x00000476u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x00000477u, - 0x00000476u, 0x0000015eu, 0x000300f7u, 0x0000047au, 0x00000000u, 0x000400fau, 0x00000477u, 0x00000479u, - 0x0000047eu, 0x000200f8u, 0x00000479u, 0x0004003du, 0x00000008u, 0x0000047bu, 0x000003c4u, 0x0004003du, - 0x00000008u, 0x0000047cu, 0x0000045au, 0x00050085u, 0x00000008u, 0x0000047du, 0x0000047bu, 0x0000047cu, - 0x0003003eu, 0x00000478u, 0x0000047du, 0x000200f9u, 0x0000047au, 0x000200f8u, 0x0000047eu, 0x0004003du, - 0x00000008u, 0x0000047fu, 0x0000045au, 0x0003003eu, 0x00000478u, 0x0000047fu, 0x000200f9u, 0x0000047au, - 0x000200f8u, 0x0000047au, 0x0004003du, 0x00000008u, 0x00000480u, 0x00000478u, 0x0004007cu, 0x00000006u, - 0x00000481u, 0x00000480u, 0x00060041u, 0x000001afu, 0x00000482u, 0x0000024au, 0x000000dcu, 0x00000475u, - 0x0003003eu, 0x00000482u, 0x00000481u, 0x000200f9u, 0x0000046eu, 0x000200f8u, 0x00000483u, 0x00050041u, - 0x00000195u, 0x00000484u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000485u, 0x00000484u, - 0x000500c2u, 0x00000006u, 0x00000486u, 0x00000485u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000487u, - 0x00000190u, 0x0004003du, 0x00000006u, 0x00000488u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x00000489u, - 0x00000487u, 0x00000488u, 0x00050080u, 0x00000006u, 0x0000048au, 0x00000486u, 0x00000489u, 0x0004003du, - 0x00000006u, 0x0000048bu, 0x000001a8u, 0x000500aau, 0x00000035u, 0x0000048cu, 0x0000048bu, 0x0000015eu, - 0x000300f7u, 0x0000048fu, 0x00000000u, 0x000400fau, 0x0000048cu, 0x0000048eu, 0x00000493u, 0x000200f8u, - 0x0000048eu, 0x0004003du, 0x00000008u, 0x00000490u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000491u, - 0x0000045au, 0x00050085u, 0x00000008u, 0x00000492u, 0x00000490u, 0x00000491u, 0x0003003eu, 0x0000048du, - 0x00000492u, 0x000200f9u, 0x0000048fu, 0x000200f8u, 0x00000493u, 0x0004003du, 0x00000008u, 0x00000494u, - 0x0000045au, 0x0003003eu, 0x0000048du, 0x00000494u, 0x000200f9u, 0x0000048fu, 0x000200f8u, 0x0000048fu, - 0x0004003du, 0x00000008u, 0x00000496u, 0x0000048du, 0x0003003eu, 0x00000495u, 0x00000496u, 0x00050041u, - 0x00000195u, 0x00000498u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000499u, 0x00000498u, - 0x0003003eu, 0x00000497u, 0x00000499u, 0x00060039u, 0x00000006u, 0x0000049au, 0x00000020u, 0x00000495u, - 0x00000497u, 0x00040071u, 0x000001f7u, 0x0000049bu, 0x0000049au, 0x00060041u, 0x00000203u, 0x0000049cu, - 0x0000025au, 0x000000dcu, 0x0000048au, 0x0003003eu, 0x0000049cu, 0x0000049bu, 0x000200f9u, 0x0000046eu, - 0x000200f8u, 0x0000046eu, 0x000200f9u, 0x00000469u, 0x000200f8u, 0x00000469u, 0x000400fau, 0x00000372u, - 0x00000466u, 0x00000468u, 0x000200f8u, 0x00000468u, 0x000200f9u, 0x00000465u, 0x000200f8u, 0x0000049du, - 0x000200f9u, 0x0000049eu, 0x000200f8u, 0x0000049eu, 0x000400f6u, 0x000004a0u, 0x000004a1u, 0x00000000u, - 0x000200f9u, 0x0000049fu, 0x000200f8u, 0x0000049fu, 0x00050041u, 0x00000195u, 0x000004a2u, 0x00000194u, - 0x0000026cu, 0x0004003du, 0x00000006u, 0x000004a3u, 0x000004a2u, 0x000500aau, 0x00000035u, 0x000004a4u, - 0x000004a3u, 0x0000003fu, 0x000300f7u, 0x000004a6u, 0x00000000u, 0x000400fau, 0x000004a4u, 0x000004a5u, - 0x000004bbu, 0x000200f8u, 0x000004a5u, 0x00050041u, 0x00000195u, 0x000004a7u, 0x00000194u, 0x00000060u, - 0x0004003du, 0x00000006u, 0x000004a8u, 0x000004a7u, 0x000500c2u, 0x00000006u, 0x000004a9u, 0x000004a8u, - 0x000001a0u, 0x0004003du, 0x00000006u, 0x000004aau, 0x00000190u, 0x0004003du, 0x00000006u, 0x000004abu, - 0x000003b9u, 0x00050080u, 0x00000006u, 0x000004acu, 0x000004aau, 0x000004abu, 0x00050080u, 0x00000006u, - 0x000004adu, 0x000004a9u, 0x000004acu, 0x0004003du, 0x00000006u, 0x000004aeu, 0x000001a8u, 0x000500aau, - 0x00000035u, 0x000004afu, 0x000004aeu, 0x0000015eu, 0x000300f7u, 0x000004b2u, 0x00000000u, 0x000400fau, - 0x000004afu, 0x000004b1u, 0x000004b6u, 0x000200f8u, 0x000004b1u, 0x0004003du, 0x00000008u, 0x000004b3u, - 0x000003c4u, 0x0004003du, 0x00000008u, 0x000004b4u, 0x0000045au, 0x00050085u, 0x00000008u, 0x000004b5u, - 0x000004b3u, 0x000004b4u, 0x0003003eu, 0x000004b0u, 0x000004b5u, 0x000200f9u, 0x000004b2u, 0x000200f8u, - 0x000004b6u, 0x0004003du, 0x00000008u, 0x000004b7u, 0x0000045au, 0x0003003eu, 0x000004b0u, 0x000004b7u, - 0x000200f9u, 0x000004b2u, 0x000200f8u, 0x000004b2u, 0x0004003du, 0x00000008u, 0x000004b8u, 0x000004b0u, - 0x0004007cu, 0x00000006u, 0x000004b9u, 0x000004b8u, 0x00060041u, 0x000001afu, 0x000004bau, 0x00000276u, - 0x000000dcu, 0x000004adu, 0x0003003eu, 0x000004bau, 0x000004b9u, 0x000200f9u, 0x000004a6u, 0x000200f8u, - 0x000004bbu, 0x00050041u, 0x00000195u, 0x000004bcu, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, - 0x000004bdu, 0x000004bcu, 0x000500c2u, 0x00000006u, 0x000004beu, 0x000004bdu, 0x00000089u, 0x0004003du, - 0x00000006u, 0x000004bfu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000004c0u, 0x000003b9u, 0x00050080u, - 0x00000006u, 0x000004c1u, 0x000004bfu, 0x000004c0u, 0x00050080u, 0x00000006u, 0x000004c2u, 0x000004beu, - 0x000004c1u, 0x0004003du, 0x00000006u, 0x000004c3u, 0x000001a8u, 0x000500aau, 0x00000035u, 0x000004c4u, - 0x000004c3u, 0x0000015eu, 0x000300f7u, 0x000004c7u, 0x00000000u, 0x000400fau, 0x000004c4u, 0x000004c6u, - 0x000004cbu, 0x000200f8u, 0x000004c6u, 0x0004003du, 0x00000008u, 0x000004c8u, 0x000003c4u, 0x0004003du, - 0x00000008u, 0x000004c9u, 0x0000045au, 0x00050085u, 0x00000008u, 0x000004cau, 0x000004c8u, 0x000004c9u, - 0x0003003eu, 0x000004c5u, 0x000004cau, 0x000200f9u, 0x000004c7u, 0x000200f8u, 0x000004cbu, 0x0004003du, - 0x00000008u, 0x000004ccu, 0x0000045au, 0x0003003eu, 0x000004c5u, 0x000004ccu, 0x000200f9u, 0x000004c7u, - 0x000200f8u, 0x000004c7u, 0x0004003du, 0x00000008u, 0x000004ceu, 0x000004c5u, 0x0003003eu, 0x000004cdu, - 0x000004ceu, 0x00050041u, 0x00000195u, 0x000004d0u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, - 0x000004d1u, 0x000004d0u, 0x0003003eu, 0x000004cfu, 0x000004d1u, 0x00060039u, 0x00000006u, 0x000004d2u, - 0x00000020u, 0x000004cdu, 0x000004cfu, 0x00040071u, 0x000001f7u, 0x000004d3u, 0x000004d2u, 0x00060041u, - 0x00000203u, 0x000004d4u, 0x00000285u, 0x000000dcu, 0x000004c2u, 0x0003003eu, 0x000004d4u, 0x000004d3u, - 0x000200f9u, 0x000004a6u, 0x000200f8u, 0x000004a6u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x000004a1u, - 0x000400fau, 0x00000372u, 0x0000049eu, 0x000004a0u, 0x000200f8u, 0x000004a0u, 0x000200f9u, 0x00000465u, - 0x000200f8u, 0x00000465u, 0x000200f9u, 0x00000461u, 0x000200f8u, 0x00000461u, 0x000400fau, 0x00000372u, - 0x0000045eu, 0x00000460u, 0x000200f8u, 0x00000460u, 0x000200f9u, 0x000003beu, 0x000200f8u, 0x000003beu, - 0x0004003du, 0x00000006u, 0x000004d5u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000004d6u, 0x000004d5u, - 0x00000160u, 0x0003003eu, 0x000003b9u, 0x000004d6u, 0x000200f9u, 0x000003bbu, 0x000200f8u, 0x000003bdu, - 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000004d7u, 0x0003003eu, 0x000004d8u, 0x000004d9u, 0x0004003du, - 0x00000006u, 0x000004dbu, 0x0000018cu, 0x0003003eu, 0x000004dau, 0x000004dbu, 0x000200f9u, 0x000004dcu, - 0x000200f8u, 0x000004dcu, 0x000400f6u, 0x000004deu, 0x000004dfu, 0x00000000u, 0x000200f9u, 0x000004e0u, - 0x000200f8u, 0x000004e0u, 0x0004003du, 0x00000006u, 0x000004e1u, 0x000004dau, 0x00050041u, 0x00000195u, - 0x000004e2u, 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000004e3u, 0x000004e2u, 0x000500b0u, - 0x00000035u, 0x000004e4u, 0x000004e1u, 0x000004e3u, 0x000400fau, 0x000004e4u, 0x000004ddu, 0x000004deu, - 0x000200f8u, 0x000004ddu, 0x0004003du, 0x00000006u, 0x000004e6u, 0x000001b7u, 0x000500aau, 0x00000035u, - 0x000004e7u, 0x000004e6u, 0x0000003fu, 0x000300f7u, 0x000004eau, 0x00000000u, 0x000400fau, 0x000004e7u, - 0x000004e9u, 0x0000050cu, 0x000200f8u, 0x000004e9u, 0x00050041u, 0x00000195u, 0x000004ebu, 0x00000194u, - 0x000001e0u, 0x0004003du, 0x00000006u, 0x000004ecu, 0x000004ebu, 0x000500aau, 0x00000035u, 0x000004edu, - 0x000004ecu, 0x0000003fu, 0x000300f7u, 0x000004f0u, 0x00000000u, 0x000400fau, 0x000004edu, 0x000004efu, - 0x000004fbu, 0x000200f8u, 0x000004efu, 0x00050041u, 0x00000195u, 0x000004f1u, 0x00000194u, 0x000001ebu, - 0x0004003du, 0x00000006u, 0x000004f2u, 0x000004f1u, 0x000500c2u, 0x00000006u, 0x000004f3u, 0x000004f2u, - 0x000001a0u, 0x0004003du, 0x00000006u, 0x000004f4u, 0x00000190u, 0x0004003du, 0x00000006u, 0x000004f5u, - 0x000004dau, 0x00050080u, 0x00000006u, 0x000004f6u, 0x000004f4u, 0x000004f5u, 0x00050080u, 0x00000006u, - 0x000004f7u, 0x000004f3u, 0x000004f6u, 0x00060041u, 0x000001afu, 0x000004f8u, 0x000001eau, 0x000000dcu, - 0x000004f7u, 0x0004003du, 0x00000006u, 0x000004f9u, 0x000004f8u, 0x0004007cu, 0x00000008u, 0x000004fau, - 0x000004f9u, 0x0003003eu, 0x000004eeu, 0x000004fau, 0x000200f9u, 0x000004f0u, 0x000200f8u, 0x000004fbu, - 0x00050041u, 0x00000195u, 0x000004fcu, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000004fdu, - 0x000004fcu, 0x000500c2u, 0x00000006u, 0x000004feu, 0x000004fdu, 0x00000089u, 0x0004003du, 0x00000006u, - 0x000004ffu, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000500u, 0x000004dau, 0x00050080u, 0x00000006u, - 0x00000501u, 0x000004ffu, 0x00000500u, 0x00050080u, 0x00000006u, 0x00000502u, 0x000004feu, 0x00000501u, - 0x00060041u, 0x00000203u, 0x00000503u, 0x000001fbu, 0x000000dcu, 0x00000502u, 0x0004003du, 0x000001f7u, - 0x00000504u, 0x00000503u, 0x00040071u, 0x00000006u, 0x00000505u, 0x00000504u, 0x0003003eu, 0x00000506u, - 0x00000505u, 0x00050041u, 0x00000195u, 0x00000508u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, - 0x00000509u, 0x00000508u, 0x0003003eu, 0x00000507u, 0x00000509u, 0x00060039u, 0x00000008u, 0x0000050au, - 0x0000001bu, 0x00000506u, 0x00000507u, 0x0003003eu, 0x000004eeu, 0x0000050au, 0x000200f9u, 0x000004f0u, - 0x000200f8u, 0x000004f0u, 0x0004003du, 0x00000008u, 0x0000050bu, 0x000004eeu, 0x0003003eu, 0x000004e8u, - 0x0000050bu, 0x000200f9u, 0x000004eau, 0x000200f8u, 0x0000050cu, 0x0004003du, 0x00000006u, 0x0000050du, - 0x000001b7u, 0x000500aau, 0x00000035u, 0x0000050eu, 0x0000050du, 0x0000004fu, 0x000300f7u, 0x00000511u, - 0x00000000u, 0x000400fau, 0x0000050eu, 0x00000510u, 0x0000052fu, 0x000200f8u, 0x00000510u, 0x00050041u, - 0x00000195u, 0x00000512u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x00000513u, 0x00000512u, - 0x000500aau, 0x00000035u, 0x00000514u, 0x00000513u, 0x0000003fu, 0x000300f7u, 0x00000517u, 0x00000000u, - 0x000400fau, 0x00000514u, 0x00000516u, 0x00000520u, 0x000200f8u, 0x00000516u, 0x00050041u, 0x00000195u, - 0x00000518u, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000519u, 0x00000518u, 0x000500c2u, - 0x00000006u, 0x0000051au, 0x00000519u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000051bu, 0x000004dau, - 0x00050080u, 0x00000006u, 0x0000051cu, 0x0000051au, 0x0000051bu, 0x00060041u, 0x000001afu, 0x0000051du, - 0x0000021du, 0x000000dcu, 0x0000051cu, 0x0004003du, 0x00000006u, 0x0000051eu, 0x0000051du, 0x0004007cu, - 0x00000008u, 0x0000051fu, 0x0000051eu, 0x0003003eu, 0x00000515u, 0x0000051fu, 0x000200f9u, 0x00000517u, - 0x000200f8u, 0x00000520u, 0x00050041u, 0x00000195u, 0x00000521u, 0x00000194u, 0x0000021eu, 0x0004003du, - 0x00000006u, 0x00000522u, 0x00000521u, 0x000500c2u, 0x00000006u, 0x00000523u, 0x00000522u, 0x00000089u, - 0x0004003du, 0x00000006u, 0x00000524u, 0x000004dau, 0x00050080u, 0x00000006u, 0x00000525u, 0x00000523u, - 0x00000524u, 0x00060041u, 0x00000203u, 0x00000526u, 0x0000022bu, 0x000000dcu, 0x00000525u, 0x0004003du, - 0x000001f7u, 0x00000527u, 0x00000526u, 0x00040071u, 0x00000006u, 0x00000528u, 0x00000527u, 0x0003003eu, - 0x00000529u, 0x00000528u, 0x00050041u, 0x00000195u, 0x0000052bu, 0x00000194u, 0x00000213u, 0x0004003du, - 0x00000006u, 0x0000052cu, 0x0000052bu, 0x0003003eu, 0x0000052au, 0x0000052cu, 0x00060039u, 0x00000008u, - 0x0000052du, 0x0000001bu, 0x00000529u, 0x0000052au, 0x0003003eu, 0x00000515u, 0x0000052du, 0x000200f9u, - 0x00000517u, 0x000200f8u, 0x00000517u, 0x0004003du, 0x00000008u, 0x0000052eu, 0x00000515u, 0x0003003eu, - 0x0000050fu, 0x0000052eu, 0x000200f9u, 0x00000511u, 0x000200f8u, 0x0000052fu, 0x0004003du, 0x00000006u, - 0x00000530u, 0x000001b7u, 0x000500aau, 0x00000035u, 0x00000531u, 0x00000530u, 0x0000015eu, 0x000300f7u, - 0x00000534u, 0x00000000u, 0x000400fau, 0x00000531u, 0x00000533u, 0x00000556u, 0x000200f8u, 0x00000533u, - 0x00050041u, 0x00000195u, 0x00000535u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000536u, - 0x00000535u, 0x000500aau, 0x00000035u, 0x00000537u, 0x00000536u, 0x0000003fu, 0x000300f7u, 0x0000053au, - 0x00000000u, 0x000400fau, 0x00000537u, 0x00000539u, 0x00000545u, 0x000200f8u, 0x00000539u, 0x00050041u, - 0x00000195u, 0x0000053bu, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x0000053cu, 0x0000053bu, - 0x000500c2u, 0x00000006u, 0x0000053du, 0x0000053cu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000053eu, - 0x00000190u, 0x0004003du, 0x00000006u, 0x0000053fu, 0x000004dau, 0x00050080u, 0x00000006u, 0x00000540u, - 0x0000053eu, 0x0000053fu, 0x00050080u, 0x00000006u, 0x00000541u, 0x0000053du, 0x00000540u, 0x00060041u, - 0x000001afu, 0x00000542u, 0x0000024au, 0x000000dcu, 0x00000541u, 0x0004003du, 0x00000006u, 0x00000543u, - 0x00000542u, 0x0004007cu, 0x00000008u, 0x00000544u, 0x00000543u, 0x0003003eu, 0x00000538u, 0x00000544u, - 0x000200f9u, 0x0000053au, 0x000200f8u, 0x00000545u, 0x00050041u, 0x00000195u, 0x00000546u, 0x00000194u, - 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000547u, 0x00000546u, 0x000500c2u, 0x00000006u, 0x00000548u, - 0x00000547u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000549u, 0x00000190u, 0x0004003du, 0x00000006u, - 0x0000054au, 0x000004dau, 0x00050080u, 0x00000006u, 0x0000054bu, 0x00000549u, 0x0000054au, 0x00050080u, - 0x00000006u, 0x0000054cu, 0x00000548u, 0x0000054bu, 0x00060041u, 0x00000203u, 0x0000054du, 0x0000025au, - 0x000000dcu, 0x0000054cu, 0x0004003du, 0x000001f7u, 0x0000054eu, 0x0000054du, 0x00040071u, 0x00000006u, - 0x0000054fu, 0x0000054eu, 0x0003003eu, 0x00000550u, 0x0000054fu, 0x00050041u, 0x00000195u, 0x00000552u, - 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x00000553u, 0x00000552u, 0x0003003eu, 0x00000551u, - 0x00000553u, 0x00060039u, 0x00000008u, 0x00000554u, 0x0000001bu, 0x00000550u, 0x00000551u, 0x0003003eu, - 0x00000538u, 0x00000554u, 0x000200f9u, 0x0000053au, 0x000200f8u, 0x0000053au, 0x0004003du, 0x00000008u, - 0x00000555u, 0x00000538u, 0x0003003eu, 0x00000532u, 0x00000555u, 0x000200f9u, 0x00000534u, 0x000200f8u, - 0x00000556u, 0x00050041u, 0x00000195u, 0x00000557u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, - 0x00000558u, 0x00000557u, 0x000500aau, 0x00000035u, 0x00000559u, 0x00000558u, 0x0000003fu, 0x000300f7u, - 0x0000055cu, 0x00000000u, 0x000400fau, 0x00000559u, 0x0000055bu, 0x00000567u, 0x000200f8u, 0x0000055bu, - 0x00050041u, 0x00000195u, 0x0000055du, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x0000055eu, - 0x0000055du, 0x000500c2u, 0x00000006u, 0x0000055fu, 0x0000055eu, 0x000001a0u, 0x0004003du, 0x00000006u, - 0x00000560u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000561u, 0x000004dau, 0x00050080u, 0x00000006u, - 0x00000562u, 0x00000560u, 0x00000561u, 0x00050080u, 0x00000006u, 0x00000563u, 0x0000055fu, 0x00000562u, - 0x00060041u, 0x000001afu, 0x00000564u, 0x00000276u, 0x000000dcu, 0x00000563u, 0x0004003du, 0x00000006u, - 0x00000565u, 0x00000564u, 0x0004007cu, 0x00000008u, 0x00000566u, 0x00000565u, 0x0003003eu, 0x0000055au, - 0x00000566u, 0x000200f9u, 0x0000055cu, 0x000200f8u, 0x00000567u, 0x00050041u, 0x00000195u, 0x00000568u, - 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000569u, 0x00000568u, 0x000500c2u, 0x00000006u, - 0x0000056au, 0x00000569u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000056bu, 0x00000190u, 0x0004003du, - 0x00000006u, 0x0000056cu, 0x000004dau, 0x00050080u, 0x00000006u, 0x0000056du, 0x0000056bu, 0x0000056cu, - 0x00050080u, 0x00000006u, 0x0000056eu, 0x0000056au, 0x0000056du, 0x00060041u, 0x00000203u, 0x0000056fu, - 0x00000285u, 0x000000dcu, 0x0000056eu, 0x0004003du, 0x000001f7u, 0x00000570u, 0x0000056fu, 0x00040071u, - 0x00000006u, 0x00000571u, 0x00000570u, 0x0003003eu, 0x00000572u, 0x00000571u, 0x00050041u, 0x00000195u, - 0x00000574u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000575u, 0x00000574u, 0x0003003eu, - 0x00000573u, 0x00000575u, 0x00060039u, 0x00000008u, 0x00000576u, 0x0000001bu, 0x00000572u, 0x00000573u, - 0x0003003eu, 0x0000055au, 0x00000576u, 0x000200f9u, 0x0000055cu, 0x000200f8u, 0x0000055cu, 0x0004003du, - 0x00000008u, 0x00000577u, 0x0000055au, 0x0003003eu, 0x00000532u, 0x00000577u, 0x000200f9u, 0x00000534u, - 0x000200f8u, 0x00000534u, 0x0004003du, 0x00000008u, 0x00000578u, 0x00000532u, 0x0003003eu, 0x0000050fu, - 0x00000578u, 0x000200f9u, 0x00000511u, 0x000200f8u, 0x00000511u, 0x0004003du, 0x00000008u, 0x00000579u, - 0x0000050fu, 0x0003003eu, 0x000004e8u, 0x00000579u, 0x000200f9u, 0x000004eau, 0x000200f8u, 0x000004eau, - 0x0004003du, 0x00000008u, 0x0000057au, 0x000004e8u, 0x0003003eu, 0x000004e5u, 0x0000057au, 0x0004003du, - 0x00000008u, 0x0000057bu, 0x000004e5u, 0x0004003du, 0x00000008u, 0x0000057cu, 0x000004e5u, 0x00050085u, - 0x00000008u, 0x0000057du, 0x0000057bu, 0x0000057cu, 0x0004003du, 0x00000008u, 0x0000057eu, 0x000004d8u, - 0x00050081u, 0x00000008u, 0x0000057fu, 0x0000057eu, 0x0000057du, 0x0003003eu, 0x000004d8u, 0x0000057fu, - 0x000200f9u, 0x000004dfu, 0x000200f8u, 0x000004dfu, 0x0004003du, 0x00000006u, 0x00000580u, 0x000004dau, - 0x00050080u, 0x00000006u, 0x00000581u, 0x00000580u, 0x00000160u, 0x0003003eu, 0x000004dau, 0x00000581u, - 0x000200f9u, 0x000004dcu, 0x000200f8u, 0x000004deu, 0x0004003du, 0x00000006u, 0x00000584u, 0x0000018cu, - 0x0003003eu, 0x00000583u, 0x00000584u, 0x0004003du, 0x00000008u, 0x00000586u, 0x000004d8u, 0x0003003eu, - 0x00000585u, 0x00000586u, 0x00060039u, 0x00000008u, 0x00000587u, 0x00000029u, 0x00000583u, 0x00000585u, - 0x00050041u, 0x00000195u, 0x00000588u, 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000589u, - 0x00000588u, 0x00040070u, 0x00000008u, 0x0000058au, 0x00000589u, 0x00050088u, 0x00000008u, 0x0000058bu, - 0x00000587u, 0x0000058au, 0x00050041u, 0x0000058du, 0x0000058eu, 0x00000194u, 0x0000058cu, 0x0004003du, - 0x00000008u, 0x0000058fu, 0x0000058eu, 0x00050081u, 0x00000008u, 0x00000590u, 0x0000058bu, 0x0000058fu, - 0x0006000cu, 0x00000008u, 0x00000591u, 0x00000001u, 0x0000001fu, 0x00000590u, 0x00050088u, 0x00000008u, - 0x00000592u, 0x00000156u, 0x00000591u, 0x0003003eu, 0x00000582u, 0x00000592u, 0x0004003du, 0x00000006u, - 0x00000594u, 0x0000018cu, 0x0003003eu, 0x00000593u, 0x00000594u, 0x000200f9u, 0x00000595u, 0x000200f8u, - 0x00000595u, 0x000400f6u, 0x00000597u, 0x00000598u, 0x00000000u, 0x000200f9u, 0x00000599u, 0x000200f8u, - 0x00000599u, 0x0004003du, 0x00000006u, 0x0000059au, 0x00000593u, 0x00050041u, 0x00000195u, 0x0000059bu, - 0x00000194u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000059cu, 0x0000059bu, 0x000500b0u, 0x00000035u, - 0x0000059du, 0x0000059au, 0x0000059cu, 0x000400fau, 0x0000059du, 0x00000596u, 0x00000597u, 0x000200f8u, - 0x00000596u, 0x0004003du, 0x00000006u, 0x0000059fu, 0x000001b7u, 0x000500aau, 0x00000035u, 0x000005a0u, - 0x0000059fu, 0x0000003fu, 0x000300f7u, 0x000005a3u, 0x00000000u, 0x000400fau, 0x000005a0u, 0x000005a2u, - 0x000005c5u, 0x000200f8u, 0x000005a2u, 0x00050041u, 0x00000195u, 0x000005a4u, 0x00000194u, 0x000001e0u, - 0x0004003du, 0x00000006u, 0x000005a5u, 0x000005a4u, 0x000500aau, 0x00000035u, 0x000005a6u, 0x000005a5u, - 0x0000003fu, 0x000300f7u, 0x000005a9u, 0x00000000u, 0x000400fau, 0x000005a6u, 0x000005a8u, 0x000005b4u, - 0x000200f8u, 0x000005a8u, 0x00050041u, 0x00000195u, 0x000005aau, 0x00000194u, 0x000001ebu, 0x0004003du, - 0x00000006u, 0x000005abu, 0x000005aau, 0x000500c2u, 0x00000006u, 0x000005acu, 0x000005abu, 0x000001a0u, - 0x0004003du, 0x00000006u, 0x000005adu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000005aeu, 0x00000593u, - 0x00050080u, 0x00000006u, 0x000005afu, 0x000005adu, 0x000005aeu, 0x00050080u, 0x00000006u, 0x000005b0u, - 0x000005acu, 0x000005afu, 0x00060041u, 0x000001afu, 0x000005b1u, 0x000001eau, 0x000000dcu, 0x000005b0u, - 0x0004003du, 0x00000006u, 0x000005b2u, 0x000005b1u, 0x0004007cu, 0x00000008u, 0x000005b3u, 0x000005b2u, - 0x0003003eu, 0x000005a7u, 0x000005b3u, 0x000200f9u, 0x000005a9u, 0x000200f8u, 0x000005b4u, 0x00050041u, - 0x00000195u, 0x000005b5u, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x000005b6u, 0x000005b5u, - 0x000500c2u, 0x00000006u, 0x000005b7u, 0x000005b6u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000005b8u, - 0x00000190u, 0x0004003du, 0x00000006u, 0x000005b9u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000005bau, - 0x000005b8u, 0x000005b9u, 0x00050080u, 0x00000006u, 0x000005bbu, 0x000005b7u, 0x000005bau, 0x00060041u, - 0x00000203u, 0x000005bcu, 0x000001fbu, 0x000000dcu, 0x000005bbu, 0x0004003du, 0x000001f7u, 0x000005bdu, - 0x000005bcu, 0x00040071u, 0x00000006u, 0x000005beu, 0x000005bdu, 0x0003003eu, 0x000005bfu, 0x000005beu, - 0x00050041u, 0x00000195u, 0x000005c1u, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000005c2u, - 0x000005c1u, 0x0003003eu, 0x000005c0u, 0x000005c2u, 0x00060039u, 0x00000008u, 0x000005c3u, 0x0000001bu, - 0x000005bfu, 0x000005c0u, 0x0003003eu, 0x000005a7u, 0x000005c3u, 0x000200f9u, 0x000005a9u, 0x000200f8u, - 0x000005a9u, 0x0004003du, 0x00000008u, 0x000005c4u, 0x000005a7u, 0x0003003eu, 0x000005a1u, 0x000005c4u, - 0x000200f9u, 0x000005a3u, 0x000200f8u, 0x000005c5u, 0x0004003du, 0x00000006u, 0x000005c6u, 0x000001b7u, - 0x000500aau, 0x00000035u, 0x000005c7u, 0x000005c6u, 0x0000004fu, 0x000300f7u, 0x000005cau, 0x00000000u, - 0x000400fau, 0x000005c7u, 0x000005c9u, 0x000005e8u, 0x000200f8u, 0x000005c9u, 0x00050041u, 0x00000195u, - 0x000005cbu, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x000005ccu, 0x000005cbu, 0x000500aau, - 0x00000035u, 0x000005cdu, 0x000005ccu, 0x0000003fu, 0x000300f7u, 0x000005d0u, 0x00000000u, 0x000400fau, - 0x000005cdu, 0x000005cfu, 0x000005d9u, 0x000200f8u, 0x000005cfu, 0x00050041u, 0x00000195u, 0x000005d1u, - 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000005d2u, 0x000005d1u, 0x000500c2u, 0x00000006u, - 0x000005d3u, 0x000005d2u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000005d4u, 0x00000593u, 0x00050080u, - 0x00000006u, 0x000005d5u, 0x000005d3u, 0x000005d4u, 0x00060041u, 0x000001afu, 0x000005d6u, 0x0000021du, - 0x000000dcu, 0x000005d5u, 0x0004003du, 0x00000006u, 0x000005d7u, 0x000005d6u, 0x0004007cu, 0x00000008u, - 0x000005d8u, 0x000005d7u, 0x0003003eu, 0x000005ceu, 0x000005d8u, 0x000200f9u, 0x000005d0u, 0x000200f8u, - 0x000005d9u, 0x00050041u, 0x00000195u, 0x000005dau, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, - 0x000005dbu, 0x000005dau, 0x000500c2u, 0x00000006u, 0x000005dcu, 0x000005dbu, 0x00000089u, 0x0004003du, - 0x00000006u, 0x000005ddu, 0x00000593u, 0x00050080u, 0x00000006u, 0x000005deu, 0x000005dcu, 0x000005ddu, - 0x00060041u, 0x00000203u, 0x000005dfu, 0x0000022bu, 0x000000dcu, 0x000005deu, 0x0004003du, 0x000001f7u, - 0x000005e0u, 0x000005dfu, 0x00040071u, 0x00000006u, 0x000005e1u, 0x000005e0u, 0x0003003eu, 0x000005e2u, - 0x000005e1u, 0x00050041u, 0x00000195u, 0x000005e4u, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, - 0x000005e5u, 0x000005e4u, 0x0003003eu, 0x000005e3u, 0x000005e5u, 0x00060039u, 0x00000008u, 0x000005e6u, - 0x0000001bu, 0x000005e2u, 0x000005e3u, 0x0003003eu, 0x000005ceu, 0x000005e6u, 0x000200f9u, 0x000005d0u, - 0x000200f8u, 0x000005d0u, 0x0004003du, 0x00000008u, 0x000005e7u, 0x000005ceu, 0x0003003eu, 0x000005c8u, - 0x000005e7u, 0x000200f9u, 0x000005cau, 0x000200f8u, 0x000005e8u, 0x0004003du, 0x00000006u, 0x000005e9u, - 0x000001b7u, 0x000500aau, 0x00000035u, 0x000005eau, 0x000005e9u, 0x0000015eu, 0x000300f7u, 0x000005edu, - 0x00000000u, 0x000400fau, 0x000005eau, 0x000005ecu, 0x0000060fu, 0x000200f8u, 0x000005ecu, 0x00050041u, - 0x00000195u, 0x000005eeu, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x000005efu, 0x000005eeu, - 0x000500aau, 0x00000035u, 0x000005f0u, 0x000005efu, 0x0000003fu, 0x000300f7u, 0x000005f3u, 0x00000000u, - 0x000400fau, 0x000005f0u, 0x000005f2u, 0x000005feu, 0x000200f8u, 0x000005f2u, 0x00050041u, 0x00000195u, - 0x000005f4u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000005f5u, 0x000005f4u, 0x000500c2u, - 0x00000006u, 0x000005f6u, 0x000005f5u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000005f7u, 0x00000190u, - 0x0004003du, 0x00000006u, 0x000005f8u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000005f9u, 0x000005f7u, - 0x000005f8u, 0x00050080u, 0x00000006u, 0x000005fau, 0x000005f6u, 0x000005f9u, 0x00060041u, 0x000001afu, - 0x000005fbu, 0x0000024au, 0x000000dcu, 0x000005fau, 0x0004003du, 0x00000006u, 0x000005fcu, 0x000005fbu, - 0x0004007cu, 0x00000008u, 0x000005fdu, 0x000005fcu, 0x0003003eu, 0x000005f1u, 0x000005fdu, 0x000200f9u, - 0x000005f3u, 0x000200f8u, 0x000005feu, 0x00050041u, 0x00000195u, 0x000005ffu, 0x00000194u, 0x0000024bu, - 0x0004003du, 0x00000006u, 0x00000600u, 0x000005ffu, 0x000500c2u, 0x00000006u, 0x00000601u, 0x00000600u, - 0x00000089u, 0x0004003du, 0x00000006u, 0x00000602u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000603u, - 0x00000593u, 0x00050080u, 0x00000006u, 0x00000604u, 0x00000602u, 0x00000603u, 0x00050080u, 0x00000006u, - 0x00000605u, 0x00000601u, 0x00000604u, 0x00060041u, 0x00000203u, 0x00000606u, 0x0000025au, 0x000000dcu, - 0x00000605u, 0x0004003du, 0x000001f7u, 0x00000607u, 0x00000606u, 0x00040071u, 0x00000006u, 0x00000608u, - 0x00000607u, 0x0003003eu, 0x00000609u, 0x00000608u, 0x00050041u, 0x00000195u, 0x0000060bu, 0x00000194u, - 0x00000240u, 0x0004003du, 0x00000006u, 0x0000060cu, 0x0000060bu, 0x0003003eu, 0x0000060au, 0x0000060cu, - 0x00060039u, 0x00000008u, 0x0000060du, 0x0000001bu, 0x00000609u, 0x0000060au, 0x0003003eu, 0x000005f1u, - 0x0000060du, 0x000200f9u, 0x000005f3u, 0x000200f8u, 0x000005f3u, 0x0004003du, 0x00000008u, 0x0000060eu, - 0x000005f1u, 0x0003003eu, 0x000005ebu, 0x0000060eu, 0x000200f9u, 0x000005edu, 0x000200f8u, 0x0000060fu, - 0x00050041u, 0x00000195u, 0x00000610u, 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x00000611u, - 0x00000610u, 0x000500aau, 0x00000035u, 0x00000612u, 0x00000611u, 0x0000003fu, 0x000300f7u, 0x00000615u, - 0x00000000u, 0x000400fau, 0x00000612u, 0x00000614u, 0x00000620u, 0x000200f8u, 0x00000614u, 0x00050041u, - 0x00000195u, 0x00000616u, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000617u, 0x00000616u, - 0x000500c2u, 0x00000006u, 0x00000618u, 0x00000617u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000619u, - 0x00000190u, 0x0004003du, 0x00000006u, 0x0000061au, 0x00000593u, 0x00050080u, 0x00000006u, 0x0000061bu, - 0x00000619u, 0x0000061au, 0x00050080u, 0x00000006u, 0x0000061cu, 0x00000618u, 0x0000061bu, 0x00060041u, - 0x000001afu, 0x0000061du, 0x00000276u, 0x000000dcu, 0x0000061cu, 0x0004003du, 0x00000006u, 0x0000061eu, - 0x0000061du, 0x0004007cu, 0x00000008u, 0x0000061fu, 0x0000061eu, 0x0003003eu, 0x00000613u, 0x0000061fu, - 0x000200f9u, 0x00000615u, 0x000200f8u, 0x00000620u, 0x00050041u, 0x00000195u, 0x00000621u, 0x00000194u, - 0x00000060u, 0x0004003du, 0x00000006u, 0x00000622u, 0x00000621u, 0x000500c2u, 0x00000006u, 0x00000623u, - 0x00000622u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000624u, 0x00000190u, 0x0004003du, 0x00000006u, - 0x00000625u, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000626u, 0x00000624u, 0x00000625u, 0x00050080u, - 0x00000006u, 0x00000627u, 0x00000623u, 0x00000626u, 0x00060041u, 0x00000203u, 0x00000628u, 0x00000285u, - 0x000000dcu, 0x00000627u, 0x0004003du, 0x000001f7u, 0x00000629u, 0x00000628u, 0x00040071u, 0x00000006u, - 0x0000062au, 0x00000629u, 0x0003003eu, 0x0000062bu, 0x0000062au, 0x00050041u, 0x00000195u, 0x0000062du, - 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x0000062eu, 0x0000062du, 0x0003003eu, 0x0000062cu, - 0x0000062eu, 0x00060039u, 0x00000008u, 0x0000062fu, 0x0000001bu, 0x0000062bu, 0x0000062cu, 0x0003003eu, - 0x00000613u, 0x0000062fu, 0x000200f9u, 0x00000615u, 0x000200f8u, 0x00000615u, 0x0004003du, 0x00000008u, - 0x00000630u, 0x00000613u, 0x0003003eu, 0x000005ebu, 0x00000630u, 0x000200f9u, 0x000005edu, 0x000200f8u, - 0x000005edu, 0x0004003du, 0x00000008u, 0x00000631u, 0x000005ebu, 0x0003003eu, 0x000005c8u, 0x00000631u, - 0x000200f9u, 0x000005cau, 0x000200f8u, 0x000005cau, 0x0004003du, 0x00000008u, 0x00000632u, 0x000005c8u, - 0x0003003eu, 0x000005a1u, 0x00000632u, 0x000200f9u, 0x000005a3u, 0x000200f8u, 0x000005a3u, 0x0004003du, - 0x00000008u, 0x00000633u, 0x000005a1u, 0x0003003eu, 0x0000059eu, 0x00000633u, 0x0004003du, 0x00000006u, - 0x00000635u, 0x000001bcu, 0x000500aau, 0x00000035u, 0x00000636u, 0x00000635u, 0x0000003fu, 0x000300f7u, - 0x00000639u, 0x00000000u, 0x000400fau, 0x00000636u, 0x00000638u, 0x0000065bu, 0x000200f8u, 0x00000638u, - 0x00050041u, 0x00000195u, 0x0000063au, 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x0000063bu, - 0x0000063au, 0x000500aau, 0x00000035u, 0x0000063cu, 0x0000063bu, 0x0000003fu, 0x000300f7u, 0x0000063fu, - 0x00000000u, 0x000400fau, 0x0000063cu, 0x0000063eu, 0x0000064au, 0x000200f8u, 0x0000063eu, 0x00050041u, - 0x00000195u, 0x00000640u, 0x00000194u, 0x000001ebu, 0x0004003du, 0x00000006u, 0x00000641u, 0x00000640u, - 0x000500c2u, 0x00000006u, 0x00000642u, 0x00000641u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000643u, - 0x00000190u, 0x0004003du, 0x00000006u, 0x00000644u, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000645u, - 0x00000643u, 0x00000644u, 0x00050080u, 0x00000006u, 0x00000646u, 0x00000642u, 0x00000645u, 0x00060041u, - 0x000001afu, 0x00000647u, 0x000001eau, 0x000000dcu, 0x00000646u, 0x0004003du, 0x00000006u, 0x00000648u, - 0x00000647u, 0x0004007cu, 0x00000008u, 0x00000649u, 0x00000648u, 0x0003003eu, 0x0000063du, 0x00000649u, - 0x000200f9u, 0x0000063fu, 0x000200f8u, 0x0000064au, 0x00050041u, 0x00000195u, 0x0000064bu, 0x00000194u, - 0x000001ebu, 0x0004003du, 0x00000006u, 0x0000064cu, 0x0000064bu, 0x000500c2u, 0x00000006u, 0x0000064du, - 0x0000064cu, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000064eu, 0x00000190u, 0x0004003du, 0x00000006u, - 0x0000064fu, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000650u, 0x0000064eu, 0x0000064fu, 0x00050080u, - 0x00000006u, 0x00000651u, 0x0000064du, 0x00000650u, 0x00060041u, 0x00000203u, 0x00000652u, 0x000001fbu, - 0x000000dcu, 0x00000651u, 0x0004003du, 0x000001f7u, 0x00000653u, 0x00000652u, 0x00040071u, 0x00000006u, - 0x00000654u, 0x00000653u, 0x0003003eu, 0x00000655u, 0x00000654u, 0x00050041u, 0x00000195u, 0x00000657u, - 0x00000194u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x00000658u, 0x00000657u, 0x0003003eu, 0x00000656u, - 0x00000658u, 0x00060039u, 0x00000008u, 0x00000659u, 0x0000001bu, 0x00000655u, 0x00000656u, 0x0003003eu, - 0x0000063du, 0x00000659u, 0x000200f9u, 0x0000063fu, 0x000200f8u, 0x0000063fu, 0x0004003du, 0x00000008u, - 0x0000065au, 0x0000063du, 0x0003003eu, 0x00000637u, 0x0000065au, 0x000200f9u, 0x00000639u, 0x000200f8u, - 0x0000065bu, 0x0004003du, 0x00000006u, 0x0000065cu, 0x000001bcu, 0x000500aau, 0x00000035u, 0x0000065du, - 0x0000065cu, 0x0000004fu, 0x000300f7u, 0x00000660u, 0x00000000u, 0x000400fau, 0x0000065du, 0x0000065fu, - 0x0000067eu, 0x000200f8u, 0x0000065fu, 0x00050041u, 0x00000195u, 0x00000661u, 0x00000194u, 0x00000213u, - 0x0004003du, 0x00000006u, 0x00000662u, 0x00000661u, 0x000500aau, 0x00000035u, 0x00000663u, 0x00000662u, - 0x0000003fu, 0x000300f7u, 0x00000666u, 0x00000000u, 0x000400fau, 0x00000663u, 0x00000665u, 0x0000066fu, - 0x000200f8u, 0x00000665u, 0x00050041u, 0x00000195u, 0x00000667u, 0x00000194u, 0x0000021eu, 0x0004003du, - 0x00000006u, 0x00000668u, 0x00000667u, 0x000500c2u, 0x00000006u, 0x00000669u, 0x00000668u, 0x000001a0u, - 0x0004003du, 0x00000006u, 0x0000066au, 0x00000593u, 0x00050080u, 0x00000006u, 0x0000066bu, 0x00000669u, - 0x0000066au, 0x00060041u, 0x000001afu, 0x0000066cu, 0x0000021du, 0x000000dcu, 0x0000066bu, 0x0004003du, - 0x00000006u, 0x0000066du, 0x0000066cu, 0x0004007cu, 0x00000008u, 0x0000066eu, 0x0000066du, 0x0003003eu, - 0x00000664u, 0x0000066eu, 0x000200f9u, 0x00000666u, 0x000200f8u, 0x0000066fu, 0x00050041u, 0x00000195u, - 0x00000670u, 0x00000194u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000671u, 0x00000670u, 0x000500c2u, - 0x00000006u, 0x00000672u, 0x00000671u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000673u, 0x00000593u, - 0x00050080u, 0x00000006u, 0x00000674u, 0x00000672u, 0x00000673u, 0x00060041u, 0x00000203u, 0x00000675u, - 0x0000022bu, 0x000000dcu, 0x00000674u, 0x0004003du, 0x000001f7u, 0x00000676u, 0x00000675u, 0x00040071u, - 0x00000006u, 0x00000677u, 0x00000676u, 0x0003003eu, 0x00000678u, 0x00000677u, 0x00050041u, 0x00000195u, - 0x0000067au, 0x00000194u, 0x00000213u, 0x0004003du, 0x00000006u, 0x0000067bu, 0x0000067au, 0x0003003eu, - 0x00000679u, 0x0000067bu, 0x00060039u, 0x00000008u, 0x0000067cu, 0x0000001bu, 0x00000678u, 0x00000679u, - 0x0003003eu, 0x00000664u, 0x0000067cu, 0x000200f9u, 0x00000666u, 0x000200f8u, 0x00000666u, 0x0004003du, - 0x00000008u, 0x0000067du, 0x00000664u, 0x0003003eu, 0x0000065eu, 0x0000067du, 0x000200f9u, 0x00000660u, - 0x000200f8u, 0x0000067eu, 0x0004003du, 0x00000006u, 0x0000067fu, 0x000001bcu, 0x000500aau, 0x00000035u, - 0x00000680u, 0x0000067fu, 0x0000015eu, 0x000300f7u, 0x00000683u, 0x00000000u, 0x000400fau, 0x00000680u, - 0x00000682u, 0x000006a5u, 0x000200f8u, 0x00000682u, 0x00050041u, 0x00000195u, 0x00000684u, 0x00000194u, - 0x00000240u, 0x0004003du, 0x00000006u, 0x00000685u, 0x00000684u, 0x000500aau, 0x00000035u, 0x00000686u, - 0x00000685u, 0x0000003fu, 0x000300f7u, 0x00000689u, 0x00000000u, 0x000400fau, 0x00000686u, 0x00000688u, - 0x00000694u, 0x000200f8u, 0x00000688u, 0x00050041u, 0x00000195u, 0x0000068au, 0x00000194u, 0x0000024bu, - 0x0004003du, 0x00000006u, 0x0000068bu, 0x0000068au, 0x000500c2u, 0x00000006u, 0x0000068cu, 0x0000068bu, - 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000068du, 0x00000190u, 0x0004003du, 0x00000006u, 0x0000068eu, - 0x00000593u, 0x00050080u, 0x00000006u, 0x0000068fu, 0x0000068du, 0x0000068eu, 0x00050080u, 0x00000006u, - 0x00000690u, 0x0000068cu, 0x0000068fu, 0x00060041u, 0x000001afu, 0x00000691u, 0x0000024au, 0x000000dcu, - 0x00000690u, 0x0004003du, 0x00000006u, 0x00000692u, 0x00000691u, 0x0004007cu, 0x00000008u, 0x00000693u, - 0x00000692u, 0x0003003eu, 0x00000687u, 0x00000693u, 0x000200f9u, 0x00000689u, 0x000200f8u, 0x00000694u, - 0x00050041u, 0x00000195u, 0x00000695u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x00000696u, - 0x00000695u, 0x000500c2u, 0x00000006u, 0x00000697u, 0x00000696u, 0x00000089u, 0x0004003du, 0x00000006u, - 0x00000698u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000699u, 0x00000593u, 0x00050080u, 0x00000006u, - 0x0000069au, 0x00000698u, 0x00000699u, 0x00050080u, 0x00000006u, 0x0000069bu, 0x00000697u, 0x0000069au, - 0x00060041u, 0x00000203u, 0x0000069cu, 0x0000025au, 0x000000dcu, 0x0000069bu, 0x0004003du, 0x000001f7u, - 0x0000069du, 0x0000069cu, 0x00040071u, 0x00000006u, 0x0000069eu, 0x0000069du, 0x0003003eu, 0x0000069fu, - 0x0000069eu, 0x00050041u, 0x00000195u, 0x000006a1u, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, - 0x000006a2u, 0x000006a1u, 0x0003003eu, 0x000006a0u, 0x000006a2u, 0x00060039u, 0x00000008u, 0x000006a3u, - 0x0000001bu, 0x0000069fu, 0x000006a0u, 0x0003003eu, 0x00000687u, 0x000006a3u, 0x000200f9u, 0x00000689u, - 0x000200f8u, 0x00000689u, 0x0004003du, 0x00000008u, 0x000006a4u, 0x00000687u, 0x0003003eu, 0x00000681u, - 0x000006a4u, 0x000200f9u, 0x00000683u, 0x000200f8u, 0x000006a5u, 0x00050041u, 0x00000195u, 0x000006a6u, - 0x00000194u, 0x0000026cu, 0x0004003du, 0x00000006u, 0x000006a7u, 0x000006a6u, 0x000500aau, 0x00000035u, - 0x000006a8u, 0x000006a7u, 0x0000003fu, 0x000300f7u, 0x000006abu, 0x00000000u, 0x000400fau, 0x000006a8u, - 0x000006aau, 0x000006b6u, 0x000200f8u, 0x000006aau, 0x00050041u, 0x00000195u, 0x000006acu, 0x00000194u, - 0x00000060u, 0x0004003du, 0x00000006u, 0x000006adu, 0x000006acu, 0x000500c2u, 0x00000006u, 0x000006aeu, - 0x000006adu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000006afu, 0x00000190u, 0x0004003du, 0x00000006u, - 0x000006b0u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000006b1u, 0x000006afu, 0x000006b0u, 0x00050080u, - 0x00000006u, 0x000006b2u, 0x000006aeu, 0x000006b1u, 0x00060041u, 0x000001afu, 0x000006b3u, 0x00000276u, - 0x000000dcu, 0x000006b2u, 0x0004003du, 0x00000006u, 0x000006b4u, 0x000006b3u, 0x0004007cu, 0x00000008u, - 0x000006b5u, 0x000006b4u, 0x0003003eu, 0x000006a9u, 0x000006b5u, 0x000200f9u, 0x000006abu, 0x000200f8u, - 0x000006b6u, 0x00050041u, 0x00000195u, 0x000006b7u, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, - 0x000006b8u, 0x000006b7u, 0x000500c2u, 0x00000006u, 0x000006b9u, 0x000006b8u, 0x00000089u, 0x0004003du, - 0x00000006u, 0x000006bau, 0x00000190u, 0x0004003du, 0x00000006u, 0x000006bbu, 0x00000593u, 0x00050080u, - 0x00000006u, 0x000006bcu, 0x000006bau, 0x000006bbu, 0x00050080u, 0x00000006u, 0x000006bdu, 0x000006b9u, - 0x000006bcu, 0x00060041u, 0x00000203u, 0x000006beu, 0x00000285u, 0x000000dcu, 0x000006bdu, 0x0004003du, - 0x000001f7u, 0x000006bfu, 0x000006beu, 0x00040071u, 0x00000006u, 0x000006c0u, 0x000006bfu, 0x0003003eu, - 0x000006c1u, 0x000006c0u, 0x00050041u, 0x00000195u, 0x000006c3u, 0x00000194u, 0x0000026cu, 0x0004003du, - 0x00000006u, 0x000006c4u, 0x000006c3u, 0x0003003eu, 0x000006c2u, 0x000006c4u, 0x00060039u, 0x00000008u, - 0x000006c5u, 0x0000001bu, 0x000006c1u, 0x000006c2u, 0x0003003eu, 0x000006a9u, 0x000006c5u, 0x000200f9u, - 0x000006abu, 0x000200f8u, 0x000006abu, 0x0004003du, 0x00000008u, 0x000006c6u, 0x000006a9u, 0x0003003eu, - 0x00000681u, 0x000006c6u, 0x000200f9u, 0x00000683u, 0x000200f8u, 0x00000683u, 0x0004003du, 0x00000008u, - 0x000006c7u, 0x00000681u, 0x0003003eu, 0x0000065eu, 0x000006c7u, 0x000200f9u, 0x00000660u, 0x000200f8u, - 0x00000660u, 0x0004003du, 0x00000008u, 0x000006c8u, 0x0000065eu, 0x0003003eu, 0x00000637u, 0x000006c8u, - 0x000200f9u, 0x00000639u, 0x000200f8u, 0x00000639u, 0x0004003du, 0x00000008u, 0x000006c9u, 0x00000637u, - 0x0003003eu, 0x00000634u, 0x000006c9u, 0x0004003du, 0x00000006u, 0x000006cau, 0x000001c2u, 0x000500abu, - 0x00000035u, 0x000006cbu, 0x000006cau, 0x0000003fu, 0x000300f7u, 0x000006cdu, 0x00000000u, 0x000400fau, - 0x000006cbu, 0x000006ccu, 0x000006cdu, 0x000200f8u, 0x000006ccu, 0x0004003du, 0x00000008u, 0x000006ceu, - 0x00000634u, 0x00050081u, 0x00000008u, 0x000006cfu, 0x000006ceu, 0x00000156u, 0x0003003eu, 0x00000634u, - 0x000006cfu, 0x000200f9u, 0x000006cdu, 0x000200f8u, 0x000006cdu, 0x000200f9u, 0x000006d0u, 0x000200f8u, - 0x000006d0u, 0x000400f6u, 0x000006d2u, 0x000006d3u, 0x00000000u, 0x000200f9u, 0x000006d1u, 0x000200f8u, - 0x000006d1u, 0x0004003du, 0x00000006u, 0x000006d4u, 0x000001b2u, 0x000500aau, 0x00000035u, 0x000006d5u, - 0x000006d4u, 0x0000015eu, 0x000300f7u, 0x000006d7u, 0x00000000u, 0x000400fau, 0x000006d5u, 0x000006d6u, - 0x00000703u, 0x000200f8u, 0x000006d6u, 0x000200f9u, 0x000006d8u, 0x000200f8u, 0x000006d8u, 0x000400f6u, - 0x000006dau, 0x000006dbu, 0x00000000u, 0x000200f9u, 0x000006d9u, 0x000200f8u, 0x000006d9u, 0x00050041u, - 0x00000195u, 0x000006dcu, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x000006ddu, 0x000006dcu, - 0x000500aau, 0x00000035u, 0x000006deu, 0x000006ddu, 0x0000003fu, 0x000300f7u, 0x000006e0u, 0x00000000u, - 0x000400fau, 0x000006deu, 0x000006dfu, 0x000006efu, 0x000200f8u, 0x000006dfu, 0x00050041u, 0x00000195u, - 0x000006e1u, 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000006e2u, 0x000006e1u, 0x000500c2u, - 0x00000006u, 0x000006e3u, 0x000006e2u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000006e4u, 0x00000190u, - 0x0004003du, 0x00000006u, 0x000006e5u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000006e6u, 0x000006e4u, - 0x000006e5u, 0x00050080u, 0x00000006u, 0x000006e7u, 0x000006e3u, 0x000006e6u, 0x0004003du, 0x00000008u, - 0x000006e8u, 0x0000059eu, 0x0004003du, 0x00000008u, 0x000006e9u, 0x00000582u, 0x00050085u, 0x00000008u, - 0x000006eau, 0x000006e8u, 0x000006e9u, 0x0004003du, 0x00000008u, 0x000006ebu, 0x00000634u, 0x00050085u, - 0x00000008u, 0x000006ecu, 0x000006eau, 0x000006ebu, 0x0004007cu, 0x00000006u, 0x000006edu, 0x000006ecu, - 0x00060041u, 0x000001afu, 0x000006eeu, 0x0000024au, 0x000000dcu, 0x000006e7u, 0x0003003eu, 0x000006eeu, - 0x000006edu, 0x000200f9u, 0x000006e0u, 0x000200f8u, 0x000006efu, 0x00050041u, 0x00000195u, 0x000006f0u, - 0x00000194u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x000006f1u, 0x000006f0u, 0x000500c2u, 0x00000006u, - 0x000006f2u, 0x000006f1u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000006f3u, 0x00000190u, 0x0004003du, - 0x00000006u, 0x000006f4u, 0x00000593u, 0x00050080u, 0x00000006u, 0x000006f5u, 0x000006f3u, 0x000006f4u, - 0x00050080u, 0x00000006u, 0x000006f6u, 0x000006f2u, 0x000006f5u, 0x0004003du, 0x00000008u, 0x000006f7u, - 0x0000059eu, 0x0004003du, 0x00000008u, 0x000006f8u, 0x00000582u, 0x00050085u, 0x00000008u, 0x000006f9u, - 0x000006f7u, 0x000006f8u, 0x0004003du, 0x00000008u, 0x000006fau, 0x00000634u, 0x00050085u, 0x00000008u, - 0x000006fbu, 0x000006f9u, 0x000006fau, 0x0003003eu, 0x000006fcu, 0x000006fbu, 0x00050041u, 0x00000195u, - 0x000006feu, 0x00000194u, 0x00000240u, 0x0004003du, 0x00000006u, 0x000006ffu, 0x000006feu, 0x0003003eu, - 0x000006fdu, 0x000006ffu, 0x00060039u, 0x00000006u, 0x00000700u, 0x00000020u, 0x000006fcu, 0x000006fdu, - 0x00040071u, 0x000001f7u, 0x00000701u, 0x00000700u, 0x00060041u, 0x00000203u, 0x00000702u, 0x0000025au, - 0x000000dcu, 0x000006f6u, 0x0003003eu, 0x00000702u, 0x00000701u, 0x000200f9u, 0x000006e0u, 0x000200f8u, - 0x000006e0u, 0x000200f9u, 0x000006dbu, 0x000200f8u, 0x000006dbu, 0x000400fau, 0x00000372u, 0x000006d8u, - 0x000006dau, 0x000200f8u, 0x000006dau, 0x000200f9u, 0x000006d7u, 0x000200f8u, 0x00000703u, 0x000200f9u, - 0x00000704u, 0x000200f8u, 0x00000704u, 0x000400f6u, 0x00000706u, 0x00000707u, 0x00000000u, 0x000200f9u, - 0x00000705u, 0x000200f8u, 0x00000705u, 0x00050041u, 0x00000195u, 0x00000708u, 0x00000194u, 0x0000026cu, - 0x0004003du, 0x00000006u, 0x00000709u, 0x00000708u, 0x000500aau, 0x00000035u, 0x0000070au, 0x00000709u, - 0x0000003fu, 0x000300f7u, 0x0000070cu, 0x00000000u, 0x000400fau, 0x0000070au, 0x0000070bu, 0x0000071bu, - 0x000200f8u, 0x0000070bu, 0x00050041u, 0x00000195u, 0x0000070du, 0x00000194u, 0x00000060u, 0x0004003du, - 0x00000006u, 0x0000070eu, 0x0000070du, 0x000500c2u, 0x00000006u, 0x0000070fu, 0x0000070eu, 0x000001a0u, - 0x0004003du, 0x00000006u, 0x00000710u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000711u, 0x00000593u, - 0x00050080u, 0x00000006u, 0x00000712u, 0x00000710u, 0x00000711u, 0x00050080u, 0x00000006u, 0x00000713u, - 0x0000070fu, 0x00000712u, 0x0004003du, 0x00000008u, 0x00000714u, 0x0000059eu, 0x0004003du, 0x00000008u, - 0x00000715u, 0x00000582u, 0x00050085u, 0x00000008u, 0x00000716u, 0x00000714u, 0x00000715u, 0x0004003du, - 0x00000008u, 0x00000717u, 0x00000634u, 0x00050085u, 0x00000008u, 0x00000718u, 0x00000716u, 0x00000717u, - 0x0004007cu, 0x00000006u, 0x00000719u, 0x00000718u, 0x00060041u, 0x000001afu, 0x0000071au, 0x00000276u, - 0x000000dcu, 0x00000713u, 0x0003003eu, 0x0000071au, 0x00000719u, 0x000200f9u, 0x0000070cu, 0x000200f8u, - 0x0000071bu, 0x00050041u, 0x00000195u, 0x0000071cu, 0x00000194u, 0x00000060u, 0x0004003du, 0x00000006u, - 0x0000071du, 0x0000071cu, 0x000500c2u, 0x00000006u, 0x0000071eu, 0x0000071du, 0x00000089u, 0x0004003du, - 0x00000006u, 0x0000071fu, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000720u, 0x00000593u, 0x00050080u, - 0x00000006u, 0x00000721u, 0x0000071fu, 0x00000720u, 0x00050080u, 0x00000006u, 0x00000722u, 0x0000071eu, - 0x00000721u, 0x0004003du, 0x00000008u, 0x00000723u, 0x0000059eu, 0x0004003du, 0x00000008u, 0x00000724u, - 0x00000582u, 0x00050085u, 0x00000008u, 0x00000725u, 0x00000723u, 0x00000724u, 0x0004003du, 0x00000008u, - 0x00000726u, 0x00000634u, 0x00050085u, 0x00000008u, 0x00000727u, 0x00000725u, 0x00000726u, 0x0003003eu, - 0x00000728u, 0x00000727u, 0x00050041u, 0x00000195u, 0x0000072au, 0x00000194u, 0x0000026cu, 0x0004003du, - 0x00000006u, 0x0000072bu, 0x0000072au, 0x0003003eu, 0x00000729u, 0x0000072bu, 0x00060039u, 0x00000006u, - 0x0000072cu, 0x00000020u, 0x00000728u, 0x00000729u, 0x00040071u, 0x000001f7u, 0x0000072du, 0x0000072cu, - 0x00060041u, 0x00000203u, 0x0000072eu, 0x00000285u, 0x000000dcu, 0x00000722u, 0x0003003eu, 0x0000072eu, - 0x0000072du, 0x000200f9u, 0x0000070cu, 0x000200f8u, 0x0000070cu, 0x000200f9u, 0x00000707u, 0x000200f8u, - 0x00000707u, 0x000400fau, 0x00000372u, 0x00000704u, 0x00000706u, 0x000200f8u, 0x00000706u, 0x000200f9u, - 0x000006d7u, 0x000200f8u, 0x000006d7u, 0x000200f9u, 0x000006d3u, 0x000200f8u, 0x000006d3u, 0x000400fau, - 0x00000372u, 0x000006d0u, 0x000006d2u, 0x000200f8u, 0x000006d2u, 0x000200f9u, 0x00000598u, 0x000200f8u, - 0x00000598u, 0x0004003du, 0x00000006u, 0x0000072fu, 0x00000593u, 0x00050080u, 0x00000006u, 0x00000730u, - 0x0000072fu, 0x00000160u, 0x0003003eu, 0x00000593u, 0x00000730u, 0x000200f9u, 0x00000595u, 0x000200f8u, - 0x00000597u, 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000003b8u, 0x000200f9u, 0x000001ceu, 0x000200f8u, - 0x000001ceu, 0x000300e1u, 0x0000004fu, 0x00000731u, 0x000400e0u, 0x0000015eu, 0x0000015eu, 0x0000015fu, - 0x000200f9u, 0x0000019du, 0x000200f8u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000732u, 0x00000199u, - 0x00050080u, 0x00000006u, 0x00000733u, 0x00000732u, 0x00000089u, 0x0003003eu, 0x00000199u, 0x00000733u, - 0x000200f9u, 0x0000019au, 0x000200f8u, 0x0000019cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, - 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, - 0x0004003du, 0x00000006u, 0x0000002bu, 0x0000000au, 0x000500c4u, 0x00000006u, 0x0000002eu, 0x0000002bu, - 0x0000002du, 0x0004007cu, 0x00000008u, 0x0000002fu, 0x0000002eu, 0x000200feu, 0x0000002fu, 0x00010038u, - 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, - 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000032u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000004bu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000033u, 0x0000000fu, 0x0004007cu, 0x00000006u, - 0x00000034u, 0x00000033u, 0x0003003eu, 0x00000032u, 0x00000034u, 0x0004003du, 0x00000006u, 0x00000036u, - 0x00000032u, 0x000500c7u, 0x00000006u, 0x00000038u, 0x00000036u, 0x00000037u, 0x000500aau, 0x00000035u, - 0x00000039u, 0x00000038u, 0x00000037u, 0x000300f7u, 0x0000003bu, 0x00000000u, 0x000400fau, 0x00000039u, - 0x0000003au, 0x0000003bu, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x0000003cu, 0x00000032u, - 0x000500c7u, 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500abu, 0x00000035u, 0x00000040u, - 0x0000003eu, 0x0000003fu, 0x000200f9u, 0x0000003bu, 0x000200f8u, 0x0000003bu, 0x000700f5u, 0x00000035u, - 0x00000041u, 0x00000039u, 0x00000011u, 0x00000040u, 0x0000003au, 0x000300f7u, 0x00000043u, 0x00000000u, - 0x000400fau, 0x00000041u, 0x00000042u, 0x00000043u, 0x000200f8u, 0x00000042u, 0x0004003du, 0x00000006u, - 0x00000044u, 0x00000032u, 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x0000002du, 0x000500c5u, - 0x00000006u, 0x00000047u, 0x00000045u, 0x00000046u, 0x000500c7u, 0x00000006u, 0x00000049u, 0x00000047u, - 0x00000048u, 0x000200feu, 0x00000049u, 0x000200f8u, 0x00000043u, 0x0004003du, 0x00000006u, 0x0000004du, - 0x00000032u, 0x000500c2u, 0x00000006u, 0x0000004eu, 0x0000004du, 0x0000002du, 0x000500c7u, 0x00000006u, - 0x00000050u, 0x0000004eu, 0x0000004fu, 0x00050080u, 0x00000006u, 0x00000051u, 0x0000004cu, 0x00000050u, - 0x0003003eu, 0x0000004bu, 0x00000051u, 0x0004003du, 0x00000006u, 0x00000052u, 0x00000032u, 0x0004003du, - 0x00000006u, 0x00000053u, 0x0000004bu, 0x00050080u, 0x00000006u, 0x00000054u, 0x00000052u, 0x00000053u, - 0x000500c2u, 0x00000006u, 0x00000055u, 0x00000054u, 0x0000002du, 0x000500c7u, 0x00000006u, 0x00000056u, - 0x00000055u, 0x00000048u, 0x000200feu, 0x00000056u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, - 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, - 0x00000007u, 0x00000059u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005eu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000064u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007fu, 0x00000007u, 0x0004003du, - 0x00000006u, 0x0000005au, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005cu, 0x0000005au, 0x0000005bu, - 0x000500c4u, 0x00000006u, 0x0000005du, 0x0000005cu, 0x0000002du, 0x0003003eu, 0x00000059u, 0x0000005du, - 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000061u, 0x0000005fu, - 0x00000060u, 0x000500c7u, 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x0003003eu, 0x0000005eu, - 0x00000063u, 0x0004003du, 0x00000006u, 0x00000065u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000067u, - 0x00000065u, 0x00000066u, 0x0003003eu, 0x00000064u, 0x00000067u, 0x0004003du, 0x00000006u, 0x00000068u, - 0x0000005eu, 0x000500aau, 0x00000035u, 0x00000069u, 0x00000068u, 0x00000062u, 0x000300f7u, 0x0000006bu, - 0x00000000u, 0x000400fau, 0x00000069u, 0x0000006au, 0x0000006bu, 0x000200f8u, 0x0000006au, 0x0004003du, - 0x00000006u, 0x0000006cu, 0x00000059u, 0x000500c5u, 0x00000006u, 0x0000006du, 0x0000006cu, 0x00000037u, - 0x0004003du, 0x00000006u, 0x0000006eu, 0x00000064u, 0x000500c4u, 0x00000006u, 0x00000070u, 0x0000006eu, - 0x0000006fu, 0x000500c5u, 0x00000006u, 0x00000071u, 0x0000006du, 0x00000070u, 0x0004007cu, 0x00000008u, - 0x00000072u, 0x00000071u, 0x000200feu, 0x00000072u, 0x000200f8u, 0x0000006bu, 0x0004003du, 0x00000006u, - 0x00000074u, 0x0000005eu, 0x000500aau, 0x00000035u, 0x00000075u, 0x00000074u, 0x0000003fu, 0x000300f7u, - 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, - 0x0004003du, 0x00000006u, 0x00000078u, 0x00000064u, 0x000500aau, 0x00000035u, 0x00000079u, 0x00000078u, - 0x0000003fu, 0x000300f7u, 0x0000007bu, 0x00000000u, 0x000400fau, 0x00000079u, 0x0000007au, 0x0000007bu, - 0x000200f8u, 0x0000007au, 0x0004003du, 0x00000006u, 0x0000007cu, 0x00000059u, 0x0004007cu, 0x00000008u, - 0x0000007du, 0x0000007cu, 0x000200feu, 0x0000007du, 0x000200f8u, 0x0000007bu, 0x0003003eu, 0x0000007fu, - 0x0000003fu, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000080u, 0x000400f6u, 0x00000082u, 0x00000083u, - 0x00000000u, 0x000200f9u, 0x00000084u, 0x000200f8u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000085u, - 0x00000064u, 0x000500c7u, 0x00000006u, 0x00000087u, 0x00000085u, 0x00000086u, 0x000500aau, 0x00000035u, - 0x00000088u, 0x00000087u, 0x0000003fu, 0x000400fau, 0x00000088u, 0x00000081u, 0x00000082u, 0x000200f8u, - 0x00000081u, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000064u, 0x000500c4u, 0x00000006u, 0x0000008bu, - 0x0000008au, 0x00000089u, 0x0003003eu, 0x00000064u, 0x0000008bu, 0x0004003du, 0x00000006u, 0x0000008cu, - 0x0000007fu, 0x00050080u, 0x00000006u, 0x0000008du, 0x0000008cu, 0x0000004fu, 0x0003003eu, 0x0000007fu, - 0x0000008du, 0x000200f9u, 0x00000083u, 0x000200f8u, 0x00000083u, 0x000200f9u, 0x00000080u, 0x000200f8u, - 0x00000082u, 0x0004003du, 0x00000006u, 0x0000008eu, 0x00000064u, 0x000500c7u, 0x00000006u, 0x0000008fu, - 0x0000008eu, 0x00000066u, 0x0003003eu, 0x00000064u, 0x0000008fu, 0x0004003du, 0x00000006u, 0x00000090u, - 0x00000059u, 0x0004003du, 0x00000006u, 0x00000092u, 0x0000007fu, 0x00050082u, 0x00000006u, 0x00000093u, - 0x00000091u, 0x00000092u, 0x000500c4u, 0x00000006u, 0x00000095u, 0x00000093u, 0x00000094u, 0x000500c5u, - 0x00000006u, 0x00000096u, 0x00000090u, 0x00000095u, 0x0004003du, 0x00000006u, 0x00000097u, 0x00000064u, - 0x000500c4u, 0x00000006u, 0x00000098u, 0x00000097u, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x00000099u, - 0x00000096u, 0x00000098u, 0x0004007cu, 0x00000008u, 0x0000009au, 0x00000099u, 0x000200feu, 0x0000009au, - 0x000200f8u, 0x00000077u, 0x0004003du, 0x00000006u, 0x0000009cu, 0x00000059u, 0x0004003du, 0x00000006u, - 0x0000009du, 0x0000005eu, 0x00050080u, 0x00000006u, 0x0000009fu, 0x0000009du, 0x0000009eu, 0x000500c4u, - 0x00000006u, 0x000000a0u, 0x0000009fu, 0x00000094u, 0x000500c5u, 0x00000006u, 0x000000a1u, 0x0000009cu, - 0x000000a0u, 0x0004003du, 0x00000006u, 0x000000a2u, 0x00000064u, 0x000500c4u, 0x00000006u, 0x000000a3u, - 0x000000a2u, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x000000a4u, 0x000000a1u, 0x000000a3u, 0x0004007cu, - 0x00000008u, 0x000000a5u, 0x000000a4u, 0x000200feu, 0x000000a5u, 0x00010038u, 0x00050036u, 0x00000006u, - 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, - 0x0004003bu, 0x00000007u, 0x000000a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000abu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x000000b4u, 0x000000b5u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000c8u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000efu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f9u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x00000115u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000011cu, 0x00000007u, - 0x0004003du, 0x00000008u, 0x000000a9u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000aau, 0x000000a9u, - 0x0003003eu, 0x000000a8u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000acu, 0x000000a8u, 0x000500c2u, - 0x00000006u, 0x000000adu, 0x000000acu, 0x0000002du, 0x000500c7u, 0x00000006u, 0x000000aeu, 0x000000adu, - 0x0000005bu, 0x0003003eu, 0x000000abu, 0x000000aeu, 0x0004003du, 0x00000006u, 0x000000b0u, 0x000000a8u, - 0x000500c2u, 0x00000006u, 0x000000b1u, 0x000000b0u, 0x00000094u, 0x000500c7u, 0x00000006u, 0x000000b3u, - 0x000000b1u, 0x000000b2u, 0x0003003eu, 0x000000afu, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000b6u, - 0x000000afu, 0x0004007cu, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x00050082u, 0x0000002cu, 0x000000b9u, - 0x000000b7u, 0x000000b8u, 0x00050080u, 0x0000002cu, 0x000000bbu, 0x000000b9u, 0x000000bau, 0x0003003eu, - 0x000000b5u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000a8u, 0x000500c7u, 0x00000006u, - 0x000000beu, 0x000000bdu, 0x0000003du, 0x0003003eu, 0x000000bcu, 0x000000beu, 0x0004003du, 0x00000006u, - 0x000000bfu, 0x000000afu, 0x000500aau, 0x00000035u, 0x000000c0u, 0x000000bfu, 0x000000b2u, 0x000300f7u, - 0x000000c2u, 0x00000000u, 0x000400fau, 0x000000c0u, 0x000000c1u, 0x000000c2u, 0x000200f8u, 0x000000c1u, - 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000abu, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c3u, - 0x000000c4u, 0x0004003du, 0x00000006u, 0x000000c6u, 0x000000bcu, 0x000500abu, 0x00000035u, 0x000000c7u, - 0x000000c6u, 0x0000003fu, 0x000300f7u, 0x000000cau, 0x00000000u, 0x000400fau, 0x000000c7u, 0x000000c9u, - 0x000000cfu, 0x000200f8u, 0x000000c9u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000bcu, 0x000500c2u, - 0x00000006u, 0x000000cdu, 0x000000ccu, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x000000ceu, 0x000000cbu, - 0x000000cdu, 0x0003003eu, 0x000000c8u, 0x000000ceu, 0x000200f9u, 0x000000cau, 0x000200f8u, 0x000000cfu, - 0x0003003eu, 0x000000c8u, 0x0000003fu, 0x000200f9u, 0x000000cau, 0x000200f8u, 0x000000cau, 0x0004003du, - 0x00000006u, 0x000000d0u, 0x000000c8u, 0x000500c5u, 0x00000006u, 0x000000d1u, 0x000000c5u, 0x000000d0u, - 0x000200feu, 0x000000d1u, 0x000200f8u, 0x000000c2u, 0x0004003du, 0x0000002cu, 0x000000d3u, 0x000000b5u, - 0x000500afu, 0x00000035u, 0x000000d5u, 0x000000d3u, 0x000000d4u, 0x000300f7u, 0x000000d7u, 0x00000000u, - 0x000400fau, 0x000000d5u, 0x000000d6u, 0x000000d7u, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000006u, - 0x000000d8u, 0x000000abu, 0x000500c5u, 0x00000006u, 0x000000d9u, 0x000000d8u, 0x000000c4u, 0x000200feu, - 0x000000d9u, 0x000200f8u, 0x000000d7u, 0x0004003du, 0x0000002cu, 0x000000dbu, 0x000000b5u, 0x000500b3u, - 0x00000035u, 0x000000ddu, 0x000000dbu, 0x000000dcu, 0x000300f7u, 0x000000dfu, 0x00000000u, 0x000400fau, - 0x000000ddu, 0x000000deu, 0x000000dfu, 0x000200f8u, 0x000000deu, 0x0004003du, 0x0000002cu, 0x000000e0u, - 0x000000b5u, 0x000500b1u, 0x00000035u, 0x000000e2u, 0x000000e0u, 0x000000e1u, 0x000300f7u, 0x000000e4u, - 0x00000000u, 0x000400fau, 0x000000e2u, 0x000000e3u, 0x000000e4u, 0x000200f8u, 0x000000e3u, 0x0004003du, - 0x00000006u, 0x000000e5u, 0x000000abu, 0x000200feu, 0x000000e5u, 0x000200f8u, 0x000000e4u, 0x0004003du, - 0x00000006u, 0x000000e8u, 0x000000bcu, 0x000500c5u, 0x00000006u, 0x000000e9u, 0x000000e8u, 0x000000e7u, - 0x0003003eu, 0x000000bcu, 0x000000e9u, 0x0004003du, 0x0000002cu, 0x000000ecu, 0x000000b5u, 0x00050082u, - 0x0000002cu, 0x000000edu, 0x000000ebu, 0x000000ecu, 0x0004007cu, 0x00000006u, 0x000000eeu, 0x000000edu, - 0x0003003eu, 0x000000eau, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, 0x000000bcu, 0x0004003du, - 0x00000006u, 0x000000f1u, 0x000000eau, 0x000500c2u, 0x00000006u, 0x000000f2u, 0x000000f0u, 0x000000f1u, - 0x0003003eu, 0x000000efu, 0x000000f2u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000bcu, 0x0004003du, - 0x00000006u, 0x000000f5u, 0x000000eau, 0x000500c4u, 0x00000006u, 0x000000f6u, 0x0000004fu, 0x000000f5u, - 0x00050082u, 0x00000006u, 0x000000f7u, 0x000000f6u, 0x0000004fu, 0x000500c7u, 0x00000006u, 0x000000f8u, - 0x000000f4u, 0x000000f7u, 0x0003003eu, 0x000000f3u, 0x000000f8u, 0x0004003du, 0x00000006u, 0x000000fau, - 0x000000eau, 0x00050082u, 0x00000006u, 0x000000fbu, 0x000000fau, 0x0000004fu, 0x000500c4u, 0x00000006u, - 0x000000fcu, 0x0000004fu, 0x000000fbu, 0x0003003eu, 0x000000f9u, 0x000000fcu, 0x0004003du, 0x00000006u, - 0x000000fdu, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000feu, 0x000000f9u, 0x000500acu, 0x00000035u, - 0x000000ffu, 0x000000fdu, 0x000000feu, 0x000400a8u, 0x00000035u, 0x00000100u, 0x000000ffu, 0x000300f7u, - 0x00000102u, 0x00000000u, 0x000400fau, 0x00000100u, 0x00000101u, 0x00000102u, 0x000200f8u, 0x00000101u, - 0x0004003du, 0x00000006u, 0x00000103u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x00000104u, 0x000000f9u, - 0x000500aau, 0x00000035u, 0x00000105u, 0x00000103u, 0x00000104u, 0x000300f7u, 0x00000107u, 0x00000000u, - 0x000400fau, 0x00000105u, 0x00000106u, 0x00000107u, 0x000200f8u, 0x00000106u, 0x0004003du, 0x00000006u, - 0x00000108u, 0x000000efu, 0x000500c7u, 0x00000006u, 0x00000109u, 0x00000108u, 0x0000004fu, 0x000500abu, - 0x00000035u, 0x0000010au, 0x00000109u, 0x0000003fu, 0x000200f9u, 0x00000107u, 0x000200f8u, 0x00000107u, - 0x000700f5u, 0x00000035u, 0x0000010bu, 0x00000105u, 0x00000101u, 0x0000010au, 0x00000106u, 0x000200f9u, - 0x00000102u, 0x000200f8u, 0x00000102u, 0x000700f5u, 0x00000035u, 0x0000010cu, 0x000000ffu, 0x000000e4u, - 0x0000010bu, 0x00000107u, 0x000300f7u, 0x0000010eu, 0x00000000u, 0x000400fau, 0x0000010cu, 0x0000010du, - 0x0000010eu, 0x000200f8u, 0x0000010du, 0x0004003du, 0x00000006u, 0x0000010fu, 0x000000efu, 0x00050080u, - 0x00000006u, 0x00000110u, 0x0000010fu, 0x0000004fu, 0x0003003eu, 0x000000efu, 0x00000110u, 0x000200f9u, - 0x0000010eu, 0x000200f8u, 0x0000010eu, 0x0004003du, 0x00000006u, 0x00000111u, 0x000000abu, 0x0004003du, - 0x00000006u, 0x00000112u, 0x000000efu, 0x000500c5u, 0x00000006u, 0x00000113u, 0x00000111u, 0x00000112u, - 0x000200feu, 0x00000113u, 0x000200f8u, 0x000000dfu, 0x0004003du, 0x0000002cu, 0x00000116u, 0x000000b5u, - 0x0004007cu, 0x00000006u, 0x00000117u, 0x00000116u, 0x000500c4u, 0x00000006u, 0x00000118u, 0x00000117u, - 0x00000060u, 0x0004003du, 0x00000006u, 0x00000119u, 0x000000bcu, 0x000500c2u, 0x00000006u, 0x0000011au, - 0x00000119u, 0x0000006fu, 0x000500c5u, 0x00000006u, 0x0000011bu, 0x00000118u, 0x0000011au, 0x0003003eu, - 0x00000115u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x000000bcu, 0x000500c7u, 0x00000006u, - 0x0000011fu, 0x0000011du, 0x0000011eu, 0x0003003eu, 0x0000011cu, 0x0000011fu, 0x0004003du, 0x00000006u, - 0x00000120u, 0x0000011cu, 0x000500acu, 0x00000035u, 0x00000122u, 0x00000120u, 0x00000121u, 0x000400a8u, - 0x00000035u, 0x00000123u, 0x00000122u, 0x000300f7u, 0x00000125u, 0x00000000u, 0x000400fau, 0x00000123u, - 0x00000124u, 0x00000125u, 0x000200f8u, 0x00000124u, 0x0004003du, 0x00000006u, 0x00000126u, 0x0000011cu, - 0x000500aau, 0x00000035u, 0x00000127u, 0x00000126u, 0x00000121u, 0x000300f7u, 0x00000129u, 0x00000000u, - 0x000400fau, 0x00000127u, 0x00000128u, 0x00000129u, 0x000200f8u, 0x00000128u, 0x0004003du, 0x00000006u, - 0x0000012au, 0x00000115u, 0x000500c7u, 0x00000006u, 0x0000012bu, 0x0000012au, 0x0000004fu, 0x000500abu, - 0x00000035u, 0x0000012cu, 0x0000012bu, 0x0000003fu, 0x000200f9u, 0x00000129u, 0x000200f8u, 0x00000129u, - 0x000700f5u, 0x00000035u, 0x0000012du, 0x00000127u, 0x00000124u, 0x0000012cu, 0x00000128u, 0x000200f9u, - 0x00000125u, 0x000200f8u, 0x00000125u, 0x000700f5u, 0x00000035u, 0x0000012eu, 0x00000122u, 0x000000dfu, - 0x0000012du, 0x00000129u, 0x000300f7u, 0x00000130u, 0x00000000u, 0x000400fau, 0x0000012eu, 0x0000012fu, - 0x00000130u, 0x000200f8u, 0x0000012fu, 0x0004003du, 0x00000006u, 0x00000131u, 0x00000115u, 0x00050080u, - 0x00000006u, 0x00000132u, 0x00000131u, 0x0000004fu, 0x0003003eu, 0x00000115u, 0x00000132u, 0x000200f9u, - 0x00000130u, 0x000200f8u, 0x00000130u, 0x0004003du, 0x00000006u, 0x00000133u, 0x000000abu, 0x0004003du, - 0x00000006u, 0x00000134u, 0x00000115u, 0x000500c5u, 0x00000006u, 0x00000135u, 0x00000133u, 0x00000134u, - 0x000200feu, 0x00000135u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, - 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, - 0x0004003bu, 0x0000000du, 0x0000013au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013du, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x00000141u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000138u, 0x0000001au, - 0x000500aau, 0x00000035u, 0x00000139u, 0x00000138u, 0x0000004fu, 0x000300f7u, 0x0000013cu, 0x00000000u, - 0x000400fau, 0x00000139u, 0x0000013bu, 0x00000140u, 0x000200f8u, 0x0000013bu, 0x0004003du, 0x00000006u, - 0x0000013eu, 0x00000019u, 0x0003003eu, 0x0000013du, 0x0000013eu, 0x00050039u, 0x00000008u, 0x0000013fu, - 0x00000013u, 0x0000013du, 0x0003003eu, 0x0000013au, 0x0000013fu, 0x000200f9u, 0x0000013cu, 0x000200f8u, - 0x00000140u, 0x0004003du, 0x00000006u, 0x00000142u, 0x00000019u, 0x0003003eu, 0x00000141u, 0x00000142u, - 0x00050039u, 0x00000008u, 0x00000143u, 0x0000000bu, 0x00000141u, 0x0003003eu, 0x0000013au, 0x00000143u, - 0x000200f9u, 0x0000013cu, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000008u, 0x00000144u, 0x0000013au, - 0x000200feu, 0x00000144u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, - 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, - 0x0004003bu, 0x00000007u, 0x00000149u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014cu, 0x00000007u, - 0x0004003bu, 0x0000000du, 0x00000150u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000147u, 0x0000001fu, - 0x000500aau, 0x00000035u, 0x00000148u, 0x00000147u, 0x0000004fu, 0x000300f7u, 0x0000014bu, 0x00000000u, - 0x000400fau, 0x00000148u, 0x0000014au, 0x0000014fu, 0x000200f8u, 0x0000014au, 0x0004003du, 0x00000008u, - 0x0000014du, 0x0000001eu, 0x0003003eu, 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000006u, 0x0000014eu, - 0x00000016u, 0x0000014cu, 0x0003003eu, 0x00000149u, 0x0000014eu, 0x000200f9u, 0x0000014bu, 0x000200f8u, - 0x0000014fu, 0x0004003du, 0x00000008u, 0x00000151u, 0x0000001eu, 0x0003003eu, 0x00000150u, 0x00000151u, - 0x00050039u, 0x00000006u, 0x00000152u, 0x00000010u, 0x00000150u, 0x0003003eu, 0x00000149u, 0x00000152u, - 0x000200f9u, 0x0000014bu, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000149u, - 0x000200feu, 0x00000153u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000024u, 0x00000000u, 0x00000022u, - 0x00030037u, 0x0000000du, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003du, 0x00000008u, 0x00000157u, - 0x00000023u, 0x0004007fu, 0x00000008u, 0x00000158u, 0x00000157u, 0x0006000cu, 0x00000008u, 0x00000159u, - 0x00000001u, 0x0000001bu, 0x00000158u, 0x00050081u, 0x00000008u, 0x0000015au, 0x00000156u, 0x00000159u, - 0x00050088u, 0x00000008u, 0x0000015bu, 0x00000156u, 0x0000015au, 0x000200feu, 0x0000015bu, 0x00010038u, - 0x00050036u, 0x00000008u, 0x00000029u, 0x00000000u, 0x00000026u, 0x00030037u, 0x00000007u, 0x00000027u, - 0x00030037u, 0x0000000du, 0x00000028u, 0x000200f8u, 0x0000002au, 0x0004003bu, 0x00000007u, 0x00000168u, - 0x00000007u, 0x000400e0u, 0x0000015eu, 0x0000015eu, 0x0000015fu, 0x0004003du, 0x00000006u, 0x00000164u, - 0x00000027u, 0x0004003du, 0x00000008u, 0x00000165u, 0x00000028u, 0x00050041u, 0x00000166u, 0x00000167u, - 0x00000163u, 0x00000164u, 0x0003003eu, 0x00000167u, 0x00000165u, 0x000400e0u, 0x0000015eu, 0x0000015eu, - 0x0000015fu, 0x0003003eu, 0x00000168u, 0x00000046u, 0x000200f9u, 0x00000169u, 0x000200f8u, 0x00000169u, - 0x000400f6u, 0x0000016bu, 0x0000016cu, 0x00000000u, 0x000200f9u, 0x0000016du, 0x000200f8u, 0x0000016du, - 0x0004003du, 0x00000006u, 0x0000016eu, 0x00000168u, 0x000500acu, 0x00000035u, 0x0000016fu, 0x0000016eu, - 0x0000003fu, 0x000400fau, 0x0000016fu, 0x0000016au, 0x0000016bu, 0x000200f8u, 0x0000016au, 0x0004003du, - 0x00000006u, 0x00000170u, 0x00000027u, 0x0004003du, 0x00000006u, 0x00000171u, 0x00000168u, 0x000500b0u, - 0x00000035u, 0x00000172u, 0x00000170u, 0x00000171u, 0x000300f7u, 0x00000174u, 0x00000000u, 0x000400fau, - 0x00000172u, 0x00000173u, 0x00000174u, 0x000200f8u, 0x00000173u, 0x0004003du, 0x00000006u, 0x00000175u, - 0x00000027u, 0x0004003du, 0x00000006u, 0x00000176u, 0x00000027u, 0x0004003du, 0x00000006u, 0x00000177u, - 0x00000168u, 0x00050080u, 0x00000006u, 0x00000178u, 0x00000176u, 0x00000177u, 0x00050041u, 0x00000166u, - 0x00000179u, 0x00000163u, 0x00000178u, 0x0004003du, 0x00000008u, 0x0000017au, 0x00000179u, 0x00050041u, - 0x00000166u, 0x0000017bu, 0x00000163u, 0x00000175u, 0x0004003du, 0x00000008u, 0x0000017cu, 0x0000017bu, - 0x00050081u, 0x00000008u, 0x0000017du, 0x0000017cu, 0x0000017au, 0x00050041u, 0x00000166u, 0x0000017eu, - 0x00000163u, 0x00000175u, 0x0003003eu, 0x0000017eu, 0x0000017du, 0x000200f9u, 0x00000174u, 0x000200f8u, - 0x00000174u, 0x000400e0u, 0x0000015eu, 0x0000015eu, 0x0000015fu, 0x000200f9u, 0x0000016cu, 0x000200f8u, - 0x0000016cu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x00000168u, 0x000500c2u, 0x00000006u, 0x00000180u, - 0x0000017fu, 0x00000089u, 0x0003003eu, 0x00000168u, 0x00000180u, 0x000200f9u, 0x00000169u, 0x000200f8u, - 0x0000016bu, 0x00050041u, 0x00000166u, 0x00000181u, 0x00000163u, 0x000000dcu, 0x0004003du, 0x00000008u, - 0x00000182u, 0x00000181u, 0x000200feu, 0x00000182u, 0x00010038u, -}; - -inline constexpr uint32_t kSpv_vt_layer_norm[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x000002deu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, - 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000017cu, - 0x00000181u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, - 0x0000017cu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000181u, 0x0000000bu, 0x0000001bu, 0x00030047u, - 0x00000186u, 0x00000002u, 0x00050048u, 0x00000186u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000186u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000186u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000186u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000186u, - 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000186u, 0x00000005u, 0x00000023u, 0x00000014u, - 0x00050048u, 0x00000186u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000186u, 0x00000007u, - 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000186u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, - 0x00000186u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000186u, 0x0000000au, 0x00000023u, - 0x00000028u, 0x00050048u, 0x00000186u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000186u, - 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000001a1u, 0x00000006u, 0x00000004u, 0x00030047u, - 0x000001a2u, 0x00000002u, 0x00040048u, 0x000001a2u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a2u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001a4u, 0x00000018u, 0x00040047u, 0x000001a4u, - 0x00000021u, 0x00000000u, 0x00040047u, 0x000001a4u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001b3u, - 0x00000006u, 0x00000002u, 0x00030047u, 0x000001b4u, 0x00000002u, 0x00040048u, 0x000001b4u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x000001b4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b6u, - 0x00000018u, 0x00040047u, 0x000001b6u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001b6u, 0x00000022u, - 0x00000000u, 0x00040047u, 0x0000025du, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000025eu, 0x00000002u, - 0x00040048u, 0x0000025eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000025eu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x00000260u, 0x00000018u, 0x00040047u, 0x00000260u, 0x00000021u, 0x00000002u, - 0x00040047u, 0x00000260u, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000026bu, 0x00000006u, 0x00000002u, - 0x00030047u, 0x0000026cu, 0x00000002u, 0x00040048u, 0x0000026cu, 0x00000000u, 0x00000018u, 0x00050048u, - 0x0000026cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000026eu, 0x00000018u, 0x00040047u, - 0x0000026eu, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000026eu, 0x00000022u, 0x00000000u, 0x00040047u, - 0x0000028cu, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000028du, 0x00000002u, 0x00040048u, 0x0000028du, - 0x00000000u, 0x00000018u, 0x00050048u, 0x0000028du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x0000028fu, 0x00000018u, 0x00040047u, 0x0000028fu, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000028fu, - 0x00000022u, 0x00000000u, 0x00040047u, 0x00000299u, 0x00000006u, 0x00000002u, 0x00030047u, 0x0000029au, - 0x00000002u, 0x00040048u, 0x0000029au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000029au, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x0000029cu, 0x00000018u, 0x00040047u, 0x0000029cu, 0x00000021u, - 0x00000005u, 0x00040047u, 0x0000029cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002b7u, 0x00000006u, - 0x00000004u, 0x00030047u, 0x000002b8u, 0x00000002u, 0x00050048u, 0x000002b8u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00040047u, 0x000002bau, 0x00000021u, 0x00000006u, 0x00040047u, 0x000002bau, 0x00000022u, - 0x00000000u, 0x00040047u, 0x000002c7u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000002c8u, 0x00000002u, - 0x00050048u, 0x000002c8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000002cau, 0x00000021u, - 0x00000007u, 0x00040047u, 0x000002cau, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ddu, 0x0000000bu, - 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, - 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, - 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, - 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, - 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00050021u, - 0x00000022u, 0x00000008u, 0x00000007u, 0x0000000du, 0x00040015u, 0x00000028u, 0x00000020u, 0x00000001u, - 0x0004002bu, 0x00000028u, 0x00000029u, 0x00000010u, 0x00020014u, 0x00000031u, 0x0004002bu, 0x00000006u, - 0x00000033u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000039u, 0x007fffffu, 0x0004002bu, 0x00000006u, - 0x0000003bu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000042u, 0x00000040u, 0x0004002bu, 0x00000006u, - 0x00000044u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000048u, 0x00007fffu, 0x0004002bu, 0x00000006u, - 0x0000004bu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000057u, 0x00008000u, 0x0004002bu, 0x00000028u, - 0x0000005cu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000005eu, 0x0000001fu, 0x0004002bu, 0x00000006u, - 0x00000062u, 0x000003ffu, 0x0004002bu, 0x00000028u, 0x0000006bu, 0x0000000du, 0x0004002bu, 0x00000006u, - 0x00000082u, 0x00000400u, 0x0004002bu, 0x00000028u, 0x00000085u, 0x00000001u, 0x0004002bu, 0x00000006u, - 0x0000008du, 0x00000071u, 0x0004002bu, 0x00000028u, 0x00000090u, 0x00000017u, 0x0004002bu, 0x00000006u, - 0x0000009au, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000aeu, 0x000000ffu, 0x00040020u, 0x000000b0u, - 0x00000007u, 0x00000028u, 0x0004002bu, 0x00000028u, 0x000000b4u, 0x0000007fu, 0x0004002bu, 0x00000028u, - 0x000000b6u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000c0u, 0x00007c00u, 0x0004002bu, 0x00000006u, - 0x000000c7u, 0x00000200u, 0x0004002bu, 0x00000028u, 0x000000d0u, 0x0000001fu, 0x0004002bu, 0x00000028u, - 0x000000d8u, 0x00000000u, 0x0004002bu, 0x00000028u, 0x000000ddu, 0xfffffff6u, 0x0004002bu, 0x00000006u, - 0x000000e3u, 0x00800000u, 0x0004002bu, 0x00000028u, 0x000000e7u, 0x0000000eu, 0x0004002bu, 0x00000006u, - 0x0000011au, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x0000011du, 0x00001000u, 0x0004002bu, 0x00000006u, - 0x00000152u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000153u, 0x00000108u, 0x0004002bu, 0x00000006u, - 0x00000154u, 0x00000080u, 0x0004001cu, 0x00000155u, 0x00000008u, 0x00000154u, 0x00040020u, 0x00000156u, - 0x00000004u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000004u, 0x00040020u, 0x0000015au, - 0x00000004u, 0x00000008u, 0x00040017u, 0x0000017au, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000017bu, - 0x00000001u, 0x0000017au, 0x0004003bu, 0x0000017bu, 0x0000017cu, 0x00000001u, 0x00040020u, 0x0000017du, - 0x00000001u, 0x00000006u, 0x0004003bu, 0x0000017bu, 0x00000181u, 0x00000001u, 0x000f001eu, 0x00000186u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000187u, 0x00000009u, - 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, 0x00000009u, 0x00040020u, 0x00000189u, 0x00000009u, - 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000018eu, 0x00000000u, 0x0004002bu, 0x00000028u, 0x0000019au, - 0x00000002u, 0x0003001du, 0x000001a1u, 0x00000006u, 0x0003001eu, 0x000001a2u, 0x000001a1u, 0x00040020u, - 0x000001a3u, 0x0000000cu, 0x000001a2u, 0x0004003bu, 0x000001a3u, 0x000001a4u, 0x0000000cu, 0x0004002bu, - 0x00000028u, 0x000001a5u, 0x00000008u, 0x00040020u, 0x000001adu, 0x0000000cu, 0x00000006u, 0x00040015u, - 0x000001b2u, 0x00000010u, 0x00000000u, 0x0003001du, 0x000001b3u, 0x000001b2u, 0x0003001eu, 0x000001b4u, - 0x000001b3u, 0x00040020u, 0x000001b5u, 0x0000000cu, 0x000001b4u, 0x0004003bu, 0x000001b5u, 0x000001b6u, - 0x0000000cu, 0x00040020u, 0x000001beu, 0x0000000cu, 0x000001b2u, 0x0004002bu, 0x00000008u, 0x0000020eu, - 0x3f800000u, 0x0004002bu, 0x00000028u, 0x00000218u, 0x0000000cu, 0x00040020u, 0x00000219u, 0x00000009u, - 0x00000008u, 0x0004002bu, 0x00000028u, 0x00000250u, 0x00000006u, 0x0004002bu, 0x00000028u, 0x00000256u, - 0x00000003u, 0x0003001du, 0x0000025du, 0x00000006u, 0x0003001eu, 0x0000025eu, 0x0000025du, 0x00040020u, - 0x0000025fu, 0x0000000cu, 0x0000025eu, 0x0004003bu, 0x0000025fu, 0x00000260u, 0x0000000cu, 0x0004002bu, - 0x00000028u, 0x00000261u, 0x00000009u, 0x0003001du, 0x0000026bu, 0x000001b2u, 0x0003001eu, 0x0000026cu, - 0x0000026bu, 0x00040020u, 0x0000026du, 0x0000000cu, 0x0000026cu, 0x0004003bu, 0x0000026du, 0x0000026eu, - 0x0000000cu, 0x0004002bu, 0x00000028u, 0x0000027fu, 0x00000007u, 0x0004002bu, 0x00000028u, 0x00000285u, - 0x00000004u, 0x0003001du, 0x0000028cu, 0x00000006u, 0x0003001eu, 0x0000028du, 0x0000028cu, 0x00040020u, - 0x0000028eu, 0x0000000cu, 0x0000028du, 0x0004003bu, 0x0000028eu, 0x0000028fu, 0x0000000cu, 0x0003001du, - 0x00000299u, 0x000001b2u, 0x0003001eu, 0x0000029au, 0x00000299u, 0x00040020u, 0x0000029bu, 0x0000000cu, - 0x0000029au, 0x0004003bu, 0x0000029bu, 0x0000029cu, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000002b1u, - 0x00000005u, 0x0003001du, 0x000002b7u, 0x00000006u, 0x0003001eu, 0x000002b8u, 0x000002b7u, 0x00040020u, - 0x000002b9u, 0x0000000cu, 0x000002b8u, 0x0004003bu, 0x000002b9u, 0x000002bau, 0x0000000cu, 0x0004002bu, - 0x00000028u, 0x000002bbu, 0x0000000bu, 0x0003001du, 0x000002c7u, 0x000001b2u, 0x0003001eu, 0x000002c8u, - 0x000002c7u, 0x00040020u, 0x000002c9u, 0x0000000cu, 0x000002c8u, 0x0004003bu, 0x000002c9u, 0x000002cau, - 0x0000000cu, 0x0003002au, 0x00000031u, 0x000002dau, 0x0006002cu, 0x0000017au, 0x000002ddu, 0x00000154u, - 0x0000004bu, 0x0000004bu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, - 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000179u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000180u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000184u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000018du, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000019eu, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c3u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001cdu, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001cfu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001d6u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d7u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e2u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001feu, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001ffu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000020du, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000020fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000211u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000021fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000022au, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000022eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000246u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000247u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000025au, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000277u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000278u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000289u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002a5u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002a6u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002d2u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002d4u, 0x00000007u, 0x00050041u, 0x0000017du, 0x0000017eu, - 0x0000017cu, 0x0000003bu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x0000017eu, 0x0003003eu, 0x00000179u, - 0x0000017fu, 0x00050041u, 0x0000017du, 0x00000182u, 0x00000181u, 0x0000003bu, 0x0004003du, 0x00000006u, - 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000180u, 0x00000183u, 0x0004003du, 0x00000006u, 0x00000185u, - 0x00000179u, 0x00050041u, 0x00000189u, 0x0000018au, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, - 0x0000018bu, 0x0000018au, 0x00050084u, 0x00000006u, 0x0000018cu, 0x00000185u, 0x0000018bu, 0x0003003eu, - 0x00000184u, 0x0000018cu, 0x0003003eu, 0x0000018du, 0x0000018eu, 0x0004003du, 0x00000006u, 0x00000190u, - 0x00000180u, 0x0003003eu, 0x0000018fu, 0x00000190u, 0x000200f9u, 0x00000191u, 0x000200f8u, 0x00000191u, - 0x000400f6u, 0x00000193u, 0x00000194u, 0x00000000u, 0x000200f9u, 0x00000195u, 0x000200f8u, 0x00000195u, - 0x0004003du, 0x00000006u, 0x00000196u, 0x0000018fu, 0x00050041u, 0x00000189u, 0x00000197u, 0x00000188u, - 0x00000085u, 0x0004003du, 0x00000006u, 0x00000198u, 0x00000197u, 0x000500b0u, 0x00000031u, 0x00000199u, - 0x00000196u, 0x00000198u, 0x000400fau, 0x00000199u, 0x00000192u, 0x00000193u, 0x000200f8u, 0x00000192u, - 0x00050041u, 0x00000189u, 0x0000019bu, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x0000019cu, - 0x0000019bu, 0x000500aau, 0x00000031u, 0x0000019du, 0x0000019cu, 0x0000003bu, 0x000300f7u, 0x000001a0u, - 0x00000000u, 0x000400fau, 0x0000019du, 0x0000019fu, 0x000001b1u, 0x000200f8u, 0x0000019fu, 0x00050041u, - 0x00000189u, 0x000001a6u, 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001a7u, 0x000001a6u, - 0x000500c2u, 0x00000006u, 0x000001a8u, 0x000001a7u, 0x0000019au, 0x0004003du, 0x00000006u, 0x000001a9u, - 0x00000184u, 0x0004003du, 0x00000006u, 0x000001aau, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001abu, - 0x000001a9u, 0x000001aau, 0x00050080u, 0x00000006u, 0x000001acu, 0x000001a8u, 0x000001abu, 0x00060041u, - 0x000001adu, 0x000001aeu, 0x000001a4u, 0x000000d8u, 0x000001acu, 0x0004003du, 0x00000006u, 0x000001afu, - 0x000001aeu, 0x0004007cu, 0x00000008u, 0x000001b0u, 0x000001afu, 0x0003003eu, 0x0000019eu, 0x000001b0u, - 0x000200f9u, 0x000001a0u, 0x000200f8u, 0x000001b1u, 0x00050041u, 0x00000189u, 0x000001b7u, 0x00000188u, - 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, 0x000500c2u, 0x00000006u, 0x000001b9u, - 0x000001b8u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001bau, 0x00000184u, 0x0004003du, 0x00000006u, - 0x000001bbu, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001bcu, 0x000001bau, 0x000001bbu, 0x00050080u, - 0x00000006u, 0x000001bdu, 0x000001b9u, 0x000001bcu, 0x00060041u, 0x000001beu, 0x000001bfu, 0x000001b6u, - 0x000000d8u, 0x000001bdu, 0x0004003du, 0x000001b2u, 0x000001c0u, 0x000001bfu, 0x00040071u, 0x00000006u, - 0x000001c1u, 0x000001c0u, 0x0003003eu, 0x000001c2u, 0x000001c1u, 0x00050041u, 0x00000189u, 0x000001c4u, - 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x000001c5u, 0x000001c4u, 0x0003003eu, 0x000001c3u, - 0x000001c5u, 0x00060039u, 0x00000008u, 0x000001c6u, 0x0000001bu, 0x000001c2u, 0x000001c3u, 0x0003003eu, - 0x0000019eu, 0x000001c6u, 0x000200f9u, 0x000001a0u, 0x000200f8u, 0x000001a0u, 0x0004003du, 0x00000008u, - 0x000001c7u, 0x0000019eu, 0x0004003du, 0x00000008u, 0x000001c8u, 0x0000018du, 0x00050081u, 0x00000008u, - 0x000001c9u, 0x000001c8u, 0x000001c7u, 0x0003003eu, 0x0000018du, 0x000001c9u, 0x000200f9u, 0x00000194u, - 0x000200f8u, 0x00000194u, 0x0004003du, 0x00000006u, 0x000001cau, 0x0000018fu, 0x00050080u, 0x00000006u, - 0x000001cbu, 0x000001cau, 0x00000154u, 0x0003003eu, 0x0000018fu, 0x000001cbu, 0x000200f9u, 0x00000191u, - 0x000200f8u, 0x00000193u, 0x0004003du, 0x00000006u, 0x000001ceu, 0x00000180u, 0x0003003eu, 0x000001cdu, - 0x000001ceu, 0x0004003du, 0x00000008u, 0x000001d0u, 0x0000018du, 0x0003003eu, 0x000001cfu, 0x000001d0u, - 0x00060039u, 0x00000008u, 0x000001d1u, 0x00000025u, 0x000001cdu, 0x000001cfu, 0x00050041u, 0x00000189u, - 0x000001d2u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001d3u, 0x000001d2u, 0x00040070u, - 0x00000008u, 0x000001d4u, 0x000001d3u, 0x00050088u, 0x00000008u, 0x000001d5u, 0x000001d1u, 0x000001d4u, - 0x0003003eu, 0x000001ccu, 0x000001d5u, 0x0003003eu, 0x000001d6u, 0x0000018eu, 0x0004003du, 0x00000006u, - 0x000001d8u, 0x00000180u, 0x0003003eu, 0x000001d7u, 0x000001d8u, 0x000200f9u, 0x000001d9u, 0x000200f8u, - 0x000001d9u, 0x000400f6u, 0x000001dbu, 0x000001dcu, 0x00000000u, 0x000200f9u, 0x000001ddu, 0x000200f8u, - 0x000001ddu, 0x0004003du, 0x00000006u, 0x000001deu, 0x000001d7u, 0x00050041u, 0x00000189u, 0x000001dfu, - 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001e0u, 0x000001dfu, 0x000500b0u, 0x00000031u, - 0x000001e1u, 0x000001deu, 0x000001e0u, 0x000400fau, 0x000001e1u, 0x000001dau, 0x000001dbu, 0x000200f8u, - 0x000001dau, 0x00050041u, 0x00000189u, 0x000001e3u, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, - 0x000001e4u, 0x000001e3u, 0x000500aau, 0x00000031u, 0x000001e5u, 0x000001e4u, 0x0000003bu, 0x000300f7u, - 0x000001e8u, 0x00000000u, 0x000400fau, 0x000001e5u, 0x000001e7u, 0x000001f3u, 0x000200f8u, 0x000001e7u, - 0x00050041u, 0x00000189u, 0x000001e9u, 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001eau, - 0x000001e9u, 0x000500c2u, 0x00000006u, 0x000001ebu, 0x000001eau, 0x0000019au, 0x0004003du, 0x00000006u, - 0x000001ecu, 0x00000184u, 0x0004003du, 0x00000006u, 0x000001edu, 0x000001d7u, 0x00050080u, 0x00000006u, - 0x000001eeu, 0x000001ecu, 0x000001edu, 0x00050080u, 0x00000006u, 0x000001efu, 0x000001ebu, 0x000001eeu, - 0x00060041u, 0x000001adu, 0x000001f0u, 0x000001a4u, 0x000000d8u, 0x000001efu, 0x0004003du, 0x00000006u, - 0x000001f1u, 0x000001f0u, 0x0004007cu, 0x00000008u, 0x000001f2u, 0x000001f1u, 0x0003003eu, 0x000001e6u, - 0x000001f2u, 0x000200f9u, 0x000001e8u, 0x000200f8u, 0x000001f3u, 0x00050041u, 0x00000189u, 0x000001f4u, - 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001f5u, 0x000001f4u, 0x000500c2u, 0x00000006u, - 0x000001f6u, 0x000001f5u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001f7u, 0x00000184u, 0x0004003du, - 0x00000006u, 0x000001f8u, 0x000001d7u, 0x00050080u, 0x00000006u, 0x000001f9u, 0x000001f7u, 0x000001f8u, - 0x00050080u, 0x00000006u, 0x000001fau, 0x000001f6u, 0x000001f9u, 0x00060041u, 0x000001beu, 0x000001fbu, - 0x000001b6u, 0x000000d8u, 0x000001fau, 0x0004003du, 0x000001b2u, 0x000001fcu, 0x000001fbu, 0x00040071u, - 0x00000006u, 0x000001fdu, 0x000001fcu, 0x0003003eu, 0x000001feu, 0x000001fdu, 0x00050041u, 0x00000189u, - 0x00000200u, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000201u, 0x00000200u, 0x0003003eu, - 0x000001ffu, 0x00000201u, 0x00060039u, 0x00000008u, 0x00000202u, 0x0000001bu, 0x000001feu, 0x000001ffu, - 0x0003003eu, 0x000001e6u, 0x00000202u, 0x000200f9u, 0x000001e8u, 0x000200f8u, 0x000001e8u, 0x0004003du, - 0x00000008u, 0x00000203u, 0x000001e6u, 0x0004003du, 0x00000008u, 0x00000204u, 0x000001ccu, 0x00050083u, - 0x00000008u, 0x00000205u, 0x00000203u, 0x00000204u, 0x0003003eu, 0x000001e2u, 0x00000205u, 0x0004003du, - 0x00000008u, 0x00000206u, 0x000001e2u, 0x0004003du, 0x00000008u, 0x00000207u, 0x000001e2u, 0x00050085u, - 0x00000008u, 0x00000208u, 0x00000206u, 0x00000207u, 0x0004003du, 0x00000008u, 0x00000209u, 0x000001d6u, - 0x00050081u, 0x00000008u, 0x0000020au, 0x00000209u, 0x00000208u, 0x0003003eu, 0x000001d6u, 0x0000020au, - 0x000200f9u, 0x000001dcu, 0x000200f8u, 0x000001dcu, 0x0004003du, 0x00000006u, 0x0000020bu, 0x000001d7u, - 0x00050080u, 0x00000006u, 0x0000020cu, 0x0000020bu, 0x00000154u, 0x0003003eu, 0x000001d7u, 0x0000020cu, - 0x000200f9u, 0x000001d9u, 0x000200f8u, 0x000001dbu, 0x0004003du, 0x00000006u, 0x00000210u, 0x00000180u, - 0x0003003eu, 0x0000020fu, 0x00000210u, 0x0004003du, 0x00000008u, 0x00000212u, 0x000001d6u, 0x0003003eu, - 0x00000211u, 0x00000212u, 0x00060039u, 0x00000008u, 0x00000213u, 0x00000025u, 0x0000020fu, 0x00000211u, - 0x00050041u, 0x00000189u, 0x00000214u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000215u, - 0x00000214u, 0x00040070u, 0x00000008u, 0x00000216u, 0x00000215u, 0x00050088u, 0x00000008u, 0x00000217u, - 0x00000213u, 0x00000216u, 0x00050041u, 0x00000219u, 0x0000021au, 0x00000188u, 0x00000218u, 0x0004003du, - 0x00000008u, 0x0000021bu, 0x0000021au, 0x00050081u, 0x00000008u, 0x0000021cu, 0x00000217u, 0x0000021bu, - 0x0006000cu, 0x00000008u, 0x0000021du, 0x00000001u, 0x0000001fu, 0x0000021cu, 0x00050088u, 0x00000008u, - 0x0000021eu, 0x0000020eu, 0x0000021du, 0x0003003eu, 0x0000020du, 0x0000021eu, 0x0004003du, 0x00000006u, - 0x00000220u, 0x00000180u, 0x0003003eu, 0x0000021fu, 0x00000220u, 0x000200f9u, 0x00000221u, 0x000200f8u, - 0x00000221u, 0x000400f6u, 0x00000223u, 0x00000224u, 0x00000000u, 0x000200f9u, 0x00000225u, 0x000200f8u, - 0x00000225u, 0x0004003du, 0x00000006u, 0x00000226u, 0x0000021fu, 0x00050041u, 0x00000189u, 0x00000227u, - 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000228u, 0x00000227u, 0x000500b0u, 0x00000031u, - 0x00000229u, 0x00000226u, 0x00000228u, 0x000400fau, 0x00000229u, 0x00000222u, 0x00000223u, 0x000200f8u, - 0x00000222u, 0x00050041u, 0x00000189u, 0x0000022bu, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, - 0x0000022cu, 0x0000022bu, 0x000500aau, 0x00000031u, 0x0000022du, 0x0000022cu, 0x0000003bu, 0x000300f7u, - 0x00000230u, 0x00000000u, 0x000400fau, 0x0000022du, 0x0000022fu, 0x0000023bu, 0x000200f8u, 0x0000022fu, - 0x00050041u, 0x00000189u, 0x00000231u, 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x00000232u, - 0x00000231u, 0x000500c2u, 0x00000006u, 0x00000233u, 0x00000232u, 0x0000019au, 0x0004003du, 0x00000006u, - 0x00000234u, 0x00000184u, 0x0004003du, 0x00000006u, 0x00000235u, 0x0000021fu, 0x00050080u, 0x00000006u, - 0x00000236u, 0x00000234u, 0x00000235u, 0x00050080u, 0x00000006u, 0x00000237u, 0x00000233u, 0x00000236u, - 0x00060041u, 0x000001adu, 0x00000238u, 0x000001a4u, 0x000000d8u, 0x00000237u, 0x0004003du, 0x00000006u, - 0x00000239u, 0x00000238u, 0x0004007cu, 0x00000008u, 0x0000023au, 0x00000239u, 0x0003003eu, 0x0000022eu, - 0x0000023au, 0x000200f9u, 0x00000230u, 0x000200f8u, 0x0000023bu, 0x00050041u, 0x00000189u, 0x0000023cu, - 0x00000188u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x0000023du, 0x0000023cu, 0x000500c2u, 0x00000006u, - 0x0000023eu, 0x0000023du, 0x00000085u, 0x0004003du, 0x00000006u, 0x0000023fu, 0x00000184u, 0x0004003du, - 0x00000006u, 0x00000240u, 0x0000021fu, 0x00050080u, 0x00000006u, 0x00000241u, 0x0000023fu, 0x00000240u, - 0x00050080u, 0x00000006u, 0x00000242u, 0x0000023eu, 0x00000241u, 0x00060041u, 0x000001beu, 0x00000243u, - 0x000001b6u, 0x000000d8u, 0x00000242u, 0x0004003du, 0x000001b2u, 0x00000244u, 0x00000243u, 0x00040071u, - 0x00000006u, 0x00000245u, 0x00000244u, 0x0003003eu, 0x00000246u, 0x00000245u, 0x00050041u, 0x00000189u, - 0x00000248u, 0x00000188u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000249u, 0x00000248u, 0x0003003eu, - 0x00000247u, 0x00000249u, 0x00060039u, 0x00000008u, 0x0000024au, 0x0000001bu, 0x00000246u, 0x00000247u, - 0x0003003eu, 0x0000022eu, 0x0000024au, 0x000200f9u, 0x00000230u, 0x000200f8u, 0x00000230u, 0x0004003du, - 0x00000008u, 0x0000024bu, 0x0000022eu, 0x0004003du, 0x00000008u, 0x0000024cu, 0x000001ccu, 0x00050083u, - 0x00000008u, 0x0000024du, 0x0000024bu, 0x0000024cu, 0x0004003du, 0x00000008u, 0x0000024eu, 0x0000020du, - 0x00050085u, 0x00000008u, 0x0000024fu, 0x0000024du, 0x0000024eu, 0x0003003eu, 0x0000022au, 0x0000024fu, - 0x00050041u, 0x00000189u, 0x00000251u, 0x00000188u, 0x00000250u, 0x0004003du, 0x00000006u, 0x00000252u, - 0x00000251u, 0x000500abu, 0x00000031u, 0x00000253u, 0x00000252u, 0x0000003bu, 0x000300f7u, 0x00000255u, - 0x00000000u, 0x000400fau, 0x00000253u, 0x00000254u, 0x00000255u, 0x000200f8u, 0x00000254u, 0x00050041u, - 0x00000189u, 0x00000257u, 0x00000188u, 0x00000256u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000257u, - 0x000500aau, 0x00000031u, 0x00000259u, 0x00000258u, 0x0000003bu, 0x000300f7u, 0x0000025cu, 0x00000000u, - 0x000400fau, 0x00000259u, 0x0000025bu, 0x0000026au, 0x000200f8u, 0x0000025bu, 0x00050041u, 0x00000189u, - 0x00000262u, 0x00000188u, 0x00000261u, 0x0004003du, 0x00000006u, 0x00000263u, 0x00000262u, 0x000500c2u, - 0x00000006u, 0x00000264u, 0x00000263u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000265u, 0x0000021fu, - 0x00050080u, 0x00000006u, 0x00000266u, 0x00000264u, 0x00000265u, 0x00060041u, 0x000001adu, 0x00000267u, - 0x00000260u, 0x000000d8u, 0x00000266u, 0x0004003du, 0x00000006u, 0x00000268u, 0x00000267u, 0x0004007cu, - 0x00000008u, 0x00000269u, 0x00000268u, 0x0003003eu, 0x0000025au, 0x00000269u, 0x000200f9u, 0x0000025cu, - 0x000200f8u, 0x0000026au, 0x00050041u, 0x00000189u, 0x0000026fu, 0x00000188u, 0x00000261u, 0x0004003du, - 0x00000006u, 0x00000270u, 0x0000026fu, 0x000500c2u, 0x00000006u, 0x00000271u, 0x00000270u, 0x00000085u, - 0x0004003du, 0x00000006u, 0x00000272u, 0x0000021fu, 0x00050080u, 0x00000006u, 0x00000273u, 0x00000271u, - 0x00000272u, 0x00060041u, 0x000001beu, 0x00000274u, 0x0000026eu, 0x000000d8u, 0x00000273u, 0x0004003du, - 0x000001b2u, 0x00000275u, 0x00000274u, 0x00040071u, 0x00000006u, 0x00000276u, 0x00000275u, 0x0003003eu, - 0x00000277u, 0x00000276u, 0x00050041u, 0x00000189u, 0x00000279u, 0x00000188u, 0x00000256u, 0x0004003du, - 0x00000006u, 0x0000027au, 0x00000279u, 0x0003003eu, 0x00000278u, 0x0000027au, 0x00060039u, 0x00000008u, - 0x0000027bu, 0x0000001bu, 0x00000277u, 0x00000278u, 0x0003003eu, 0x0000025au, 0x0000027bu, 0x000200f9u, - 0x0000025cu, 0x000200f8u, 0x0000025cu, 0x0004003du, 0x00000008u, 0x0000027cu, 0x0000025au, 0x0004003du, - 0x00000008u, 0x0000027du, 0x0000022au, 0x00050085u, 0x00000008u, 0x0000027eu, 0x0000027du, 0x0000027cu, - 0x0003003eu, 0x0000022au, 0x0000027eu, 0x000200f9u, 0x00000255u, 0x000200f8u, 0x00000255u, 0x00050041u, - 0x00000189u, 0x00000280u, 0x00000188u, 0x0000027fu, 0x0004003du, 0x00000006u, 0x00000281u, 0x00000280u, - 0x000500abu, 0x00000031u, 0x00000282u, 0x00000281u, 0x0000003bu, 0x000300f7u, 0x00000284u, 0x00000000u, - 0x000400fau, 0x00000282u, 0x00000283u, 0x00000284u, 0x000200f8u, 0x00000283u, 0x00050041u, 0x00000189u, - 0x00000286u, 0x00000188u, 0x00000285u, 0x0004003du, 0x00000006u, 0x00000287u, 0x00000286u, 0x000500aau, - 0x00000031u, 0x00000288u, 0x00000287u, 0x0000003bu, 0x000300f7u, 0x0000028bu, 0x00000000u, 0x000400fau, - 0x00000288u, 0x0000028au, 0x00000298u, 0x000200f8u, 0x0000028au, 0x00050041u, 0x00000189u, 0x00000290u, - 0x00000188u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000291u, 0x00000290u, 0x000500c2u, 0x00000006u, - 0x00000292u, 0x00000291u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000293u, 0x0000021fu, 0x00050080u, - 0x00000006u, 0x00000294u, 0x00000292u, 0x00000293u, 0x00060041u, 0x000001adu, 0x00000295u, 0x0000028fu, - 0x000000d8u, 0x00000294u, 0x0004003du, 0x00000006u, 0x00000296u, 0x00000295u, 0x0004007cu, 0x00000008u, - 0x00000297u, 0x00000296u, 0x0003003eu, 0x00000289u, 0x00000297u, 0x000200f9u, 0x0000028bu, 0x000200f8u, - 0x00000298u, 0x00050041u, 0x00000189u, 0x0000029du, 0x00000188u, 0x0000005cu, 0x0004003du, 0x00000006u, - 0x0000029eu, 0x0000029du, 0x000500c2u, 0x00000006u, 0x0000029fu, 0x0000029eu, 0x00000085u, 0x0004003du, - 0x00000006u, 0x000002a0u, 0x0000021fu, 0x00050080u, 0x00000006u, 0x000002a1u, 0x0000029fu, 0x000002a0u, - 0x00060041u, 0x000001beu, 0x000002a2u, 0x0000029cu, 0x000000d8u, 0x000002a1u, 0x0004003du, 0x000001b2u, - 0x000002a3u, 0x000002a2u, 0x00040071u, 0x00000006u, 0x000002a4u, 0x000002a3u, 0x0003003eu, 0x000002a5u, - 0x000002a4u, 0x00050041u, 0x00000189u, 0x000002a7u, 0x00000188u, 0x00000285u, 0x0004003du, 0x00000006u, - 0x000002a8u, 0x000002a7u, 0x0003003eu, 0x000002a6u, 0x000002a8u, 0x00060039u, 0x00000008u, 0x000002a9u, - 0x0000001bu, 0x000002a5u, 0x000002a6u, 0x0003003eu, 0x00000289u, 0x000002a9u, 0x000200f9u, 0x0000028bu, - 0x000200f8u, 0x0000028bu, 0x0004003du, 0x00000008u, 0x000002aau, 0x00000289u, 0x0004003du, 0x00000008u, - 0x000002abu, 0x0000022au, 0x00050081u, 0x00000008u, 0x000002acu, 0x000002abu, 0x000002aau, 0x0003003eu, - 0x0000022au, 0x000002acu, 0x000200f9u, 0x00000284u, 0x000200f8u, 0x00000284u, 0x000200f9u, 0x000002adu, - 0x000200f8u, 0x000002adu, 0x000400f6u, 0x000002afu, 0x000002b0u, 0x00000000u, 0x000200f9u, 0x000002aeu, - 0x000200f8u, 0x000002aeu, 0x00050041u, 0x00000189u, 0x000002b2u, 0x00000188u, 0x000002b1u, 0x0004003du, - 0x00000006u, 0x000002b3u, 0x000002b2u, 0x000500aau, 0x00000031u, 0x000002b4u, 0x000002b3u, 0x0000003bu, - 0x000300f7u, 0x000002b6u, 0x00000000u, 0x000400fau, 0x000002b4u, 0x000002b5u, 0x000002c6u, 0x000200f8u, - 0x000002b5u, 0x00050041u, 0x00000189u, 0x000002bcu, 0x00000188u, 0x000002bbu, 0x0004003du, 0x00000006u, - 0x000002bdu, 0x000002bcu, 0x000500c2u, 0x00000006u, 0x000002beu, 0x000002bdu, 0x0000019au, 0x0004003du, - 0x00000006u, 0x000002bfu, 0x00000184u, 0x0004003du, 0x00000006u, 0x000002c0u, 0x0000021fu, 0x00050080u, - 0x00000006u, 0x000002c1u, 0x000002bfu, 0x000002c0u, 0x00050080u, 0x00000006u, 0x000002c2u, 0x000002beu, - 0x000002c1u, 0x0004003du, 0x00000008u, 0x000002c3u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x000002c4u, - 0x000002c3u, 0x00060041u, 0x000001adu, 0x000002c5u, 0x000002bau, 0x000000d8u, 0x000002c2u, 0x0003003eu, - 0x000002c5u, 0x000002c4u, 0x000200f9u, 0x000002b6u, 0x000200f8u, 0x000002c6u, 0x00050041u, 0x00000189u, - 0x000002cbu, 0x00000188u, 0x000002bbu, 0x0004003du, 0x00000006u, 0x000002ccu, 0x000002cbu, 0x000500c2u, - 0x00000006u, 0x000002cdu, 0x000002ccu, 0x00000085u, 0x0004003du, 0x00000006u, 0x000002ceu, 0x00000184u, - 0x0004003du, 0x00000006u, 0x000002cfu, 0x0000021fu, 0x00050080u, 0x00000006u, 0x000002d0u, 0x000002ceu, - 0x000002cfu, 0x00050080u, 0x00000006u, 0x000002d1u, 0x000002cdu, 0x000002d0u, 0x0004003du, 0x00000008u, - 0x000002d3u, 0x0000022au, 0x0003003eu, 0x000002d2u, 0x000002d3u, 0x00050041u, 0x00000189u, 0x000002d5u, - 0x00000188u, 0x000002b1u, 0x0004003du, 0x00000006u, 0x000002d6u, 0x000002d5u, 0x0003003eu, 0x000002d4u, - 0x000002d6u, 0x00060039u, 0x00000006u, 0x000002d7u, 0x00000020u, 0x000002d2u, 0x000002d4u, 0x00040071u, - 0x000001b2u, 0x000002d8u, 0x000002d7u, 0x00060041u, 0x000001beu, 0x000002d9u, 0x000002cau, 0x000000d8u, - 0x000002d1u, 0x0003003eu, 0x000002d9u, 0x000002d8u, 0x000200f9u, 0x000002b6u, 0x000200f8u, 0x000002b6u, - 0x000200f9u, 0x000002b0u, 0x000200f8u, 0x000002b0u, 0x000400fau, 0x000002dau, 0x000002adu, 0x000002afu, - 0x000200f8u, 0x000002afu, 0x000200f9u, 0x00000224u, 0x000200f8u, 0x00000224u, 0x0004003du, 0x00000006u, - 0x000002dbu, 0x0000021fu, 0x00050080u, 0x00000006u, 0x000002dcu, 0x000002dbu, 0x00000154u, 0x0003003eu, - 0x0000021fu, 0x000002dcu, 0x000200f9u, 0x00000221u, 0x000200f8u, 0x00000223u, 0x000100fdu, 0x00010038u, - 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, - 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000027u, 0x0000000au, 0x000500c4u, 0x00000006u, - 0x0000002au, 0x00000027u, 0x00000029u, 0x0004007cu, 0x00000008u, 0x0000002bu, 0x0000002au, 0x000200feu, - 0x0000002bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, - 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000002eu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x00000047u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002fu, 0x0000000fu, - 0x0004007cu, 0x00000006u, 0x00000030u, 0x0000002fu, 0x0003003eu, 0x0000002eu, 0x00000030u, 0x0004003du, - 0x00000006u, 0x00000032u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x00000034u, 0x00000032u, 0x00000033u, - 0x000500aau, 0x00000031u, 0x00000035u, 0x00000034u, 0x00000033u, 0x000300f7u, 0x00000037u, 0x00000000u, - 0x000400fau, 0x00000035u, 0x00000036u, 0x00000037u, 0x000200f8u, 0x00000036u, 0x0004003du, 0x00000006u, - 0x00000038u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x0000003au, 0x00000038u, 0x00000039u, 0x000500abu, - 0x00000031u, 0x0000003cu, 0x0000003au, 0x0000003bu, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000037u, - 0x000700f5u, 0x00000031u, 0x0000003du, 0x00000035u, 0x00000011u, 0x0000003cu, 0x00000036u, 0x000300f7u, - 0x0000003fu, 0x00000000u, 0x000400fau, 0x0000003du, 0x0000003eu, 0x0000003fu, 0x000200f8u, 0x0000003eu, - 0x0004003du, 0x00000006u, 0x00000040u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x00000041u, 0x00000040u, - 0x00000029u, 0x000500c5u, 0x00000006u, 0x00000043u, 0x00000041u, 0x00000042u, 0x000500c7u, 0x00000006u, - 0x00000045u, 0x00000043u, 0x00000044u, 0x000200feu, 0x00000045u, 0x000200f8u, 0x0000003fu, 0x0004003du, - 0x00000006u, 0x00000049u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x0000004au, 0x00000049u, 0x00000029u, - 0x000500c7u, 0x00000006u, 0x0000004cu, 0x0000004au, 0x0000004bu, 0x00050080u, 0x00000006u, 0x0000004du, - 0x00000048u, 0x0000004cu, 0x0003003eu, 0x00000047u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000004eu, - 0x0000002eu, 0x0004003du, 0x00000006u, 0x0000004fu, 0x00000047u, 0x00050080u, 0x00000006u, 0x00000050u, - 0x0000004eu, 0x0000004fu, 0x000500c2u, 0x00000006u, 0x00000051u, 0x00000050u, 0x00000029u, 0x000500c7u, - 0x00000006u, 0x00000052u, 0x00000051u, 0x00000044u, 0x000200feu, 0x00000052u, 0x00010038u, 0x00050036u, - 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, - 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005au, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000060u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007bu, - 0x00000007u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000058u, - 0x00000056u, 0x00000057u, 0x000500c4u, 0x00000006u, 0x00000059u, 0x00000058u, 0x00000029u, 0x0003003eu, - 0x00000055u, 0x00000059u, 0x0004003du, 0x00000006u, 0x0000005bu, 0x00000012u, 0x000500c2u, 0x00000006u, - 0x0000005du, 0x0000005bu, 0x0000005cu, 0x000500c7u, 0x00000006u, 0x0000005fu, 0x0000005du, 0x0000005eu, - 0x0003003eu, 0x0000005au, 0x0000005fu, 0x0004003du, 0x00000006u, 0x00000061u, 0x00000012u, 0x000500c7u, - 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x0003003eu, 0x00000060u, 0x00000063u, 0x0004003du, - 0x00000006u, 0x00000064u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000065u, 0x00000064u, 0x0000005eu, - 0x000300f7u, 0x00000067u, 0x00000000u, 0x000400fau, 0x00000065u, 0x00000066u, 0x00000067u, 0x000200f8u, - 0x00000066u, 0x0004003du, 0x00000006u, 0x00000068u, 0x00000055u, 0x000500c5u, 0x00000006u, 0x00000069u, - 0x00000068u, 0x00000033u, 0x0004003du, 0x00000006u, 0x0000006au, 0x00000060u, 0x000500c4u, 0x00000006u, - 0x0000006cu, 0x0000006au, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x0000006du, 0x00000069u, 0x0000006cu, - 0x0004007cu, 0x00000008u, 0x0000006eu, 0x0000006du, 0x000200feu, 0x0000006eu, 0x000200f8u, 0x00000067u, - 0x0004003du, 0x00000006u, 0x00000070u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000071u, 0x00000070u, - 0x0000003bu, 0x000300f7u, 0x00000073u, 0x00000000u, 0x000400fau, 0x00000071u, 0x00000072u, 0x00000073u, - 0x000200f8u, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000074u, 0x00000060u, 0x000500aau, 0x00000031u, - 0x00000075u, 0x00000074u, 0x0000003bu, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, - 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, 0x0004003du, 0x00000006u, 0x00000078u, 0x00000055u, - 0x0004007cu, 0x00000008u, 0x00000079u, 0x00000078u, 0x000200feu, 0x00000079u, 0x000200f8u, 0x00000077u, - 0x0003003eu, 0x0000007bu, 0x0000003bu, 0x000200f9u, 0x0000007cu, 0x000200f8u, 0x0000007cu, 0x000400f6u, - 0x0000007eu, 0x0000007fu, 0x00000000u, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000080u, 0x0004003du, - 0x00000006u, 0x00000081u, 0x00000060u, 0x000500c7u, 0x00000006u, 0x00000083u, 0x00000081u, 0x00000082u, - 0x000500aau, 0x00000031u, 0x00000084u, 0x00000083u, 0x0000003bu, 0x000400fau, 0x00000084u, 0x0000007du, - 0x0000007eu, 0x000200f8u, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000086u, 0x00000060u, 0x000500c4u, - 0x00000006u, 0x00000087u, 0x00000086u, 0x00000085u, 0x0003003eu, 0x00000060u, 0x00000087u, 0x0004003du, - 0x00000006u, 0x00000088u, 0x0000007bu, 0x00050080u, 0x00000006u, 0x00000089u, 0x00000088u, 0x0000004bu, - 0x0003003eu, 0x0000007bu, 0x00000089u, 0x000200f9u, 0x0000007fu, 0x000200f8u, 0x0000007fu, 0x000200f9u, - 0x0000007cu, 0x000200f8u, 0x0000007eu, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000060u, 0x000500c7u, - 0x00000006u, 0x0000008bu, 0x0000008au, 0x00000062u, 0x0003003eu, 0x00000060u, 0x0000008bu, 0x0004003du, - 0x00000006u, 0x0000008cu, 0x00000055u, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000007bu, 0x00050082u, - 0x00000006u, 0x0000008fu, 0x0000008du, 0x0000008eu, 0x000500c4u, 0x00000006u, 0x00000091u, 0x0000008fu, - 0x00000090u, 0x000500c5u, 0x00000006u, 0x00000092u, 0x0000008cu, 0x00000091u, 0x0004003du, 0x00000006u, - 0x00000093u, 0x00000060u, 0x000500c4u, 0x00000006u, 0x00000094u, 0x00000093u, 0x0000006bu, 0x000500c5u, - 0x00000006u, 0x00000095u, 0x00000092u, 0x00000094u, 0x0004007cu, 0x00000008u, 0x00000096u, 0x00000095u, - 0x000200feu, 0x00000096u, 0x000200f8u, 0x00000073u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000055u, - 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005au, 0x00050080u, 0x00000006u, 0x0000009bu, 0x00000099u, - 0x0000009au, 0x000500c4u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x00000090u, 0x000500c5u, 0x00000006u, - 0x0000009du, 0x00000098u, 0x0000009cu, 0x0004003du, 0x00000006u, 0x0000009eu, 0x00000060u, 0x000500c4u, - 0x00000006u, 0x0000009fu, 0x0000009eu, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x000000a0u, 0x0000009du, - 0x0000009fu, 0x0004007cu, 0x00000008u, 0x000000a1u, 0x000000a0u, 0x000200feu, 0x000000a1u, 0x00010038u, - 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, - 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000abu, 0x00000007u, 0x0004003bu, 0x000000b0u, - 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000efu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000111u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000118u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a5u, 0x00000015u, 0x0004007cu, 0x00000006u, - 0x000000a6u, 0x000000a5u, 0x0003003eu, 0x000000a4u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000000a8u, - 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000a9u, 0x000000a8u, 0x00000029u, 0x000500c7u, 0x00000006u, - 0x000000aau, 0x000000a9u, 0x00000057u, 0x0003003eu, 0x000000a7u, 0x000000aau, 0x0004003du, 0x00000006u, - 0x000000acu, 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000adu, 0x000000acu, 0x00000090u, 0x000500c7u, - 0x00000006u, 0x000000afu, 0x000000adu, 0x000000aeu, 0x0003003eu, 0x000000abu, 0x000000afu, 0x0004003du, - 0x00000006u, 0x000000b2u, 0x000000abu, 0x0004007cu, 0x00000028u, 0x000000b3u, 0x000000b2u, 0x00050082u, - 0x00000028u, 0x000000b5u, 0x000000b3u, 0x000000b4u, 0x00050080u, 0x00000028u, 0x000000b7u, 0x000000b5u, - 0x000000b6u, 0x0003003eu, 0x000000b1u, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000b9u, 0x000000a4u, - 0x000500c7u, 0x00000006u, 0x000000bau, 0x000000b9u, 0x00000039u, 0x0003003eu, 0x000000b8u, 0x000000bau, - 0x0004003du, 0x00000006u, 0x000000bbu, 0x000000abu, 0x000500aau, 0x00000031u, 0x000000bcu, 0x000000bbu, - 0x000000aeu, 0x000300f7u, 0x000000beu, 0x00000000u, 0x000400fau, 0x000000bcu, 0x000000bdu, 0x000000beu, - 0x000200f8u, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000bfu, 0x000000a7u, 0x000500c5u, 0x00000006u, - 0x000000c1u, 0x000000bfu, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c2u, 0x000000b8u, 0x000500abu, - 0x00000031u, 0x000000c3u, 0x000000c2u, 0x0000003bu, 0x000300f7u, 0x000000c6u, 0x00000000u, 0x000400fau, - 0x000000c3u, 0x000000c5u, 0x000000cbu, 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000c8u, - 0x000000b8u, 0x000500c2u, 0x00000006u, 0x000000c9u, 0x000000c8u, 0x0000006bu, 0x000500c5u, 0x00000006u, - 0x000000cau, 0x000000c7u, 0x000000c9u, 0x0003003eu, 0x000000c4u, 0x000000cau, 0x000200f9u, 0x000000c6u, - 0x000200f8u, 0x000000cbu, 0x0003003eu, 0x000000c4u, 0x0000003bu, 0x000200f9u, 0x000000c6u, 0x000200f8u, - 0x000000c6u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000c4u, 0x000500c5u, 0x00000006u, 0x000000cdu, - 0x000000c1u, 0x000000ccu, 0x000200feu, 0x000000cdu, 0x000200f8u, 0x000000beu, 0x0004003du, 0x00000028u, - 0x000000cfu, 0x000000b1u, 0x000500afu, 0x00000031u, 0x000000d1u, 0x000000cfu, 0x000000d0u, 0x000300f7u, - 0x000000d3u, 0x00000000u, 0x000400fau, 0x000000d1u, 0x000000d2u, 0x000000d3u, 0x000200f8u, 0x000000d2u, - 0x0004003du, 0x00000006u, 0x000000d4u, 0x000000a7u, 0x000500c5u, 0x00000006u, 0x000000d5u, 0x000000d4u, - 0x000000c0u, 0x000200feu, 0x000000d5u, 0x000200f8u, 0x000000d3u, 0x0004003du, 0x00000028u, 0x000000d7u, - 0x000000b1u, 0x000500b3u, 0x00000031u, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, - 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, - 0x00000028u, 0x000000dcu, 0x000000b1u, 0x000500b1u, 0x00000031u, 0x000000deu, 0x000000dcu, 0x000000ddu, - 0x000300f7u, 0x000000e0u, 0x00000000u, 0x000400fau, 0x000000deu, 0x000000dfu, 0x000000e0u, 0x000200f8u, - 0x000000dfu, 0x0004003du, 0x00000006u, 0x000000e1u, 0x000000a7u, 0x000200feu, 0x000000e1u, 0x000200f8u, - 0x000000e0u, 0x0004003du, 0x00000006u, 0x000000e4u, 0x000000b8u, 0x000500c5u, 0x00000006u, 0x000000e5u, - 0x000000e4u, 0x000000e3u, 0x0003003eu, 0x000000b8u, 0x000000e5u, 0x0004003du, 0x00000028u, 0x000000e8u, - 0x000000b1u, 0x00050082u, 0x00000028u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0004007cu, 0x00000006u, - 0x000000eau, 0x000000e9u, 0x0003003eu, 0x000000e6u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000ecu, - 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000edu, 0x000000e6u, 0x000500c2u, 0x00000006u, 0x000000eeu, - 0x000000ecu, 0x000000edu, 0x0003003eu, 0x000000ebu, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, - 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e6u, 0x000500c4u, 0x00000006u, 0x000000f2u, - 0x0000004bu, 0x000000f1u, 0x00050082u, 0x00000006u, 0x000000f3u, 0x000000f2u, 0x0000004bu, 0x000500c7u, - 0x00000006u, 0x000000f4u, 0x000000f0u, 0x000000f3u, 0x0003003eu, 0x000000efu, 0x000000f4u, 0x0004003du, - 0x00000006u, 0x000000f6u, 0x000000e6u, 0x00050082u, 0x00000006u, 0x000000f7u, 0x000000f6u, 0x0000004bu, - 0x000500c4u, 0x00000006u, 0x000000f8u, 0x0000004bu, 0x000000f7u, 0x0003003eu, 0x000000f5u, 0x000000f8u, - 0x0004003du, 0x00000006u, 0x000000f9u, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000f5u, - 0x000500acu, 0x00000031u, 0x000000fbu, 0x000000f9u, 0x000000fau, 0x000400a8u, 0x00000031u, 0x000000fcu, - 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, - 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000efu, 0x0004003du, 0x00000006u, - 0x00000100u, 0x000000f5u, 0x000500aau, 0x00000031u, 0x00000101u, 0x000000ffu, 0x00000100u, 0x000300f7u, - 0x00000103u, 0x00000000u, 0x000400fau, 0x00000101u, 0x00000102u, 0x00000103u, 0x000200f8u, 0x00000102u, - 0x0004003du, 0x00000006u, 0x00000104u, 0x000000ebu, 0x000500c7u, 0x00000006u, 0x00000105u, 0x00000104u, - 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000106u, 0x00000105u, 0x0000003bu, 0x000200f9u, 0x00000103u, - 0x000200f8u, 0x00000103u, 0x000700f5u, 0x00000031u, 0x00000107u, 0x00000101u, 0x000000fdu, 0x00000106u, - 0x00000102u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x00000031u, 0x00000108u, - 0x000000fbu, 0x000000e0u, 0x00000107u, 0x00000103u, 0x000300f7u, 0x0000010au, 0x00000000u, 0x000400fau, - 0x00000108u, 0x00000109u, 0x0000010au, 0x000200f8u, 0x00000109u, 0x0004003du, 0x00000006u, 0x0000010bu, - 0x000000ebu, 0x00050080u, 0x00000006u, 0x0000010cu, 0x0000010bu, 0x0000004bu, 0x0003003eu, 0x000000ebu, - 0x0000010cu, 0x000200f9u, 0x0000010au, 0x000200f8u, 0x0000010au, 0x0004003du, 0x00000006u, 0x0000010du, - 0x000000a7u, 0x0004003du, 0x00000006u, 0x0000010eu, 0x000000ebu, 0x000500c5u, 0x00000006u, 0x0000010fu, - 0x0000010du, 0x0000010eu, 0x000200feu, 0x0000010fu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000028u, - 0x00000112u, 0x000000b1u, 0x0004007cu, 0x00000006u, 0x00000113u, 0x00000112u, 0x000500c4u, 0x00000006u, - 0x00000114u, 0x00000113u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000115u, 0x000000b8u, 0x000500c2u, - 0x00000006u, 0x00000116u, 0x00000115u, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x00000117u, 0x00000114u, - 0x00000116u, 0x0003003eu, 0x00000111u, 0x00000117u, 0x0004003du, 0x00000006u, 0x00000119u, 0x000000b8u, - 0x000500c7u, 0x00000006u, 0x0000011bu, 0x00000119u, 0x0000011au, 0x0003003eu, 0x00000118u, 0x0000011bu, - 0x0004003du, 0x00000006u, 0x0000011cu, 0x00000118u, 0x000500acu, 0x00000031u, 0x0000011eu, 0x0000011cu, - 0x0000011du, 0x000400a8u, 0x00000031u, 0x0000011fu, 0x0000011eu, 0x000300f7u, 0x00000121u, 0x00000000u, - 0x000400fau, 0x0000011fu, 0x00000120u, 0x00000121u, 0x000200f8u, 0x00000120u, 0x0004003du, 0x00000006u, - 0x00000122u, 0x00000118u, 0x000500aau, 0x00000031u, 0x00000123u, 0x00000122u, 0x0000011du, 0x000300f7u, - 0x00000125u, 0x00000000u, 0x000400fau, 0x00000123u, 0x00000124u, 0x00000125u, 0x000200f8u, 0x00000124u, - 0x0004003du, 0x00000006u, 0x00000126u, 0x00000111u, 0x000500c7u, 0x00000006u, 0x00000127u, 0x00000126u, - 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000128u, 0x00000127u, 0x0000003bu, 0x000200f9u, 0x00000125u, - 0x000200f8u, 0x00000125u, 0x000700f5u, 0x00000031u, 0x00000129u, 0x00000123u, 0x00000120u, 0x00000128u, - 0x00000124u, 0x000200f9u, 0x00000121u, 0x000200f8u, 0x00000121u, 0x000700f5u, 0x00000031u, 0x0000012au, - 0x0000011eu, 0x000000dbu, 0x00000129u, 0x00000125u, 0x000300f7u, 0x0000012cu, 0x00000000u, 0x000400fau, - 0x0000012au, 0x0000012bu, 0x0000012cu, 0x000200f8u, 0x0000012bu, 0x0004003du, 0x00000006u, 0x0000012du, - 0x00000111u, 0x00050080u, 0x00000006u, 0x0000012eu, 0x0000012du, 0x0000004bu, 0x0003003eu, 0x00000111u, - 0x0000012eu, 0x000200f9u, 0x0000012cu, 0x000200f8u, 0x0000012cu, 0x0004003du, 0x00000006u, 0x0000012fu, - 0x000000a7u, 0x0004003du, 0x00000006u, 0x00000130u, 0x00000111u, 0x000500c5u, 0x00000006u, 0x00000131u, - 0x0000012fu, 0x00000130u, 0x000200feu, 0x00000131u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, - 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, - 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000136u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000139u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013du, 0x00000007u, 0x0004003du, 0x00000006u, - 0x00000134u, 0x0000001au, 0x000500aau, 0x00000031u, 0x00000135u, 0x00000134u, 0x0000004bu, 0x000300f7u, - 0x00000138u, 0x00000000u, 0x000400fau, 0x00000135u, 0x00000137u, 0x0000013cu, 0x000200f8u, 0x00000137u, - 0x0004003du, 0x00000006u, 0x0000013au, 0x00000019u, 0x0003003eu, 0x00000139u, 0x0000013au, 0x00050039u, - 0x00000008u, 0x0000013bu, 0x00000013u, 0x00000139u, 0x0003003eu, 0x00000136u, 0x0000013bu, 0x000200f9u, - 0x00000138u, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000006u, 0x0000013eu, 0x00000019u, 0x0003003eu, - 0x0000013du, 0x0000013eu, 0x00050039u, 0x00000008u, 0x0000013fu, 0x0000000bu, 0x0000013du, 0x0003003eu, - 0x00000136u, 0x0000013fu, 0x000200f9u, 0x00000138u, 0x000200f8u, 0x00000138u, 0x0004003du, 0x00000008u, - 0x00000140u, 0x00000136u, 0x000200feu, 0x00000140u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, - 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, - 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000145u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000148u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014cu, 0x00000007u, 0x0004003du, 0x00000006u, - 0x00000143u, 0x0000001fu, 0x000500aau, 0x00000031u, 0x00000144u, 0x00000143u, 0x0000004bu, 0x000300f7u, - 0x00000147u, 0x00000000u, 0x000400fau, 0x00000144u, 0x00000146u, 0x0000014bu, 0x000200f8u, 0x00000146u, - 0x0004003du, 0x00000008u, 0x00000149u, 0x0000001eu, 0x0003003eu, 0x00000148u, 0x00000149u, 0x00050039u, - 0x00000006u, 0x0000014au, 0x00000016u, 0x00000148u, 0x0003003eu, 0x00000145u, 0x0000014au, 0x000200f9u, - 0x00000147u, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000008u, 0x0000014du, 0x0000001eu, 0x0003003eu, - 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000006u, 0x0000014eu, 0x00000010u, 0x0000014cu, 0x0003003eu, - 0x00000145u, 0x0000014eu, 0x000200f9u, 0x00000147u, 0x000200f8u, 0x00000147u, 0x0004003du, 0x00000006u, - 0x0000014fu, 0x00000145u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000025u, - 0x00000000u, 0x00000022u, 0x00030037u, 0x00000007u, 0x00000023u, 0x00030037u, 0x0000000du, 0x00000024u, - 0x000200f8u, 0x00000026u, 0x0004003bu, 0x00000007u, 0x0000015cu, 0x00000007u, 0x000400e0u, 0x00000152u, - 0x00000152u, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000158u, 0x00000023u, 0x0004003du, 0x00000008u, - 0x00000159u, 0x00000024u, 0x00050041u, 0x0000015au, 0x0000015bu, 0x00000157u, 0x00000158u, 0x0003003eu, - 0x0000015bu, 0x00000159u, 0x000400e0u, 0x00000152u, 0x00000152u, 0x00000153u, 0x0003003eu, 0x0000015cu, - 0x00000042u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015du, 0x000400f6u, 0x0000015fu, 0x00000160u, - 0x00000000u, 0x000200f9u, 0x00000161u, 0x000200f8u, 0x00000161u, 0x0004003du, 0x00000006u, 0x00000162u, - 0x0000015cu, 0x000500acu, 0x00000031u, 0x00000163u, 0x00000162u, 0x0000003bu, 0x000400fau, 0x00000163u, - 0x0000015eu, 0x0000015fu, 0x000200f8u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x00000164u, 0x00000023u, - 0x0004003du, 0x00000006u, 0x00000165u, 0x0000015cu, 0x000500b0u, 0x00000031u, 0x00000166u, 0x00000164u, - 0x00000165u, 0x000300f7u, 0x00000168u, 0x00000000u, 0x000400fau, 0x00000166u, 0x00000167u, 0x00000168u, - 0x000200f8u, 0x00000167u, 0x0004003du, 0x00000006u, 0x00000169u, 0x00000023u, 0x0004003du, 0x00000006u, - 0x0000016au, 0x00000023u, 0x0004003du, 0x00000006u, 0x0000016bu, 0x0000015cu, 0x00050080u, 0x00000006u, - 0x0000016cu, 0x0000016au, 0x0000016bu, 0x00050041u, 0x0000015au, 0x0000016du, 0x00000157u, 0x0000016cu, - 0x0004003du, 0x00000008u, 0x0000016eu, 0x0000016du, 0x00050041u, 0x0000015au, 0x0000016fu, 0x00000157u, - 0x00000169u, 0x0004003du, 0x00000008u, 0x00000170u, 0x0000016fu, 0x00050081u, 0x00000008u, 0x00000171u, - 0x00000170u, 0x0000016eu, 0x00050041u, 0x0000015au, 0x00000172u, 0x00000157u, 0x00000169u, 0x0003003eu, - 0x00000172u, 0x00000171u, 0x000200f9u, 0x00000168u, 0x000200f8u, 0x00000168u, 0x000400e0u, 0x00000152u, - 0x00000152u, 0x00000153u, 0x000200f9u, 0x00000160u, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, - 0x00000173u, 0x0000015cu, 0x000500c2u, 0x00000006u, 0x00000174u, 0x00000173u, 0x00000085u, 0x0003003eu, - 0x0000015cu, 0x00000174u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015fu, 0x00050041u, 0x0000015au, - 0x00000175u, 0x00000157u, 0x000000d8u, 0x0004003du, 0x00000008u, 0x00000176u, 0x00000175u, 0x000200feu, - 0x00000176u, 0x00010038u, -}; - -inline constexpr uint32_t kSpv_vt_relu[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001bfu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, - 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, - 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, - 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, - 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, - 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00040047u, 0x00000166u, - 0x00000006u, 0x00000004u, 0x00030047u, 0x00000167u, 0x00000002u, 0x00040048u, 0x00000167u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x00000167u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000169u, - 0x00000018u, 0x00040047u, 0x00000169u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000169u, 0x00000022u, - 0x00000000u, 0x00040047u, 0x00000177u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000178u, 0x00000002u, - 0x00040048u, 0x00000178u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000178u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x0000017au, 0x00000018u, 0x00040047u, 0x0000017au, 0x00000021u, 0x00000001u, - 0x00040047u, 0x0000017au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000193u, 0x00000006u, 0x00000004u, - 0x00030047u, 0x00000194u, 0x00000002u, 0x00050048u, 0x00000194u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00040047u, 0x00000196u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000196u, 0x00000022u, 0x00000000u, - 0x00040047u, 0x000001a5u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001a6u, 0x00000002u, 0x00050048u, - 0x000001a6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001a8u, 0x00000021u, 0x00000003u, - 0x00040047u, 0x000001a8u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001beu, 0x0000000bu, 0x00000019u, - 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, - 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, - 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, - 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, - 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, - 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, - 0x0004002bu, 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, - 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, - 0x0004002bu, 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, - 0x0004002bu, 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, - 0x0004002bu, 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, - 0x0004002bu, 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, - 0x0004002bu, 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, - 0x0004002bu, 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, - 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, - 0x00040020u, 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, - 0x0004002bu, 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, - 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, - 0x0004002bu, 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, - 0x0004002bu, 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, - 0x0004002bu, 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, - 0x00040017u, 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, - 0x0004003bu, 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, - 0x0007001eu, 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, - 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, - 0x00000158u, 0x00000009u, 0x00000006u, 0x0003001du, 0x00000166u, 0x00000006u, 0x0003001eu, 0x00000167u, - 0x00000166u, 0x00040020u, 0x00000168u, 0x0000000cu, 0x00000167u, 0x0004003bu, 0x00000168u, 0x00000169u, - 0x0000000cu, 0x0004002bu, 0x00000023u, 0x0000016au, 0x00000003u, 0x0004002bu, 0x00000023u, 0x0000016du, - 0x00000002u, 0x00040020u, 0x00000171u, 0x0000000cu, 0x00000006u, 0x00040015u, 0x00000176u, 0x00000010u, - 0x00000000u, 0x0003001du, 0x00000177u, 0x00000176u, 0x0003001eu, 0x00000178u, 0x00000177u, 0x00040020u, - 0x00000179u, 0x0000000cu, 0x00000178u, 0x0004003bu, 0x00000179u, 0x0000017au, 0x0000000cu, 0x00040020u, - 0x00000180u, 0x0000000cu, 0x00000176u, 0x0003001du, 0x00000193u, 0x00000006u, 0x0003001eu, 0x00000194u, - 0x00000193u, 0x00040020u, 0x00000195u, 0x0000000cu, 0x00000194u, 0x0004003bu, 0x00000195u, 0x00000196u, - 0x0000000cu, 0x0004002bu, 0x00000023u, 0x00000197u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x0000019eu, - 0x00000000u, 0x0003001du, 0x000001a5u, 0x00000176u, 0x0003001eu, 0x000001a6u, 0x000001a5u, 0x00040020u, - 0x000001a7u, 0x0000000cu, 0x000001a6u, 0x0004003bu, 0x000001a7u, 0x000001a8u, 0x0000000cu, 0x0003002au, - 0x0000002cu, 0x000001b9u, 0x0004002bu, 0x00000006u, 0x000001bau, 0x00000080u, 0x0004001cu, 0x000001bbu, - 0x00000008u, 0x000001bau, 0x00040020u, 0x000001bcu, 0x00000004u, 0x000001bbu, 0x0004003bu, 0x000001bcu, - 0x000001bdu, 0x00000004u, 0x0006002cu, 0x0000014eu, 0x000001beu, 0x000001bau, 0x00000046u, 0x00000046u, - 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, - 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000015fu, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000163u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000184u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000185u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001b2u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000001b3u, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, 0x00000150u, 0x00000036u, - 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, 0x00000153u, 0x0004003du, - 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, 0x00000157u, 0x000000d3u, - 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x000500aeu, 0x0000002cu, 0x0000015bu, 0x00000154u, - 0x0000015au, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, 0x0000015cu, 0x0000015du, - 0x000200f8u, 0x0000015cu, 0x000100fdu, 0x000200f8u, 0x0000015du, 0x00050041u, 0x00000158u, 0x00000160u, - 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000161u, 0x00000160u, 0x000500aau, 0x0000002cu, - 0x00000162u, 0x00000161u, 0x00000036u, 0x000300f7u, 0x00000165u, 0x00000000u, 0x000400fau, 0x00000162u, - 0x00000164u, 0x00000175u, 0x000200f8u, 0x00000164u, 0x00050041u, 0x00000158u, 0x0000016bu, 0x00000157u, - 0x0000016au, 0x0004003du, 0x00000006u, 0x0000016cu, 0x0000016bu, 0x000500c2u, 0x00000006u, 0x0000016eu, - 0x0000016cu, 0x0000016du, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000014du, 0x00050080u, 0x00000006u, - 0x00000170u, 0x0000016eu, 0x0000016fu, 0x00060041u, 0x00000171u, 0x00000172u, 0x00000169u, 0x000000d3u, - 0x00000170u, 0x0004003du, 0x00000006u, 0x00000173u, 0x00000172u, 0x0004007cu, 0x00000008u, 0x00000174u, - 0x00000173u, 0x0003003eu, 0x00000163u, 0x00000174u, 0x000200f9u, 0x00000165u, 0x000200f8u, 0x00000175u, - 0x00050041u, 0x00000158u, 0x0000017bu, 0x00000157u, 0x0000016au, 0x0004003du, 0x00000006u, 0x0000017cu, - 0x0000017bu, 0x000500c2u, 0x00000006u, 0x0000017du, 0x0000017cu, 0x00000080u, 0x0004003du, 0x00000006u, - 0x0000017eu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000017fu, 0x0000017du, 0x0000017eu, 0x00060041u, - 0x00000180u, 0x00000181u, 0x0000017au, 0x000000d3u, 0x0000017fu, 0x0004003du, 0x00000176u, 0x00000182u, - 0x00000181u, 0x00040071u, 0x00000006u, 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000184u, 0x00000183u, - 0x00050041u, 0x00000158u, 0x00000186u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000187u, - 0x00000186u, 0x0003003eu, 0x00000185u, 0x00000187u, 0x00060039u, 0x00000008u, 0x00000188u, 0x0000001bu, - 0x00000184u, 0x00000185u, 0x0003003eu, 0x00000163u, 0x00000188u, 0x000200f9u, 0x00000165u, 0x000200f8u, - 0x00000165u, 0x0004003du, 0x00000008u, 0x00000189u, 0x00000163u, 0x0003003eu, 0x0000015fu, 0x00000189u, - 0x000200f9u, 0x0000018au, 0x000200f8u, 0x0000018au, 0x000400f6u, 0x0000018cu, 0x0000018du, 0x00000000u, - 0x000200f9u, 0x0000018bu, 0x000200f8u, 0x0000018bu, 0x00050041u, 0x00000158u, 0x0000018eu, 0x00000157u, - 0x0000016du, 0x0004003du, 0x00000006u, 0x0000018fu, 0x0000018eu, 0x000500aau, 0x0000002cu, 0x00000190u, - 0x0000018fu, 0x00000036u, 0x000300f7u, 0x00000192u, 0x00000000u, 0x000400fau, 0x00000190u, 0x00000191u, - 0x000001a4u, 0x000200f8u, 0x00000191u, 0x00050041u, 0x00000158u, 0x00000198u, 0x00000157u, 0x00000197u, - 0x0004003du, 0x00000006u, 0x00000199u, 0x00000198u, 0x000500c2u, 0x00000006u, 0x0000019au, 0x00000199u, - 0x0000016du, 0x0004003du, 0x00000006u, 0x0000019bu, 0x0000014du, 0x00050080u, 0x00000006u, 0x0000019cu, - 0x0000019au, 0x0000019bu, 0x0004003du, 0x00000008u, 0x0000019du, 0x0000015fu, 0x000500bau, 0x0000002cu, - 0x0000019fu, 0x0000019du, 0x0000019eu, 0x0004003du, 0x00000008u, 0x000001a0u, 0x0000015fu, 0x000600a9u, - 0x00000008u, 0x000001a1u, 0x0000019fu, 0x000001a0u, 0x0000019eu, 0x0004007cu, 0x00000006u, 0x000001a2u, - 0x000001a1u, 0x00060041u, 0x00000171u, 0x000001a3u, 0x00000196u, 0x000000d3u, 0x0000019cu, 0x0003003eu, - 0x000001a3u, 0x000001a2u, 0x000200f9u, 0x00000192u, 0x000200f8u, 0x000001a4u, 0x00050041u, 0x00000158u, - 0x000001a9u, 0x00000157u, 0x00000197u, 0x0004003du, 0x00000006u, 0x000001aau, 0x000001a9u, 0x000500c2u, - 0x00000006u, 0x000001abu, 0x000001aau, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001acu, 0x0000014du, - 0x00050080u, 0x00000006u, 0x000001adu, 0x000001abu, 0x000001acu, 0x0004003du, 0x00000008u, 0x000001aeu, - 0x0000015fu, 0x000500bau, 0x0000002cu, 0x000001afu, 0x000001aeu, 0x0000019eu, 0x0004003du, 0x00000008u, - 0x000001b0u, 0x0000015fu, 0x000600a9u, 0x00000008u, 0x000001b1u, 0x000001afu, 0x000001b0u, 0x0000019eu, - 0x0003003eu, 0x000001b2u, 0x000001b1u, 0x00050041u, 0x00000158u, 0x000001b4u, 0x00000157u, 0x0000016du, - 0x0004003du, 0x00000006u, 0x000001b5u, 0x000001b4u, 0x0003003eu, 0x000001b3u, 0x000001b5u, 0x00060039u, - 0x00000006u, 0x000001b6u, 0x00000020u, 0x000001b2u, 0x000001b3u, 0x00040071u, 0x00000176u, 0x000001b7u, - 0x000001b6u, 0x00060041u, 0x00000180u, 0x000001b8u, 0x000001a8u, 0x000000d3u, 0x000001adu, 0x0003003eu, - 0x000001b8u, 0x000001b7u, 0x000200f9u, 0x00000192u, 0x000200f8u, 0x00000192u, 0x000200f9u, 0x0000018du, - 0x000200f8u, 0x0000018du, 0x000400fau, 0x000001b9u, 0x0000018au, 0x0000018cu, 0x000200f8u, 0x0000018cu, - 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, - 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000022u, 0x0000000au, - 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, 0x0004007cu, 0x00000008u, 0x00000026u, - 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, - 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, - 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, 0x00000007u, 0x0004003du, 0x00000008u, - 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, 0x0000002au, 0x0003003eu, 0x00000029u, - 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, 0x000500c7u, 0x00000006u, 0x0000002fu, - 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, 0x0000002fu, 0x0000002eu, 0x000300f7u, - 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, 0x00000032u, 0x000200f8u, 0x00000031u, - 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, 0x00000006u, 0x00000035u, 0x00000033u, - 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000032u, - 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, 0x00000030u, 0x00000011u, 0x00000037u, - 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, 0x00000038u, 0x00000039u, 0x0000003au, - 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, 0x00000029u, 0x000500c2u, 0x00000006u, - 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, - 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, 0x000200feu, 0x00000040u, 0x000200f8u, - 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, 0x000500c2u, 0x00000006u, 0x00000045u, - 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, 0x00000045u, 0x00000046u, 0x00050080u, - 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, 0x00000042u, 0x00000048u, 0x0004003du, - 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, 0x0000004au, 0x00000042u, 0x00050080u, - 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, 0x00000006u, 0x0000004cu, 0x0000004bu, - 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, 0x0000003fu, 0x000200feu, 0x0000004du, - 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, - 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005bu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000051u, 0x00000012u, 0x000500c7u, - 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, 0x00000006u, 0x00000054u, 0x00000053u, - 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, - 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, 0x000500c7u, 0x00000006u, 0x0000005au, - 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, 0x0004003du, 0x00000006u, 0x0000005cu, - 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, 0x0000005du, 0x0003003eu, 0x0000005bu, - 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x00000060u, - 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, 0x000400fau, 0x00000060u, 0x00000061u, - 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, 0x00000063u, 0x00000050u, 0x000500c5u, - 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, 0x00000006u, 0x00000065u, 0x0000005bu, - 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000068u, - 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, 0x00000068u, 0x000200feu, 0x00000069u, - 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000055u, 0x000500aau, 0x0000002cu, - 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, 0x00000000u, 0x000400fau, 0x0000006cu, - 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000005bu, - 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, 0x000300f7u, 0x00000072u, 0x00000000u, - 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, - 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, 0x00000073u, 0x000200feu, 0x00000074u, - 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, 0x000200f9u, 0x00000077u, 0x000200f8u, - 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, 0x000200f9u, 0x0000007bu, 0x000200f8u, - 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000007eu, - 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, 0x0000007eu, 0x00000036u, 0x000400fau, - 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, 0x0004003du, 0x00000006u, 0x00000081u, - 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, 0x00000080u, 0x0003003eu, 0x0000005bu, - 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, 0x00050080u, 0x00000006u, 0x00000084u, - 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, 0x000200f9u, 0x0000007au, 0x000200f8u, - 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003du, 0x00000006u, 0x00000085u, - 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, 0x0000005du, 0x0003003eu, 0x0000005bu, - 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000089u, - 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, 0x00000089u, 0x000500c4u, 0x00000006u, - 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x0000008du, 0x00000087u, 0x0000008cu, - 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000008fu, 0x0000008eu, - 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, 0x0000008fu, 0x0004007cu, 0x00000008u, - 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000006u, - 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000055u, 0x00050080u, 0x00000006u, - 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, 0x00000097u, 0x00000096u, 0x0000008bu, - 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, - 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, 0x00000066u, 0x000500c5u, 0x00000006u, - 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, 0x0000009cu, 0x0000009bu, 0x000200feu, - 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, - 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x0000009fu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a6u, 0x00000007u, - 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b3u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e1u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000010cu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a0u, 0x00000015u, - 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, 0x0000009fu, 0x000000a1u, 0x0004003du, - 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a4u, 0x000000a3u, 0x00000024u, - 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, 0x0003003eu, 0x000000a2u, 0x000000a5u, - 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, - 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, 0x000000a9u, 0x0003003eu, 0x000000a6u, - 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, 0x0004007cu, 0x00000023u, 0x000000aeu, - 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, 0x000000afu, 0x00050080u, 0x00000023u, - 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, 0x000000b2u, 0x0004003du, 0x00000006u, - 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, 0x000000b4u, 0x00000034u, 0x0003003eu, - 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, 0x000000a6u, 0x000500aau, 0x0000002cu, - 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, 0x00000000u, 0x000400fau, 0x000000b7u, - 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000bau, 0x000000a2u, - 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, - 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, 0x00000036u, 0x000300f7u, 0x000000c1u, - 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, 0x000200f8u, 0x000000c0u, 0x0004003du, - 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x000000c4u, 0x000000c3u, 0x00000066u, - 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, 0x0003003eu, 0x000000bfu, 0x000000c5u, - 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, 0x000000bfu, 0x00000036u, 0x000200f9u, - 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x000000c7u, 0x000000bfu, 0x000500c5u, - 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, 0x000000c8u, 0x000200f8u, 0x000000b9u, - 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, 0x0000002cu, 0x000000ccu, 0x000000cau, - 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, 0x000000ccu, 0x000000cdu, 0x000000ceu, - 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, 0x000000a2u, 0x000500c5u, 0x00000006u, - 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, 0x000200f8u, 0x000000ceu, 0x0004003du, - 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, 0x000000d4u, 0x000000d2u, 0x000000d3u, - 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, - 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, 0x000500b1u, 0x0000002cu, 0x000000d9u, - 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, - 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, 0x000000dcu, 0x000000a2u, 0x000200feu, - 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, 0x000000dfu, 0x000000b3u, 0x000500c5u, - 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, 0x000000b3u, 0x000000e0u, 0x0004003du, - 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, 0x000000e4u, 0x000000e2u, 0x000000e3u, - 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, 0x000000e1u, 0x000000e5u, 0x0004003du, - 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000e8u, 0x000000e1u, 0x000500c2u, - 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, 0x000000e6u, 0x000000e9u, 0x0004003du, - 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000ecu, 0x000000e1u, 0x000500c4u, - 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, 0x00000006u, 0x000000eeu, 0x000000edu, - 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, 0x000000eeu, 0x0003003eu, 0x000000eau, - 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, 0x00050082u, 0x00000006u, 0x000000f2u, - 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, 0x00000046u, 0x000000f2u, 0x0003003eu, - 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000eau, 0x0004003du, 0x00000006u, - 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x000400a8u, - 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, 0x00000000u, 0x000400fau, 0x000000f7u, - 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000eau, - 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, 0x0000002cu, 0x000000fcu, 0x000000fau, - 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, - 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000e6u, 0x000500c7u, 0x00000006u, - 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000101u, 0x00000100u, 0x00000036u, - 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x0000002cu, 0x00000102u, 0x000000fcu, - 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, 0x000200f8u, 0x000000f9u, 0x000700f5u, - 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, 0x000000feu, 0x000300f7u, 0x00000105u, - 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, 0x000200f8u, 0x00000104u, 0x0004003du, - 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, 0x00000107u, 0x00000106u, 0x00000046u, - 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, 0x000200f8u, 0x00000105u, 0x0004003du, - 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, 0x00000109u, 0x000000e6u, 0x000500c5u, - 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, 0x0000010au, 0x000200f8u, 0x000000d6u, - 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, 0x00000006u, 0x0000010eu, 0x0000010du, - 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, 0x0004003du, 0x00000006u, 0x00000110u, - 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, 0x00000066u, 0x000500c5u, 0x00000006u, - 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, 0x00000112u, 0x0004003du, 0x00000006u, - 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, 0x00000114u, 0x00000115u, 0x0003003eu, - 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000113u, 0x000500acu, 0x0000002cu, - 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, 0x0000011au, 0x00000119u, 0x000300f7u, - 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, 0x0000011cu, 0x000200f8u, 0x0000011bu, - 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, 0x0000002cu, 0x0000011eu, 0x0000011du, - 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, - 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, 0x0000010cu, 0x000500c7u, 0x00000006u, - 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000123u, 0x00000122u, 0x00000036u, - 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, 0x0000002cu, 0x00000124u, 0x0000011eu, - 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, 0x000200f8u, 0x0000011cu, 0x000700f5u, - 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, 0x00000120u, 0x000300f7u, 0x00000127u, - 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, 0x000200f8u, 0x00000126u, 0x0004003du, - 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, 0x00000129u, 0x00000128u, 0x00000046u, - 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, 0x000200f8u, 0x00000127u, 0x0004003du, - 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000010cu, 0x000500c5u, - 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, - 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, - 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000131u, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, - 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, 0x0000002cu, 0x00000130u, 0x0000012fu, - 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, 0x00000130u, 0x00000132u, 0x00000137u, - 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, 0x00000019u, 0x0003003eu, 0x00000134u, - 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, 0x00000134u, 0x0003003eu, 0x00000131u, - 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, - 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, 0x00000008u, 0x0000013au, 0x0000000bu, - 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, - 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, 0x0000013bu, 0x00010038u, 0x00050036u, - 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, - 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000140u, 0x00000007u, - 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000147u, 0x00000007u, - 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, 0x0000002cu, 0x0000013fu, 0x0000013eu, - 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, 0x0000013fu, 0x00000141u, 0x00000146u, - 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, 0x0000001eu, 0x0003003eu, 0x00000143u, - 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, 0x00000143u, 0x0003003eu, 0x00000140u, - 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, 0x0004003du, 0x00000008u, 0x00000148u, - 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, 0x00000006u, 0x00000149u, 0x00000010u, - 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000142u, - 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, 0x0000014au, 0x00010038u, -}; - -inline constexpr uint32_t kSpv_vt_rms_norm[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000031fu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, - 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000017cu, - 0x00000181u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, - 0x0000017cu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000181u, 0x0000000bu, 0x0000001bu, 0x00030047u, - 0x00000186u, 0x00000002u, 0x00050048u, 0x00000186u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000186u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000186u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000186u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000186u, - 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000186u, 0x00000005u, 0x00000023u, 0x00000014u, - 0x00050048u, 0x00000186u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000186u, 0x00000007u, - 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000186u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, - 0x00000186u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000186u, 0x0000000au, 0x00000023u, - 0x00000028u, 0x00050048u, 0x00000186u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000186u, - 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000001a2u, 0x00000006u, 0x00000004u, 0x00030047u, - 0x000001a3u, 0x00000002u, 0x00040048u, 0x000001a3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a3u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001a5u, 0x00000018u, 0x00040047u, 0x000001a5u, - 0x00000021u, 0x00000000u, 0x00040047u, 0x000001a5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001b4u, - 0x00000006u, 0x00000002u, 0x00030047u, 0x000001b5u, 0x00000002u, 0x00040048u, 0x000001b5u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x000001b5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b7u, - 0x00000018u, 0x00040047u, 0x000001b7u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001b7u, 0x00000022u, - 0x00000000u, 0x00040047u, 0x000001d6u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001d7u, 0x00000002u, - 0x00050048u, 0x000001d7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001d9u, 0x00000021u, - 0x00000006u, 0x00040047u, 0x000001d9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001e6u, 0x00000006u, - 0x00000002u, 0x00030047u, 0x000001e7u, 0x00000002u, 0x00050048u, 0x000001e7u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00040047u, 0x000001e9u, 0x00000021u, 0x00000007u, 0x00040047u, 0x000001e9u, 0x00000022u, - 0x00000000u, 0x00040047u, 0x000002c0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002c1u, 0x00000002u, - 0x00040048u, 0x000002c1u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002c1u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x000002c3u, 0x00000018u, 0x00040047u, 0x000002c3u, 0x00000021u, 0x00000002u, - 0x00040047u, 0x000002c3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ceu, 0x00000006u, 0x00000002u, - 0x00030047u, 0x000002cfu, 0x00000002u, 0x00040048u, 0x000002cfu, 0x00000000u, 0x00000018u, 0x00050048u, - 0x000002cfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002d1u, 0x00000018u, 0x00040047u, - 0x000002d1u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002d1u, 0x00000022u, 0x00000000u, 0x00040047u, - 0x000002f2u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002f3u, 0x00000002u, 0x00050048u, 0x000002f3u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000002f5u, 0x00000021u, 0x00000004u, 0x00040047u, - 0x000002f5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000305u, 0x00000006u, 0x00000002u, 0x00030047u, - 0x00000306u, 0x00000002u, 0x00050048u, 0x00000306u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, - 0x00000308u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000308u, 0x00000022u, 0x00000000u, 0x00040047u, - 0x0000031eu, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, - 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, - 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, - 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, - 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, - 0x00000007u, 0x00050021u, 0x00000022u, 0x00000008u, 0x00000007u, 0x0000000du, 0x00040015u, 0x00000028u, - 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000028u, 0x00000029u, 0x00000010u, 0x00020014u, 0x00000031u, - 0x0004002bu, 0x00000006u, 0x00000033u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000039u, 0x007fffffu, - 0x0004002bu, 0x00000006u, 0x0000003bu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000042u, 0x00000040u, - 0x0004002bu, 0x00000006u, 0x00000044u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000048u, 0x00007fffu, - 0x0004002bu, 0x00000006u, 0x0000004bu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000057u, 0x00008000u, - 0x0004002bu, 0x00000028u, 0x0000005cu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000005eu, 0x0000001fu, - 0x0004002bu, 0x00000006u, 0x00000062u, 0x000003ffu, 0x0004002bu, 0x00000028u, 0x0000006bu, 0x0000000du, - 0x0004002bu, 0x00000006u, 0x00000082u, 0x00000400u, 0x0004002bu, 0x00000028u, 0x00000085u, 0x00000001u, - 0x0004002bu, 0x00000006u, 0x0000008du, 0x00000071u, 0x0004002bu, 0x00000028u, 0x00000090u, 0x00000017u, - 0x0004002bu, 0x00000006u, 0x0000009au, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000aeu, 0x000000ffu, - 0x00040020u, 0x000000b0u, 0x00000007u, 0x00000028u, 0x0004002bu, 0x00000028u, 0x000000b4u, 0x0000007fu, - 0x0004002bu, 0x00000028u, 0x000000b6u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000c0u, 0x00007c00u, - 0x0004002bu, 0x00000006u, 0x000000c7u, 0x00000200u, 0x0004002bu, 0x00000028u, 0x000000d0u, 0x0000001fu, - 0x0004002bu, 0x00000028u, 0x000000d8u, 0x00000000u, 0x0004002bu, 0x00000028u, 0x000000ddu, 0xfffffff6u, - 0x0004002bu, 0x00000006u, 0x000000e3u, 0x00800000u, 0x0004002bu, 0x00000028u, 0x000000e7u, 0x0000000eu, - 0x0004002bu, 0x00000006u, 0x0000011au, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x0000011du, 0x00001000u, - 0x0004002bu, 0x00000006u, 0x00000152u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000153u, 0x00000108u, - 0x0004002bu, 0x00000006u, 0x00000154u, 0x00000080u, 0x0004001cu, 0x00000155u, 0x00000008u, 0x00000154u, - 0x00040020u, 0x00000156u, 0x00000004u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000004u, - 0x00040020u, 0x0000015au, 0x00000004u, 0x00000008u, 0x00040017u, 0x0000017au, 0x00000006u, 0x00000003u, - 0x00040020u, 0x0000017bu, 0x00000001u, 0x0000017au, 0x0004003bu, 0x0000017bu, 0x0000017cu, 0x00000001u, - 0x00040020u, 0x0000017du, 0x00000001u, 0x00000006u, 0x0004003bu, 0x0000017bu, 0x00000181u, 0x00000001u, - 0x000f001eu, 0x00000186u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, - 0x00000187u, 0x00000009u, 0x00000186u, 0x0004003bu, 0x00000187u, 0x00000188u, 0x00000009u, 0x00040020u, - 0x00000189u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000018eu, 0x00000000u, 0x0004002bu, - 0x00000028u, 0x0000019bu, 0x00000002u, 0x0003001du, 0x000001a2u, 0x00000006u, 0x0003001eu, 0x000001a3u, - 0x000001a2u, 0x00040020u, 0x000001a4u, 0x0000000cu, 0x000001a3u, 0x0004003bu, 0x000001a4u, 0x000001a5u, - 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000001a6u, 0x00000008u, 0x00040020u, 0x000001aeu, 0x0000000cu, - 0x00000006u, 0x00040015u, 0x000001b3u, 0x00000010u, 0x00000000u, 0x0003001du, 0x000001b4u, 0x000001b3u, - 0x0003001eu, 0x000001b5u, 0x000001b4u, 0x00040020u, 0x000001b6u, 0x0000000cu, 0x000001b5u, 0x0004003bu, - 0x000001b6u, 0x000001b7u, 0x0000000cu, 0x00040020u, 0x000001bfu, 0x0000000cu, 0x000001b3u, 0x0004002bu, - 0x00000028u, 0x000001c9u, 0x00000006u, 0x0004002bu, 0x00000028u, 0x000001cfu, 0x00000005u, 0x0003001du, - 0x000001d6u, 0x00000006u, 0x0003001eu, 0x000001d7u, 0x000001d6u, 0x00040020u, 0x000001d8u, 0x0000000cu, - 0x000001d7u, 0x0004003bu, 0x000001d8u, 0x000001d9u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000001dau, - 0x0000000bu, 0x0003001du, 0x000001e6u, 0x000001b3u, 0x0003001eu, 0x000001e7u, 0x000001e6u, 0x00040020u, - 0x000001e8u, 0x0000000cu, 0x000001e7u, 0x0004003bu, 0x000001e8u, 0x000001e9u, 0x0000000cu, 0x0003002au, - 0x00000031u, 0x0000021fu, 0x0004002bu, 0x00000006u, 0x0000024du, 0x00000048u, 0x0004002bu, 0x00000008u, - 0x00000255u, 0x3f800000u, 0x0004002bu, 0x00000028u, 0x0000025bu, 0x0000000cu, 0x00040020u, 0x0000025cu, - 0x00000009u, 0x00000008u, 0x0004002bu, 0x00000028u, 0x000002b9u, 0x00000003u, 0x0003001du, 0x000002c0u, - 0x00000006u, 0x0003001eu, 0x000002c1u, 0x000002c0u, 0x00040020u, 0x000002c2u, 0x0000000cu, 0x000002c1u, - 0x0004003bu, 0x000002c2u, 0x000002c3u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000002c4u, 0x00000009u, - 0x0003001du, 0x000002ceu, 0x000001b3u, 0x0003001eu, 0x000002cfu, 0x000002ceu, 0x00040020u, 0x000002d0u, - 0x0000000cu, 0x000002cfu, 0x0004003bu, 0x000002d0u, 0x000002d1u, 0x0000000cu, 0x0004002bu, 0x00000028u, - 0x000002e0u, 0x00000007u, 0x0004002bu, 0x00000028u, 0x000002ecu, 0x00000004u, 0x0003001du, 0x000002f2u, - 0x00000006u, 0x0003001eu, 0x000002f3u, 0x000002f2u, 0x00040020u, 0x000002f4u, 0x0000000cu, 0x000002f3u, - 0x0004003bu, 0x000002f4u, 0x000002f5u, 0x0000000cu, 0x0003001du, 0x00000305u, 0x000001b3u, 0x0003001eu, - 0x00000306u, 0x00000305u, 0x00040020u, 0x00000307u, 0x0000000cu, 0x00000306u, 0x0004003bu, 0x00000307u, - 0x00000308u, 0x0000000cu, 0x0006002cu, 0x0000017au, 0x0000031eu, 0x00000154u, 0x0000004bu, 0x0000004bu, - 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, - 0x00000007u, 0x00000179u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000180u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000184u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000018du, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x0000018fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000019au, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x0000019fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c3u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000001c4u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001d3u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000001f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001f5u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000217u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000219u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000223u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000023bu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x0000023cu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000024eu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x0000024fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000251u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000254u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000262u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x0000026du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000271u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000277u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000028fu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000290u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000299u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000002b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b2u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x000002b8u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002bdu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000002dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002dbu, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000315u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000316u, 0x00000007u, 0x00050041u, - 0x0000017du, 0x0000017eu, 0x0000017cu, 0x0000003bu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x0000017eu, - 0x0003003eu, 0x00000179u, 0x0000017fu, 0x00050041u, 0x0000017du, 0x00000182u, 0x00000181u, 0x0000003bu, - 0x0004003du, 0x00000006u, 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000180u, 0x00000183u, 0x0004003du, - 0x00000006u, 0x00000185u, 0x00000179u, 0x00050041u, 0x00000189u, 0x0000018au, 0x00000188u, 0x00000085u, - 0x0004003du, 0x00000006u, 0x0000018bu, 0x0000018au, 0x00050084u, 0x00000006u, 0x0000018cu, 0x00000185u, - 0x0000018bu, 0x0003003eu, 0x00000184u, 0x0000018cu, 0x0003003eu, 0x0000018du, 0x0000018eu, 0x0004003du, - 0x00000006u, 0x00000190u, 0x00000180u, 0x0003003eu, 0x0000018fu, 0x00000190u, 0x000200f9u, 0x00000191u, - 0x000200f8u, 0x00000191u, 0x000400f6u, 0x00000193u, 0x00000194u, 0x00000000u, 0x000200f9u, 0x00000195u, - 0x000200f8u, 0x00000195u, 0x0004003du, 0x00000006u, 0x00000196u, 0x0000018fu, 0x00050041u, 0x00000189u, - 0x00000197u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000198u, 0x00000197u, 0x000500b0u, - 0x00000031u, 0x00000199u, 0x00000196u, 0x00000198u, 0x000400fau, 0x00000199u, 0x00000192u, 0x00000193u, - 0x000200f8u, 0x00000192u, 0x00050041u, 0x00000189u, 0x0000019cu, 0x00000188u, 0x0000019bu, 0x0004003du, - 0x00000006u, 0x0000019du, 0x0000019cu, 0x000500aau, 0x00000031u, 0x0000019eu, 0x0000019du, 0x0000003bu, - 0x000300f7u, 0x000001a1u, 0x00000000u, 0x000400fau, 0x0000019eu, 0x000001a0u, 0x000001b2u, 0x000200f8u, - 0x000001a0u, 0x00050041u, 0x00000189u, 0x000001a7u, 0x00000188u, 0x000001a6u, 0x0004003du, 0x00000006u, - 0x000001a8u, 0x000001a7u, 0x000500c2u, 0x00000006u, 0x000001a9u, 0x000001a8u, 0x0000019bu, 0x0004003du, - 0x00000006u, 0x000001aau, 0x00000184u, 0x0004003du, 0x00000006u, 0x000001abu, 0x0000018fu, 0x00050080u, - 0x00000006u, 0x000001acu, 0x000001aau, 0x000001abu, 0x00050080u, 0x00000006u, 0x000001adu, 0x000001a9u, - 0x000001acu, 0x00060041u, 0x000001aeu, 0x000001afu, 0x000001a5u, 0x000000d8u, 0x000001adu, 0x0004003du, - 0x00000006u, 0x000001b0u, 0x000001afu, 0x0004007cu, 0x00000008u, 0x000001b1u, 0x000001b0u, 0x0003003eu, - 0x0000019fu, 0x000001b1u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001b2u, 0x00050041u, 0x00000189u, - 0x000001b8u, 0x00000188u, 0x000001a6u, 0x0004003du, 0x00000006u, 0x000001b9u, 0x000001b8u, 0x000500c2u, - 0x00000006u, 0x000001bau, 0x000001b9u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000001bbu, 0x00000184u, - 0x0004003du, 0x00000006u, 0x000001bcu, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001bdu, 0x000001bbu, - 0x000001bcu, 0x00050080u, 0x00000006u, 0x000001beu, 0x000001bau, 0x000001bdu, 0x00060041u, 0x000001bfu, - 0x000001c0u, 0x000001b7u, 0x000000d8u, 0x000001beu, 0x0004003du, 0x000001b3u, 0x000001c1u, 0x000001c0u, - 0x00040071u, 0x00000006u, 0x000001c2u, 0x000001c1u, 0x0003003eu, 0x000001c3u, 0x000001c2u, 0x00050041u, - 0x00000189u, 0x000001c5u, 0x00000188u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000001c6u, 0x000001c5u, - 0x0003003eu, 0x000001c4u, 0x000001c6u, 0x00060039u, 0x00000008u, 0x000001c7u, 0x0000001bu, 0x000001c3u, - 0x000001c4u, 0x0003003eu, 0x0000019fu, 0x000001c7u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a1u, - 0x0004003du, 0x00000008u, 0x000001c8u, 0x0000019fu, 0x0003003eu, 0x0000019au, 0x000001c8u, 0x00050041u, - 0x00000189u, 0x000001cau, 0x00000188u, 0x000001c9u, 0x0004003du, 0x00000006u, 0x000001cbu, 0x000001cau, - 0x000500abu, 0x00000031u, 0x000001ccu, 0x000001cbu, 0x0000003bu, 0x000300f7u, 0x000001ceu, 0x00000000u, - 0x000400fau, 0x000001ccu, 0x000001cdu, 0x000001ceu, 0x000200f8u, 0x000001cdu, 0x00050041u, 0x00000189u, - 0x000001d0u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x000001d1u, 0x000001d0u, 0x000500aau, - 0x00000031u, 0x000001d2u, 0x000001d1u, 0x0000003bu, 0x000300f7u, 0x000001d5u, 0x00000000u, 0x000400fau, - 0x000001d2u, 0x000001d4u, 0x000001e5u, 0x000200f8u, 0x000001d4u, 0x00050041u, 0x00000189u, 0x000001dbu, - 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000001dcu, 0x000001dbu, 0x000500c2u, 0x00000006u, - 0x000001ddu, 0x000001dcu, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000001deu, 0x00000184u, 0x0004003du, - 0x00000006u, 0x000001dfu, 0x0000018fu, 0x00050080u, 0x00000006u, 0x000001e0u, 0x000001deu, 0x000001dfu, - 0x00050080u, 0x00000006u, 0x000001e1u, 0x000001ddu, 0x000001e0u, 0x00060041u, 0x000001aeu, 0x000001e2u, - 0x000001d9u, 0x000000d8u, 0x000001e1u, 0x0004003du, 0x00000006u, 0x000001e3u, 0x000001e2u, 0x0004007cu, - 0x00000008u, 0x000001e4u, 0x000001e3u, 0x0003003eu, 0x000001d3u, 0x000001e4u, 0x000200f9u, 0x000001d5u, - 0x000200f8u, 0x000001e5u, 0x00050041u, 0x00000189u, 0x000001eau, 0x00000188u, 0x000001dau, 0x0004003du, - 0x00000006u, 0x000001ebu, 0x000001eau, 0x000500c2u, 0x00000006u, 0x000001ecu, 0x000001ebu, 0x00000085u, - 0x0004003du, 0x00000006u, 0x000001edu, 0x00000184u, 0x0004003du, 0x00000006u, 0x000001eeu, 0x0000018fu, - 0x00050080u, 0x00000006u, 0x000001efu, 0x000001edu, 0x000001eeu, 0x00050080u, 0x00000006u, 0x000001f0u, - 0x000001ecu, 0x000001efu, 0x00060041u, 0x000001bfu, 0x000001f1u, 0x000001e9u, 0x000000d8u, 0x000001f0u, - 0x0004003du, 0x000001b3u, 0x000001f2u, 0x000001f1u, 0x00040071u, 0x00000006u, 0x000001f3u, 0x000001f2u, - 0x0003003eu, 0x000001f4u, 0x000001f3u, 0x00050041u, 0x00000189u, 0x000001f6u, 0x00000188u, 0x000001cfu, - 0x0004003du, 0x00000006u, 0x000001f7u, 0x000001f6u, 0x0003003eu, 0x000001f5u, 0x000001f7u, 0x00060039u, - 0x00000008u, 0x000001f8u, 0x0000001bu, 0x000001f4u, 0x000001f5u, 0x0003003eu, 0x000001d3u, 0x000001f8u, - 0x000200f9u, 0x000001d5u, 0x000200f8u, 0x000001d5u, 0x0004003du, 0x00000008u, 0x000001f9u, 0x000001d3u, - 0x0004003du, 0x00000008u, 0x000001fau, 0x0000019au, 0x00050081u, 0x00000008u, 0x000001fbu, 0x000001fau, - 0x000001f9u, 0x0003003eu, 0x0000019au, 0x000001fbu, 0x000200f9u, 0x000001fcu, 0x000200f8u, 0x000001fcu, - 0x000400f6u, 0x000001feu, 0x000001ffu, 0x00000000u, 0x000200f9u, 0x000001fdu, 0x000200f8u, 0x000001fdu, - 0x00050041u, 0x00000189u, 0x00000200u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000201u, - 0x00000200u, 0x000500aau, 0x00000031u, 0x00000202u, 0x00000201u, 0x0000003bu, 0x000300f7u, 0x00000204u, - 0x00000000u, 0x000400fau, 0x00000202u, 0x00000203u, 0x0000020fu, 0x000200f8u, 0x00000203u, 0x00050041u, - 0x00000189u, 0x00000205u, 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000206u, 0x00000205u, - 0x000500c2u, 0x00000006u, 0x00000207u, 0x00000206u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x00000208u, - 0x00000184u, 0x0004003du, 0x00000006u, 0x00000209u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x0000020au, - 0x00000208u, 0x00000209u, 0x00050080u, 0x00000006u, 0x0000020bu, 0x00000207u, 0x0000020au, 0x0004003du, - 0x00000008u, 0x0000020cu, 0x0000019au, 0x0004007cu, 0x00000006u, 0x0000020du, 0x0000020cu, 0x00060041u, - 0x000001aeu, 0x0000020eu, 0x000001d9u, 0x000000d8u, 0x0000020bu, 0x0003003eu, 0x0000020eu, 0x0000020du, - 0x000200f9u, 0x00000204u, 0x000200f8u, 0x0000020fu, 0x00050041u, 0x00000189u, 0x00000210u, 0x00000188u, - 0x000001dau, 0x0004003du, 0x00000006u, 0x00000211u, 0x00000210u, 0x000500c2u, 0x00000006u, 0x00000212u, - 0x00000211u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000213u, 0x00000184u, 0x0004003du, 0x00000006u, - 0x00000214u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x00000215u, 0x00000213u, 0x00000214u, 0x00050080u, - 0x00000006u, 0x00000216u, 0x00000212u, 0x00000215u, 0x0004003du, 0x00000008u, 0x00000218u, 0x0000019au, - 0x0003003eu, 0x00000217u, 0x00000218u, 0x00050041u, 0x00000189u, 0x0000021au, 0x00000188u, 0x000001cfu, - 0x0004003du, 0x00000006u, 0x0000021bu, 0x0000021au, 0x0003003eu, 0x00000219u, 0x0000021bu, 0x00060039u, - 0x00000006u, 0x0000021cu, 0x00000020u, 0x00000217u, 0x00000219u, 0x00040071u, 0x000001b3u, 0x0000021du, - 0x0000021cu, 0x00060041u, 0x000001bfu, 0x0000021eu, 0x000001e9u, 0x000000d8u, 0x00000216u, 0x0003003eu, - 0x0000021eu, 0x0000021du, 0x000200f9u, 0x00000204u, 0x000200f8u, 0x00000204u, 0x000200f9u, 0x000001ffu, - 0x000200f8u, 0x000001ffu, 0x000400fau, 0x0000021fu, 0x000001fcu, 0x000001feu, 0x000200f8u, 0x000001feu, - 0x00050041u, 0x00000189u, 0x00000220u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000221u, - 0x00000220u, 0x000500aau, 0x00000031u, 0x00000222u, 0x00000221u, 0x0000003bu, 0x000300f7u, 0x00000225u, - 0x00000000u, 0x000400fau, 0x00000222u, 0x00000224u, 0x00000230u, 0x000200f8u, 0x00000224u, 0x00050041u, - 0x00000189u, 0x00000226u, 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000227u, 0x00000226u, - 0x000500c2u, 0x00000006u, 0x00000228u, 0x00000227u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x00000229u, - 0x00000184u, 0x0004003du, 0x00000006u, 0x0000022au, 0x0000018fu, 0x00050080u, 0x00000006u, 0x0000022bu, - 0x00000229u, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000022cu, 0x00000228u, 0x0000022bu, 0x00060041u, - 0x000001aeu, 0x0000022du, 0x000001d9u, 0x000000d8u, 0x0000022cu, 0x0004003du, 0x00000006u, 0x0000022eu, - 0x0000022du, 0x0004007cu, 0x00000008u, 0x0000022fu, 0x0000022eu, 0x0003003eu, 0x00000223u, 0x0000022fu, - 0x000200f9u, 0x00000225u, 0x000200f8u, 0x00000230u, 0x00050041u, 0x00000189u, 0x00000231u, 0x00000188u, - 0x000001dau, 0x0004003du, 0x00000006u, 0x00000232u, 0x00000231u, 0x000500c2u, 0x00000006u, 0x00000233u, - 0x00000232u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000234u, 0x00000184u, 0x0004003du, 0x00000006u, - 0x00000235u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x00000236u, 0x00000234u, 0x00000235u, 0x00050080u, - 0x00000006u, 0x00000237u, 0x00000233u, 0x00000236u, 0x00060041u, 0x000001bfu, 0x00000238u, 0x000001e9u, - 0x000000d8u, 0x00000237u, 0x0004003du, 0x000001b3u, 0x00000239u, 0x00000238u, 0x00040071u, 0x00000006u, - 0x0000023au, 0x00000239u, 0x0003003eu, 0x0000023bu, 0x0000023au, 0x00050041u, 0x00000189u, 0x0000023du, - 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x0000023eu, 0x0000023du, 0x0003003eu, 0x0000023cu, - 0x0000023eu, 0x00060039u, 0x00000008u, 0x0000023fu, 0x0000001bu, 0x0000023bu, 0x0000023cu, 0x0003003eu, - 0x00000223u, 0x0000023fu, 0x000200f9u, 0x00000225u, 0x000200f8u, 0x00000225u, 0x0004003du, 0x00000008u, - 0x00000240u, 0x00000223u, 0x0003003eu, 0x0000019au, 0x00000240u, 0x000200f9u, 0x000001ceu, 0x000200f8u, - 0x000001ceu, 0x0004003du, 0x00000008u, 0x00000241u, 0x0000019au, 0x0004003du, 0x00000008u, 0x00000242u, - 0x0000019au, 0x00050085u, 0x00000008u, 0x00000243u, 0x00000241u, 0x00000242u, 0x0004003du, 0x00000008u, - 0x00000244u, 0x0000018du, 0x00050081u, 0x00000008u, 0x00000245u, 0x00000244u, 0x00000243u, 0x0003003eu, - 0x0000018du, 0x00000245u, 0x000200f9u, 0x00000194u, 0x000200f8u, 0x00000194u, 0x0004003du, 0x00000006u, - 0x00000246u, 0x0000018fu, 0x00050080u, 0x00000006u, 0x00000247u, 0x00000246u, 0x00000154u, 0x0003003eu, - 0x0000018fu, 0x00000247u, 0x000200f9u, 0x00000191u, 0x000200f8u, 0x00000193u, 0x00050041u, 0x00000189u, - 0x00000248u, 0x00000188u, 0x000001c9u, 0x0004003du, 0x00000006u, 0x00000249u, 0x00000248u, 0x000500abu, - 0x00000031u, 0x0000024au, 0x00000249u, 0x0000003bu, 0x000300f7u, 0x0000024cu, 0x00000000u, 0x000400fau, - 0x0000024au, 0x0000024bu, 0x0000024cu, 0x000200f8u, 0x0000024bu, 0x000300e1u, 0x0000004bu, 0x0000024du, - 0x000200f9u, 0x0000024cu, 0x000200f8u, 0x0000024cu, 0x0004003du, 0x00000006u, 0x00000250u, 0x00000180u, - 0x0003003eu, 0x0000024fu, 0x00000250u, 0x0004003du, 0x00000008u, 0x00000252u, 0x0000018du, 0x0003003eu, - 0x00000251u, 0x00000252u, 0x00060039u, 0x00000008u, 0x00000253u, 0x00000025u, 0x0000024fu, 0x00000251u, - 0x0003003eu, 0x0000024eu, 0x00000253u, 0x0004003du, 0x00000008u, 0x00000256u, 0x0000024eu, 0x00050041u, - 0x00000189u, 0x00000257u, 0x00000188u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000257u, - 0x00040070u, 0x00000008u, 0x00000259u, 0x00000258u, 0x00050088u, 0x00000008u, 0x0000025au, 0x00000256u, - 0x00000259u, 0x00050041u, 0x0000025cu, 0x0000025du, 0x00000188u, 0x0000025bu, 0x0004003du, 0x00000008u, - 0x0000025eu, 0x0000025du, 0x00050081u, 0x00000008u, 0x0000025fu, 0x0000025au, 0x0000025eu, 0x0006000cu, - 0x00000008u, 0x00000260u, 0x00000001u, 0x0000001fu, 0x0000025fu, 0x00050088u, 0x00000008u, 0x00000261u, - 0x00000255u, 0x00000260u, 0x0003003eu, 0x00000254u, 0x00000261u, 0x0004003du, 0x00000006u, 0x00000263u, - 0x00000180u, 0x0003003eu, 0x00000262u, 0x00000263u, 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000264u, - 0x000400f6u, 0x00000266u, 0x00000267u, 0x00000000u, 0x000200f9u, 0x00000268u, 0x000200f8u, 0x00000268u, - 0x0004003du, 0x00000006u, 0x00000269u, 0x00000262u, 0x00050041u, 0x00000189u, 0x0000026au, 0x00000188u, - 0x00000085u, 0x0004003du, 0x00000006u, 0x0000026bu, 0x0000026au, 0x000500b0u, 0x00000031u, 0x0000026cu, - 0x00000269u, 0x0000026bu, 0x000400fau, 0x0000026cu, 0x00000265u, 0x00000266u, 0x000200f8u, 0x00000265u, - 0x00050041u, 0x00000189u, 0x0000026eu, 0x00000188u, 0x000001c9u, 0x0004003du, 0x00000006u, 0x0000026fu, - 0x0000026eu, 0x000500abu, 0x00000031u, 0x00000270u, 0x0000026fu, 0x0000003bu, 0x000300f7u, 0x00000273u, - 0x00000000u, 0x000400fau, 0x00000270u, 0x00000272u, 0x00000295u, 0x000200f8u, 0x00000272u, 0x00050041u, - 0x00000189u, 0x00000274u, 0x00000188u, 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000275u, 0x00000274u, - 0x000500aau, 0x00000031u, 0x00000276u, 0x00000275u, 0x0000003bu, 0x000300f7u, 0x00000279u, 0x00000000u, - 0x000400fau, 0x00000276u, 0x00000278u, 0x00000284u, 0x000200f8u, 0x00000278u, 0x00050041u, 0x00000189u, - 0x0000027au, 0x00000188u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000027bu, 0x0000027au, 0x000500c2u, - 0x00000006u, 0x0000027cu, 0x0000027bu, 0x0000019bu, 0x0004003du, 0x00000006u, 0x0000027du, 0x00000184u, - 0x0004003du, 0x00000006u, 0x0000027eu, 0x00000262u, 0x00050080u, 0x00000006u, 0x0000027fu, 0x0000027du, - 0x0000027eu, 0x00050080u, 0x00000006u, 0x00000280u, 0x0000027cu, 0x0000027fu, 0x00060041u, 0x000001aeu, - 0x00000281u, 0x000001d9u, 0x000000d8u, 0x00000280u, 0x0004003du, 0x00000006u, 0x00000282u, 0x00000281u, - 0x0004007cu, 0x00000008u, 0x00000283u, 0x00000282u, 0x0003003eu, 0x00000277u, 0x00000283u, 0x000200f9u, - 0x00000279u, 0x000200f8u, 0x00000284u, 0x00050041u, 0x00000189u, 0x00000285u, 0x00000188u, 0x000001dau, - 0x0004003du, 0x00000006u, 0x00000286u, 0x00000285u, 0x000500c2u, 0x00000006u, 0x00000287u, 0x00000286u, - 0x00000085u, 0x0004003du, 0x00000006u, 0x00000288u, 0x00000184u, 0x0004003du, 0x00000006u, 0x00000289u, - 0x00000262u, 0x00050080u, 0x00000006u, 0x0000028au, 0x00000288u, 0x00000289u, 0x00050080u, 0x00000006u, - 0x0000028bu, 0x00000287u, 0x0000028au, 0x00060041u, 0x000001bfu, 0x0000028cu, 0x000001e9u, 0x000000d8u, - 0x0000028bu, 0x0004003du, 0x000001b3u, 0x0000028du, 0x0000028cu, 0x00040071u, 0x00000006u, 0x0000028eu, - 0x0000028du, 0x0003003eu, 0x0000028fu, 0x0000028eu, 0x00050041u, 0x00000189u, 0x00000291u, 0x00000188u, - 0x000001cfu, 0x0004003du, 0x00000006u, 0x00000292u, 0x00000291u, 0x0003003eu, 0x00000290u, 0x00000292u, - 0x00060039u, 0x00000008u, 0x00000293u, 0x0000001bu, 0x0000028fu, 0x00000290u, 0x0003003eu, 0x00000277u, - 0x00000293u, 0x000200f9u, 0x00000279u, 0x000200f8u, 0x00000279u, 0x0004003du, 0x00000008u, 0x00000294u, - 0x00000277u, 0x0003003eu, 0x00000271u, 0x00000294u, 0x000200f9u, 0x00000273u, 0x000200f8u, 0x00000295u, - 0x00050041u, 0x00000189u, 0x00000296u, 0x00000188u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x00000297u, - 0x00000296u, 0x000500aau, 0x00000031u, 0x00000298u, 0x00000297u, 0x0000003bu, 0x000300f7u, 0x0000029bu, - 0x00000000u, 0x000400fau, 0x00000298u, 0x0000029au, 0x000002a6u, 0x000200f8u, 0x0000029au, 0x00050041u, - 0x00000189u, 0x0000029cu, 0x00000188u, 0x000001a6u, 0x0004003du, 0x00000006u, 0x0000029du, 0x0000029cu, - 0x000500c2u, 0x00000006u, 0x0000029eu, 0x0000029du, 0x0000019bu, 0x0004003du, 0x00000006u, 0x0000029fu, - 0x00000184u, 0x0004003du, 0x00000006u, 0x000002a0u, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002a1u, - 0x0000029fu, 0x000002a0u, 0x00050080u, 0x00000006u, 0x000002a2u, 0x0000029eu, 0x000002a1u, 0x00060041u, - 0x000001aeu, 0x000002a3u, 0x000001a5u, 0x000000d8u, 0x000002a2u, 0x0004003du, 0x00000006u, 0x000002a4u, - 0x000002a3u, 0x0004007cu, 0x00000008u, 0x000002a5u, 0x000002a4u, 0x0003003eu, 0x00000299u, 0x000002a5u, - 0x000200f9u, 0x0000029bu, 0x000200f8u, 0x000002a6u, 0x00050041u, 0x00000189u, 0x000002a7u, 0x00000188u, - 0x000001a6u, 0x0004003du, 0x00000006u, 0x000002a8u, 0x000002a7u, 0x000500c2u, 0x00000006u, 0x000002a9u, - 0x000002a8u, 0x00000085u, 0x0004003du, 0x00000006u, 0x000002aau, 0x00000184u, 0x0004003du, 0x00000006u, - 0x000002abu, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002acu, 0x000002aau, 0x000002abu, 0x00050080u, - 0x00000006u, 0x000002adu, 0x000002a9u, 0x000002acu, 0x00060041u, 0x000001bfu, 0x000002aeu, 0x000001b7u, - 0x000000d8u, 0x000002adu, 0x0004003du, 0x000001b3u, 0x000002afu, 0x000002aeu, 0x00040071u, 0x00000006u, - 0x000002b0u, 0x000002afu, 0x0003003eu, 0x000002b1u, 0x000002b0u, 0x00050041u, 0x00000189u, 0x000002b3u, - 0x00000188u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000002b4u, 0x000002b3u, 0x0003003eu, 0x000002b2u, - 0x000002b4u, 0x00060039u, 0x00000008u, 0x000002b5u, 0x0000001bu, 0x000002b1u, 0x000002b2u, 0x0003003eu, - 0x00000299u, 0x000002b5u, 0x000200f9u, 0x0000029bu, 0x000200f8u, 0x0000029bu, 0x0004003du, 0x00000008u, - 0x000002b6u, 0x00000299u, 0x0003003eu, 0x00000271u, 0x000002b6u, 0x000200f9u, 0x00000273u, 0x000200f8u, - 0x00000273u, 0x0004003du, 0x00000008u, 0x000002b7u, 0x00000271u, 0x0003003eu, 0x0000026du, 0x000002b7u, - 0x00050041u, 0x00000189u, 0x000002bau, 0x00000188u, 0x000002b9u, 0x0004003du, 0x00000006u, 0x000002bbu, - 0x000002bau, 0x000500aau, 0x00000031u, 0x000002bcu, 0x000002bbu, 0x0000003bu, 0x000300f7u, 0x000002bfu, - 0x00000000u, 0x000400fau, 0x000002bcu, 0x000002beu, 0x000002cdu, 0x000200f8u, 0x000002beu, 0x00050041u, - 0x00000189u, 0x000002c5u, 0x00000188u, 0x000002c4u, 0x0004003du, 0x00000006u, 0x000002c6u, 0x000002c5u, - 0x000500c2u, 0x00000006u, 0x000002c7u, 0x000002c6u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000002c8u, - 0x00000262u, 0x00050080u, 0x00000006u, 0x000002c9u, 0x000002c7u, 0x000002c8u, 0x00060041u, 0x000001aeu, - 0x000002cau, 0x000002c3u, 0x000000d8u, 0x000002c9u, 0x0004003du, 0x00000006u, 0x000002cbu, 0x000002cau, - 0x0004007cu, 0x00000008u, 0x000002ccu, 0x000002cbu, 0x0003003eu, 0x000002bdu, 0x000002ccu, 0x000200f9u, - 0x000002bfu, 0x000200f8u, 0x000002cdu, 0x00050041u, 0x00000189u, 0x000002d2u, 0x00000188u, 0x000002c4u, - 0x0004003du, 0x00000006u, 0x000002d3u, 0x000002d2u, 0x000500c2u, 0x00000006u, 0x000002d4u, 0x000002d3u, - 0x00000085u, 0x0004003du, 0x00000006u, 0x000002d5u, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002d6u, - 0x000002d4u, 0x000002d5u, 0x00060041u, 0x000001bfu, 0x000002d7u, 0x000002d1u, 0x000000d8u, 0x000002d6u, - 0x0004003du, 0x000001b3u, 0x000002d8u, 0x000002d7u, 0x00040071u, 0x00000006u, 0x000002d9u, 0x000002d8u, - 0x0003003eu, 0x000002dau, 0x000002d9u, 0x00050041u, 0x00000189u, 0x000002dcu, 0x00000188u, 0x000002b9u, - 0x0004003du, 0x00000006u, 0x000002ddu, 0x000002dcu, 0x0003003eu, 0x000002dbu, 0x000002ddu, 0x00060039u, - 0x00000008u, 0x000002deu, 0x0000001bu, 0x000002dau, 0x000002dbu, 0x0003003eu, 0x000002bdu, 0x000002deu, - 0x000200f9u, 0x000002bfu, 0x000200f8u, 0x000002bfu, 0x0004003du, 0x00000008u, 0x000002dfu, 0x000002bdu, - 0x0003003eu, 0x000002b8u, 0x000002dfu, 0x00050041u, 0x00000189u, 0x000002e1u, 0x00000188u, 0x000002e0u, - 0x0004003du, 0x00000006u, 0x000002e2u, 0x000002e1u, 0x000500abu, 0x00000031u, 0x000002e3u, 0x000002e2u, - 0x0000003bu, 0x000300f7u, 0x000002e5u, 0x00000000u, 0x000400fau, 0x000002e3u, 0x000002e4u, 0x000002e5u, - 0x000200f8u, 0x000002e4u, 0x0004003du, 0x00000008u, 0x000002e6u, 0x000002b8u, 0x00050081u, 0x00000008u, - 0x000002e7u, 0x000002e6u, 0x00000255u, 0x0003003eu, 0x000002b8u, 0x000002e7u, 0x000200f9u, 0x000002e5u, - 0x000200f8u, 0x000002e5u, 0x000200f9u, 0x000002e8u, 0x000200f8u, 0x000002e8u, 0x000400f6u, 0x000002eau, - 0x000002ebu, 0x00000000u, 0x000200f9u, 0x000002e9u, 0x000200f8u, 0x000002e9u, 0x00050041u, 0x00000189u, - 0x000002edu, 0x00000188u, 0x000002ecu, 0x0004003du, 0x00000006u, 0x000002eeu, 0x000002edu, 0x000500aau, - 0x00000031u, 0x000002efu, 0x000002eeu, 0x0000003bu, 0x000300f7u, 0x000002f1u, 0x00000000u, 0x000400fau, - 0x000002efu, 0x000002f0u, 0x00000304u, 0x000200f8u, 0x000002f0u, 0x00050041u, 0x00000189u, 0x000002f6u, - 0x00000188u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x000002f7u, 0x000002f6u, 0x000500c2u, 0x00000006u, - 0x000002f8u, 0x000002f7u, 0x0000019bu, 0x0004003du, 0x00000006u, 0x000002f9u, 0x00000184u, 0x0004003du, - 0x00000006u, 0x000002fau, 0x00000262u, 0x00050080u, 0x00000006u, 0x000002fbu, 0x000002f9u, 0x000002fau, - 0x00050080u, 0x00000006u, 0x000002fcu, 0x000002f8u, 0x000002fbu, 0x0004003du, 0x00000008u, 0x000002fdu, - 0x0000026du, 0x0004003du, 0x00000008u, 0x000002feu, 0x00000254u, 0x00050085u, 0x00000008u, 0x000002ffu, - 0x000002fdu, 0x000002feu, 0x0004003du, 0x00000008u, 0x00000300u, 0x000002b8u, 0x00050085u, 0x00000008u, - 0x00000301u, 0x000002ffu, 0x00000300u, 0x0004007cu, 0x00000006u, 0x00000302u, 0x00000301u, 0x00060041u, - 0x000001aeu, 0x00000303u, 0x000002f5u, 0x000000d8u, 0x000002fcu, 0x0003003eu, 0x00000303u, 0x00000302u, - 0x000200f9u, 0x000002f1u, 0x000200f8u, 0x00000304u, 0x00050041u, 0x00000189u, 0x00000309u, 0x00000188u, - 0x0000005cu, 0x0004003du, 0x00000006u, 0x0000030au, 0x00000309u, 0x000500c2u, 0x00000006u, 0x0000030bu, - 0x0000030au, 0x00000085u, 0x0004003du, 0x00000006u, 0x0000030cu, 0x00000184u, 0x0004003du, 0x00000006u, - 0x0000030du, 0x00000262u, 0x00050080u, 0x00000006u, 0x0000030eu, 0x0000030cu, 0x0000030du, 0x00050080u, - 0x00000006u, 0x0000030fu, 0x0000030bu, 0x0000030eu, 0x0004003du, 0x00000008u, 0x00000310u, 0x0000026du, - 0x0004003du, 0x00000008u, 0x00000311u, 0x00000254u, 0x00050085u, 0x00000008u, 0x00000312u, 0x00000310u, - 0x00000311u, 0x0004003du, 0x00000008u, 0x00000313u, 0x000002b8u, 0x00050085u, 0x00000008u, 0x00000314u, - 0x00000312u, 0x00000313u, 0x0003003eu, 0x00000315u, 0x00000314u, 0x00050041u, 0x00000189u, 0x00000317u, - 0x00000188u, 0x000002ecu, 0x0004003du, 0x00000006u, 0x00000318u, 0x00000317u, 0x0003003eu, 0x00000316u, - 0x00000318u, 0x00060039u, 0x00000006u, 0x00000319u, 0x00000020u, 0x00000315u, 0x00000316u, 0x00040071u, - 0x000001b3u, 0x0000031au, 0x00000319u, 0x00060041u, 0x000001bfu, 0x0000031bu, 0x00000308u, 0x000000d8u, - 0x0000030fu, 0x0003003eu, 0x0000031bu, 0x0000031au, 0x000200f9u, 0x000002f1u, 0x000200f8u, 0x000002f1u, - 0x000200f9u, 0x000002ebu, 0x000200f8u, 0x000002ebu, 0x000400fau, 0x0000021fu, 0x000002e8u, 0x000002eau, - 0x000200f8u, 0x000002eau, 0x000200f9u, 0x00000267u, 0x000200f8u, 0x00000267u, 0x0004003du, 0x00000006u, - 0x0000031cu, 0x00000262u, 0x00050080u, 0x00000006u, 0x0000031du, 0x0000031cu, 0x00000154u, 0x0003003eu, - 0x00000262u, 0x0000031du, 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000266u, 0x000100fdu, 0x00010038u, - 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, - 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000027u, 0x0000000au, 0x000500c4u, 0x00000006u, - 0x0000002au, 0x00000027u, 0x00000029u, 0x0004007cu, 0x00000008u, 0x0000002bu, 0x0000002au, 0x000200feu, - 0x0000002bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, - 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000002eu, 0x00000007u, - 0x0004003bu, 0x00000007u, 0x00000047u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002fu, 0x0000000fu, - 0x0004007cu, 0x00000006u, 0x00000030u, 0x0000002fu, 0x0003003eu, 0x0000002eu, 0x00000030u, 0x0004003du, - 0x00000006u, 0x00000032u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x00000034u, 0x00000032u, 0x00000033u, - 0x000500aau, 0x00000031u, 0x00000035u, 0x00000034u, 0x00000033u, 0x000300f7u, 0x00000037u, 0x00000000u, - 0x000400fau, 0x00000035u, 0x00000036u, 0x00000037u, 0x000200f8u, 0x00000036u, 0x0004003du, 0x00000006u, - 0x00000038u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x0000003au, 0x00000038u, 0x00000039u, 0x000500abu, - 0x00000031u, 0x0000003cu, 0x0000003au, 0x0000003bu, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000037u, - 0x000700f5u, 0x00000031u, 0x0000003du, 0x00000035u, 0x00000011u, 0x0000003cu, 0x00000036u, 0x000300f7u, - 0x0000003fu, 0x00000000u, 0x000400fau, 0x0000003du, 0x0000003eu, 0x0000003fu, 0x000200f8u, 0x0000003eu, - 0x0004003du, 0x00000006u, 0x00000040u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x00000041u, 0x00000040u, - 0x00000029u, 0x000500c5u, 0x00000006u, 0x00000043u, 0x00000041u, 0x00000042u, 0x000500c7u, 0x00000006u, - 0x00000045u, 0x00000043u, 0x00000044u, 0x000200feu, 0x00000045u, 0x000200f8u, 0x0000003fu, 0x0004003du, - 0x00000006u, 0x00000049u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x0000004au, 0x00000049u, 0x00000029u, - 0x000500c7u, 0x00000006u, 0x0000004cu, 0x0000004au, 0x0000004bu, 0x00050080u, 0x00000006u, 0x0000004du, - 0x00000048u, 0x0000004cu, 0x0003003eu, 0x00000047u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000004eu, - 0x0000002eu, 0x0004003du, 0x00000006u, 0x0000004fu, 0x00000047u, 0x00050080u, 0x00000006u, 0x00000050u, - 0x0000004eu, 0x0000004fu, 0x000500c2u, 0x00000006u, 0x00000051u, 0x00000050u, 0x00000029u, 0x000500c7u, - 0x00000006u, 0x00000052u, 0x00000051u, 0x00000044u, 0x000200feu, 0x00000052u, 0x00010038u, 0x00050036u, - 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, - 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005au, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000060u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007bu, - 0x00000007u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000058u, - 0x00000056u, 0x00000057u, 0x000500c4u, 0x00000006u, 0x00000059u, 0x00000058u, 0x00000029u, 0x0003003eu, - 0x00000055u, 0x00000059u, 0x0004003du, 0x00000006u, 0x0000005bu, 0x00000012u, 0x000500c2u, 0x00000006u, - 0x0000005du, 0x0000005bu, 0x0000005cu, 0x000500c7u, 0x00000006u, 0x0000005fu, 0x0000005du, 0x0000005eu, - 0x0003003eu, 0x0000005au, 0x0000005fu, 0x0004003du, 0x00000006u, 0x00000061u, 0x00000012u, 0x000500c7u, - 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x0003003eu, 0x00000060u, 0x00000063u, 0x0004003du, - 0x00000006u, 0x00000064u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000065u, 0x00000064u, 0x0000005eu, - 0x000300f7u, 0x00000067u, 0x00000000u, 0x000400fau, 0x00000065u, 0x00000066u, 0x00000067u, 0x000200f8u, - 0x00000066u, 0x0004003du, 0x00000006u, 0x00000068u, 0x00000055u, 0x000500c5u, 0x00000006u, 0x00000069u, - 0x00000068u, 0x00000033u, 0x0004003du, 0x00000006u, 0x0000006au, 0x00000060u, 0x000500c4u, 0x00000006u, - 0x0000006cu, 0x0000006au, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x0000006du, 0x00000069u, 0x0000006cu, - 0x0004007cu, 0x00000008u, 0x0000006eu, 0x0000006du, 0x000200feu, 0x0000006eu, 0x000200f8u, 0x00000067u, - 0x0004003du, 0x00000006u, 0x00000070u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000071u, 0x00000070u, - 0x0000003bu, 0x000300f7u, 0x00000073u, 0x00000000u, 0x000400fau, 0x00000071u, 0x00000072u, 0x00000073u, - 0x000200f8u, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000074u, 0x00000060u, 0x000500aau, 0x00000031u, - 0x00000075u, 0x00000074u, 0x0000003bu, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, - 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, 0x0004003du, 0x00000006u, 0x00000078u, 0x00000055u, - 0x0004007cu, 0x00000008u, 0x00000079u, 0x00000078u, 0x000200feu, 0x00000079u, 0x000200f8u, 0x00000077u, - 0x0003003eu, 0x0000007bu, 0x0000003bu, 0x000200f9u, 0x0000007cu, 0x000200f8u, 0x0000007cu, 0x000400f6u, - 0x0000007eu, 0x0000007fu, 0x00000000u, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000080u, 0x0004003du, - 0x00000006u, 0x00000081u, 0x00000060u, 0x000500c7u, 0x00000006u, 0x00000083u, 0x00000081u, 0x00000082u, - 0x000500aau, 0x00000031u, 0x00000084u, 0x00000083u, 0x0000003bu, 0x000400fau, 0x00000084u, 0x0000007du, - 0x0000007eu, 0x000200f8u, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000086u, 0x00000060u, 0x000500c4u, - 0x00000006u, 0x00000087u, 0x00000086u, 0x00000085u, 0x0003003eu, 0x00000060u, 0x00000087u, 0x0004003du, - 0x00000006u, 0x00000088u, 0x0000007bu, 0x00050080u, 0x00000006u, 0x00000089u, 0x00000088u, 0x0000004bu, - 0x0003003eu, 0x0000007bu, 0x00000089u, 0x000200f9u, 0x0000007fu, 0x000200f8u, 0x0000007fu, 0x000200f9u, - 0x0000007cu, 0x000200f8u, 0x0000007eu, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000060u, 0x000500c7u, - 0x00000006u, 0x0000008bu, 0x0000008au, 0x00000062u, 0x0003003eu, 0x00000060u, 0x0000008bu, 0x0004003du, - 0x00000006u, 0x0000008cu, 0x00000055u, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000007bu, 0x00050082u, - 0x00000006u, 0x0000008fu, 0x0000008du, 0x0000008eu, 0x000500c4u, 0x00000006u, 0x00000091u, 0x0000008fu, - 0x00000090u, 0x000500c5u, 0x00000006u, 0x00000092u, 0x0000008cu, 0x00000091u, 0x0004003du, 0x00000006u, - 0x00000093u, 0x00000060u, 0x000500c4u, 0x00000006u, 0x00000094u, 0x00000093u, 0x0000006bu, 0x000500c5u, - 0x00000006u, 0x00000095u, 0x00000092u, 0x00000094u, 0x0004007cu, 0x00000008u, 0x00000096u, 0x00000095u, - 0x000200feu, 0x00000096u, 0x000200f8u, 0x00000073u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000055u, - 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005au, 0x00050080u, 0x00000006u, 0x0000009bu, 0x00000099u, - 0x0000009au, 0x000500c4u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x00000090u, 0x000500c5u, 0x00000006u, - 0x0000009du, 0x00000098u, 0x0000009cu, 0x0004003du, 0x00000006u, 0x0000009eu, 0x00000060u, 0x000500c4u, - 0x00000006u, 0x0000009fu, 0x0000009eu, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x000000a0u, 0x0000009du, - 0x0000009fu, 0x0004007cu, 0x00000008u, 0x000000a1u, 0x000000a0u, 0x000200feu, 0x000000a1u, 0x00010038u, - 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, - 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000abu, 0x00000007u, 0x0004003bu, 0x000000b0u, - 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000efu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x000000f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000111u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000118u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a5u, 0x00000015u, 0x0004007cu, 0x00000006u, - 0x000000a6u, 0x000000a5u, 0x0003003eu, 0x000000a4u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000000a8u, - 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000a9u, 0x000000a8u, 0x00000029u, 0x000500c7u, 0x00000006u, - 0x000000aau, 0x000000a9u, 0x00000057u, 0x0003003eu, 0x000000a7u, 0x000000aau, 0x0004003du, 0x00000006u, - 0x000000acu, 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000adu, 0x000000acu, 0x00000090u, 0x000500c7u, - 0x00000006u, 0x000000afu, 0x000000adu, 0x000000aeu, 0x0003003eu, 0x000000abu, 0x000000afu, 0x0004003du, - 0x00000006u, 0x000000b2u, 0x000000abu, 0x0004007cu, 0x00000028u, 0x000000b3u, 0x000000b2u, 0x00050082u, - 0x00000028u, 0x000000b5u, 0x000000b3u, 0x000000b4u, 0x00050080u, 0x00000028u, 0x000000b7u, 0x000000b5u, - 0x000000b6u, 0x0003003eu, 0x000000b1u, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000b9u, 0x000000a4u, - 0x000500c7u, 0x00000006u, 0x000000bau, 0x000000b9u, 0x00000039u, 0x0003003eu, 0x000000b8u, 0x000000bau, - 0x0004003du, 0x00000006u, 0x000000bbu, 0x000000abu, 0x000500aau, 0x00000031u, 0x000000bcu, 0x000000bbu, - 0x000000aeu, 0x000300f7u, 0x000000beu, 0x00000000u, 0x000400fau, 0x000000bcu, 0x000000bdu, 0x000000beu, - 0x000200f8u, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000bfu, 0x000000a7u, 0x000500c5u, 0x00000006u, - 0x000000c1u, 0x000000bfu, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c2u, 0x000000b8u, 0x000500abu, - 0x00000031u, 0x000000c3u, 0x000000c2u, 0x0000003bu, 0x000300f7u, 0x000000c6u, 0x00000000u, 0x000400fau, - 0x000000c3u, 0x000000c5u, 0x000000cbu, 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000c8u, - 0x000000b8u, 0x000500c2u, 0x00000006u, 0x000000c9u, 0x000000c8u, 0x0000006bu, 0x000500c5u, 0x00000006u, - 0x000000cau, 0x000000c7u, 0x000000c9u, 0x0003003eu, 0x000000c4u, 0x000000cau, 0x000200f9u, 0x000000c6u, - 0x000200f8u, 0x000000cbu, 0x0003003eu, 0x000000c4u, 0x0000003bu, 0x000200f9u, 0x000000c6u, 0x000200f8u, - 0x000000c6u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000c4u, 0x000500c5u, 0x00000006u, 0x000000cdu, - 0x000000c1u, 0x000000ccu, 0x000200feu, 0x000000cdu, 0x000200f8u, 0x000000beu, 0x0004003du, 0x00000028u, - 0x000000cfu, 0x000000b1u, 0x000500afu, 0x00000031u, 0x000000d1u, 0x000000cfu, 0x000000d0u, 0x000300f7u, - 0x000000d3u, 0x00000000u, 0x000400fau, 0x000000d1u, 0x000000d2u, 0x000000d3u, 0x000200f8u, 0x000000d2u, - 0x0004003du, 0x00000006u, 0x000000d4u, 0x000000a7u, 0x000500c5u, 0x00000006u, 0x000000d5u, 0x000000d4u, - 0x000000c0u, 0x000200feu, 0x000000d5u, 0x000200f8u, 0x000000d3u, 0x0004003du, 0x00000028u, 0x000000d7u, - 0x000000b1u, 0x000500b3u, 0x00000031u, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, - 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, - 0x00000028u, 0x000000dcu, 0x000000b1u, 0x000500b1u, 0x00000031u, 0x000000deu, 0x000000dcu, 0x000000ddu, - 0x000300f7u, 0x000000e0u, 0x00000000u, 0x000400fau, 0x000000deu, 0x000000dfu, 0x000000e0u, 0x000200f8u, - 0x000000dfu, 0x0004003du, 0x00000006u, 0x000000e1u, 0x000000a7u, 0x000200feu, 0x000000e1u, 0x000200f8u, - 0x000000e0u, 0x0004003du, 0x00000006u, 0x000000e4u, 0x000000b8u, 0x000500c5u, 0x00000006u, 0x000000e5u, - 0x000000e4u, 0x000000e3u, 0x0003003eu, 0x000000b8u, 0x000000e5u, 0x0004003du, 0x00000028u, 0x000000e8u, - 0x000000b1u, 0x00050082u, 0x00000028u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0004007cu, 0x00000006u, - 0x000000eau, 0x000000e9u, 0x0003003eu, 0x000000e6u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000ecu, - 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000edu, 0x000000e6u, 0x000500c2u, 0x00000006u, 0x000000eeu, - 0x000000ecu, 0x000000edu, 0x0003003eu, 0x000000ebu, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, - 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e6u, 0x000500c4u, 0x00000006u, 0x000000f2u, - 0x0000004bu, 0x000000f1u, 0x00050082u, 0x00000006u, 0x000000f3u, 0x000000f2u, 0x0000004bu, 0x000500c7u, - 0x00000006u, 0x000000f4u, 0x000000f0u, 0x000000f3u, 0x0003003eu, 0x000000efu, 0x000000f4u, 0x0004003du, - 0x00000006u, 0x000000f6u, 0x000000e6u, 0x00050082u, 0x00000006u, 0x000000f7u, 0x000000f6u, 0x0000004bu, - 0x000500c4u, 0x00000006u, 0x000000f8u, 0x0000004bu, 0x000000f7u, 0x0003003eu, 0x000000f5u, 0x000000f8u, - 0x0004003du, 0x00000006u, 0x000000f9u, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000f5u, - 0x000500acu, 0x00000031u, 0x000000fbu, 0x000000f9u, 0x000000fau, 0x000400a8u, 0x00000031u, 0x000000fcu, - 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, - 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000efu, 0x0004003du, 0x00000006u, - 0x00000100u, 0x000000f5u, 0x000500aau, 0x00000031u, 0x00000101u, 0x000000ffu, 0x00000100u, 0x000300f7u, - 0x00000103u, 0x00000000u, 0x000400fau, 0x00000101u, 0x00000102u, 0x00000103u, 0x000200f8u, 0x00000102u, - 0x0004003du, 0x00000006u, 0x00000104u, 0x000000ebu, 0x000500c7u, 0x00000006u, 0x00000105u, 0x00000104u, - 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000106u, 0x00000105u, 0x0000003bu, 0x000200f9u, 0x00000103u, - 0x000200f8u, 0x00000103u, 0x000700f5u, 0x00000031u, 0x00000107u, 0x00000101u, 0x000000fdu, 0x00000106u, - 0x00000102u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x00000031u, 0x00000108u, - 0x000000fbu, 0x000000e0u, 0x00000107u, 0x00000103u, 0x000300f7u, 0x0000010au, 0x00000000u, 0x000400fau, - 0x00000108u, 0x00000109u, 0x0000010au, 0x000200f8u, 0x00000109u, 0x0004003du, 0x00000006u, 0x0000010bu, - 0x000000ebu, 0x00050080u, 0x00000006u, 0x0000010cu, 0x0000010bu, 0x0000004bu, 0x0003003eu, 0x000000ebu, - 0x0000010cu, 0x000200f9u, 0x0000010au, 0x000200f8u, 0x0000010au, 0x0004003du, 0x00000006u, 0x0000010du, - 0x000000a7u, 0x0004003du, 0x00000006u, 0x0000010eu, 0x000000ebu, 0x000500c5u, 0x00000006u, 0x0000010fu, - 0x0000010du, 0x0000010eu, 0x000200feu, 0x0000010fu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000028u, - 0x00000112u, 0x000000b1u, 0x0004007cu, 0x00000006u, 0x00000113u, 0x00000112u, 0x000500c4u, 0x00000006u, - 0x00000114u, 0x00000113u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000115u, 0x000000b8u, 0x000500c2u, - 0x00000006u, 0x00000116u, 0x00000115u, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x00000117u, 0x00000114u, - 0x00000116u, 0x0003003eu, 0x00000111u, 0x00000117u, 0x0004003du, 0x00000006u, 0x00000119u, 0x000000b8u, - 0x000500c7u, 0x00000006u, 0x0000011bu, 0x00000119u, 0x0000011au, 0x0003003eu, 0x00000118u, 0x0000011bu, - 0x0004003du, 0x00000006u, 0x0000011cu, 0x00000118u, 0x000500acu, 0x00000031u, 0x0000011eu, 0x0000011cu, - 0x0000011du, 0x000400a8u, 0x00000031u, 0x0000011fu, 0x0000011eu, 0x000300f7u, 0x00000121u, 0x00000000u, - 0x000400fau, 0x0000011fu, 0x00000120u, 0x00000121u, 0x000200f8u, 0x00000120u, 0x0004003du, 0x00000006u, - 0x00000122u, 0x00000118u, 0x000500aau, 0x00000031u, 0x00000123u, 0x00000122u, 0x0000011du, 0x000300f7u, - 0x00000125u, 0x00000000u, 0x000400fau, 0x00000123u, 0x00000124u, 0x00000125u, 0x000200f8u, 0x00000124u, - 0x0004003du, 0x00000006u, 0x00000126u, 0x00000111u, 0x000500c7u, 0x00000006u, 0x00000127u, 0x00000126u, - 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000128u, 0x00000127u, 0x0000003bu, 0x000200f9u, 0x00000125u, - 0x000200f8u, 0x00000125u, 0x000700f5u, 0x00000031u, 0x00000129u, 0x00000123u, 0x00000120u, 0x00000128u, - 0x00000124u, 0x000200f9u, 0x00000121u, 0x000200f8u, 0x00000121u, 0x000700f5u, 0x00000031u, 0x0000012au, - 0x0000011eu, 0x000000dbu, 0x00000129u, 0x00000125u, 0x000300f7u, 0x0000012cu, 0x00000000u, 0x000400fau, - 0x0000012au, 0x0000012bu, 0x0000012cu, 0x000200f8u, 0x0000012bu, 0x0004003du, 0x00000006u, 0x0000012du, - 0x00000111u, 0x00050080u, 0x00000006u, 0x0000012eu, 0x0000012du, 0x0000004bu, 0x0003003eu, 0x00000111u, - 0x0000012eu, 0x000200f9u, 0x0000012cu, 0x000200f8u, 0x0000012cu, 0x0004003du, 0x00000006u, 0x0000012fu, - 0x000000a7u, 0x0004003du, 0x00000006u, 0x00000130u, 0x00000111u, 0x000500c5u, 0x00000006u, 0x00000131u, - 0x0000012fu, 0x00000130u, 0x000200feu, 0x00000131u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, - 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, - 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000136u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000139u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013du, 0x00000007u, 0x0004003du, 0x00000006u, - 0x00000134u, 0x0000001au, 0x000500aau, 0x00000031u, 0x00000135u, 0x00000134u, 0x0000004bu, 0x000300f7u, - 0x00000138u, 0x00000000u, 0x000400fau, 0x00000135u, 0x00000137u, 0x0000013cu, 0x000200f8u, 0x00000137u, - 0x0004003du, 0x00000006u, 0x0000013au, 0x00000019u, 0x0003003eu, 0x00000139u, 0x0000013au, 0x00050039u, - 0x00000008u, 0x0000013bu, 0x00000013u, 0x00000139u, 0x0003003eu, 0x00000136u, 0x0000013bu, 0x000200f9u, - 0x00000138u, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000006u, 0x0000013eu, 0x00000019u, 0x0003003eu, - 0x0000013du, 0x0000013eu, 0x00050039u, 0x00000008u, 0x0000013fu, 0x0000000bu, 0x0000013du, 0x0003003eu, - 0x00000136u, 0x0000013fu, 0x000200f9u, 0x00000138u, 0x000200f8u, 0x00000138u, 0x0004003du, 0x00000008u, - 0x00000140u, 0x00000136u, 0x000200feu, 0x00000140u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, - 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, - 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000145u, 0x00000007u, 0x0004003bu, 0x0000000du, - 0x00000148u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014cu, 0x00000007u, 0x0004003du, 0x00000006u, - 0x00000143u, 0x0000001fu, 0x000500aau, 0x00000031u, 0x00000144u, 0x00000143u, 0x0000004bu, 0x000300f7u, - 0x00000147u, 0x00000000u, 0x000400fau, 0x00000144u, 0x00000146u, 0x0000014bu, 0x000200f8u, 0x00000146u, - 0x0004003du, 0x00000008u, 0x00000149u, 0x0000001eu, 0x0003003eu, 0x00000148u, 0x00000149u, 0x00050039u, - 0x00000006u, 0x0000014au, 0x00000016u, 0x00000148u, 0x0003003eu, 0x00000145u, 0x0000014au, 0x000200f9u, - 0x00000147u, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000008u, 0x0000014du, 0x0000001eu, 0x0003003eu, - 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000006u, 0x0000014eu, 0x00000010u, 0x0000014cu, 0x0003003eu, - 0x00000145u, 0x0000014eu, 0x000200f9u, 0x00000147u, 0x000200f8u, 0x00000147u, 0x0004003du, 0x00000006u, - 0x0000014fu, 0x00000145u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000025u, - 0x00000000u, 0x00000022u, 0x00030037u, 0x00000007u, 0x00000023u, 0x00030037u, 0x0000000du, 0x00000024u, - 0x000200f8u, 0x00000026u, 0x0004003bu, 0x00000007u, 0x0000015cu, 0x00000007u, 0x000400e0u, 0x00000152u, - 0x00000152u, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000158u, 0x00000023u, 0x0004003du, 0x00000008u, - 0x00000159u, 0x00000024u, 0x00050041u, 0x0000015au, 0x0000015bu, 0x00000157u, 0x00000158u, 0x0003003eu, - 0x0000015bu, 0x00000159u, 0x000400e0u, 0x00000152u, 0x00000152u, 0x00000153u, 0x0003003eu, 0x0000015cu, - 0x00000042u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015du, 0x000400f6u, 0x0000015fu, 0x00000160u, - 0x00000000u, 0x000200f9u, 0x00000161u, 0x000200f8u, 0x00000161u, 0x0004003du, 0x00000006u, 0x00000162u, - 0x0000015cu, 0x000500acu, 0x00000031u, 0x00000163u, 0x00000162u, 0x0000003bu, 0x000400fau, 0x00000163u, - 0x0000015eu, 0x0000015fu, 0x000200f8u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x00000164u, 0x00000023u, - 0x0004003du, 0x00000006u, 0x00000165u, 0x0000015cu, 0x000500b0u, 0x00000031u, 0x00000166u, 0x00000164u, - 0x00000165u, 0x000300f7u, 0x00000168u, 0x00000000u, 0x000400fau, 0x00000166u, 0x00000167u, 0x00000168u, - 0x000200f8u, 0x00000167u, 0x0004003du, 0x00000006u, 0x00000169u, 0x00000023u, 0x0004003du, 0x00000006u, - 0x0000016au, 0x00000023u, 0x0004003du, 0x00000006u, 0x0000016bu, 0x0000015cu, 0x00050080u, 0x00000006u, - 0x0000016cu, 0x0000016au, 0x0000016bu, 0x00050041u, 0x0000015au, 0x0000016du, 0x00000157u, 0x0000016cu, - 0x0004003du, 0x00000008u, 0x0000016eu, 0x0000016du, 0x00050041u, 0x0000015au, 0x0000016fu, 0x00000157u, - 0x00000169u, 0x0004003du, 0x00000008u, 0x00000170u, 0x0000016fu, 0x00050081u, 0x00000008u, 0x00000171u, - 0x00000170u, 0x0000016eu, 0x00050041u, 0x0000015au, 0x00000172u, 0x00000157u, 0x00000169u, 0x0003003eu, - 0x00000172u, 0x00000171u, 0x000200f9u, 0x00000168u, 0x000200f8u, 0x00000168u, 0x000400e0u, 0x00000152u, - 0x00000152u, 0x00000153u, 0x000200f9u, 0x00000160u, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, - 0x00000173u, 0x0000015cu, 0x000500c2u, 0x00000006u, 0x00000174u, 0x00000173u, 0x00000085u, 0x0003003eu, - 0x0000015cu, 0x00000174u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015fu, 0x00050041u, 0x0000015au, - 0x00000175u, 0x00000157u, 0x000000d8u, 0x0004003du, 0x00000008u, 0x00000176u, 0x00000175u, 0x000200feu, - 0x00000176u, 0x00010038u, -}; - -inline constexpr uint32_t kSpv_vt_silu_and_mul[] = { - 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000021bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, - 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000015cu, - 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000015cu, - 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000161u, 0x00000002u, 0x00050048u, 0x00000161u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00050048u, 0x00000161u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, - 0x00000161u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000161u, 0x00000003u, 0x00000023u, - 0x0000000cu, 0x00050048u, 0x00000161u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000161u, - 0x00000005u, 0x00000023u, 0x00000014u, 0x00040047u, 0x00000187u, 0x00000006u, 0x00000004u, 0x00030047u, - 0x00000188u, 0x00000002u, 0x00040048u, 0x00000188u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000188u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000018au, 0x00000018u, 0x00040047u, 0x0000018au, - 0x00000021u, 0x00000000u, 0x00040047u, 0x0000018au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000199u, - 0x00000006u, 0x00000002u, 0x00030047u, 0x0000019au, 0x00000002u, 0x00040048u, 0x0000019au, 0x00000000u, - 0x00000018u, 0x00050048u, 0x0000019au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000019cu, - 0x00000018u, 0x00040047u, 0x0000019cu, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000019cu, 0x00000022u, - 0x00000000u, 0x00040047u, 0x000001e0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001e1u, 0x00000002u, - 0x00050048u, 0x000001e1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001e3u, 0x00000021u, - 0x00000002u, 0x00040047u, 0x000001e3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001f9u, 0x00000006u, - 0x00000002u, 0x00030047u, 0x000001fau, 0x00000002u, 0x00050048u, 0x000001fau, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00040047u, 0x000001fcu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000001fcu, 0x00000022u, - 0x00000000u, 0x00040047u, 0x0000021au, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, - 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, - 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, - 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, - 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, - 0x00000006u, 0x0000000du, 0x00000007u, 0x00040021u, 0x00000022u, 0x00000008u, 0x0000000du, 0x00040015u, - 0x00000027u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000027u, 0x00000028u, 0x00000010u, 0x00020014u, - 0x00000030u, 0x0004002bu, 0x00000006u, 0x00000032u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000038u, - 0x007fffffu, 0x0004002bu, 0x00000006u, 0x0000003au, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000041u, - 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000043u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000047u, - 0x00007fffu, 0x0004002bu, 0x00000006u, 0x0000004au, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000056u, - 0x00008000u, 0x0004002bu, 0x00000027u, 0x0000005bu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000005du, - 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000061u, 0x000003ffu, 0x0004002bu, 0x00000027u, 0x0000006au, - 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000081u, 0x00000400u, 0x0004002bu, 0x00000027u, 0x00000084u, - 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000008cu, 0x00000071u, 0x0004002bu, 0x00000027u, 0x0000008fu, - 0x00000017u, 0x0004002bu, 0x00000006u, 0x00000099u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000adu, - 0x000000ffu, 0x00040020u, 0x000000afu, 0x00000007u, 0x00000027u, 0x0004002bu, 0x00000027u, 0x000000b3u, - 0x0000007fu, 0x0004002bu, 0x00000027u, 0x000000b5u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bfu, - 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000c6u, 0x00000200u, 0x0004002bu, 0x00000027u, 0x000000cfu, - 0x0000001fu, 0x0004002bu, 0x00000027u, 0x000000d7u, 0x00000000u, 0x0004002bu, 0x00000027u, 0x000000dcu, - 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000e2u, 0x00800000u, 0x0004002bu, 0x00000027u, 0x000000e6u, - 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000119u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x0000011cu, - 0x00001000u, 0x0004002bu, 0x00000008u, 0x00000151u, 0x3f800000u, 0x00040017u, 0x0000015au, 0x00000006u, - 0x00000003u, 0x00040020u, 0x0000015bu, 0x00000001u, 0x0000015au, 0x0004003bu, 0x0000015bu, 0x0000015cu, - 0x00000001u, 0x00040020u, 0x0000015du, 0x00000001u, 0x00000006u, 0x0008001eu, 0x00000161u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000162u, 0x00000009u, - 0x00000161u, 0x0004003bu, 0x00000162u, 0x00000163u, 0x00000009u, 0x00040020u, 0x00000164u, 0x00000009u, - 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000017au, 0x00000002u, 0x0004002bu, 0x00000027u, 0x00000180u, - 0x00000002u, 0x0003001du, 0x00000187u, 0x00000006u, 0x0003001eu, 0x00000188u, 0x00000187u, 0x00040020u, - 0x00000189u, 0x0000000cu, 0x00000188u, 0x0004003bu, 0x00000189u, 0x0000018au, 0x0000000cu, 0x0004002bu, - 0x00000027u, 0x0000018bu, 0x00000004u, 0x00040020u, 0x00000193u, 0x0000000cu, 0x00000006u, 0x00040015u, - 0x00000198u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000199u, 0x00000198u, 0x0003001eu, 0x0000019au, - 0x00000199u, 0x00040020u, 0x0000019bu, 0x0000000cu, 0x0000019au, 0x0004003bu, 0x0000019bu, 0x0000019cu, - 0x0000000cu, 0x00040020u, 0x000001a4u, 0x0000000cu, 0x00000198u, 0x0004002bu, 0x00000027u, 0x000001dau, - 0x00000003u, 0x0003001du, 0x000001e0u, 0x00000006u, 0x0003001eu, 0x000001e1u, 0x000001e0u, 0x00040020u, - 0x000001e2u, 0x0000000cu, 0x000001e1u, 0x0004003bu, 0x000001e2u, 0x000001e3u, 0x0000000cu, 0x0004002bu, - 0x00000027u, 0x000001e4u, 0x00000005u, 0x0003001du, 0x000001f9u, 0x00000198u, 0x0003001eu, 0x000001fau, - 0x000001f9u, 0x00040020u, 0x000001fbu, 0x0000000cu, 0x000001fau, 0x0004003bu, 0x000001fbu, 0x000001fcu, - 0x0000000cu, 0x0003002au, 0x00000030u, 0x00000215u, 0x0004002bu, 0x00000006u, 0x00000216u, 0x00000080u, - 0x0004001cu, 0x00000217u, 0x00000008u, 0x00000216u, 0x00040020u, 0x00000218u, 0x00000004u, 0x00000217u, - 0x0004003bu, 0x00000218u, 0x00000219u, 0x00000004u, 0x0006002cu, 0x0000015au, 0x0000021au, 0x00000216u, - 0x0000004au, 0x0000004au, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, - 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000159u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000016eu, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000173u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000178u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000017fu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000184u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a9u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001aeu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001b2u, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d1u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001f0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000208u, - 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000020eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000020fu, - 0x00000007u, 0x00050041u, 0x0000015du, 0x0000015eu, 0x0000015cu, 0x0000003au, 0x0004003du, 0x00000006u, - 0x0000015fu, 0x0000015eu, 0x0003003eu, 0x00000159u, 0x0000015fu, 0x0004003du, 0x00000006u, 0x00000160u, - 0x00000159u, 0x00050041u, 0x00000164u, 0x00000165u, 0x00000163u, 0x000000d7u, 0x0004003du, 0x00000006u, - 0x00000166u, 0x00000165u, 0x00050041u, 0x00000164u, 0x00000167u, 0x00000163u, 0x00000084u, 0x0004003du, - 0x00000006u, 0x00000168u, 0x00000167u, 0x00050084u, 0x00000006u, 0x00000169u, 0x00000166u, 0x00000168u, - 0x000500aeu, 0x00000030u, 0x0000016au, 0x00000160u, 0x00000169u, 0x000300f7u, 0x0000016cu, 0x00000000u, - 0x000400fau, 0x0000016au, 0x0000016bu, 0x0000016cu, 0x000200f8u, 0x0000016bu, 0x000100fdu, 0x000200f8u, - 0x0000016cu, 0x0004003du, 0x00000006u, 0x0000016fu, 0x00000159u, 0x00050041u, 0x00000164u, 0x00000170u, - 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000171u, 0x00000170u, 0x00050086u, 0x00000006u, - 0x00000172u, 0x0000016fu, 0x00000171u, 0x0003003eu, 0x0000016eu, 0x00000172u, 0x0004003du, 0x00000006u, - 0x00000174u, 0x00000159u, 0x00050041u, 0x00000164u, 0x00000175u, 0x00000163u, 0x00000084u, 0x0004003du, - 0x00000006u, 0x00000176u, 0x00000175u, 0x00050089u, 0x00000006u, 0x00000177u, 0x00000174u, 0x00000176u, - 0x0003003eu, 0x00000173u, 0x00000177u, 0x0004003du, 0x00000006u, 0x00000179u, 0x0000016eu, 0x00050041u, - 0x00000164u, 0x0000017bu, 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x0000017cu, 0x0000017bu, - 0x00050084u, 0x00000006u, 0x0000017du, 0x0000017au, 0x0000017cu, 0x00050084u, 0x00000006u, 0x0000017eu, - 0x00000179u, 0x0000017du, 0x0003003eu, 0x00000178u, 0x0000017eu, 0x00050041u, 0x00000164u, 0x00000181u, - 0x00000163u, 0x00000180u, 0x0004003du, 0x00000006u, 0x00000182u, 0x00000181u, 0x000500aau, 0x00000030u, - 0x00000183u, 0x00000182u, 0x0000003au, 0x000300f7u, 0x00000186u, 0x00000000u, 0x000400fau, 0x00000183u, - 0x00000185u, 0x00000197u, 0x000200f8u, 0x00000185u, 0x00050041u, 0x00000164u, 0x0000018cu, 0x00000163u, - 0x0000018bu, 0x0004003du, 0x00000006u, 0x0000018du, 0x0000018cu, 0x000500c2u, 0x00000006u, 0x0000018eu, - 0x0000018du, 0x00000180u, 0x0004003du, 0x00000006u, 0x0000018fu, 0x00000178u, 0x0004003du, 0x00000006u, - 0x00000190u, 0x00000173u, 0x00050080u, 0x00000006u, 0x00000191u, 0x0000018fu, 0x00000190u, 0x00050080u, - 0x00000006u, 0x00000192u, 0x0000018eu, 0x00000191u, 0x00060041u, 0x00000193u, 0x00000194u, 0x0000018au, - 0x000000d7u, 0x00000192u, 0x0004003du, 0x00000006u, 0x00000195u, 0x00000194u, 0x0004007cu, 0x00000008u, - 0x00000196u, 0x00000195u, 0x0003003eu, 0x00000184u, 0x00000196u, 0x000200f9u, 0x00000186u, 0x000200f8u, - 0x00000197u, 0x00050041u, 0x00000164u, 0x0000019du, 0x00000163u, 0x0000018bu, 0x0004003du, 0x00000006u, - 0x0000019eu, 0x0000019du, 0x000500c2u, 0x00000006u, 0x0000019fu, 0x0000019eu, 0x00000084u, 0x0004003du, - 0x00000006u, 0x000001a0u, 0x00000178u, 0x0004003du, 0x00000006u, 0x000001a1u, 0x00000173u, 0x00050080u, - 0x00000006u, 0x000001a2u, 0x000001a0u, 0x000001a1u, 0x00050080u, 0x00000006u, 0x000001a3u, 0x0000019fu, - 0x000001a2u, 0x00060041u, 0x000001a4u, 0x000001a5u, 0x0000019cu, 0x000000d7u, 0x000001a3u, 0x0004003du, - 0x00000198u, 0x000001a6u, 0x000001a5u, 0x00040071u, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x0003003eu, - 0x000001a8u, 0x000001a7u, 0x00050041u, 0x00000164u, 0x000001aau, 0x00000163u, 0x00000180u, 0x0004003du, - 0x00000006u, 0x000001abu, 0x000001aau, 0x0003003eu, 0x000001a9u, 0x000001abu, 0x00060039u, 0x00000008u, - 0x000001acu, 0x0000001bu, 0x000001a8u, 0x000001a9u, 0x0003003eu, 0x00000184u, 0x000001acu, 0x000200f9u, - 0x00000186u, 0x000200f8u, 0x00000186u, 0x0004003du, 0x00000008u, 0x000001adu, 0x00000184u, 0x0003003eu, - 0x0000017fu, 0x000001adu, 0x00050041u, 0x00000164u, 0x000001afu, 0x00000163u, 0x00000180u, 0x0004003du, - 0x00000006u, 0x000001b0u, 0x000001afu, 0x000500aau, 0x00000030u, 0x000001b1u, 0x000001b0u, 0x0000003au, - 0x000300f7u, 0x000001b4u, 0x00000000u, 0x000400fau, 0x000001b1u, 0x000001b3u, 0x000001c2u, 0x000200f8u, - 0x000001b3u, 0x00050041u, 0x00000164u, 0x000001b5u, 0x00000163u, 0x0000018bu, 0x0004003du, 0x00000006u, - 0x000001b6u, 0x000001b5u, 0x000500c2u, 0x00000006u, 0x000001b7u, 0x000001b6u, 0x00000180u, 0x0004003du, - 0x00000006u, 0x000001b8u, 0x00000178u, 0x00050041u, 0x00000164u, 0x000001b9u, 0x00000163u, 0x00000084u, - 0x0004003du, 0x00000006u, 0x000001bau, 0x000001b9u, 0x00050080u, 0x00000006u, 0x000001bbu, 0x000001b8u, - 0x000001bau, 0x0004003du, 0x00000006u, 0x000001bcu, 0x00000173u, 0x00050080u, 0x00000006u, 0x000001bdu, - 0x000001bbu, 0x000001bcu, 0x00050080u, 0x00000006u, 0x000001beu, 0x000001b7u, 0x000001bdu, 0x00060041u, - 0x00000193u, 0x000001bfu, 0x0000018au, 0x000000d7u, 0x000001beu, 0x0004003du, 0x00000006u, 0x000001c0u, - 0x000001bfu, 0x0004007cu, 0x00000008u, 0x000001c1u, 0x000001c0u, 0x0003003eu, 0x000001b2u, 0x000001c1u, - 0x000200f9u, 0x000001b4u, 0x000200f8u, 0x000001c2u, 0x00050041u, 0x00000164u, 0x000001c3u, 0x00000163u, - 0x0000018bu, 0x0004003du, 0x00000006u, 0x000001c4u, 0x000001c3u, 0x000500c2u, 0x00000006u, 0x000001c5u, - 0x000001c4u, 0x00000084u, 0x0004003du, 0x00000006u, 0x000001c6u, 0x00000178u, 0x00050041u, 0x00000164u, - 0x000001c7u, 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x000001c8u, 0x000001c7u, 0x00050080u, - 0x00000006u, 0x000001c9u, 0x000001c6u, 0x000001c8u, 0x0004003du, 0x00000006u, 0x000001cau, 0x00000173u, - 0x00050080u, 0x00000006u, 0x000001cbu, 0x000001c9u, 0x000001cau, 0x00050080u, 0x00000006u, 0x000001ccu, - 0x000001c5u, 0x000001cbu, 0x00060041u, 0x000001a4u, 0x000001cdu, 0x0000019cu, 0x000000d7u, 0x000001ccu, - 0x0004003du, 0x00000198u, 0x000001ceu, 0x000001cdu, 0x00040071u, 0x00000006u, 0x000001cfu, 0x000001ceu, - 0x0003003eu, 0x000001d0u, 0x000001cfu, 0x00050041u, 0x00000164u, 0x000001d2u, 0x00000163u, 0x00000180u, - 0x0004003du, 0x00000006u, 0x000001d3u, 0x000001d2u, 0x0003003eu, 0x000001d1u, 0x000001d3u, 0x00060039u, - 0x00000008u, 0x000001d4u, 0x0000001bu, 0x000001d0u, 0x000001d1u, 0x0003003eu, 0x000001b2u, 0x000001d4u, - 0x000200f9u, 0x000001b4u, 0x000200f8u, 0x000001b4u, 0x0004003du, 0x00000008u, 0x000001d5u, 0x000001b2u, - 0x0003003eu, 0x000001aeu, 0x000001d5u, 0x000200f9u, 0x000001d6u, 0x000200f8u, 0x000001d6u, 0x000400f6u, - 0x000001d8u, 0x000001d9u, 0x00000000u, 0x000200f9u, 0x000001d7u, 0x000200f8u, 0x000001d7u, 0x00050041u, - 0x00000164u, 0x000001dbu, 0x00000163u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000001dcu, 0x000001dbu, - 0x000500aau, 0x00000030u, 0x000001ddu, 0x000001dcu, 0x0000003au, 0x000300f7u, 0x000001dfu, 0x00000000u, - 0x000400fau, 0x000001ddu, 0x000001deu, 0x000001f8u, 0x000200f8u, 0x000001deu, 0x00050041u, 0x00000164u, - 0x000001e5u, 0x00000163u, 0x000001e4u, 0x0004003du, 0x00000006u, 0x000001e6u, 0x000001e5u, 0x000500c2u, - 0x00000006u, 0x000001e7u, 0x000001e6u, 0x00000180u, 0x0004003du, 0x00000006u, 0x000001e8u, 0x0000016eu, - 0x00050041u, 0x00000164u, 0x000001e9u, 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x000001eau, - 0x000001e9u, 0x00050084u, 0x00000006u, 0x000001ebu, 0x000001e8u, 0x000001eau, 0x0004003du, 0x00000006u, - 0x000001ecu, 0x00000173u, 0x00050080u, 0x00000006u, 0x000001edu, 0x000001ebu, 0x000001ecu, 0x00050080u, - 0x00000006u, 0x000001eeu, 0x000001e7u, 0x000001edu, 0x0004003du, 0x00000008u, 0x000001efu, 0x0000017fu, - 0x0004003du, 0x00000008u, 0x000001f1u, 0x0000017fu, 0x0003003eu, 0x000001f0u, 0x000001f1u, 0x00050039u, - 0x00000008u, 0x000001f2u, 0x00000024u, 0x000001f0u, 0x00050085u, 0x00000008u, 0x000001f3u, 0x000001efu, - 0x000001f2u, 0x0004003du, 0x00000008u, 0x000001f4u, 0x000001aeu, 0x00050085u, 0x00000008u, 0x000001f5u, - 0x000001f3u, 0x000001f4u, 0x0004007cu, 0x00000006u, 0x000001f6u, 0x000001f5u, 0x00060041u, 0x00000193u, - 0x000001f7u, 0x000001e3u, 0x000000d7u, 0x000001eeu, 0x0003003eu, 0x000001f7u, 0x000001f6u, 0x000200f9u, - 0x000001dfu, 0x000200f8u, 0x000001f8u, 0x00050041u, 0x00000164u, 0x000001fdu, 0x00000163u, 0x000001e4u, - 0x0004003du, 0x00000006u, 0x000001feu, 0x000001fdu, 0x000500c2u, 0x00000006u, 0x000001ffu, 0x000001feu, - 0x00000084u, 0x0004003du, 0x00000006u, 0x00000200u, 0x0000016eu, 0x00050041u, 0x00000164u, 0x00000201u, - 0x00000163u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000202u, 0x00000201u, 0x00050084u, 0x00000006u, - 0x00000203u, 0x00000200u, 0x00000202u, 0x0004003du, 0x00000006u, 0x00000204u, 0x00000173u, 0x00050080u, - 0x00000006u, 0x00000205u, 0x00000203u, 0x00000204u, 0x00050080u, 0x00000006u, 0x00000206u, 0x000001ffu, - 0x00000205u, 0x0004003du, 0x00000008u, 0x00000207u, 0x0000017fu, 0x0004003du, 0x00000008u, 0x00000209u, - 0x0000017fu, 0x0003003eu, 0x00000208u, 0x00000209u, 0x00050039u, 0x00000008u, 0x0000020au, 0x00000024u, - 0x00000208u, 0x00050085u, 0x00000008u, 0x0000020bu, 0x00000207u, 0x0000020au, 0x0004003du, 0x00000008u, - 0x0000020cu, 0x000001aeu, 0x00050085u, 0x00000008u, 0x0000020du, 0x0000020bu, 0x0000020cu, 0x0003003eu, - 0x0000020eu, 0x0000020du, 0x00050041u, 0x00000164u, 0x00000210u, 0x00000163u, 0x000001dau, 0x0004003du, - 0x00000006u, 0x00000211u, 0x00000210u, 0x0003003eu, 0x0000020fu, 0x00000211u, 0x00060039u, 0x00000006u, - 0x00000212u, 0x00000020u, 0x0000020eu, 0x0000020fu, 0x00040071u, 0x00000198u, 0x00000213u, 0x00000212u, - 0x00060041u, 0x000001a4u, 0x00000214u, 0x000001fcu, 0x000000d7u, 0x00000206u, 0x0003003eu, 0x00000214u, - 0x00000213u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x000200f9u, 0x000001d9u, 0x000200f8u, - 0x000001d9u, 0x000400fau, 0x00000215u, 0x000001d6u, 0x000001d8u, 0x000200f8u, 0x000001d8u, 0x000100fdu, - 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, - 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000026u, 0x0000000au, 0x000500c4u, - 0x00000006u, 0x00000029u, 0x00000026u, 0x00000028u, 0x0004007cu, 0x00000008u, 0x0000002au, 0x00000029u, - 0x000200feu, 0x0000002au, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, - 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000002du, - 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000046u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002eu, - 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002fu, 0x0000002eu, 0x0003003eu, 0x0000002du, 0x0000002fu, - 0x0004003du, 0x00000006u, 0x00000031u, 0x0000002du, 0x000500c7u, 0x00000006u, 0x00000033u, 0x00000031u, - 0x00000032u, 0x000500aau, 0x00000030u, 0x00000034u, 0x00000033u, 0x00000032u, 0x000300f7u, 0x00000036u, - 0x00000000u, 0x000400fau, 0x00000034u, 0x00000035u, 0x00000036u, 0x000200f8u, 0x00000035u, 0x0004003du, - 0x00000006u, 0x00000037u, 0x0000002du, 0x000500c7u, 0x00000006u, 0x00000039u, 0x00000037u, 0x00000038u, - 0x000500abu, 0x00000030u, 0x0000003bu, 0x00000039u, 0x0000003au, 0x000200f9u, 0x00000036u, 0x000200f8u, - 0x00000036u, 0x000700f5u, 0x00000030u, 0x0000003cu, 0x00000034u, 0x00000011u, 0x0000003bu, 0x00000035u, - 0x000300f7u, 0x0000003eu, 0x00000000u, 0x000400fau, 0x0000003cu, 0x0000003du, 0x0000003eu, 0x000200f8u, - 0x0000003du, 0x0004003du, 0x00000006u, 0x0000003fu, 0x0000002du, 0x000500c2u, 0x00000006u, 0x00000040u, - 0x0000003fu, 0x00000028u, 0x000500c5u, 0x00000006u, 0x00000042u, 0x00000040u, 0x00000041u, 0x000500c7u, - 0x00000006u, 0x00000044u, 0x00000042u, 0x00000043u, 0x000200feu, 0x00000044u, 0x000200f8u, 0x0000003eu, - 0x0004003du, 0x00000006u, 0x00000048u, 0x0000002du, 0x000500c2u, 0x00000006u, 0x00000049u, 0x00000048u, - 0x00000028u, 0x000500c7u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x00050080u, 0x00000006u, - 0x0000004cu, 0x00000047u, 0x0000004bu, 0x0003003eu, 0x00000046u, 0x0000004cu, 0x0004003du, 0x00000006u, - 0x0000004du, 0x0000002du, 0x0004003du, 0x00000006u, 0x0000004eu, 0x00000046u, 0x00050080u, 0x00000006u, - 0x0000004fu, 0x0000004du, 0x0000004eu, 0x000500c2u, 0x00000006u, 0x00000050u, 0x0000004fu, 0x00000028u, - 0x000500c7u, 0x00000006u, 0x00000051u, 0x00000050u, 0x00000043u, 0x000200feu, 0x00000051u, 0x00010038u, - 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, - 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000054u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000059u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005fu, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x0000007au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000055u, 0x00000012u, 0x000500c7u, 0x00000006u, - 0x00000057u, 0x00000055u, 0x00000056u, 0x000500c4u, 0x00000006u, 0x00000058u, 0x00000057u, 0x00000028u, - 0x0003003eu, 0x00000054u, 0x00000058u, 0x0004003du, 0x00000006u, 0x0000005au, 0x00000012u, 0x000500c2u, - 0x00000006u, 0x0000005cu, 0x0000005au, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, - 0x0000005du, 0x0003003eu, 0x00000059u, 0x0000005eu, 0x0004003du, 0x00000006u, 0x00000060u, 0x00000012u, - 0x000500c7u, 0x00000006u, 0x00000062u, 0x00000060u, 0x00000061u, 0x0003003eu, 0x0000005fu, 0x00000062u, - 0x0004003du, 0x00000006u, 0x00000063u, 0x00000059u, 0x000500aau, 0x00000030u, 0x00000064u, 0x00000063u, - 0x0000005du, 0x000300f7u, 0x00000066u, 0x00000000u, 0x000400fau, 0x00000064u, 0x00000065u, 0x00000066u, - 0x000200f8u, 0x00000065u, 0x0004003du, 0x00000006u, 0x00000067u, 0x00000054u, 0x000500c5u, 0x00000006u, - 0x00000068u, 0x00000067u, 0x00000032u, 0x0004003du, 0x00000006u, 0x00000069u, 0x0000005fu, 0x000500c4u, - 0x00000006u, 0x0000006bu, 0x00000069u, 0x0000006au, 0x000500c5u, 0x00000006u, 0x0000006cu, 0x00000068u, - 0x0000006bu, 0x0004007cu, 0x00000008u, 0x0000006du, 0x0000006cu, 0x000200feu, 0x0000006du, 0x000200f8u, - 0x00000066u, 0x0004003du, 0x00000006u, 0x0000006fu, 0x00000059u, 0x000500aau, 0x00000030u, 0x00000070u, - 0x0000006fu, 0x0000003au, 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, - 0x00000072u, 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x0000005fu, 0x000500aau, - 0x00000030u, 0x00000074u, 0x00000073u, 0x0000003au, 0x000300f7u, 0x00000076u, 0x00000000u, 0x000400fau, - 0x00000074u, 0x00000075u, 0x00000076u, 0x000200f8u, 0x00000075u, 0x0004003du, 0x00000006u, 0x00000077u, - 0x00000054u, 0x0004007cu, 0x00000008u, 0x00000078u, 0x00000077u, 0x000200feu, 0x00000078u, 0x000200f8u, - 0x00000076u, 0x0003003eu, 0x0000007au, 0x0000003au, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, - 0x000400f6u, 0x0000007du, 0x0000007eu, 0x00000000u, 0x000200f9u, 0x0000007fu, 0x000200f8u, 0x0000007fu, - 0x0004003du, 0x00000006u, 0x00000080u, 0x0000005fu, 0x000500c7u, 0x00000006u, 0x00000082u, 0x00000080u, - 0x00000081u, 0x000500aau, 0x00000030u, 0x00000083u, 0x00000082u, 0x0000003au, 0x000400fau, 0x00000083u, - 0x0000007cu, 0x0000007du, 0x000200f8u, 0x0000007cu, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005fu, - 0x000500c4u, 0x00000006u, 0x00000086u, 0x00000085u, 0x00000084u, 0x0003003eu, 0x0000005fu, 0x00000086u, - 0x0004003du, 0x00000006u, 0x00000087u, 0x0000007au, 0x00050080u, 0x00000006u, 0x00000088u, 0x00000087u, - 0x0000004au, 0x0003003eu, 0x0000007au, 0x00000088u, 0x000200f9u, 0x0000007eu, 0x000200f8u, 0x0000007eu, - 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000089u, 0x0000005fu, - 0x000500c7u, 0x00000006u, 0x0000008au, 0x00000089u, 0x00000061u, 0x0003003eu, 0x0000005fu, 0x0000008au, - 0x0004003du, 0x00000006u, 0x0000008bu, 0x00000054u, 0x0004003du, 0x00000006u, 0x0000008du, 0x0000007au, - 0x00050082u, 0x00000006u, 0x0000008eu, 0x0000008cu, 0x0000008du, 0x000500c4u, 0x00000006u, 0x00000090u, - 0x0000008eu, 0x0000008fu, 0x000500c5u, 0x00000006u, 0x00000091u, 0x0000008bu, 0x00000090u, 0x0004003du, - 0x00000006u, 0x00000092u, 0x0000005fu, 0x000500c4u, 0x00000006u, 0x00000093u, 0x00000092u, 0x0000006au, - 0x000500c5u, 0x00000006u, 0x00000094u, 0x00000091u, 0x00000093u, 0x0004007cu, 0x00000008u, 0x00000095u, - 0x00000094u, 0x000200feu, 0x00000095u, 0x000200f8u, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000097u, - 0x00000054u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000059u, 0x00050080u, 0x00000006u, 0x0000009au, - 0x00000098u, 0x00000099u, 0x000500c4u, 0x00000006u, 0x0000009bu, 0x0000009au, 0x0000008fu, 0x000500c5u, - 0x00000006u, 0x0000009cu, 0x00000097u, 0x0000009bu, 0x0004003du, 0x00000006u, 0x0000009du, 0x0000005fu, - 0x000500c4u, 0x00000006u, 0x0000009eu, 0x0000009du, 0x0000006au, 0x000500c5u, 0x00000006u, 0x0000009fu, - 0x0000009cu, 0x0000009eu, 0x0004007cu, 0x00000008u, 0x000000a0u, 0x0000009fu, 0x000200feu, 0x000000a0u, - 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, - 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000a3u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000aau, 0x00000007u, 0x0004003bu, - 0x000000afu, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b7u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e5u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000eeu, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x000000f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000110u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000117u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a4u, 0x00000015u, 0x0004007cu, - 0x00000006u, 0x000000a5u, 0x000000a4u, 0x0003003eu, 0x000000a3u, 0x000000a5u, 0x0004003du, 0x00000006u, - 0x000000a7u, 0x000000a3u, 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x00000028u, 0x000500c7u, - 0x00000006u, 0x000000a9u, 0x000000a8u, 0x00000056u, 0x0003003eu, 0x000000a6u, 0x000000a9u, 0x0004003du, - 0x00000006u, 0x000000abu, 0x000000a3u, 0x000500c2u, 0x00000006u, 0x000000acu, 0x000000abu, 0x0000008fu, - 0x000500c7u, 0x00000006u, 0x000000aeu, 0x000000acu, 0x000000adu, 0x0003003eu, 0x000000aau, 0x000000aeu, - 0x0004003du, 0x00000006u, 0x000000b1u, 0x000000aau, 0x0004007cu, 0x00000027u, 0x000000b2u, 0x000000b1u, - 0x00050082u, 0x00000027u, 0x000000b4u, 0x000000b2u, 0x000000b3u, 0x00050080u, 0x00000027u, 0x000000b6u, - 0x000000b4u, 0x000000b5u, 0x0003003eu, 0x000000b0u, 0x000000b6u, 0x0004003du, 0x00000006u, 0x000000b8u, - 0x000000a3u, 0x000500c7u, 0x00000006u, 0x000000b9u, 0x000000b8u, 0x00000038u, 0x0003003eu, 0x000000b7u, - 0x000000b9u, 0x0004003du, 0x00000006u, 0x000000bau, 0x000000aau, 0x000500aau, 0x00000030u, 0x000000bbu, - 0x000000bau, 0x000000adu, 0x000300f7u, 0x000000bdu, 0x00000000u, 0x000400fau, 0x000000bbu, 0x000000bcu, - 0x000000bdu, 0x000200f8u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x000000beu, 0x000000a6u, 0x000500c5u, - 0x00000006u, 0x000000c0u, 0x000000beu, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000000c1u, 0x000000b7u, - 0x000500abu, 0x00000030u, 0x000000c2u, 0x000000c1u, 0x0000003au, 0x000300f7u, 0x000000c5u, 0x00000000u, - 0x000400fau, 0x000000c2u, 0x000000c4u, 0x000000cau, 0x000200f8u, 0x000000c4u, 0x0004003du, 0x00000006u, - 0x000000c7u, 0x000000b7u, 0x000500c2u, 0x00000006u, 0x000000c8u, 0x000000c7u, 0x0000006au, 0x000500c5u, - 0x00000006u, 0x000000c9u, 0x000000c6u, 0x000000c8u, 0x0003003eu, 0x000000c3u, 0x000000c9u, 0x000200f9u, - 0x000000c5u, 0x000200f8u, 0x000000cau, 0x0003003eu, 0x000000c3u, 0x0000003au, 0x000200f9u, 0x000000c5u, - 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000cbu, 0x000000c3u, 0x000500c5u, 0x00000006u, - 0x000000ccu, 0x000000c0u, 0x000000cbu, 0x000200feu, 0x000000ccu, 0x000200f8u, 0x000000bdu, 0x0004003du, - 0x00000027u, 0x000000ceu, 0x000000b0u, 0x000500afu, 0x00000030u, 0x000000d0u, 0x000000ceu, 0x000000cfu, - 0x000300f7u, 0x000000d2u, 0x00000000u, 0x000400fau, 0x000000d0u, 0x000000d1u, 0x000000d2u, 0x000200f8u, - 0x000000d1u, 0x0004003du, 0x00000006u, 0x000000d3u, 0x000000a6u, 0x000500c5u, 0x00000006u, 0x000000d4u, - 0x000000d3u, 0x000000bfu, 0x000200feu, 0x000000d4u, 0x000200f8u, 0x000000d2u, 0x0004003du, 0x00000027u, - 0x000000d6u, 0x000000b0u, 0x000500b3u, 0x00000030u, 0x000000d8u, 0x000000d6u, 0x000000d7u, 0x000300f7u, - 0x000000dau, 0x00000000u, 0x000400fau, 0x000000d8u, 0x000000d9u, 0x000000dau, 0x000200f8u, 0x000000d9u, - 0x0004003du, 0x00000027u, 0x000000dbu, 0x000000b0u, 0x000500b1u, 0x00000030u, 0x000000ddu, 0x000000dbu, - 0x000000dcu, 0x000300f7u, 0x000000dfu, 0x00000000u, 0x000400fau, 0x000000ddu, 0x000000deu, 0x000000dfu, - 0x000200f8u, 0x000000deu, 0x0004003du, 0x00000006u, 0x000000e0u, 0x000000a6u, 0x000200feu, 0x000000e0u, - 0x000200f8u, 0x000000dfu, 0x0004003du, 0x00000006u, 0x000000e3u, 0x000000b7u, 0x000500c5u, 0x00000006u, - 0x000000e4u, 0x000000e3u, 0x000000e2u, 0x0003003eu, 0x000000b7u, 0x000000e4u, 0x0004003du, 0x00000027u, - 0x000000e7u, 0x000000b0u, 0x00050082u, 0x00000027u, 0x000000e8u, 0x000000e6u, 0x000000e7u, 0x0004007cu, - 0x00000006u, 0x000000e9u, 0x000000e8u, 0x0003003eu, 0x000000e5u, 0x000000e9u, 0x0004003du, 0x00000006u, - 0x000000ebu, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000ecu, 0x000000e5u, 0x000500c2u, 0x00000006u, - 0x000000edu, 0x000000ebu, 0x000000ecu, 0x0003003eu, 0x000000eau, 0x000000edu, 0x0004003du, 0x00000006u, - 0x000000efu, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000f0u, 0x000000e5u, 0x000500c4u, 0x00000006u, - 0x000000f1u, 0x0000004au, 0x000000f0u, 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x0000004au, - 0x000500c7u, 0x00000006u, 0x000000f3u, 0x000000efu, 0x000000f2u, 0x0003003eu, 0x000000eeu, 0x000000f3u, - 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000e5u, 0x00050082u, 0x00000006u, 0x000000f6u, 0x000000f5u, - 0x0000004au, 0x000500c4u, 0x00000006u, 0x000000f7u, 0x0000004au, 0x000000f6u, 0x0003003eu, 0x000000f4u, - 0x000000f7u, 0x0004003du, 0x00000006u, 0x000000f8u, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f9u, - 0x000000f4u, 0x000500acu, 0x00000030u, 0x000000fau, 0x000000f8u, 0x000000f9u, 0x000400a8u, 0x00000030u, - 0x000000fbu, 0x000000fau, 0x000300f7u, 0x000000fdu, 0x00000000u, 0x000400fau, 0x000000fbu, 0x000000fcu, - 0x000000fdu, 0x000200f8u, 0x000000fcu, 0x0004003du, 0x00000006u, 0x000000feu, 0x000000eeu, 0x0004003du, - 0x00000006u, 0x000000ffu, 0x000000f4u, 0x000500aau, 0x00000030u, 0x00000100u, 0x000000feu, 0x000000ffu, - 0x000300f7u, 0x00000102u, 0x00000000u, 0x000400fau, 0x00000100u, 0x00000101u, 0x00000102u, 0x000200f8u, - 0x00000101u, 0x0004003du, 0x00000006u, 0x00000103u, 0x000000eau, 0x000500c7u, 0x00000006u, 0x00000104u, - 0x00000103u, 0x0000004au, 0x000500abu, 0x00000030u, 0x00000105u, 0x00000104u, 0x0000003au, 0x000200f9u, - 0x00000102u, 0x000200f8u, 0x00000102u, 0x000700f5u, 0x00000030u, 0x00000106u, 0x00000100u, 0x000000fcu, - 0x00000105u, 0x00000101u, 0x000200f9u, 0x000000fdu, 0x000200f8u, 0x000000fdu, 0x000700f5u, 0x00000030u, - 0x00000107u, 0x000000fau, 0x000000dfu, 0x00000106u, 0x00000102u, 0x000300f7u, 0x00000109u, 0x00000000u, - 0x000400fau, 0x00000107u, 0x00000108u, 0x00000109u, 0x000200f8u, 0x00000108u, 0x0004003du, 0x00000006u, - 0x0000010au, 0x000000eau, 0x00050080u, 0x00000006u, 0x0000010bu, 0x0000010au, 0x0000004au, 0x0003003eu, - 0x000000eau, 0x0000010bu, 0x000200f9u, 0x00000109u, 0x000200f8u, 0x00000109u, 0x0004003du, 0x00000006u, - 0x0000010cu, 0x000000a6u, 0x0004003du, 0x00000006u, 0x0000010du, 0x000000eau, 0x000500c5u, 0x00000006u, - 0x0000010eu, 0x0000010cu, 0x0000010du, 0x000200feu, 0x0000010eu, 0x000200f8u, 0x000000dau, 0x0004003du, - 0x00000027u, 0x00000111u, 0x000000b0u, 0x0004007cu, 0x00000006u, 0x00000112u, 0x00000111u, 0x000500c4u, - 0x00000006u, 0x00000113u, 0x00000112u, 0x0000005bu, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b7u, - 0x000500c2u, 0x00000006u, 0x00000115u, 0x00000114u, 0x0000006au, 0x000500c5u, 0x00000006u, 0x00000116u, - 0x00000113u, 0x00000115u, 0x0003003eu, 0x00000110u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000118u, - 0x000000b7u, 0x000500c7u, 0x00000006u, 0x0000011au, 0x00000118u, 0x00000119u, 0x0003003eu, 0x00000117u, - 0x0000011au, 0x0004003du, 0x00000006u, 0x0000011bu, 0x00000117u, 0x000500acu, 0x00000030u, 0x0000011du, - 0x0000011bu, 0x0000011cu, 0x000400a8u, 0x00000030u, 0x0000011eu, 0x0000011du, 0x000300f7u, 0x00000120u, - 0x00000000u, 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, - 0x00000006u, 0x00000121u, 0x00000117u, 0x000500aau, 0x00000030u, 0x00000122u, 0x00000121u, 0x0000011cu, - 0x000300f7u, 0x00000124u, 0x00000000u, 0x000400fau, 0x00000122u, 0x00000123u, 0x00000124u, 0x000200f8u, - 0x00000123u, 0x0004003du, 0x00000006u, 0x00000125u, 0x00000110u, 0x000500c7u, 0x00000006u, 0x00000126u, - 0x00000125u, 0x0000004au, 0x000500abu, 0x00000030u, 0x00000127u, 0x00000126u, 0x0000003au, 0x000200f9u, - 0x00000124u, 0x000200f8u, 0x00000124u, 0x000700f5u, 0x00000030u, 0x00000128u, 0x00000122u, 0x0000011fu, - 0x00000127u, 0x00000123u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, 0x00000030u, - 0x00000129u, 0x0000011du, 0x000000dau, 0x00000128u, 0x00000124u, 0x000300f7u, 0x0000012bu, 0x00000000u, - 0x000400fau, 0x00000129u, 0x0000012au, 0x0000012bu, 0x000200f8u, 0x0000012au, 0x0004003du, 0x00000006u, - 0x0000012cu, 0x00000110u, 0x00050080u, 0x00000006u, 0x0000012du, 0x0000012cu, 0x0000004au, 0x0003003eu, - 0x00000110u, 0x0000012du, 0x000200f9u, 0x0000012bu, 0x000200f8u, 0x0000012bu, 0x0004003du, 0x00000006u, - 0x0000012eu, 0x000000a6u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x00000110u, 0x000500c5u, 0x00000006u, - 0x00000130u, 0x0000012eu, 0x0000012fu, 0x000200feu, 0x00000130u, 0x00010038u, 0x00050036u, 0x00000008u, - 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, - 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000135u, 0x00000007u, 0x0004003bu, - 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013cu, 0x00000007u, 0x0004003du, - 0x00000006u, 0x00000133u, 0x0000001au, 0x000500aau, 0x00000030u, 0x00000134u, 0x00000133u, 0x0000004au, - 0x000300f7u, 0x00000137u, 0x00000000u, 0x000400fau, 0x00000134u, 0x00000136u, 0x0000013bu, 0x000200f8u, - 0x00000136u, 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, - 0x00050039u, 0x00000008u, 0x0000013au, 0x00000013u, 0x00000138u, 0x0003003eu, 0x00000135u, 0x0000013au, - 0x000200f9u, 0x00000137u, 0x000200f8u, 0x0000013bu, 0x0004003du, 0x00000006u, 0x0000013du, 0x00000019u, - 0x0003003eu, 0x0000013cu, 0x0000013du, 0x00050039u, 0x00000008u, 0x0000013eu, 0x0000000bu, 0x0000013cu, - 0x0003003eu, 0x00000135u, 0x0000013eu, 0x000200f9u, 0x00000137u, 0x000200f8u, 0x00000137u, 0x0004003du, - 0x00000008u, 0x0000013fu, 0x00000135u, 0x000200feu, 0x0000013fu, 0x00010038u, 0x00050036u, 0x00000006u, - 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, - 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000144u, 0x00000007u, 0x0004003bu, - 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014bu, 0x00000007u, 0x0004003du, - 0x00000006u, 0x00000142u, 0x0000001fu, 0x000500aau, 0x00000030u, 0x00000143u, 0x00000142u, 0x0000004au, - 0x000300f7u, 0x00000146u, 0x00000000u, 0x000400fau, 0x00000143u, 0x00000145u, 0x0000014au, 0x000200f8u, - 0x00000145u, 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, - 0x00050039u, 0x00000006u, 0x00000149u, 0x00000016u, 0x00000147u, 0x0003003eu, 0x00000144u, 0x00000149u, - 0x000200f9u, 0x00000146u, 0x000200f8u, 0x0000014au, 0x0004003du, 0x00000008u, 0x0000014cu, 0x0000001eu, - 0x0003003eu, 0x0000014bu, 0x0000014cu, 0x00050039u, 0x00000006u, 0x0000014du, 0x00000010u, 0x0000014bu, - 0x0003003eu, 0x00000144u, 0x0000014du, 0x000200f9u, 0x00000146u, 0x000200f8u, 0x00000146u, 0x0004003du, - 0x00000006u, 0x0000014eu, 0x00000144u, 0x000200feu, 0x0000014eu, 0x00010038u, 0x00050036u, 0x00000008u, - 0x00000024u, 0x00000000u, 0x00000022u, 0x00030037u, 0x0000000du, 0x00000023u, 0x000200f8u, 0x00000025u, - 0x0004003du, 0x00000008u, 0x00000152u, 0x00000023u, 0x0004007fu, 0x00000008u, 0x00000153u, 0x00000152u, - 0x0006000cu, 0x00000008u, 0x00000154u, 0x00000001u, 0x0000001bu, 0x00000153u, 0x00050081u, 0x00000008u, - 0x00000155u, 0x00000151u, 0x00000154u, 0x00050088u, 0x00000008u, 0x00000156u, 0x00000151u, 0x00000155u, - 0x000200feu, 0x00000156u, 0x00010038u, -}; - -inline constexpr uint32_t kSpecIds_vt_cast[] = { - 0u, 1u, -}; - // Name -> SPIR-V module. The NAME is the shader's file stem and is also the // key the pipeline cache uses (src/vt/vulkan/vulkan_context.cpp). // // spec_ids lists the SPECIALIZATION CONSTANT IDs the module declares, parsed -// from its OpDecorate SpecId instructions and sorted ascending. The host passes -// specialization values BY ID, and Vulkan SILENTLY IGNORES a map entry whose ID -// the module does not declare — so without this table a host/shader drift -// produces WRONG NUMBERS instead of a clean failure. +// from its OpDecorate SpecId instructions and sorted ascending. The host +// passes specialization values BY ID, and Vulkan SILENTLY IGNORES a map entry +// whose ID the module does not declare - so without this table a host/shader +// drift produces WRONG NUMBERS instead of a clean failure. struct SpirvModule { const char* name; const uint32_t* words; @@ -3481,15 +44,11 @@ struct SpirvModule { size_t spec_id_count; }; -inline constexpr SpirvModule kSpirvModules[] = { - {"vt_add", kSpv_vt_add, sizeof(kSpv_vt_add) / sizeof(uint32_t), nullptr, 0}, - {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t), kSpecIds_vt_cast, 2}, - {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t), nullptr, 0}, - {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, - {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, - {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t), nullptr, 0}, - {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t), nullptr, 0}, -}; +// DEFINED IN vulkan_spirv.cpp. The array is `extern` and therefore of unknown +// bound here, so kSpirvModuleCount is the ONLY way to size it - use it rather +// than sizeof/sizeof. +extern const SpirvModule kSpirvModules[]; +extern const size_t kSpirvModuleCount; } // namespace vt::vulkan diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py index f774ea3c..a17408dd 100644 --- a/tests/scripts/test_gen_vulkan_spirv.py +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -65,11 +65,11 @@ class CommittedArtifact(unittest.TestCase): def test_module_table_carries_the_spec_id_columns(self): """The committed header must expose the specialization columns at all. - Read from the COMMITTED header rather than by recompiling, so this runs + Read from the COMMITTED artifacts rather than by recompiling, so this runs with no shader toolchain — the same property that lets the C++ gate check the artifact on a box with no Vulkan. - assertIn is avoided throughout: the haystack is a ~110 KB generated header + assertIn is avoided throughout: the haystack is a ~110 KB generated file and assertIn prints it in full on failure, burying the message. """ header = (ROOT / "src/vt/vulkan/vulkan_spirv.h").read_text() @@ -78,6 +78,22 @@ def test_module_table_carries_the_spec_id_columns(self): f"SpirvModule is missing {field!r}; " f"re-run scripts/gen-vulkan-spirv.py") + def test_header_declares_but_does_not_define_the_blobs(self): + """The words belong in the .cpp; the header only declares the table. + + This is the split's whole point, so it is asserted rather than assumed: a + regression that put the arrays back in the header would be invisible until + compile times grew. + """ + header = (ROOT / "src/vt/vulkan/vulkan_spirv.h").read_text() + source = (ROOT / "src/vt/vulkan/vulkan_spirv.cpp").read_text() + self.assertTrue("extern const SpirvModule kSpirvModules[];" in header) + self.assertTrue("extern const size_t kSpirvModuleCount;" in header) + self.assertTrue("kSpv_" not in header, + "SPIR-V word arrays are back in the header; they belong " + "in vulkan_spirv.cpp") + self.assertTrue("kSpv_vt_cast[]" in source) + def test_vt_cast_declares_its_dtype_pair(self): """vt_cast is the backend's first variant axis: src and dst dtype. @@ -86,8 +102,8 @@ def test_vt_cast_declares_its_dtype_pair(self): deliberately NOT such a constant: local_size_x_id emits LocalSize 1 1 1 at the vulkan1.1 target (see vt_common.glsl). """ - header = (ROOT / "src/vt/vulkan/vulkan_spirv.h").read_text() - self.assertTrue("kSpecIds_vt_cast[]" in header, + source = (ROOT / "src/vt/vulkan/vulkan_spirv.cpp").read_text() + self.assertTrue("kSpecIds_vt_cast[]" in source, "vt_cast no longer declares specialization constants; " "re-run scripts/gen-vulkan-spirv.py") @@ -97,13 +113,13 @@ def test_other_shaders_declare_none_yet(self): Whoever adds one is then forced to supply matching values at its dispatch, which GetPipeline checks by count against the declared SpecIds. """ - header = (ROOT / "src/vt/vulkan/vulkan_spirv.h").read_text() + source = (ROOT / "src/vt/vulkan/vulkan_spirv.cpp").read_text() for src in sorted((ROOT / "src/vt/vulkan/shaders").glob("*.comp")): if src.stem == "vt_cast": continue with self.subTest(shader=src.name): self.assertTrue( - f"kSpecIds_{src.stem}[]" not in header, + f"kSpecIds_{src.stem}[]" not in source, f"{src.name} now declares a specialization constant; update " f"this test and pass its value at the dispatch") diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index b3147016..9065805a 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -48,9 +48,14 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // Independent of any device: this is a property of the CHECKED-IN artifact, so // it also gates the generator (scripts/gen-vulkan-spirv.py) on a box with no // Vulkan at all. - const size_t n = sizeof(vt::vulkan::kSpirvModules) / sizeof(vt::vulkan::kSpirvModules[0]); + // The blobs live in vulkan_spirv.cpp, so the array is `extern` and of unknown + // bound here and the generated count is the only way to size it. That is the + // point of the split: at the target shader surface the words must not be + // re-parsed by every TU that merely needs the table. + const size_t n = vt::vulkan::kSpirvModuleCount; CHECK(n == 7); - for (const auto& m : vt::vulkan::kSpirvModules) { + for (size_t mi = 0; mi < n; ++mi) { + const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); REQUIRE(m.word_count > 5); // a SPIR-V header alone is 5 words CHECK(m.words[0] == 0x07230203u); // SPIR-V magic @@ -61,8 +66,8 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { for (const char* want : {"vt_add", "vt_cast", "vt_fused_chain", "vt_layer_norm", "vt_relu", "vt_rms_norm", "vt_silu_and_mul"}) { bool found = false; - for (const auto& m : vt::vulkan::kSpirvModules) { - if (std::strcmp(m.name, want) == 0) found = true; + for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { + if (std::strcmp(vt::vulkan::kSpirvModules[mi].name, want) == 0) found = true; } CAPTURE(want); CHECK(found); @@ -77,7 +82,8 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const // a VkSpecializationMapEntry whose ID the module does not declare, so a drift // between host and shader is WRONG NUMBERS, not a clean error. Recording the // declared IDs alongside each blob is what lets GetPipeline check it. - for (const auto& m : vt::vulkan::kSpirvModules) { + for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { + const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); // Structural: the pointer and the count agree, and the IDs are sorted with no // duplicates — GetPipeline builds VkSpecializationMapEntry positionally from From feea8c75f8036c70466fcf5d29d98ffed543f067 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 21:52:32 +0000 Subject: [PATCH 08/17] record(vulkan): VK-A1 landed, and the campaign's baseline was wrong Repairs the BACKEND-VULKAN drift this campaign was scoped to fix, and corrects two claims the campaign spec itself made three commits ago. DRIFT: feature-matrix carried INVENTORIED / "runtime absent" against backend-matrix's ACTIVE for the same row. backend-matrix was right. CORRECTION, which matters more. The spec stated -- from the backend matrix -- that Vulkan's unimplemented ops make vt::GetOp THROW, and put the surface at "8 of 83". Both are false. Accelerator-seam row S5 (af0b21ba) gave unified-memory devices the portable reference tier, and Vulkan is eligible. Re-counted at RUNTIME on a Vulkan-ON build: of 87 CPU-registered ops, 8 are NATIVE, 79 are served by the reference tier (the CPU kernel against shared memory), and ZERO throw. Every op a model needs already resolves, so the campaign's real content is moving those 79 off the host -- a performance project, not a make-it-run one, and GetReferenceTierHits() is the progress metric that must reach 0. HONEST LIMIT, stated wherever the numbers are: op resolution is not an end-to-end claim. get_attn_backend_priority() is still deliberately EMPTY, which is a separate gate at the platform seam, and no model has been run on Vulkan. Also records the measured negative result so nobody retries it: the workgroup size cannot be a specialization constant at the vulkan1.1 target, because local_size_x_id emits ExecutionMode LocalSize 1 1 1 and computes ~1/128 of each tensor (NMSE 0.99 on kAdd). No speed number measured, claimed or owed. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .agents/backend-matrix.md | 2 +- .agents/feature-matrix.md | 2 +- .agents/specs/vulkan-full-support.md | 96 ++++++++++++++++++++++++++-- .agents/state.md | 77 ++++++++++++++++++++++ docs/BENCHMARKS.md | 2 +- docs/FEATURES.md | 7 ++ docs/STATUS.md | 4 +- 7 files changed, 181 insertions(+), 9 deletions(-) diff --git a/.agents/backend-matrix.md b/.agents/backend-matrix.md index e8da7ae6..41d18120 100644 --- a/.agents/backend-matrix.md +++ b/.agents/backend-matrix.md @@ -230,7 +230,7 @@ on every listed target. | `BACKEND-TPU` | vLLM TPU parity surface | `platforms/__init__.py:35-56,202-208`, `platforms/tpu.py:9-20` | - | - | [CUDA inventory](specs/cuda-architecture-inventory.md) | `INVENTORIED` | - | | `BACKEND-ACCEL-PROVIDER` | **The acceleration-PROVIDER seam** — two or more implementations of ONE `vt::` op on ONE `DeviceType` coexisting, selected DETERMINISTICALLY and observably. Answers the user's standing requirement "build it so we can extend acceleration easily to other platforms", which is a question about the SEAM, not about any one backend | no upstream mirror (vllm.cpp original). Mirrors the SHAPE of the runtime tactic/heuristic dispatch every provider in vLLM's chain uses instead of compile-time pinning: flashinfer's per-arch tactic registry (`flashinfer/gemm/fp4_gemm_cutlass_template_sm120.h:187-220`), cuBLASLt/CUTLASS per-call heuristics | `vt::OpProvider` + device-neutral `vt::ProviderCaps` [op_provider.h](../include/vt/op_provider.h); registry, deterministic selection, decline-and-fall-back and stats [op_provider.cpp](../src/vt/op_provider.cpp). `RegisterOp`/`GetOp`/`OpRegistered` MOVED OUT of [ops.cpp](../src/vt/ops.cpp) with **identical signatures and semantics** — all ~70 op wrappers in that file are byte-unchanged, which is what "zero call-site edits" means. GENERALIZED FROM [cuda_arch_tactics.h](../src/vt/cuda/cuda_arch_tactics.h) (capacity-bounded static storage, capability predicate, decline-by-return, selection stats), lifted out of `vt::cuda` and keyed on (OpId, DeviceType). First consumer: the MLX GEMM provider on Metal [metal_mlx_provider.mm](../src/vt/metal/metal_mlx_provider.mm) | **THE DEFECT FIXED, STATED PRECISELY:** the old table held ONE `void*` per (OpId, DeviceType) and `RegisterOp` overwrote it with no check and no warning, so two providers of one op resolved by STATIC-INIT ORDER ACROSS TUs — unspecified by the standard, i.e. a nondeterministic BUILD. Selection is now `(priority DESC, name ASC by strcmp)`, both compile-time constants of the registering TU, hence a pure function of WHICH providers are linked. **PROVEN, not asserted:** [test_op_provider.cpp](../tests/vt/test_op_provider.cpp) registers the SAME three providers in OPPOSITE orders on two slots and requires the same winner AND the same full order (11 cases / 47 assertions), plus equal-priority name tie-break, duplicate-name rejection, capability-predicate skip, caps re-publication re-resolution, decline-and-fall-back down a 3-deep stack, the `declines` counter, per-call `selections` stats, and the `VT_OP_PROVIDER_DISABLE` same-binary A/B lever. **END-TO-END on a real accelerator (M4):** MLX and the native MSL GEMM coexist on `kMatmul`/`kMatmulBT`, MLX wins by priority, and an interior-pointer activation makes MLX DECLINE exactly once and fall through to ours with the right answer ([test_metal_backend.cpp](../tests/vt/test_metal_backend.cpp), 9 cases / 108 assertions with MLX ON). clean `-Werror` 0 warnings on all three toolchains (AppleClang 21 CLT-only macOS 26.5.2 Metal ON and Metal+MLX ON; GCC Linux CPU; nvcc 13.0 sm_121a on dgx with `VLLM_CPP_TRITON=ON`). **REGRESSION-SAFE on the hottest shared file:** `GetOp` steady state is one relaxed atomic load of a resolved-selection cache (was one array load); negative resolution is memoized so `OpRegistered`, which the fused-recipe ladder calls per step for ops a backend lacks, stays O(1); the provider-disable lookup short-circuits lock-free when nothing is disabled. dgx regression set ALL UNCHANGED, each STANDALONE (see the state log entry) — anchor `tests/vt/test_op_provider.cpp:64` | [Metal/MLX reuse study §6](specs/metal-mlx-reuse-study.md) (which specced it, work row `W0b-2`); reconciled with — not rivalling — [drop-in kernel ABI](specs/dropin-kernel-abi.md), which is the ARGUMENT half for raw-C launchers while this is the SELECTION half | `ACTIVE` — the mechanism is landed and gated with two real providers on one op; it is deliberately not closed, because the CUDA (cuBLASLt/CUTLASS/flashinfer), CPU (llama.cpp `vec_dot`) and Vulkan (coopmat) rows of the §6.1 table are DESIGNED FOR but not yet POPULATED, and the `QuantTypeTraits` split (study §3.4, work row `W0b-3`) that keys on the same predicate is not landed | `CLAIM-BACKEND-ACCEL-PROVIDER-1` | | `BACKEND-METAL-MLX` | Apple Metal — **native MSL** (runtime-compiled), with MLX demoted to an ALTERNATIVE kernel source (work row M5) but PROMOTED to the named competitor/benchmark floor (`BACKEND-GATE-METAL-MLXLM`) | vllm.cpp extension through upstream seam `platforms/interface.py:134-229` | **W0 SKELETON LANDED 2026-07-22.** `vt::Backend` + registrar + allocation registry [metal_backend.mm](../src/vt/metal/metal_backend.mm); runtime-MSL device/library/pipeline context [metal_context.mm](../src/vt/metal/metal_context.mm); embedded MSL [metal_msl.h](../src/vt/metal/metal_msl.h); op encode + `RegisterOp` [metal_ops.mm](../src/vt/metal/metal_ops.mm); `Platform` + registrar [platforms/metal.cpp](../src/vllm/platforms/metal.cpp); CMake tri-state `VLLM_CPP_METAL` (AUTO-on for an Apple host with an ObjC++ compiler). All ADDITIVE — no existing source file changed to enable it. `DeviceType::kMETAL` slot [device.h:16](../include/vt/device.h#L16) needed no edit | **`ACTIVE` MEANS A GATED SKELETON, NOT A SUPPORTED BACKEND — no model runs on Metal.** REGISTERED ops (8): `kAdd` (incl. rank-1 bias broadcast), `kRelu`, `kSiluAndMul`, `kCastBf16`, `kCastF32`, `kLayerNorm`, `kRmsNorm` (incl. in-place residual stream), and ONE `kFusedChain` Tier-1 interpreter — which inherits the whole portable fusion catalog (non-Tier-1 recipes come free via the device-agnostic Tier-0 composite). **2026-07-22 ADDITION — the NATIVE MSL dense GEMM pair `kMatmul`/`kMatmulBT` is now REGISTERED** ([metal_msl.h](../src/vt/metal/metal_msl.h) `vt_matmul`, a threadgroup-tiled f32-accumulating GEMM transcribed from our own CPU `MatmulKernel`/`MatmulBTKernel`; one kernel serves both orientations via a `bt` flag and carries `lda` because `vt::MatmulBT` admits a row-strided activation), taking the registered set to **10**. It exists so the OPTIONAL MLX provider is a CONFIGURATION rather than the only way to get a GEMM here — the seam's premise is two providers of one op coexisting and being A/B-able. **MEASURED vs the CPU oracle on the M4, at real projection widths:** decode-shaped 1x2048x2048 bf16 NMSE 2.80e-06 (`kMatmul`) / 2.76e-06 (`kMatmulBT`); prefill-shaped 32x2048x6144 bf16 2.75e-06 / 2.74e-06; 128x512x512 f32 3.81e-14 / 3.74e-14 — all far inside the NMSE <= 5e-4 bar; no bit-exactness is claimed for a reducing op. **THE MLX PROVIDER IS LANDED, GATED AND DEFAULT-OFF** (`-DVLLM_CPP_MLX=ON -DMLX_ROOT=...`, [metal_mlx_provider.mm](../src/vt/metal/metal_mlx_provider.mm)): inputs are zero-copy via `array::set_data` over our own `MTLBuffer` with a no-op deleter, the OUTPUT is NOT (see the study correction below), `mlx::core::matmul` + an explicit `eval()` is the boundary, and the kernel DECLINES per call (mixed dtypes, row-strided or INTERIOR-pointer activation) and forwards to ours. MLX-vs-CPU NMSE equals the MSL-vs-CPU figure on all six arms and MLX-vs-MSL is 0 on these shapes — recorded as an OBSERVATION, NOT A PROMISE: bit-exactness across providers is explicitly not on offer, and the gate is NMSE. That MLX genuinely COMPUTED (rather than silently declining) is proven by `declines == 0` alongside `last_selected == "mlx"`, which is the Risk-4 failure mode made detectable. **ONE STUDY CORRECTION, MEASURED:** study §5.2 proposed calling `steel_matmul` directly with a pre-bound output; `nm -gU libmlx.dylib` shows `steel_matmul_axpby` is **NOT EXPORTED** by the shipped wheel (only the `get_steel_*_kernel` helpers are), and `Matmul::eval_gpu` re-`set_data`s its output from MLX's allocator anyway, so the output is a host memcpy on unified memory — O(M*N) against an O(M*N*K) GEMM, real, recorded, and never described as zero-copy. **`kPagedAttention` STAYS OURS regardless of MLX** (no paged-KV primitive exists anywhere in MLX, study §5.3). STILL UNREGISTERED/STUBBED: `kPagedAttention`, `kReshapeAndCache`, `kEmbedding`, the entire quant tier and every sampler op (`vt::GetOp` throws; a partial backend is a supported, tested state, `src/vt/ops.cpp:104-111`). `SupportsGraphCapture()` FALSE (`MTLIndirectCommandBuffer` unimplemented); dispatch SYNCHRONOUS (one command buffer per op, commit+wait) — correct, not fast; `get_attn_backend_priority()` deliberately EMPTY (naming a backend with no Metal attention kernel would hand back one whose kernels do not exist). Both the registered AND the stubbed set are asserted as executable facts in [test_metal_backend.cpp](../tests/vt/test_metal_backend.cpp). **EVIDENCE (M4, Apple M4 / macOS 26.5.2 / AppleClang 21):** clean `-Werror` build of the WHOLE tree (lib + all tests) with Metal ON; `test_backend` **7/7 (18/18)** — was 5/7 FAIL before the registrar fix; [test_metal_backend](../tests/vt/test_metal_backend.cpp) **6/6 cases (59/59)**; [test_backend_cross_device](../tests/vt/test_backend_cross_device.cpp) **5/5 cases (73/73)**. **OP NMSE vs the CPU oracle on the same host** (widths 128/100/17 = power-of-two, ragged, sub-simd): `kAdd`/`kAdd`-broadcast/`kRelu` **0 (exact)**; `kSiluAndMul` 2.50e-15; `kRmsNorm` 5.30e-15..1.90e-14; `kRmsNorm` residual stream **0 (exact)**; `kLayerNorm` 3.86e-15..9.95e-15; `kFusedChain` (Tier-0 AND Tier-1) 9.05e-15 — worst case **1.9e-14, eleven orders of magnitude inside the NMSE <= 5e-4 bar**. BIT-EXACT (`memcmp`) for `Copy`/`Memset` and the bf16<->f32 codec including NaN, +-inf, +-0 and 16 exact rounding ties. No bit-exactness is claimed for the reducing ops. Two persistent macOS ctest failures (`test_serve_low_tools`, `test_safetensors`) are PRE-EXISTING platform gaps PROVEN unrelated by a `-DVLLM_CPP_METAL=OFF` A/B on the same tree — Linux-only `os.sched_getaffinity`/`POSIX_FADV_DONTNEED` and `/proc/self/smaps` respectively. **The macOS registrar fix also unblocks `BACKEND-CPU` on macOS.** NOT DONE: GEMM/attention/KV/quant/sampling kernels, async dispatch, graph capture, any model, and any performance number (none is owed until a model runs). **REUSE MAP + FIRST-MODEL COST NOW QUANTIFIED (2026-07-22, [study](specs/metal-mlx-reuse-study.md)):** running **OPT** on Metal needs exactly **9 ops, 6 of them new** (`kEmbedding`, `kMatmulBT`, `kPagedAttention`, `kQkvSplit`, `kReshapeAndCache`, `kGreedyArgmax`) — and all four OPT TUs contain **ZERO** CUDA references, making it the cheapest correct first non-CUDA model; **Qwen3-dense** needs **10 ops, 7 new**, with its entire BF16 forward (`qwen3.cpp:106-231`) already CUDA-free. Weight loading needs **0 OpIds** (host memcpy/transpose only). Seam fixes are **M=4**, one of which was a **REAL PORTABILITY BUG**: `dense_attn_block.h:140,157` selected host-pointer aliasing on `!is_cuda()`, so a Metal/Vulkan run would hand a HOST pointer to a DEVICE kernel — latent only because no model runs on one. **FIXED 2026-07-22** (`!is_cuda()` -> `is_cpu()` in BOTH `ResidentWeight` and `ResidentWeightF32`): host-pointer aliasing is a CPU property, not a not-CUDA property. Behaviour on kCPU and kCUDA is bit-identical, which the unchanged dgx regression set and the 156/156 Linux CPU suite evidence; the three remaining seam fixes (1, 3, 4) are owed at the first Metal model. Corrected counts vs the fan-out spike: CUDA coverage is **74/75** not 73, `vt::Backend` is **6 pure + 18 defaulted** not 6+20/26, raw `kCUDA` comparisons are **54 not 43** plus **13 uncounted `is_cuda()` sites** **=== M3a LANDED 2026-07-22 — THE FIRST MODEL RUNS ON APPLE GPU, AND IT RUNS TOKEN-EXACT. ===** `OPTForCausalLM` (facebook/opt-125m, bf16) generates END TO END through the ordinary engine stack on the M4 and is **STRICT token-exact 6/6 prompts / 96/96 tokens** against the SAME committed dgx-captured vLLM 0.25.0 goldens the CUDA arm is gated on — a DEVICE-INDEPENDENT bar (they are vLLM's tokens, not ours), so Metal met the bar CUDA already met rather than one re-derived on Metal. **FIVE new MSL kernels** took the registered set from 10 to **15 of 75**: `kEmbedding`, `kQkvSplit`, `kReshapeAndCache`, `kPagedAttention`, `kGreedyArgmax` ([metal_msl.h](../src/vt/metal/metal_msl.h), [metal_ops.mm](../src/vt/metal/metal_ops.mm)); each transcribes the per-element math of our own CPU reference and takes only its dispatch shape from llama.cpp. **MEASURED vs the CPU oracle on the same M4:** `kEmbedding`/`kQkvSplit`/`kReshapeAndCache`/`kGreedyArgmax` **BIT-EXACT** (no floating-point reduction => no reordering freedom; argmax reduces but over an order-INDEPENDENT (value, lowest-index) max, pinned by a deliberate two-position tie and an all-equal row); `kPagedAttention` **NMSE 4.99e-13** vs the 5e-4 bar — and bit-exactness is explicitly NOT claimed for it, because the kernel is the algebraically identical ONLINE (flash) softmax where the CPU reference is a materialized 3-pass, i.e. a different reduction order BY CONSTRUCTION. **THE METAL PATH IS PROVEN TO HAVE EXECUTED, NOT INFERRED:** [test_opt_paged_engine.cpp](../tests/vllm/models/test_opt_paged_engine.cpp) asserts `runner().device().type == kMETAL` and, for ALL NINE ops OPT dispatches, `selections > 0` AND `declines == 0` (`kPagedAttention` selections = **1152**); the per-op unit tests additionally NaN-POISON every output buffer so an un-executed kernel cannot pass a numeric check by accident. `last_selected` alone would NOT be proof — a provider can decline INSIDE its kernel and forward down (fan-out spike Risk 4). **SEAM FIXES — the study predicted 4; reality was 3 real, 1 REFUTED, 1 NEW:** item 1 (`model_loader.cpp` hardcoded `GetBackend(kCUDA)`) CONFIRMED and fixed to ask `CurrentPlatform()` — this was the single line keeping every non-NVIDIA accelerator on the CPU reference no matter how complete it was; item 4 (empty `get_attn_backend_priority`) CONFIRMED and fixed to `{"FLASH_ATTN"}` with `FlashAttentionBackend` self-registering for `kMETAL` (a NAME registration only — its host metadata is device-agnostic and the Metal kernels read the same NHD layout), MLA deliberately still unoffered; item 3 (the unguarded `vt/cuda/` include in the runner) **REFUTED BY MEASUREMENT** — declaration-only, it COMPILES AND LINKS in a Metal-only macOS build, so no change was needed or made; and **ONE NEW BUG THE STUDY DID NOT PREDICT** — `runner.cpp:516` gated KV-cache DEVICE RESIDENCY on `is_cuda()`, so on Metal the cache fell into a host `std::vector` and `vt::ReshapeAndCache` was handed a HOST pointer. Same defect CLASS as the `dense_attn_block.h` bug and invisible for the same reason (no test can see it until a model runs on a non-NVIDIA device); fixed to `!is_cpu()`. **NEW SEAM, forced by the above:** `Platform::supports_model_architecture()` (default `true`, so CUDA/CPU are byte-unchanged) — because once `SelectQueue` asks the platform, "which device is this process on" stops being the same question as "which device can run THIS model". Metal's list is exactly `{"OPTForCausalLM"}`; anything else falls back to the CPU reference and runs correctly rather than dying in a kernel bind. **Caught by the macOS regression suite, not by design** — three green tests went red the moment SelectQueue started selecting Metal, and that is recorded as such. **TREE-FRICTION COUNTS RE-JUDGED:** the 54 `kCUDA` / 13 `is_cuda()` counts are accurate but NOT uniform in severity — OPT-on-Metal needed **2 of the 13** changed and **0 of the 5** CUDA includes. The honest headline is not "67 sites to unpick" but "**2 of 13 `is_cuda()` sites encoded *not-NVIDIA means no device memory*, and both were real bugs**". No tree-wide unpicking campaign was started and none is warranted on this evidence. **EVIDENCE:** clean `-Werror` **0 warnings** on a CLEAN FULL macOS rebuild (AppleClang 21, CLT-only, MSL compiled at RUNTIME — there is no offline `metal` compiler on this box); [test_metal_backend](../tests/vt/test_metal_backend.cpp) **12 cases / 18,535 assertions**; full macOS ctest **154/156**, both misses the documented pre-existing platform gaps. (`test_capi` was separately seen failing STANDALONE on macOS and PROVEN pre-existing by building unmodified `origin/main` on the same box and reproducing the identical `CHECK(1 == 2)`; it passes under ctest.) **NOT DONE / NOT CLAIMED: any Metal SPEED number.** The M4 could not be quieted (root LaunchDaemon needs interactive sudo; the desktop aerial wallpaper is the larger contender), so any timing is void under the standing contended-run rule — correctness and speed are separate bars and ONLY CORRECTNESS IS MET. The row therefore stays `ACTIVE`, not `DONE`. Dispatch is still one command buffer per op (commit+wait, work row `M3c`); the GEMM is a plain threadgroup tile loop with no simdgroup-matrix use. **=== M3b LANDED 2026-07-23 — QWEN3-DENSE RUNS ON APPLE GPU, THE SECOND MODEL; FORWARD CORRECT (ORACLE-CONFIRMED NEAR-TIE-ROBUST), NOT STRICT-TOKEN-EXACT (0.6B is ill-posed for strict). ===** `Qwen3ForCausalLM` (Qwen3-0.6B bf16) generates END TO END on the M4. **HONEST STATE — this SUPERSEDES the earlier "SACRED 16/16 strict token-exact / 4 near-ties all at gap-0" claim, which was UNSUBSTANTIATED (the branch test had no teeth; see the RCA + oracle ledger rows).** The Metal forward is a DIFFERENT but equally correct bf16 decoder: on a CLEAN M4 build it diverges from the CUDA golden at 4 first-divergence positions (p0 tok5 = 15344 " Italy" vs 9625 " France"; p5 tok10; p10 tok10; p11 tok1) — a GENUINE bf16 NEAR-TIE, **oracle-confirmed**, NOT a forward bug. **THE DECISIVE MEASUREMENT (vLLM 0.25.0 teacher-forced on the METAL prefix, `scripts/qwen3-neartie-gap.py`, batch=1, gpu_mem_util=0.40, enforce_eager):** every one of the 60 Metal-vs-CUDA divergent positions has Metal's token within **0.5 nats of vLLM's OWN argmax given the Metal prefix — max gap 0.125 nats (worst p5 tok10 / p10 tok12 / p11 tok1 all 0.125), none outside vLLM's top-20**. The France/Italy flip is p0 tok5: metal=15344, and vLLM's teacher-forced argmax on the identical prefix IS **15344 at gap 0.0000** — vLLM contradicts its own CUDA-capture pick of France, the literal near-tie signature. **CUDA is itself build-sensitive at this tie:** the production build (FA2+Marlin+Triton+CUTLASS) resolves p0 tok5 → France 9625; a portable-kernel-only CUDA build resolves it → Italy 15344 (same as Metal), proof it is a numerical near-tie and not a Metal defect. **THE GATE (landed, honest, oracle-backed):** device-appropriate goldens — `our_ids_metal.npy` (the Metal forward's deterministic sequence) + `neartie_gap_mnats_metal.npy` (vLLM teacher-forced on the Metal prefix) — driven through the IDENTICAL gate logic on every device (hard anchor REQUIRE + ≤0.5-nat near-tie band; NO cross-device latitude — Metal gated against Metal's OWN oracle golden, never excused against CUDA's). Metal PASSES **16/16** (10 strict token-exact vs vLLM greedy + 6 near-tie-band, max gap 0.125 nats, 0 forward-divergent). **PROVEN to have teeth:** perturbing the committed Metal anchor (p2 tok0) → hard anchor-drift FAILURE; perturbing a committed gap to 0.6 nats (>0.5 band) → FORWARD-DIVERGENCE band FAILURE; restored → PASS. Per-op correctness stays the NMSE ≤5e-4-vs-CPU proof (RCA, all 28 layers). **STRICT token-exactness on Qwen3-0.6B is ILL-POSED (a near-tie model); a strict Metal gate needs a bigger DETERMINISTIC dense model (Qwen3-4B) — not present on the M4 — DEFERRED.** **THREE new MSL RoPE kernels** took the registered set **15 -> 18 of 75**: `kRopeFromCache` (BIT-EXACT — reads the bf16 cos\|sin cache and only rotates, no reduction/transcendental), `kRopeCosSinCache` and `kRopeNeox` (NMSE bar — Metal has no double, so f32 `pow`/`precise::cos/sin`; measured **0** and **4.07e-15** vs the CPU oracle). **STUDY PREDICTION CORRECTED:** the default path is `VT_QWEN3_ROPE_CACHE`-ON, which dispatches `kRopeCosSinCache` (build the per-step cache) + `kRopeFromCache` (apply it) — not "kRopeFromCache alone"; `kRopeNeox` is the cache-off opt-out. **METAL EXECUTION PROVEN:** device==kMETAL + `selections>0 ∧ declines==0` for all 9 Qwen3-dense ops (`kRopeFromCache`/`kPagedAttention` 7168 each); per-op tests NaN-poison outputs. `Qwen3ForCausalLM` added to `supports_model_architecture`. `test_metal_backend` now **15 cases / 19,331 assertions**, clean `-Werror` 0 warn on the M4; DSR holds 86; Metal TUs `VLLM_CPP_METAL` AUTO->OFF on Linux so the dgx CUDA build is unaffected. The ours-vs-MLX benchmark is now produced (INDICATIVE / BLOCKED-ON-SUDO) — see `BACKEND-GATE-METAL-MLXLM`. **=== S5 REFERENCE TIER (2026-07-23, `CLAIM-BACKEND-SEAM-S5-1`) — Metal is now CORRECT-BY-DEFAULT BEYOND its 18 native kernels. ===** Because Metal is unified memory (StorageModeShared), the S5 portable reference tier ([op_provider.cpp](../src/vt/op_provider.cpp)) installs the CPU kernel as a negative-priority `vt-cpu-ref` fallback on the first `GetOp` miss, so an op Metal lacks a native MSL kernel for runs on the portable CPU reference instead of throwing. **HONEST STATE:** the 18 native MSL kernels remain the FAST path (they always win by priority — Metal's measured numbers above are unchanged); the reference tier only removes the "throw on the first missing op" cliff, so a model needing an op outside the native 18 now RUNS (slowly) rather than not at all. Op count on Metal became a PERFORMANCE budget, not a correctness gate. The Metal OPT run is the hardware form of the S5 zero-native-kernel proof; the hardware-free proof is `test_reference_tier`. Still owed: `M3c` (batched encoders — the named speed lever), `M2r`, `M4`. **=== DISPATCH ATTRIBUTION MEASURED 2026-07-27 — THE BACKEND IS SUBMIT BOUND, NOT KERNEL BOUND, AND THE RECORDED LEVER RANKING WAS WRONG. ===** Instruments has no Metal System Trace without a full Xcode and the M4 has CLT only (`xcrun -f xctrace` -> "not a developer tool"), so the execution trace AGENTS.md requires before any throughput claim did not exist for this backend. It does now: **`VT_METAL_PROFILE`** ([include/vt/metal_profile.h](../include/vt/metal_profile.h), implemented in [metal_ops.mm](../src/vt/metal/metal_ops.mm)) splits every dispatch into HOST encode, submit+wait wall, and REAL GPU busy (`MTLCommandBuffer.GPUEndTime - GPUStartTime`), env-gated (`VT_METAL_PROFILE=1`) with a programmatic switch for tests, costing one relaxed atomic load per dispatch when off. **MEASURED (M4, Qwen3-1.7B-bf16 p=512 g=128 b=1, one binary, arms by `VT_OP_PROVIDER_DISABLE=mlx`, whole series under the GPU lock):** native MSL arm 34.47 s / 3.71 tok/s, **50,944 dispatches**, host encode **0.213 s (0.6%)**, submit+wait **33.882 s = 98.3% of the entire run**, real GPU busy **22.566 s = 66.6% of that wall**, so **11.316 s (33% of the run) is pure round trip**. **THE ROUND-TRIP CONSTANT IS ~186 us**, agreed independently by four near-zero-work kernels as `(wait-gpu)/count`: `vt_rms_norm` 186 us, `vt_silu_and_mul` 195, `vt_reshape_and_cache` 195, `vt_rope_from_cache` 170 — a property of the dispatch model, not of any kernel. **THE SMALL ELEMENTWISE KERNELS ARE ~96% OVERHEAD:** those four are **25,216 of the 50,944 dispatches** and spend **4.69 s of wall for 0.19 s of GPU work** (13.6% of runtime for 0.8% of the GPU's work). **THE CEILING, AND IT IS THE POINT:** ~395 dispatches per decode token x 186 us = **~73 ms/token of pure round trip = a ~13.6 tok/s ceiling WITH INFINITELY FAST KERNELS** (11.4 tok/s at the measured 222 us mean), against MLX-LM's **27.9 tok/s** on the same box and model. **So the competitor floor is unreachable by kernel work alone, and `M3c` is not one lever among several but the PRECONDITION for every other Metal perf lever having anywhere to land.** The M3b narrative naming "`M3c` and a simdgroup GEMM" as co-equal is CORRECTED: the GEMM lever (`vt_matmul` 21,632 dispatches, 26.5 s wait, 20.75 s GPU, 78.3% efficient) is real but its win cannot be OBSERVED end to end while dispatch dominates. **HYPOTHESIS CLOSED, NOT LEFT OPEN:** `GetReferenceTierHits()` is **0** in both arms, so no op is silently running on the S5 portable CPU tier. **MLX ARM IS ONLY PARTIALLY ATTRIBUTED AND IS LABELLED AS SUCH:** MLX-served GEMMs bypass our `Encoder` (`vt_matmul` 21,632 -> 7,168; MLX absorbed exactly 14,464 `kMatmulBT`), leaving **10.08 s of its 20.55 s unaccounted**; closing that is row `M3c-4`. Our-side non-GPU time is still 6.92 s, which is study §5.3's predicted "sync tax" now MEASURED. **EVIDENCE:** [test_metal_backend](../tests/vt/test_metal_backend.cpp) "Metal dispatch profile attributes host encode, wait and GPU busy" (records nothing when off; exactly one row per dispatch when on; pins the `gpu_s <= wait_s` invariant the whole attribution rests on) — suite **18 cases / 19,377 assertions** green on the M4. **STILL INDICATIVE, NOT BINDING** (worker daemon + aerial wallpaper up, no passwordless sudo), though the gpu/wait RATIOS this turns on are far more contention-robust than absolute throughput, both terms being measured inside the same dispatch. Work breakdown `M3c-1`..`M3c-4`, `M3d`, `M5b` in the spec. **=== `M3c-1` LANDED 2026-07-27 — BATCHED COMMAND BUFFERS; THE BACKEND IS NOW COMPUTE BOUND. ===** Dispatches are appended to ONE shared `MTLCommandBuffer`/`MTLComputeCommandEncoder` and committed at a flush point instead of one buffer per op ([metal_ops.mm](../src/vt/metal/metal_ops.mm) `Batch`/`FlushLocked`). Ordering is free inside the encoder because `computeCommandEncoder` is `MTLDispatchTypeSerial`; the HOST is kept from seeing stale bytes by making `Synchronize`/`Copy`/`Memset`/`Free`/`DestroyQueue` flush points ([metal_backend.mm](../src/vt/metal/metal_backend.mm)); and a bind that throws now flushes rather than leaking a half-bound shared encoder into the next op. **NEW SEAM, required for correctness:** `Backend::FlushPending()` (default no-op, [backend.h](../include/vt/backend.h)) called from `GetOp` when the S5 portable CPU tier is the selection ([op_provider.cpp](../src/vt/op_provider.cpp)) — that tier is a HOST kernel about to read and write DEVICE memory, so a deferred submission must drain first. `VT_METAL_SYNC_DISPATCH=1` restores one-buffer-per-op, which is both the spec's required debug mode and the same-binary A/B lever below. **MEASURED (M4, Qwen3-1.7B-bf16 p=512 g=128, SAME binary, arms by `VT_METAL_SYNC_DISPATCH`, 2 reps, arm order alternated, runners paused, whole series under the GPU lock):** b=1 **3.68 -> 5.52 agg tok/s (1.50x)**, 34.79 s -> 23.22 s, TTFT 5369 -> 4937 ms; b=16 **19.12 -> 21.64 agg tok/s (1.13x)**, 107.13 s -> 94.65 s. **Command buffers 50,944 -> 454 at b=1** (112.2 dispatches per commit) and 52,536 -> 469 at b=16. **THE CONTROL THAT MAKES IT A CLEAN RESULT: GPU busy time is UNCHANGED** (22.566 s -> 22.490 s at b=1; 93.957 s -> 93.845 s at b=16), so this removed OVERHEAD, not work — and `gpu_busy_frac_of_wait` moves **66.6% -> 98.4%** (b=1) and **88.4% -> 99.6%** (b=16). **The backend is therefore no longer submit bound; it is compute bound, which promotes `M3d` (simdgroup GEMM) to the next lever exactly as the attribution spec predicted.** The ~11.0 s recovered at b=1 matches the 11.316 s the spec attributed to round trips, which is the prediction confirming the model rather than a new claim. b=16 gains less BECAUSE it was already 88.4% GPU-bound: larger per-dispatch work amortises the fixed ~186 us, which is self-consistent, not a disappointment. **SHIPPING CONFIG (MLX provider + batching), b=1: 9.32 / 9.52 tok/s (13.74 / 13.44 s)** against 6.23 with MLX serial, i.e. the same ~1.5x on top of the GEMM win, narrowing the MLX-LM gap at b=1 from ~4.8x to **~2.96x**. **CORRECTNESS PRECONDITION MET:** the Qwen3-dense Metal gate ran on **device type 2 (METAL)** and passes **128/128** against Metal's own oracle-backed golden; `test_metal_backend` **19 cases / 20,118 assertions**, including three new tests pinning batching (commits==1 for 8 ops + Synchronize), flush-before-host-read, and in-order chaining without intermediate sync. **The OPT gate SKIPPED** (its checkpoint is dgx-only) and is NOT evidence here. **STILL INDICATIVE, NOT BINDING** (worker daemon + wallpaper up), though rep spread was 0.4%. **=== `M3d` LANDED 2026-07-27 — DECODE GEMV, AND THE ROW'S OWN PREMISE WAS WRONG. ===** `M3d` was written as "simdgroup-matrix GEMM". Shape-class profiling after `M3c-1` refuted that: **21,464 of the 21,632 matmuls in a 128-token generation are m=1 decode GEMVs and ALL take the BT orientation**; only **168** are prefill GEMMs, so a simdgroup-matrix kernel would have optimised 0.8% of the dispatches. Implemented instead: `vt_matmul_bt_gemv` ([metal_msl.h](../src/vt/metal/metal_msl.h)) — one simdgroup per output column, streaming the CONTIGUOUS BT weight row fully coalesced, reduced with `simd_sum`. The 16x16 tile kernel wasted 15 of every 16 threadgroup rows at m=1. **MEASURED (same binary, arms by `VT_METAL_NO_GEMV`, 2 reps alternated, under the GPU lock):** b=1 **5.41 -> 10.51 agg tok/s = 1.94x**; b=16 21.55 -> 21.64 = **1.00x, which is an INERTNESS CONTROL rather than a disappointment** — at b=16 the decode m is 16, so the GEMV path is not taken and the numbers SHOULD be identical (21.62 vs 21.64). Batched decode (m=2..16) still runs the tile kernel and is the obvious follow-up. **IT IS ALSO MORE ACCURATE, WHICH IS WHAT FORCED THE GOLDEN RE-CAPTURE:** f32 NMSE vs an f64 oracle **2.68e-14 for the GEMV against 7.40e-13 for the tile kernel, 27x better** (a `simd_sum` tree reduction beats sequential tile accumulation). The bf16 parity arms CANNOT discriminate the two kernels at all — at bf16 output the NMSE is dominated by store rounding (~2.8e-06 for both, identical to six digits) — so an f32 arm was added to the suite precisely to tell a defect from a rounding-order change. **THE SACRED GATE WAS RE-CAPTURED, NOT WEAKENED.** The committed `our_ids_metal.npy` was captured with the LESS accurate tile kernel, so it is kernel-specific and went stale the moment the numerics improved; the gate correctly went red (hard anchor drift p10 tok12). Re-capture followed the documented flow: dump the new Metal sequence on the M4, then **teacher-force vLLM 0.25.0 on dgx** (`qwen3-neartie-gap.py`, oracle venv, run in a SCRATCH dir so the CUDA goldens could not be touched) to regenerate the gaps. **Only 4 of 256 tokens changed, all in prompt 10.** The oracle's verdict on the NEW sequence is BETTER than on the old: **255/256 tokens are vLLM's own argmax (old golden: 253/256)**, mean gap 0.7 vs 1.5 mnats, **0 tokens outside vLLM's top-K**. Gate now **16/16 (10 strict token-exact + 6 near-tie band, max gap 0.188 nats, 0 forward-divergent)** — the same strict/band split as before. **HARNESS FIX REQUIRED TO DO THIS AT ALL:** the anchor `REQUIRE` fired BEFORE the `VT_DUMP_IDS` dump was written, so the documented re-capture was impossible to run; the anchor assertion is now skipped in dump mode ONLY (a dump run writes no golden and asserts nothing). The gate's teeth are unchanged and were demonstrated empirically — it failed on this very change before the re-capture. **EVIDENCE:** `test_metal_backend` **20 cases / 20,125 assertions**, including a test that proves the GEMV actually ROUTED (a numeric check alone cannot: the tile kernel computes the same answer) plus ragged-K and ragged-N arms for the strided reduction tail. `VT_METAL_NO_GEMV=1` is the same-binary A/B lever and the bisect switch. **=== 2-D BLOCKED SIMDGROUP GEMM LANDED 2026-07-27 — PREFILL, +26% END TO END. ===** Re-attribution after `M3c-1`+`M3d` (per-kernel GPU column restored for sync-dispatch runs) found the bottleneck had MOVED: decode GEMV **5,788 ms (50.5%)**, **prefill tile GEMM 3,863 ms (33.7%) from only 168 dispatches**, paged attention 1,627 ms (14.2%), all six other kernels 188 ms (1.6%). Against MLX-LM that split is **prefill ~8.2x slower (3.86 s vs ~0.47 s)** but **decode only ~1.6x (7.4 s vs 4.59 s)** — the opposite of the prior assumption. `vt_matmul_bt_mm` ([metal_msl.h](../src/vt/metal/metal_msl.h)) replaces the 16x16 scalar tile loop for every m > 1: a 32x32 output tile per threadgroup, 4 simdgroups in a 2x2 grid each owning a 2x2 block of `simdgroup_float8x8`, with A and B tiles staged through THREADGROUP memory because `simdgroup_load` needs a typed pointer while our operands carry a runtime dtype code. That staging is also what supplies the A-reuse-across-columns the small-m dead-end proved was the missing property, so ONE kernel serves prefill and batched decode. **MEASURED (isolated same-binary A/B via a new `VT_METAL_NO_MM` lever added so this kernel could be measured independently of the m=1 GEMV; 2 reps, GPU lock, runners idle):** **10.55 -> 13.27 agg tok/s (+26%)**, duration 12.14 -> 9.65 s, **TTFT 4955 -> 2524 ms (halved)** — the prefill win landing exactly where the attribution predicted. **f32 NMSE 1.63e-13** vs the tile kernel's 6.61e-13. **The SACRED gate passed UNCHANGED (16/16, max gap 0.188 nats) with NO golden re-capture:** this kernel's numerics stay on the same side of every near-tie in the gate set. Unit suite **21 cases / 20,134 assertions**, including a ragged 37x333x201 arm that exercises tile edges in M, N and K simultaneously. **Toward the MLX-LM parity goal: 10.5 -> 13.3 of 27.9 tok/s.** Next ranked lever is the decode GEMV (still ~50% of GPU time; per-element dtype switch with scalar loads cannot saturate bandwidth) — anchor `tests/vt/test_metal_backend.cpp:44` | [backend fan-out](specs/backend-fanout-metal-vulkan-xpu.md); **[Metal dispatch attribution](specs/metal-dispatch-attribution.md)**; **[Metal/MLX reuse study + `vt::OpProvider` seam](specs/metal-mlx-reuse-study.md)**; [Platform seam plan](specs/extensibility-platform-seam-2026-07-18.md); [CUDA inventory](specs/cuda-architecture-inventory.md) | `ACTIVE` | `CLAIM-BACKEND-FANOUT-1` | -| `BACKEND-VULKAN` | Vulkan compute backend — portable GPU via ahead-of-time-compiled SPIR-V; llama.cpp `ggml/src/ggml-vulkan/` is the port source (vLLM has NO Vulkan path anywhere) | vllm.cpp extension through upstream seam `platforms/interface.py:134-229`; llama.cpp `ggml/src/ggml-vulkan/ggml-vulkan.cpp` @ `237ad9b96` is the maturity reference AND the cited port source | **W0/V1 SKELETON LANDED 2026-07-22.** `vt::Backend` + registrar + allocation registry [vulkan_backend.cpp](../src/vt/vulkan/vulkan_backend.cpp); dlopen entry-point loader [vulkan_loader.cpp](../src/vt/vulkan/vulkan_loader.cpp); instance/device/queue/memory/pipeline context [vulkan_context.cpp](../src/vt/vulkan/vulkan_context.cpp); GLSL compute shaders [shaders/](../src/vt/vulkan/shaders/) compiled AHEAD OF TIME into the committed [vulkan_spirv.h](../src/vt/vulkan/vulkan_spirv.h) by [gen-vulkan-spirv.py](../scripts/gen-vulkan-spirv.py); op dispatch + `RegisterOp` [vulkan_ops.cpp](../src/vt/vulkan/vulkan_ops.cpp); `Platform` + registrar [platforms/vulkan.cpp](../src/vllm/platforms/vulkan.cpp); vendored Khronos TYPE headers [third_party/vulkan/](../third_party/vulkan/) @ `vulkan-sdk-1.4.328.1` under `VK_NO_PROTOTYPES` (nothing linked); CMake tri-state `VLLM_CPP_VULKAN` whose **AUTO resolves OFF** — deliberately UNLIKE Metal's AUTO, because Vulkan overlaps CUDA on the gate box and auto-enabling a second GPU backend would perturb the CUDA regressions. All ADDITIVE — no existing source file changed to enable it. `DeviceType::kVULKAN` slot [device.h:16](../include/vt/device.h#L16) needed no edit | **`ACTIVE` MEANS A GATED SKELETON, NOT A SUPPORTED BACKEND — no model runs on Vulkan.** REGISTERED ops (8, the SAME set as the Metal skeleton so both are comparable through one harness): `kAdd` (incl. rank-1 bias broadcast), `kRelu`, `kSiluAndMul`, `kCastBf16`, `kCastF32`, `kLayerNorm`, `kRmsNorm` (incl. in-place residual stream), and ONE `kFusedChain` Tier-1 interpreter inheriting the whole portable fusion catalog. UNREGISTERED/STUBBED: `kMatmul`/`kMatmulBT`, `kPagedAttention`, `kReshapeAndCache`, `kEmbedding`, the entire quant tier and every sampler op (`vt::GetOp` throws; a partial backend is a supported, tested state, `src/vt/ops.cpp:104-111`). `SupportsGraphCapture()` FALSE (a pre-recorded `VkCommandBuffer` is the eventual mapping); dispatch SYNCHRONOUS and mutex-serialized (record + submit + fence wait per op) — correct, not fast; no staging path for non-host-visible memory; `get_attn_backend_priority()` deliberately EMPTY. Both the registered AND the stubbed set are asserted as executable facts in [test_vulkan_backend.cpp](../tests/vt/test_vulkan_backend.cpp). **SHADER ROUTE, determined and recorded:** neither box has `glslc`/`glslangValidator`/`libshaderc`, neither has the Vulkan dev package, neither grants sudo, and libshaderc would be a forbidden compiled dep — so unlike llama.cpp (which shells to `glslc` at BUILD time, `ggml-vulkan/CMakeLists.txt:21-31,141-188`) the SPIR-V is COMMITTED (7 modules / 109,436 bytes, glslang **16.4.0**), making the build hermetic with NO shader toolchain anywhere, CI included. **RELAXED-PRECISION KNOBS PINNED:** `1.0/sqrt` instead of llama.cpp's `inversesqrt` (`rms_norm.comp:86`, `norm.comp:39`) — the Vulkan analogue of Metal's `MTLMathModeSafe`; no `RelaxedPrecision` decorations; fp32 float-controls PROBED and reported rather than assumed (llvmpipe: denorm-preserve false, signed-zero/Inf/NaN-preserve true), which cannot move a gated result because the bf16/f16 codecs are integer transcriptions of `src/vt/dtype.cpp`. **EVIDENCE — dev box (`llvmpipe`, Vulkan 1.4, `mesa-vulkan-drivers`, NO GPU):** clean `-Werror` 0 warn; [test_vulkan_backend](../tests/vt/test_vulkan_backend.cpp) **8/8 (82/82)**; [test_backend_cross_device](../tests/vt/test_backend_cross_device.cpp) **5/5 (73/73)**; full CPU+Vulkan ctest **155/156**, the one failure `test_openai_conformance` a known `-j` parallelism flake that PASSES on rerun — **a GPU-FREE CI PATH IS PROVEN**. **EVIDENCE — GB10:** clean CUDA `-Werror` **0 warnings** on BOTH the production (Vulkan-OFF) and Vulkan-ON builds; `test_vulkan_backend` **8/8 (82/82)**; `test_backend_cross_device` **5/5 (144/144)** — DOUBLE the dev-box count because the SAME BINARY compares the CPU oracle against **both CUDA and Vulkan**, the cross-backend gate this row's spike promised; `test_backend` 7/7, `test_platform` 7/7. NOT DONE: GEMM/attention/KV/quant/sampling kernels, coopmat/coopmat2 tactics, async dispatch, graph capture, any model, and any performance number (none is owed until a model runs; llama.cpp's Vulkan backend is the eventual floor, `BACKEND-GATE-VULKAN-LLAMACPP`, still `INVENTORIED`). **=== S5 REFERENCE TIER (2026-07-23, `CLAIM-BACKEND-SEAM-S5-1`) — Vulkan is CORRECT-BY-DEFAULT BEYOND its 8 native kernels ONLY on a UNIFIED-MEMORY Vulkan device (GB10, integrated GPUs). ===** The S5 portable reference tier ([op_provider.cpp](../src/vt/op_provider.cpp)) installs the CPU kernel as a negative-priority `vt-cpu-ref` fallback on the first `GetOp` miss — but its gate is `Backend::UnifiedMemory()`, and `VulkanContext::unified_memory()` is FALSE on a DISCRETE Vulkan GPU, so a discrete Vulkan device NEVER gets a CPU fallback (a host kernel against discrete VRAM is corruption) and still throws on a missing op, exactly as before. On llvmpipe/GB10 (unified) the fallback runs, removing the throw-on-first-missing-op cliff; a discrete-Vulkan staging-copy variant is a later, separately-gated row (audit Risk 8). No model runs on Vulkan yet regardless — anchor `tests/vt/test_vulkan_backend.cpp:46` | [backend fan-out](specs/backend-fanout-metal-vulkan-xpu.md); [Platform seam plan](specs/extensibility-platform-seam-2026-07-18.md); [CUDA inventory](specs/cuda-architecture-inventory.md) | `ACTIVE` | `CLAIM-BACKEND-FANOUT-1` | +| `BACKEND-VULKAN` | Vulkan compute backend — portable GPU via ahead-of-time-compiled SPIR-V; llama.cpp `ggml/src/ggml-vulkan/` is the port source (vLLM has NO Vulkan path anywhere) | vllm.cpp extension through upstream seam `platforms/interface.py:134-229`; llama.cpp `ggml/src/ggml-vulkan/ggml-vulkan.cpp` @ `237ad9b96` is the maturity reference AND the cited port source | **W0/V1 SKELETON LANDED 2026-07-22.** `vt::Backend` + registrar + allocation registry [vulkan_backend.cpp](../src/vt/vulkan/vulkan_backend.cpp); dlopen entry-point loader [vulkan_loader.cpp](../src/vt/vulkan/vulkan_loader.cpp); instance/device/queue/memory/pipeline context [vulkan_context.cpp](../src/vt/vulkan/vulkan_context.cpp); GLSL compute shaders [shaders/](../src/vt/vulkan/shaders/) compiled AHEAD OF TIME into the committed [vulkan_spirv.h](../src/vt/vulkan/vulkan_spirv.h) by [gen-vulkan-spirv.py](../scripts/gen-vulkan-spirv.py); op dispatch + `RegisterOp` [vulkan_ops.cpp](../src/vt/vulkan/vulkan_ops.cpp); `Platform` + registrar [platforms/vulkan.cpp](../src/vllm/platforms/vulkan.cpp); vendored Khronos TYPE headers [third_party/vulkan/](../third_party/vulkan/) @ `vulkan-sdk-1.4.328.1` under `VK_NO_PROTOTYPES` (nothing linked); CMake tri-state `VLLM_CPP_VULKAN` whose **AUTO resolves OFF** — deliberately UNLIKE Metal's AUTO, because Vulkan overlaps CUDA on the gate box and auto-enabling a second GPU backend would perturb the CUDA regressions. All ADDITIVE — no existing source file changed to enable it. `DeviceType::kVULKAN` slot [device.h:16](../include/vt/device.h#L16) needed no edit | **`ACTIVE` MEANS A GATED SKELETON, NOT A SUPPORTED BACKEND — no model runs on Vulkan.** **AMENDED 2026-08-06 (`VK-A1`, [campaign spec](specs/vulkan-full-support.md) §1.1): the claim below that unregistered ops make `vt::GetOp` THROW is FALSE and has been since accelerator-seam row `S5` (`af0b21ba`) gave unified-memory devices the portable reference tier. MEASURED at runtime: of 87 CPU-registered ops, 8 are NATIVE on Vulkan, 79 are served by the reference tier (the CPU kernel, on shared memory — correct and arbitrarily slow), and ZERO throw. `test_vulkan_backend` asserted the throw and had been RED since S5, unseen because `VLLM_CPP_VULKAN=ON` appeared nowhere in `ci.yml`; both are repaired and a `build-test-vulkan` CI leg now runs the suite GPU-free on llvmpipe. Op resolution is NOT an end-to-end claim: `get_attn_backend_priority()` is still EMPTY and no model has been run.** REGISTERED ops (8, the SAME set as the Metal skeleton so both are comparable through one harness): `kAdd` (incl. rank-1 bias broadcast), `kRelu`, `kSiluAndMul`, `kCastBf16`, `kCastF32`, `kLayerNorm`, `kRmsNorm` (incl. in-place residual stream), and ONE `kFusedChain` Tier-1 interpreter inheriting the whole portable fusion catalog. UNREGISTERED/STUBBED: `kMatmul`/`kMatmulBT`, `kPagedAttention`, `kReshapeAndCache`, `kEmbedding`, the entire quant tier and every sampler op (`vt::GetOp` throws; a partial backend is a supported, tested state, `src/vt/ops.cpp:104-111`). `SupportsGraphCapture()` FALSE (a pre-recorded `VkCommandBuffer` is the eventual mapping); dispatch SYNCHRONOUS and mutex-serialized (record + submit + fence wait per op) — correct, not fast; no staging path for non-host-visible memory; `get_attn_backend_priority()` deliberately EMPTY. Both the registered AND the stubbed set are asserted as executable facts in [test_vulkan_backend.cpp](../tests/vt/test_vulkan_backend.cpp). **SHADER ROUTE, determined and recorded:** neither box has `glslc`/`glslangValidator`/`libshaderc`, neither has the Vulkan dev package, neither grants sudo, and libshaderc would be a forbidden compiled dep — so unlike llama.cpp (which shells to `glslc` at BUILD time, `ggml-vulkan/CMakeLists.txt:21-31,141-188`) the SPIR-V is COMMITTED (7 modules / 109,436 bytes, glslang **16.4.0**), making the build hermetic with NO shader toolchain anywhere, CI included. **RELAXED-PRECISION KNOBS PINNED:** `1.0/sqrt` instead of llama.cpp's `inversesqrt` (`rms_norm.comp:86`, `norm.comp:39`) — the Vulkan analogue of Metal's `MTLMathModeSafe`; no `RelaxedPrecision` decorations; fp32 float-controls PROBED and reported rather than assumed (llvmpipe: denorm-preserve false, signed-zero/Inf/NaN-preserve true), which cannot move a gated result because the bf16/f16 codecs are integer transcriptions of `src/vt/dtype.cpp`. **EVIDENCE — dev box (`llvmpipe`, Vulkan 1.4, `mesa-vulkan-drivers`, NO GPU):** clean `-Werror` 0 warn; [test_vulkan_backend](../tests/vt/test_vulkan_backend.cpp) **8/8 (82/82)**; [test_backend_cross_device](../tests/vt/test_backend_cross_device.cpp) **5/5 (73/73)**; full CPU+Vulkan ctest **155/156**, the one failure `test_openai_conformance` a known `-j` parallelism flake that PASSES on rerun — **a GPU-FREE CI PATH IS PROVEN**. **EVIDENCE — GB10:** clean CUDA `-Werror` **0 warnings** on BOTH the production (Vulkan-OFF) and Vulkan-ON builds; `test_vulkan_backend` **8/8 (82/82)**; `test_backend_cross_device` **5/5 (144/144)** — DOUBLE the dev-box count because the SAME BINARY compares the CPU oracle against **both CUDA and Vulkan**, the cross-backend gate this row's spike promised; `test_backend` 7/7, `test_platform` 7/7. NOT DONE: GEMM/attention/KV/quant/sampling kernels, coopmat/coopmat2 tactics, async dispatch, graph capture, any model, and any performance number (none is owed until a model runs; llama.cpp's Vulkan backend is the eventual floor, `BACKEND-GATE-VULKAN-LLAMACPP`, still `INVENTORIED`). **=== S5 REFERENCE TIER (2026-07-23, `CLAIM-BACKEND-SEAM-S5-1`) — Vulkan is CORRECT-BY-DEFAULT BEYOND its 8 native kernels ONLY on a UNIFIED-MEMORY Vulkan device (GB10, integrated GPUs). ===** The S5 portable reference tier ([op_provider.cpp](../src/vt/op_provider.cpp)) installs the CPU kernel as a negative-priority `vt-cpu-ref` fallback on the first `GetOp` miss — but its gate is `Backend::UnifiedMemory()`, and `VulkanContext::unified_memory()` is FALSE on a DISCRETE Vulkan GPU, so a discrete Vulkan device NEVER gets a CPU fallback (a host kernel against discrete VRAM is corruption) and still throws on a missing op, exactly as before. On llvmpipe/GB10 (unified) the fallback runs, removing the throw-on-first-missing-op cliff; a discrete-Vulkan staging-copy variant is a later, separately-gated row (audit Risk 8). No model runs on Vulkan yet regardless — anchor `tests/vt/test_vulkan_backend.cpp:46` | [backend fan-out](specs/backend-fanout-metal-vulkan-xpu.md); [Platform seam plan](specs/extensibility-platform-seam-2026-07-18.md); [CUDA inventory](specs/cuda-architecture-inventory.md) | `ACTIVE` | `CLAIM-BACKEND-FANOUT-1` | | `BACKEND-ANE` | Apple Neural Engine for encoder/pooling/fixed-shape draft classes | vllm.cpp extension through upstream seam `platforms/interface.py:134-229`; not a paged decode backend | Platform seam anchored [interface.h:56](../include/vllm/platforms/interface.h#L56) (a `Platform` subclass; not a paged-decode backend) | - | [Platform seam plan](specs/extensibility-platform-seam-2026-07-18.md); [CUDA inventory](specs/cuda-architecture-inventory.md) | `INVENTORIED` | - | ## Native competitor and performance gates diff --git a/.agents/feature-matrix.md b/.agents/feature-matrix.md index b5fea204..707209d9 100644 --- a/.agents/feature-matrix.md +++ b/.agents/feature-matrix.md @@ -277,7 +277,7 @@ evidence. | `BACKEND-CPU` | production CPU | `PARTIAL` | persistent threadpool + chunked GEMM/row dispatch is 1/3/20-thread bit-identical and TSAN-clean; idle-host performance/RSS gate and compute-in-quant remain open | [backend matrix](backend-matrix.md) | | `BACKEND-ROCM` | ROCm | `INVENTORIED` | source/dispatch spike required; no "one flag" support claim | [backend matrix](backend-matrix.md) | | `BACKEND-MLX` | Apple Metal through MLX | `ACTIVE` | Metal/MLX skeleton ACTIVE: two models (OPT-125m, Qwen3-0.6B) run e2e + pass correctness, native-MSL GEMM, batched command buffers 1.50x (compute-bound at 98%+); optional MLX GEMM provider | [backend matrix](backend-matrix.md) | -| `BACKEND-VULKAN` | Vulkan | `INVENTORIED` | runtime absent | [backend matrix](backend-matrix.md) | +| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | gated skeleton: 8 NATIVE kernels of the CPU backend's 87 registered ops, the other 79 served by the portable reference tier (CPU kernel, unified memory); no model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | | `BACKEND-XPU` | Intel XPU | `INVENTORIED` | loyal upstream-platform port, runtime absent | [backend matrix](backend-matrix.md) | | `BACKEND-ANE` | encoder/pooling accelerator | `INVENTORIED` | specialized CoreML route only | [backend matrix](backend-matrix.md) | diff --git a/.agents/specs/vulkan-full-support.md b/.agents/specs/vulkan-full-support.md index b07bd9bb..6feb5787 100644 --- a/.agents/specs/vulkan-full-support.md +++ b/.agents/specs/vulkan-full-support.md @@ -12,8 +12,18 @@ rows and does NOT re-litigate the landed design; read § V1 landed there first. (verified present locally, 132 `.comp` + 26 `.glsl`). **vLLM has no Vulkan path anywhere**, so this is a recorded extension ([porting-inventory.md](../porting-inventory.md) §9), not a mirror. -**Status:** **PLAN ONLY.** No code, no shader, no build, no benchmark, no model. -No row moves lifecycle state on this change. +**Status:** **`VK-A1` LANDED 2026-08-06** (§6.1). Everything else PLAN ONLY. + +> **CORRECTION, 2026-08-06 — two baseline claims in this spec were WRONG and are +> superseded by §1.1.** This spec stated, from the backend matrix, that Vulkan's +> unregistered ops make `vt::GetOp` THROW and that its op surface is "8 of 83". +> Both are false. Accelerator-seam row `S5` (`af0b21ba`) gave unified-memory +> devices a **portable reference tier**, so a missed `GetOp` installs the CPU +> kernel instead of throwing, and Vulkan is eligible. Measured on the tree: +> **87** CPU-registered ops, **8** native on Vulkan, **79** served by the +> reference tier, **0** throwing. The op-gap arithmetic in §2 (83 − 8 = 75) is +> therefore off by the same four ops; the GROUPING there is still the work, but +> the count of record is 79, not 75. Read §1.1 before quoting any number here. --- @@ -93,7 +103,37 @@ GPU-free CI path**. **Record drift to repair (owned by `VK-A1`).** `feature-matrix.md:280` carries `BACKEND-VULKAN` as `INVENTORIED | runtime absent` while `backend-matrix.md:233` carries it as `ACTIVE` (gated skeleton). Same row, two states. `backend-matrix` -is correct; `feature-matrix` is the stale one. +is correct; `feature-matrix` is the stale one. **REPAIRED 2026-08-06 by `VK-A1`.** + +### 1.1 What `VK-A1` MEASURED, superseding §1 and §2 above + +The op surface was re-counted at RUNTIME (not by grepping `RegisterOp`), on a +Vulkan-ON build, by asking `vt::OpRegistered` and `vt::GetOp` for every `OpId`: + +| | count | +|---|---| +| CPU-registered ops | **87** | +| **NATIVE** on Vulkan | **8** | +| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | +| **ABSENT** (`GetOp` throws) | **0** | + +`vt::ReferenceTierEligible(kVULKAN)` is TRUE — GB10 integrated and llvmpipe both +report unified memory. So **every op the CPU backend has is already reachable on +Vulkan**, and the campaign's real content is moving those 79 off the host, which +is a PERFORMANCE project rather than a make-it-run project. `vt::GetReferenceTierHits()` +is the built-in progress metric: it must reach **0** for a genuinely native run. + +**One honest limit.** Op resolution is not an end-to-end claim. +`VulkanPlatform::get_attn_backend_priority()` is still deliberately EMPTY, so the +attention-backend registry has no Vulkan entry — a separate gate at the platform +seam that `VK-A1` did not test past. No model has been run on Vulkan. + +**Why nobody knew.** `test_vulkan_backend`'s "unimplemented ops throw" assertion +had been RED since `S5` landed. The Metal sibling was updated as Metal work +continued; Vulkan was not, because **`VLLM_CPP_VULKAN=ON` appeared nowhere in +`ci.yml`** — the backend was built on no machine, so its whole suite ran nowhere. +`VK-A1` added the `build-test-vulkan` leg (llvmpipe, GPU-free) so this class of +rot is visible. --- @@ -262,7 +302,7 @@ the umbrella, not a substitute for them. | ID | Sub-project | Blocked by | Deliverable | |---|---|---|---| -| **VK-A1** | **Shader-variant pipeline + record repair** | — | The build/emit strategy for the shader explosion, DECIDED and implemented at 7 shaders. Plus the `feature-matrix.md:280` drift fix | +| **VK-A1** | **Shader-variant pipeline + record repair** | — | **LANDED 2026-08-06 — see §6.1** | | **VK-B** | **Dense bf16 model end to end** (23 ops) | A1 | A small dense model token-exact vs our CUDA backend on GB10, mirroring Metal's `M3a` (OPT-125m, 6/6 prompts / 96/96 tokens) | | **VK-E** | **Competitive harness + `BENCH-VK-LLAMA`** | B | A pinned llama.cpp-Vulkan build on dgx and the first three-column number. **Activates `BACKEND-GATE-VULKAN-LLAMACPP`** | | **VK-A2** | **Async dispatch + command-buffer graph capture** | B, E | `SupportsGraphCapture()` TRUE via pre-recorded `VkCommandBuffer`; submission off the per-op fence-wait. Measured against the E denominator | @@ -273,6 +313,54 @@ the umbrella, not a substitute for them. | **VK-H** | **Attention variants + samplers** (16 ops) | B (samplers), G (attn variants) | **83/83 — closes the op surface** | | **VK-I** | **AMD/RDNA (or Arc) bring-up** | hardware acquisition | The staging path for non-host-visible memory, and the gate re-run where Vulkan actually matters | +### 6.1 `VK-A1` landed — 2026-08-06 (`CLAIM-VULKAN-FULL-1`) + +**DECISION: keep the committed-SPIR-V route; make SPECIALIZATION CONSTANTS the +variant mechanism instead of GLSL `#define`s.** The build still needs no shader +toolchain on any machine. llama.cpp spells a variant as a `#define`, so every +dtype x quant x coopmat-tier combination is a whole new module — 242 +`string_to_spv(` call sites at pin `237ad9b96`, most inside those loops. A +specialization constant is ONE module specialized at pipeline creation, with the +driver eliminating the branches the value kills, so artifact count tracks shader +FILES rather than their cross product. + +| Delivered | Evidence | +|---|---| +| glslang **16.5.0** pinned (`$HOME/tools`, release tarball, nothing linked) | The recorded `16.4.0` **ships no release assets**, so it could never back a CI gate. Committed SPIR-V reproduces **byte-for-byte** under 16.5.0 — proving both that the artifact is what it claims and that the output survives a glslang minor bump | +| CI job `vulkan-spirv-freshness` | Pins the download URL (not a version string — the bytes are stable across versions). **Mutation-proved**: an equivalent rewrite of relu's select turns it RED, reverting turns it green | +| CI job `build-test-vulkan` | GPU-free on llvmpipe; runs the backend gate + cross-device numerics. Closes the hole that let the suite rot | +| SpecId metadata in the module table | Parsed from `OpDecorate SpecId` in the emitted module — glslang exposes no side channel, and a hand-kept list is the duplicate that drifts. `GetPipeline` checks the count, because Vulkan SILENTLY IGNORES an undeclared constantID (wrong numbers, not an error) | +| Specialized pipelines, cache keyed by specialization | `VkSpecializationInfo` built from named locals that outlive `vkCreateComputePipelines` — the escaping-temporary class this project hit twice under CUDA-graph capture | +| `vt_cast` dtype pair = the FIRST variant axis | Was a per-element push-constant branch; now constants 0 and 1. ONE module still serves every (src, dst) pair and the module got **SMALLER**, 109,436 → 109,216 bytes. Gated on the pipeline cache growing by TWO across two pairs — results alone prove nothing, since the defaults are f32→f32 | +| SPIR-V words moved to `vulkan_spirv.cpp` | Header 3,487 → **55 lines**. Adding shaders costs one TU's compile time, not every includer's. A test fails if the arrays reappear in the header | +| Descriptor-pool bug fixed | Pool was sized one set per MODULE; since specialization a module has many pipelines, each allocating a set, so it would have exhausted on the Nth specialization inside `vkAllocateDescriptorSets` | +| Record repaired | `feature-matrix.md:280` `INVENTORIED` → `ACTIVE`; §1.1 supersedes the "GetOp throws / 8 of 83" claims | + +**MEASURED NEGATIVE RESULT — do not retry the workgroup size.** VT_TG is written +down three times (`vt_common.glsl`, each `.comp`'s `local_size_x`, and +`kWorkgroupSize` on the host, which derives the workgroup COUNT from it), exactly +the shape a specialization constant should collapse. It cannot at this target: +`layout(local_size_x_id = 0)` makes glslang emit `ExecutionMode LocalSize 1 1 1` +plus the legacy `BuiltIn WorkgroupSize` vector, because the modern `LocalSizeId` +mode needs SPIR-V 1.2 + `VK_KHR_maintenance4` (core in Vulkan 1.3) and this +backend targets `vulkan1.1` deliberately. On llvmpipe the literal `LocalSize 1` +wins: every workgroup runs ONE thread against a `ceil(n/128)` dispatch, and +cross-device NMSE went from ~1e-14 to **0.99 on `kAdd`**. An A/B isolated it — +keeping the constant and reverting only `local_size_x_id` is fully green. Raising +the target env would raise the device floor and is out of scope. The reasoning is +recorded beside the `#define` in `vt_common.glsl`. + +**Deliberately NOT done:** the `vt::arch_tactics` generalization (§6 question 3). +A tactic registry with exactly one tactic is speculative; it belongs with `VK-C`, +which has a real second tactic to select. + +**Gates:** clean `-Werror` build, Vulkan ON — 0 warnings. `test_vulkan_backend` +10/10 (405 assertions), `test_backend_cross_device` 6/6 (73, including the +bit-exact bf16 codec tier), generator suite 9/9, `--check` green on both generated +files. `CMakeLists.txt`'s tri-state is untouched, so `AUTO` still resolves OFF and +the CUDA gate build is unaffected by construction. **No speed number measured, +claimed or owed.** + ### Why `VK-A1` is first, and why it is not bikeshedding The committed-SPIR-V header is **3,491 lines for 7 modules**. The target surface diff --git a/.agents/state.md b/.agents/state.md index 0fd3a0c4..55b9ae05 100644 --- a/.agents/state.md +++ b/.agents/state.md @@ -39708,3 +39708,80 @@ Box left clean (GPU idle, both locks free, worker down). Evidence: Next: `VK-A1` (shader-variant pipeline + the feature-matrix drift repair), which blocks every shader written after it. + +- **2026-08-06 (later)** — **`VK-A1` LANDED: the Vulkan shader-variant mechanism, + two CI gates, and a corrected baseline (`CLAIM-VULKAN-FULL-1`, row + `BACKEND-VULKAN`, [spec §6.1](specs/vulkan-full-support.md)).** + + **DECISION.** Keep the committed-SPIR-V route (the build needs no shader + toolchain on any machine) but make **specialization constants** the variant + mechanism instead of GLSL `#define`s. llama.cpp spells a variant as a `#define`, + so every dtype x quant x coopmat-tier combination is a separate module — 242 + `string_to_spv(` call sites at pin `237ad9b96`. A specialization constant is ONE + module specialized at pipeline creation, so artifact count tracks shader FILES + rather than their cross product. + + **THE BASELINE IN THE SPEC WAS WRONG, and the gate that should have said so was + RED and invisible.** `test_vulkan_backend` asserted that Vulkan's unimplemented + ops make `vt::GetOp` throw. They have not since accelerator-seam row `S5` + (`af0b21ba`) gave unified-memory devices the portable reference tier; the Metal + sibling was updated as Metal work continued, Vulkan was not, and **nothing could + catch it because `VLLM_CPP_VULKAN=ON` appeared nowhere in `ci.yml`** — the + backend was built on no machine. Re-counted at RUNTIME on a Vulkan-ON build: of + **87** CPU-registered ops, **8** are NATIVE on Vulkan, **79** are served by the + reference tier (CPU kernel against shared memory), and **0** throw. So the + spec's "`GetOp` throws" and "8 of 83" are both superseded, every op a model + needs already resolves, and the campaign's real content is moving those 79 off + the host — a PERFORMANCE project, not a make-it-run one. + `vt::GetReferenceTierHits()` is the progress metric; it must reach 0. + HONEST LIMIT: op resolution is not an end-to-end claim — + `get_attn_backend_priority()` is still EMPTY and no model was run. + + **MEASURED NEGATIVE RESULT — the workgroup size cannot be a specialization + constant at this target, do not retry it.** `VT_TG` is written down three times + (`vt_common.glsl`, each `.comp`'s `local_size_x`, `kWorkgroupSize` on the host, + which derives the workgroup COUNT from it), exactly the shape a specialization + constant should collapse. `layout(local_size_x_id = 0)` makes glslang emit + `ExecutionMode LocalSize 1 1 1` plus the legacy `BuiltIn WorkgroupSize` vector, + because the modern `LocalSizeId` mode needs SPIR-V 1.2 + `VK_KHR_maintenance4` + (core in Vulkan 1.3) and this backend targets `vulkan1.1` deliberately. On + llvmpipe the literal `LocalSize 1` wins: each workgroup runs ONE thread against + a `ceil(n/128)` dispatch, and cross-device NMSE went from ~1e-14 to **0.99 on + `kAdd`**. An A/B isolated it (keep the constant, revert only `local_size_x_id` + → fully green), so specialization constants work and the launch geometry is what + cannot use them. Half-converting would be worse than not converting — a + host-settable `VT_TG` the actual workgroup size does not follow silently + corrupts — so it stays a `#define` with the measurement recorded beside it. + + **Delivered.** glslang **16.5.0** pinned (the recorded `16.4.0` ships NO release + assets, so it could never back a CI gate; the committed SPIR-V reproduces + byte-for-byte under 16.5.0, proving both the artifact's provenance and that the + output survives a minor bump). CI job `vulkan-spirv-freshness`, pinning the + download URL rather than a version string, mutation-proved red-then-green. CI job + `build-test-vulkan`, GPU-free on llvmpipe, running the backend gate and the + cross-device numerics — the hole that let the suite rot. SpecId metadata parsed + from `OpDecorate SpecId` in the emitted module, checked by count in + `GetPipeline` because Vulkan SILENTLY IGNORES an undeclared constantID. + Specialized pipelines with the cache keyed by specialization, the + `VkSpecializationInfo` held in named locals that outlive + `vkCreateComputePipelines`. **`vt_cast`'s dtype pair as the first real variant + axis** — one module still serves every (src, dst) pair and the module got + SMALLER, 109,436 → 109,216 bytes, gated on the pipeline cache growing by TWO + across two pairs. SPIR-V words moved into `vulkan_spirv.cpp`, header 3,487 → 55 + lines. A latent descriptor-pool bug fixed: the pool was sized one set per MODULE, + but since specialization a module has many pipelines each allocating a set. + Record repaired: `feature-matrix.md:280` `INVENTORIED` → `ACTIVE`. + + **Deliberately NOT done:** the `vt::arch_tactics` generalization. A tactic + registry with exactly one tactic is speculative; it belongs with `VK-C`. + + Gates: clean `-Werror` Vulkan-ON build 0 warnings; `test_vulkan_backend` 10/10 + (405 assertions), `test_backend_cross_device` 6/6 (73, incl. the bit-exact bf16 + codec tier), generator suite 9/9, `--check` green on both generated files. + `CMakeLists.txt`'s tri-state untouched, so `AUTO` still resolves OFF and the CUDA + gate build is unaffected by construction. **No speed number measured, claimed or + owed.** + + Next: `VK-B` — but re-scoped by the reference-tier finding. It is no longer + "make a model run"; it is "get the dense path off the host tier", starting with + `get_attn_backend_priority()`, which is the untested platform-seam gate. diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md index ba47d93e..89b6c1a3 100644 --- a/docs/BENCHMARKS.md +++ b/docs/BENCHMARKS.md @@ -304,7 +304,7 @@ built on it rather than keeping the flattering one. | vLLM 0.26 re-benchmark | Pending | Re-run the binding grids on the advanced pin | | MiniMax-H3 FP4 speed (W-FP4a) | **Measured GB10 (`row/H3-FP4-GPU-E2E`).** Marlin W4A16 byte-exact vs bf16; fp4 a memory win, 0.8x bf16/forward. Real-ckpt fp4-resident e2e RUNS (mp4/wav) but frame is a non-scene patch-grid | Render coherence ROOT-CAUSED (#70): VAE fine, DiT latent white. Geometry ladder (PR #74) REFUTES a DiT-math bug: ours==oracle to 8x8+temporal; white=trained-wts. fp4 speed CLOSED. Detail: benchmark-record + spec §8 | | MXFP4 Qwen3-8B (W4A16 Marlin) | **`KERNEL-MARLIN-DENSE-EXEC` x3 (dense-ON default): c1 1.020, c2/c4/c8 0.962/0.966/0.969, GPU mem 2.63x less** (beats #51 1.005/0.925/0.939/0.953 EVERY axis); #44 3/3, 32B-NVFP4A16 6/6; -Werror test-guard fixes x2 | **VT_MARLIN_DENSE default-ON** (+951us). `FLASH-OCCUPANCY` #75: matched-c8 ncu, occupancy IDENTICAL 8.33%; built vLLM's exact flash recipe, matched reg+instr, STILL +10us, gap is ptxas SASS quality, no lever/flip | -| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: no number measured, claimed or owed.** Vulkan registers 8 of the CPU backend's 83 ops and runs no model. The 2026-08-06 campaign spec is PLAN ONLY. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: build llama.cpp `-DGGML_VULKAN=ON` at pin `237ad9b96` on dgx, `llama-bench` on the same GGUF, record three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Blocked by `VK-B` and by `glslc` on the gate box | +| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 8 NATIVE kernels; the other 79 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | | SGLang floor arms | Never ran | Both arms of the SGLang comparison | | cuBLAS invocation-parity guard | CI guard landed (CPU); `kGemvHeuristicAlgos` refactor build-verify owed | `nvcc` rebuild + SACRED gate on dgx | | Ampere consumer (`sm_86`, RTX 3090 class) | **No number owed; no such board here.** 2026-08-06 build-verify: 7/7 FA2 TUs 0-warn, real `sm_86` SASS. [Detail](../.agents/benchmark-record.md) | External RTX 3090 report. Floor is llama.cpp on that card (GGUF, not our Blackwell-only NVFP4 grid) | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 10ab891f..2cbfc2d7 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -206,6 +206,13 @@ CUDA runtime-verified on GB10 (sm_121a), Jetson Thor (sm_110) and Jetson AGX Orin (sm_87). sm_110 is a correctness venue only: CUTLASS has no FP4 tensor-core kernels for it. +Vulkan is a gated skeleton and the ◐ is generous. It has **8 native compute +kernels**; the other 79 ops the CPU backend registers resolve through the portable +reference tier, which runs the CPU kernel against shared memory on a unified +device. That is correct and arbitrarily slow, no model has been run end to end on +it, and no speed number exists or is owed. Build it with `-DVLLM_CPP_VULKAN=ON`; +it is off by default. + ## Serving, API and operations | Feature | vllm.cpp | vLLM | SGLang | llama.cpp | diff --git a/docs/STATUS.md b/docs/STATUS.md index 3bc56b59..b688d031 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -388,8 +388,8 @@ The correctness form and the full D0-D14 measured chronology live in ## Not supported yet LoRA (W1 CPU runtime brick landed — see the capability table; not yet usable -end-to-end), multi-GPU, Vulkan (gated skeleton: 8 of the CPU backend's 83 ops, -no model runs; [campaign](../.agents/specs/vulkan-full-support.md)), and the +end-to-end), multi-GPU, Vulkan (8 native kernels, 79 ops on the CPU tier, no +model run e2e; [campaign](../.agents/specs/vulkan-full-support.md)), and the full tool-calling template surface. **Scale-out / distributed execution is scoped but unbuilt** (spike, 2026-07-28): the engine is single-GPU today (verified — no NCCL / tensor-parallel / process-group code in From e32c5ed38be776e8a6cefd954352b3a08268d51f Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 22:27:46 +0000 Subject: [PATCH 09/17] feat(vulkan): native GEMM, both orientations (kMatmul + kMatmulBT) First VK-B brick: 8 native kernels -> 10, and the first op the reference tier was carrying that a model actually spends its time in. NUMERIC CONTRACT ported from cpu_ops.cpp MatmulChunked (:187-260): one invocation per OUTPUT ELEMENT with the whole K reduction on it, sequential f32 accumulation, rounded once on store. The CPU kernel deliberately never splits a K reduction across threads, so keeping one invocation per element makes the two backends share an accumulation ORDER rather than merely a tolerance. DELIBERATELY NOT TILED. This is the portable correctness tier: no shared-memory blocking, no cooperative matrix. llama.cpp's mul_mm.comp (scalar + coopmat1 by define) and mul_mm_cm2.comp (NV coopmat2) are the performance port and belong to VK-C with its tactic selection -- which needs exactly this as a known-correct same-device A/B reference rather than a rewrite to compare against. ONE MODULE SERVES 54 VARIANTS: three dtypes each for a, b and out, times the two orientations, as specialization constants. Folding the orientation at pipeline creation also removes a per-ELEMENT branch from the inner K loop. llama.cpp spells the same axis as #defines and emits a module per combination; this is the mechanism VK-A1 built, now paying for itself at 54:1. Gated against the CPU oracle at ragged shapes (M=13, K=37, N=9 -- none a multiple of the workgroup size, so a kernel that only handled whole tiles would fail rather than pass on a friendly shape), both orientations separately since MatmulBT is a different indexing path and not a transpose of the same code. Three gates moved and are updated as executable facts rather than loosened: the registered/unregistered op lists, the module count and name table, and the reference-tier probe, which now uses kPagedAttention because kMatmul is no longer a fallback and would not exercise the tier. Clean -Werror build 0 warnings. Vulkan gate 10/10 (417 assertions), cross-device 7/7 (80), generator 9/9, --check green. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- src/vt/vulkan/shaders/vt_matmul.comp | 69 +++++ src/vt/vulkan/vulkan_ops.cpp | 32 +++ src/vt/vulkan/vulkan_spirv.cpp | 351 +++++++++++++++++++++++++ tests/scripts/test_gen_vulkan_spirv.py | 31 ++- tests/vt/test_backend_cross_device.cpp | 59 +++++ tests/vt/test_vulkan_backend.cpp | 36 ++- 6 files changed, 555 insertions(+), 23 deletions(-) create mode 100644 src/vt/vulkan/shaders/vt_matmul.comp diff --git a/src/vt/vulkan/shaders/vt_matmul.comp b/src/vt/vulkan/shaders/vt_matmul.comp new file mode 100644 index 00000000..830e3a7f --- /dev/null +++ b/src/vt/vulkan/shaders/vt_matmul.comp @@ -0,0 +1,69 @@ +#version 450 +// vt::Matmul / vt::MatmulBT — dense f32-accumulating GEMM. +// +// NUMERIC CONTRACT, ported from src/vt/cpu/cpu_ops.cpp MatmulChunked (:187-249): +// one output element per invocation, SEQUENTIAL f32 accumulation over K, rounded +// once on store. The CPU kernel leaves each output element's whole K reduction on +// a single thread for exactly this reason, so keeping one invocation per element +// here makes the two orientations and the two backends share an accumulation +// order rather than merely a tolerance. +// +// DELIBERATELY NOT TILED. This is the portable correctness tier: no shared-memory +// blocking, no cooperative matrix. llama.cpp's mul_mm.comp (466 lines, scalar + +// coopmat1 by define) and mul_mm_cm2.comp (658, NV coopmat2) are the performance +// port, and they belong to work row VK-C together with the tactic selection that +// picks between them. Landing the naive body first is what lets VK-C be an A/B +// against a known-correct reference on the same device instead of a rewrite. +// +// ONE MODULE SERVES 54 VARIANTS: three dtypes each for a, b and out, times the +// two orientations, as SPECIALIZATION CONSTANTS. llama.cpp spells the same axis +// as GLSL #defines and therefore emits a separate SPIR-V module per combination. +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) readonly buffer Ab32 { uint v[]; } A32; +layout(binding = 1) readonly buffer Ab16 { uint16_t v[]; } A16; +layout(binding = 2) readonly buffer Bb32 { uint v[]; } B32; +layout(binding = 3) readonly buffer Bb16 { uint16_t v[]; } B16; +layout(binding = 4) buffer Db32 { uint v[]; } D32; +layout(binding = 5) buffer Db16 { uint16_t v[]; } D16; + +// Storage dtypes, and the ORIENTATION of b. +// VT_MM_BT == 0 : b is [K,N] row-major, b[p*n + j] (vt::Matmul) +// VT_MM_BT == 1 : b is [N,K] row-major, b[j*k + p] (vt::MatmulBT — the +// torch Linear weight layout; see vt::MatmulBT's contract) +// Folding the orientation at pipeline creation removes a per-ELEMENT branch from +// the inner K loop, which is the whole point of specializing it rather than +// passing it in the push block. +layout(constant_id = 0) const uint VT_MM_A_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_MM_B_DT = VT_DT_F32; +layout(constant_id = 2) const uint VT_MM_OUT_DT = VT_DT_F32; +layout(constant_id = 3) const uint VT_MM_BT = 0u; + +layout(push_constant) uniform Params { + uint m; + uint n; + uint k; + uint a_off; + uint b_off; + uint out_off; +} p; + +void main() { + uint gid = gl_GlobalInvocationID.x; + if (gid >= p.m * p.n) { return; } + uint i = gid / p.n; // output row + uint j = gid % p.n; // output column + + uint a_row = i * p.k; + float acc = 0.0; + for (uint q = 0u; q < p.k; ++q) { + float av = VT_LOAD(A32, A16, VT_MM_A_DT, p.a_off, a_row + q); + uint b_idx = VT_MM_BT == 1u ? (j * p.k + q) : (q * p.n + j); + float bv = VT_LOAD(B32, B16, VT_MM_B_DT, p.b_off, b_idx); + acc += av * bv; + } + VT_STORE(D32, D16, VT_MM_OUT_DT, p.out_off, gid, acc); +} diff --git a/src/vt/vulkan/vulkan_ops.cpp b/src/vt/vulkan/vulkan_ops.cpp index 66d3887f..2717c546 100644 --- a/src/vt/vulkan/vulkan_ops.cpp +++ b/src/vt/vulkan/vulkan_ops.cpp @@ -90,6 +90,9 @@ struct UnaryParams { struct CastParams { uint32_t n, a_off, out_off; }; +struct MatmulParams { + uint32_t m, n, k, a_off, b_off, out_off; +}; struct SiluMulParams { uint32_t t, d, x_dt, out_dt, x_off, out_off; }; @@ -309,6 +312,31 @@ void FusedChainKernel(Queue&, Tensor& out, const Tensor& x, const Tensor& weight Go("vt_fused_chain", bind, p, static_cast(t)); } +// cpu_ops.cpp:187-260 MatmulChunked / MatmulKernel / MatmulBTKernel. One +// invocation per OUTPUT ELEMENT with the whole K reduction on it, which is what +// the CPU kernel does too (it deliberately never splits a K reduction across +// threads), so the accumulation ORDER matches rather than merely the tolerance. +// +// The naive body is the portable correctness tier on purpose; the tiled and +// cooperative-matrix ports (llama.cpp mul_mm.comp / mul_mm_cm2.comp) are VK-C, +// which needs exactly this as its same-device A/B reference. +template +void MatmulGeneric(Queue&, Tensor& out, const Tensor& a, const Tensor& b) { + const int64_t m = a.shape[0], k = a.shape[1]; + const int64_t n = kBT ? b.shape[0] : b.shape[1]; + if (m == 0 || n == 0) return; + Binder bind; + const uint32_t a_off = bind.Add(a, "matmul: a"); + const uint32_t b_off = bind.Add(b, "matmul: b"); + const uint32_t out_off = bind.Add(out, "matmul: out"); + // Ascending constantID order: a dtype, b dtype, out dtype, orientation. + const uint32_t spec[4] = {DtypeCode(a.dtype), DtypeCode(b.dtype), DtypeCode(out.dtype), + kBT ? 1u : 0u}; + MatmulParams p{static_cast(m), static_cast(n), static_cast(k), + a_off, b_off, out_off}; + Go("vt_matmul", bind, p, FlatGroupCount(m * n), spec, 4); +} + struct Registrar { Registrar() { // Same guard as the backend registrar: a Vulkan-enabled build on a host with @@ -317,6 +345,10 @@ struct Registrar { if (!VulkanContext::Available()) return; // static_cast against the ops.h aliases ties every kernel signature to the // registration contract at COMPILE time (the cpu_ops.cpp idiom). + RegisterOp(OpId::kMatmul, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&MatmulGeneric))); + RegisterOp(OpId::kMatmulBT, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&MatmulGeneric))); RegisterOp(OpId::kAdd, DeviceType::kVULKAN, reinterpret_cast(static_cast(&AddKernel))); RegisterOp(OpId::kRelu, DeviceType::kVULKAN, diff --git a/src/vt/vulkan/vulkan_spirv.cpp b/src/vt/vulkan/vulkan_spirv.cpp index 6fcba766..2f97c51b 100644 --- a/src/vt/vulkan/vulkan_spirv.cpp +++ b/src/vt/vulkan/vulkan_spirv.cpp @@ -2319,6 +2319,352 @@ constexpr uint32_t kSpv_vt_layer_norm[] = { 0x00000176u, 0x00010038u, }; +constexpr uint32_t kSpv_vt_matmul[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000213u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000155u, + 0x00000005u, 0x00000023u, 0x00000014u, 0x00040047u, 0x0000017fu, 0x00000001u, 0x00000000u, 0x00040047u, + 0x00000184u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000185u, 0x00000002u, 0x00040048u, 0x00000185u, + 0x00000000u, 0x00000018u, 0x00050048u, 0x00000185u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x00000187u, 0x00000018u, 0x00040047u, 0x00000187u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000187u, + 0x00000022u, 0x00000000u, 0x00040047u, 0x00000196u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000197u, + 0x00000002u, 0x00040048u, 0x00000197u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000197u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x00000199u, 0x00000018u, 0x00040047u, 0x00000199u, 0x00000021u, + 0x00000001u, 0x00040047u, 0x00000199u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001aau, 0x00000001u, + 0x00000003u, 0x00040047u, 0x000001beu, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001c3u, 0x00000006u, + 0x00000004u, 0x00030047u, 0x000001c4u, 0x00000002u, 0x00040048u, 0x000001c4u, 0x00000000u, 0x00000018u, + 0x00050048u, 0x000001c4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001c6u, 0x00000018u, + 0x00040047u, 0x000001c6u, 0x00000021u, 0x00000002u, 0x00040047u, 0x000001c6u, 0x00000022u, 0x00000000u, + 0x00040047u, 0x000001d1u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001d2u, 0x00000002u, 0x00040048u, + 0x000001d2u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001d2u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00030047u, 0x000001d4u, 0x00000018u, 0x00040047u, 0x000001d4u, 0x00000021u, 0x00000003u, 0x00040047u, + 0x000001d4u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001ecu, 0x00000001u, 0x00000002u, 0x00040047u, + 0x000001f0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001f1u, 0x00000002u, 0x00050048u, 0x000001f1u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001f3u, 0x00000021u, 0x00000004u, 0x00040047u, + 0x000001f3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001feu, 0x00000006u, 0x00000002u, 0x00030047u, + 0x000001ffu, 0x00000002u, 0x00050048u, 0x000001ffu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x00000201u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000201u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x00000212u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, + 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, + 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, + 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, + 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, + 0x00000007u, 0x00040015u, 0x00000023u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, + 0x00000010u, 0x00020014u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, + 0x00000006u, 0x00000034u, 0x007fffffu, 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, + 0x00000006u, 0x0000003du, 0x00000040u, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, + 0x00000006u, 0x00000043u, 0x00007fffu, 0x0004002bu, 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, + 0x00000006u, 0x00000052u, 0x00008000u, 0x0004002bu, 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, + 0x00000006u, 0x00000059u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, + 0x00000023u, 0x00000066u, 0x0000000du, 0x0004002bu, 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, + 0x00000023u, 0x00000080u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, + 0x00000023u, 0x0000008bu, 0x00000017u, 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, + 0x00000006u, 0x000000a9u, 0x000000ffu, 0x00040020u, 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, + 0x00000023u, 0x000000afu, 0x0000007fu, 0x0004002bu, 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, + 0x00000006u, 0x000000bbu, 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, + 0x00000023u, 0x000000cbu, 0x0000001fu, 0x0004002bu, 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, + 0x00000023u, 0x000000d8u, 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, + 0x00000023u, 0x000000e2u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, + 0x00000006u, 0x00000118u, 0x00001000u, 0x00040017u, 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, + 0x0000014fu, 0x00000001u, 0x0000014eu, 0x0004003bu, 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, + 0x00000151u, 0x00000001u, 0x00000006u, 0x0008001eu, 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, + 0x00000156u, 0x00000157u, 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, 0x00000006u, 0x0004002bu, + 0x00000023u, 0x0000016eu, 0x00000002u, 0x0004002bu, 0x00000008u, 0x00000173u, 0x00000000u, 0x00040032u, + 0x00000006u, 0x0000017fu, 0x00000000u, 0x00060034u, 0x0000002cu, 0x00000180u, 0x000000aau, 0x0000017fu, + 0x00000036u, 0x0003001du, 0x00000184u, 0x00000006u, 0x0003001eu, 0x00000185u, 0x00000184u, 0x00040020u, + 0x00000186u, 0x0000000cu, 0x00000185u, 0x0004003bu, 0x00000186u, 0x00000187u, 0x0000000cu, 0x0004002bu, + 0x00000023u, 0x00000188u, 0x00000003u, 0x00040020u, 0x00000190u, 0x0000000cu, 0x00000006u, 0x00040015u, + 0x00000195u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000196u, 0x00000195u, 0x0003001eu, 0x00000197u, + 0x00000196u, 0x00040020u, 0x00000198u, 0x0000000cu, 0x00000197u, 0x0004003bu, 0x00000198u, 0x00000199u, + 0x0000000cu, 0x00040020u, 0x000001a1u, 0x0000000cu, 0x00000195u, 0x00040032u, 0x00000006u, 0x000001aau, + 0x00000000u, 0x00060034u, 0x0000002cu, 0x000001abu, 0x000000aau, 0x000001aau, 0x00000046u, 0x00040032u, + 0x00000006u, 0x000001beu, 0x00000000u, 0x00060034u, 0x0000002cu, 0x000001bfu, 0x000000aau, 0x000001beu, + 0x00000036u, 0x0003001du, 0x000001c3u, 0x00000006u, 0x0003001eu, 0x000001c4u, 0x000001c3u, 0x00040020u, + 0x000001c5u, 0x0000000cu, 0x000001c4u, 0x0004003bu, 0x000001c5u, 0x000001c6u, 0x0000000cu, 0x0004002bu, + 0x00000023u, 0x000001c7u, 0x00000004u, 0x0003001du, 0x000001d1u, 0x00000195u, 0x0003001eu, 0x000001d2u, + 0x000001d1u, 0x00040020u, 0x000001d3u, 0x0000000cu, 0x000001d2u, 0x0004003bu, 0x000001d3u, 0x000001d4u, + 0x0000000cu, 0x00040032u, 0x00000006u, 0x000001ecu, 0x00000000u, 0x00060034u, 0x0000002cu, 0x000001edu, + 0x000000aau, 0x000001ecu, 0x00000036u, 0x0003001du, 0x000001f0u, 0x00000006u, 0x0003001eu, 0x000001f1u, + 0x000001f0u, 0x00040020u, 0x000001f2u, 0x0000000cu, 0x000001f1u, 0x0004003bu, 0x000001f2u, 0x000001f3u, + 0x0000000cu, 0x0004002bu, 0x00000023u, 0x000001f4u, 0x00000005u, 0x0003001du, 0x000001feu, 0x00000195u, + 0x0003001eu, 0x000001ffu, 0x000001feu, 0x00040020u, 0x00000200u, 0x0000000cu, 0x000001ffu, 0x0004003bu, + 0x00000200u, 0x00000201u, 0x0000000cu, 0x0003002au, 0x0000002cu, 0x0000020du, 0x0004002bu, 0x00000006u, + 0x0000020eu, 0x00000080u, 0x0004001cu, 0x0000020fu, 0x00000008u, 0x0000020eu, 0x00040020u, 0x00000210u, + 0x00000004u, 0x0000020fu, 0x0004003bu, 0x00000210u, 0x00000211u, 0x00000004u, 0x0006002cu, 0x0000014eu, + 0x00000212u, 0x0000020eu, 0x00000046u, 0x00000046u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, + 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000162u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000167u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000016cu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000172u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000174u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000017eu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000181u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a5u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a9u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001acu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001bdu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x000001c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001ddu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001deu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000207u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000209u, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, 0x00000150u, 0x00000036u, + 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, 0x00000153u, 0x0004003du, + 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, 0x00000157u, 0x000000d3u, + 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x00050041u, 0x00000158u, 0x0000015bu, 0x00000157u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x0000015cu, 0x0000015bu, 0x00050084u, 0x00000006u, 0x0000015du, + 0x0000015au, 0x0000015cu, 0x000500aeu, 0x0000002cu, 0x0000015eu, 0x00000154u, 0x0000015du, 0x000300f7u, + 0x00000160u, 0x00000000u, 0x000400fau, 0x0000015eu, 0x0000015fu, 0x00000160u, 0x000200f8u, 0x0000015fu, + 0x000100fdu, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, 0x00000163u, 0x0000014du, 0x00050041u, + 0x00000158u, 0x00000164u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000165u, 0x00000164u, + 0x00050086u, 0x00000006u, 0x00000166u, 0x00000163u, 0x00000165u, 0x0003003eu, 0x00000162u, 0x00000166u, + 0x0004003du, 0x00000006u, 0x00000168u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000169u, 0x00000157u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x0000016au, 0x00000169u, 0x00050089u, 0x00000006u, 0x0000016bu, + 0x00000168u, 0x0000016au, 0x0003003eu, 0x00000167u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016du, + 0x00000162u, 0x00050041u, 0x00000158u, 0x0000016fu, 0x00000157u, 0x0000016eu, 0x0004003du, 0x00000006u, + 0x00000170u, 0x0000016fu, 0x00050084u, 0x00000006u, 0x00000171u, 0x0000016du, 0x00000170u, 0x0003003eu, + 0x0000016cu, 0x00000171u, 0x0003003eu, 0x00000172u, 0x00000173u, 0x0003003eu, 0x00000174u, 0x00000036u, + 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000175u, 0x000400f6u, 0x00000177u, 0x00000178u, 0x00000000u, + 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000179u, 0x0004003du, 0x00000006u, 0x0000017au, 0x00000174u, + 0x00050041u, 0x00000158u, 0x0000017bu, 0x00000157u, 0x0000016eu, 0x0004003du, 0x00000006u, 0x0000017cu, + 0x0000017bu, 0x000500b0u, 0x0000002cu, 0x0000017du, 0x0000017au, 0x0000017cu, 0x000400fau, 0x0000017du, + 0x00000176u, 0x00000177u, 0x000200f8u, 0x00000176u, 0x000300f7u, 0x00000183u, 0x00000000u, 0x000400fau, + 0x00000180u, 0x00000182u, 0x00000194u, 0x000200f8u, 0x00000182u, 0x00050041u, 0x00000158u, 0x00000189u, + 0x00000157u, 0x00000188u, 0x0004003du, 0x00000006u, 0x0000018au, 0x00000189u, 0x000500c2u, 0x00000006u, + 0x0000018bu, 0x0000018au, 0x0000016eu, 0x0004003du, 0x00000006u, 0x0000018cu, 0x0000016cu, 0x0004003du, + 0x00000006u, 0x0000018du, 0x00000174u, 0x00050080u, 0x00000006u, 0x0000018eu, 0x0000018cu, 0x0000018du, + 0x00050080u, 0x00000006u, 0x0000018fu, 0x0000018bu, 0x0000018eu, 0x00060041u, 0x00000190u, 0x00000191u, + 0x00000187u, 0x000000d3u, 0x0000018fu, 0x0004003du, 0x00000006u, 0x00000192u, 0x00000191u, 0x0004007cu, + 0x00000008u, 0x00000193u, 0x00000192u, 0x0003003eu, 0x00000181u, 0x00000193u, 0x000200f9u, 0x00000183u, + 0x000200f8u, 0x00000194u, 0x00050041u, 0x00000158u, 0x0000019au, 0x00000157u, 0x00000188u, 0x0004003du, + 0x00000006u, 0x0000019bu, 0x0000019au, 0x000500c2u, 0x00000006u, 0x0000019cu, 0x0000019bu, 0x00000080u, + 0x0004003du, 0x00000006u, 0x0000019du, 0x0000016cu, 0x0004003du, 0x00000006u, 0x0000019eu, 0x00000174u, + 0x00050080u, 0x00000006u, 0x0000019fu, 0x0000019du, 0x0000019eu, 0x00050080u, 0x00000006u, 0x000001a0u, + 0x0000019cu, 0x0000019fu, 0x00060041u, 0x000001a1u, 0x000001a2u, 0x00000199u, 0x000000d3u, 0x000001a0u, + 0x0004003du, 0x00000195u, 0x000001a3u, 0x000001a2u, 0x00040071u, 0x00000006u, 0x000001a4u, 0x000001a3u, + 0x0003003eu, 0x000001a5u, 0x000001a4u, 0x0003003eu, 0x000001a6u, 0x0000017fu, 0x00060039u, 0x00000008u, + 0x000001a7u, 0x0000001bu, 0x000001a5u, 0x000001a6u, 0x0003003eu, 0x00000181u, 0x000001a7u, 0x000200f9u, + 0x00000183u, 0x000200f8u, 0x00000183u, 0x0004003du, 0x00000008u, 0x000001a8u, 0x00000181u, 0x0003003eu, + 0x0000017eu, 0x000001a8u, 0x000300f7u, 0x000001aeu, 0x00000000u, 0x000400fau, 0x000001abu, 0x000001adu, + 0x000001b5u, 0x000200f8u, 0x000001adu, 0x0004003du, 0x00000006u, 0x000001afu, 0x00000167u, 0x00050041u, + 0x00000158u, 0x000001b0u, 0x00000157u, 0x0000016eu, 0x0004003du, 0x00000006u, 0x000001b1u, 0x000001b0u, + 0x00050084u, 0x00000006u, 0x000001b2u, 0x000001afu, 0x000001b1u, 0x0004003du, 0x00000006u, 0x000001b3u, + 0x00000174u, 0x00050080u, 0x00000006u, 0x000001b4u, 0x000001b2u, 0x000001b3u, 0x0003003eu, 0x000001acu, + 0x000001b4u, 0x000200f9u, 0x000001aeu, 0x000200f8u, 0x000001b5u, 0x0004003du, 0x00000006u, 0x000001b6u, + 0x00000174u, 0x00050041u, 0x00000158u, 0x000001b7u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x000001b8u, 0x000001b7u, 0x00050084u, 0x00000006u, 0x000001b9u, 0x000001b6u, 0x000001b8u, 0x0004003du, + 0x00000006u, 0x000001bau, 0x00000167u, 0x00050080u, 0x00000006u, 0x000001bbu, 0x000001b9u, 0x000001bau, + 0x0003003eu, 0x000001acu, 0x000001bbu, 0x000200f9u, 0x000001aeu, 0x000200f8u, 0x000001aeu, 0x0004003du, + 0x00000006u, 0x000001bcu, 0x000001acu, 0x0003003eu, 0x000001a9u, 0x000001bcu, 0x000300f7u, 0x000001c2u, + 0x00000000u, 0x000400fau, 0x000001bfu, 0x000001c1u, 0x000001d0u, 0x000200f8u, 0x000001c1u, 0x00050041u, + 0x00000158u, 0x000001c8u, 0x00000157u, 0x000001c7u, 0x0004003du, 0x00000006u, 0x000001c9u, 0x000001c8u, + 0x000500c2u, 0x00000006u, 0x000001cau, 0x000001c9u, 0x0000016eu, 0x0004003du, 0x00000006u, 0x000001cbu, + 0x000001a9u, 0x00050080u, 0x00000006u, 0x000001ccu, 0x000001cau, 0x000001cbu, 0x00060041u, 0x00000190u, + 0x000001cdu, 0x000001c6u, 0x000000d3u, 0x000001ccu, 0x0004003du, 0x00000006u, 0x000001ceu, 0x000001cdu, + 0x0004007cu, 0x00000008u, 0x000001cfu, 0x000001ceu, 0x0003003eu, 0x000001c0u, 0x000001cfu, 0x000200f9u, + 0x000001c2u, 0x000200f8u, 0x000001d0u, 0x00050041u, 0x00000158u, 0x000001d5u, 0x00000157u, 0x000001c7u, + 0x0004003du, 0x00000006u, 0x000001d6u, 0x000001d5u, 0x000500c2u, 0x00000006u, 0x000001d7u, 0x000001d6u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x000001d8u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x000001d9u, + 0x000001d7u, 0x000001d8u, 0x00060041u, 0x000001a1u, 0x000001dau, 0x000001d4u, 0x000000d3u, 0x000001d9u, + 0x0004003du, 0x00000195u, 0x000001dbu, 0x000001dau, 0x00040071u, 0x00000006u, 0x000001dcu, 0x000001dbu, + 0x0003003eu, 0x000001ddu, 0x000001dcu, 0x0003003eu, 0x000001deu, 0x000001beu, 0x00060039u, 0x00000008u, + 0x000001dfu, 0x0000001bu, 0x000001ddu, 0x000001deu, 0x0003003eu, 0x000001c0u, 0x000001dfu, 0x000200f9u, + 0x000001c2u, 0x000200f8u, 0x000001c2u, 0x0004003du, 0x00000008u, 0x000001e0u, 0x000001c0u, 0x0003003eu, + 0x000001bdu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001e1u, 0x0000017eu, 0x0004003du, 0x00000008u, + 0x000001e2u, 0x000001bdu, 0x00050085u, 0x00000008u, 0x000001e3u, 0x000001e1u, 0x000001e2u, 0x0004003du, + 0x00000008u, 0x000001e4u, 0x00000172u, 0x00050081u, 0x00000008u, 0x000001e5u, 0x000001e4u, 0x000001e3u, + 0x0003003eu, 0x00000172u, 0x000001e5u, 0x000200f9u, 0x00000178u, 0x000200f8u, 0x00000178u, 0x0004003du, + 0x00000006u, 0x000001e6u, 0x00000174u, 0x00050080u, 0x00000006u, 0x000001e7u, 0x000001e6u, 0x00000080u, + 0x0003003eu, 0x00000174u, 0x000001e7u, 0x000200f9u, 0x00000175u, 0x000200f8u, 0x00000177u, 0x000200f9u, + 0x000001e8u, 0x000200f8u, 0x000001e8u, 0x000400f6u, 0x000001eau, 0x000001ebu, 0x00000000u, 0x000200f9u, + 0x000001e9u, 0x000200f8u, 0x000001e9u, 0x000300f7u, 0x000001efu, 0x00000000u, 0x000400fau, 0x000001edu, + 0x000001eeu, 0x000001fdu, 0x000200f8u, 0x000001eeu, 0x00050041u, 0x00000158u, 0x000001f5u, 0x00000157u, + 0x000001f4u, 0x0004003du, 0x00000006u, 0x000001f6u, 0x000001f5u, 0x000500c2u, 0x00000006u, 0x000001f7u, + 0x000001f6u, 0x0000016eu, 0x0004003du, 0x00000006u, 0x000001f8u, 0x0000014du, 0x00050080u, 0x00000006u, + 0x000001f9u, 0x000001f7u, 0x000001f8u, 0x0004003du, 0x00000008u, 0x000001fau, 0x00000172u, 0x0004007cu, + 0x00000006u, 0x000001fbu, 0x000001fau, 0x00060041u, 0x00000190u, 0x000001fcu, 0x000001f3u, 0x000000d3u, + 0x000001f9u, 0x0003003eu, 0x000001fcu, 0x000001fbu, 0x000200f9u, 0x000001efu, 0x000200f8u, 0x000001fdu, + 0x00050041u, 0x00000158u, 0x00000202u, 0x00000157u, 0x000001f4u, 0x0004003du, 0x00000006u, 0x00000203u, + 0x00000202u, 0x000500c2u, 0x00000006u, 0x00000204u, 0x00000203u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x00000205u, 0x0000014du, 0x00050080u, 0x00000006u, 0x00000206u, 0x00000204u, 0x00000205u, 0x0004003du, + 0x00000008u, 0x00000208u, 0x00000172u, 0x0003003eu, 0x00000207u, 0x00000208u, 0x0003003eu, 0x00000209u, + 0x000001ecu, 0x00060039u, 0x00000006u, 0x0000020au, 0x00000020u, 0x00000207u, 0x00000209u, 0x00040071u, + 0x00000195u, 0x0000020bu, 0x0000020au, 0x00060041u, 0x000001a1u, 0x0000020cu, 0x00000201u, 0x000000d3u, + 0x00000206u, 0x0003003eu, 0x0000020cu, 0x0000020bu, 0x000200f9u, 0x000001efu, 0x000200f8u, 0x000001efu, + 0x000200f9u, 0x000001ebu, 0x000200f8u, 0x000001ebu, 0x000400fau, 0x0000020du, 0x000001e8u, 0x000001eau, + 0x000200f8u, 0x000001eau, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, + 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, + 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, 0x0004007cu, + 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, + 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, 0x00000007u, + 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, 0x0000002au, + 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, 0x000500c7u, + 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, 0x0000002fu, + 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, 0x00000032u, + 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, 0x00000006u, + 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, 0x00000036u, + 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, 0x00000030u, + 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, 0x00000038u, + 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, 0x00000029u, + 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, 0x0000003eu, + 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, 0x000200feu, + 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, 0x000500c2u, + 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, 0x00000045u, + 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, 0x00000042u, + 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, 0x0000004au, + 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, 0x00000006u, + 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, 0x0000003fu, + 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, + 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000050u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005bu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000051u, + 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, 0x00000006u, + 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, 0x00000006u, + 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, 0x000500c7u, + 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, 0x0004003du, + 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, 0x0000005du, + 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, 0x000500aau, + 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, 0x000400fau, + 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, 0x00000063u, + 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, 0x00000006u, + 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, 0x000500c5u, + 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, 0x00000068u, + 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000055u, + 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, 0x00000000u, + 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, 0x00000006u, + 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, 0x000300f7u, + 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, 0x00000071u, + 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, 0x00000073u, + 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, 0x000200f9u, + 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, 0x000200f9u, + 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, 0x000500c7u, + 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, 0x0000007eu, + 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, 0x0004003du, + 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, 0x00000080u, + 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, 0x00050080u, + 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, 0x000200f9u, + 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003du, + 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, 0x0000005du, + 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, 0x0004003du, + 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, 0x00000089u, + 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x0000008du, + 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, 0x00000006u, + 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, 0x0000008fu, + 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, 0x0000006eu, + 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000055u, + 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, 0x00000097u, + 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, 0x0004003du, + 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, 0x00000066u, + 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, 0x0000009cu, + 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, + 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, + 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, 0x00000008u, + 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, 0x0000009fu, + 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a4u, + 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, 0x0003003eu, + 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, 0x00000006u, + 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, 0x000000a9u, + 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, 0x0004007cu, + 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, 0x000000afu, + 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, 0x000000b2u, + 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, 0x000000b4u, + 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, 0x000000a6u, + 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, 0x00000000u, + 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, 0x00000006u, + 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, 0x0004003du, + 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, 0x00000036u, + 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, 0x000200f8u, + 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x000000c4u, + 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, 0x0003003eu, + 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, 0x000000bfu, + 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x000000c7u, + 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, 0x000000c8u, + 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, 0x0000002cu, + 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, 0x000000ccu, + 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, 0x000000a2u, + 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, 0x000200f8u, + 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, 0x000000d4u, + 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, 0x000000d5u, + 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, 0x000500b1u, + 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, 0x000400fau, + 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, 0x000000dcu, + 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, 0x000000dfu, + 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, 0x000000b3u, + 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, 0x000000e4u, + 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, 0x000000e1u, + 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000e8u, + 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, 0x000000e6u, + 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000ecu, + 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, 0x00000006u, + 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, 0x000000eeu, + 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, 0x00050082u, + 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, 0x00000046u, + 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000eau, + 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, 0x000000f4u, + 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, 0x00000000u, + 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, 0x00000006u, + 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, 0x0000002cu, + 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, + 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000e6u, + 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000101u, + 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x0000002cu, + 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, 0x000200f8u, + 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, 0x000000feu, + 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, 0x000200f8u, + 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, 0x00000107u, + 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, 0x000200f8u, + 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, 0x00000109u, + 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, 0x0000010au, + 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, 0x00000006u, + 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, 0x0004003du, + 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, 0x00000066u, + 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, 0x00000112u, + 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, 0x00000114u, + 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000113u, + 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, 0x0000011au, + 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, 0x0000011cu, + 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, 0x0000002cu, + 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, 0x0000011eu, + 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, 0x0000010cu, + 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000123u, + 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, 0x0000002cu, + 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, 0x000200f8u, + 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, 0x00000120u, + 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, 0x000200f8u, + 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, 0x00000129u, + 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, 0x000200f8u, + 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, 0x0000012bu, + 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, 0x0000012cu, + 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, + 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, + 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, 0x0000002cu, + 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, 0x00000130u, + 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, 0x00000019u, + 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, 0x00000134u, + 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, 0x0004003du, + 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, 0x00000008u, + 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, 0x00000133u, + 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, 0x0000013bu, + 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, + 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, + 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, 0x0000002cu, + 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, 0x0000013fu, + 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, 0x0000001eu, + 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, 0x00000143u, + 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, 0x0004003du, + 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, 0x00000006u, + 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, 0x00000142u, + 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, 0x0000014au, + 0x00010038u, +}; + constexpr uint32_t kSpv_vt_relu[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001bfu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -3468,6 +3814,10 @@ constexpr uint32_t kSpecIds_vt_cast[] = { 0u, 1u, }; +constexpr uint32_t kSpecIds_vt_matmul[] = { + 0u, 1u, 2u, 3u, +}; + } // namespace const SpirvModule kSpirvModules[] = { @@ -3475,6 +3825,7 @@ const SpirvModule kSpirvModules[] = { {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t), kSpecIds_vt_cast, 2}, {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t), nullptr, 0}, {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, + {"vt_matmul", kSpv_vt_matmul, sizeof(kSpv_vt_matmul) / sizeof(uint32_t), kSpecIds_vt_matmul, 4}, {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t), nullptr, 0}, {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t), nullptr, 0}, diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py index a17408dd..4f2de61a 100644 --- a/tests/scripts/test_gen_vulkan_spirv.py +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -94,18 +94,29 @@ def test_header_declares_but_does_not_define_the_blobs(self): "in vulkan_spirv.cpp") self.assertTrue("kSpv_vt_cast[]" in source) - def test_vt_cast_declares_its_dtype_pair(self): - """vt_cast is the backend's first variant axis: src and dst dtype. - - One committed module serves every (src, dst) pair, specialized at pipeline + # Shaders that carry a variant axis as specialization constants. Adding to + # this set is a deliberate act: GetPipeline checks the VALUE COUNT against the + # module's declared SpecIds, so a shader listed here without matching values + # at its dispatch fails loudly rather than binding the wrong constant. + SPECIALIZED = { + "vt_cast": "src and dst dtype", + "vt_matmul": "a/b/out dtype plus the b orientation", + } + + def test_specialized_shaders_declare_their_constants(self): + """The declared axes, as a fact. + + One committed module serves every combination, specialized at pipeline creation, instead of llama.cpp's module-per-#define. The workgroup size is deliberately NOT such a constant: local_size_x_id emits LocalSize 1 1 1 at the vulkan1.1 target (see vt_common.glsl). """ source = (ROOT / "src/vt/vulkan/vulkan_spirv.cpp").read_text() - self.assertTrue("kSpecIds_vt_cast[]" in source, - "vt_cast no longer declares specialization constants; " - "re-run scripts/gen-vulkan-spirv.py") + for stem, axis in sorted(self.SPECIALIZED.items()): + with self.subTest(shader=stem, axis=axis): + self.assertTrue(f"kSpecIds_{stem}[]" in source, + f"{stem} no longer declares {axis}; " + f"re-run scripts/gen-vulkan-spirv.py") def test_other_shaders_declare_none_yet(self): """Stated as a fact so the next shader to take a constant flips this test. @@ -115,13 +126,13 @@ def test_other_shaders_declare_none_yet(self): """ source = (ROOT / "src/vt/vulkan/vulkan_spirv.cpp").read_text() for src in sorted((ROOT / "src/vt/vulkan/shaders").glob("*.comp")): - if src.stem == "vt_cast": + if src.stem in self.SPECIALIZED: continue with self.subTest(shader=src.name): self.assertTrue( f"kSpecIds_{src.stem}[]" not in source, - f"{src.name} now declares a specialization constant; update " - f"this test and pass its value at the dispatch") + f"{src.name} now declares a specialization constant; add it to " + f"SPECIALIZED and pass its values at the dispatch") if __name__ == "__main__": diff --git a/tests/vt/test_backend_cross_device.cpp b/tests/vt/test_backend_cross_device.cpp index 28678c9e..3aa298fa 100644 --- a/tests/vt/test_backend_cross_device.cpp +++ b/tests/vt/test_backend_cross_device.cpp @@ -349,6 +349,65 @@ TEST_CASE("elementwise ops match the CPU oracle within NMSE <= 5e-4") { cpu.DestroyQueue(cq); } +TEST_CASE("GEMM matches the CPU oracle within NMSE <= 5e-4, both orientations") { + // Shapes are deliberately RAGGED and not multiples of the workgroup size, so a + // kernel that silently processed only whole tiles would fail rather than pass + // on a friendly shape. K is the reduction length and gets the awkward value. + constexpr int64_t kM = 13; + constexpr int64_t kK = 37; + constexpr int64_t kN = 9; + + const std::vector a = RandomVec(kM * kK, 401); + const std::vector b = RandomVec(kK * kN, 402); // [K,N] for Matmul + const std::vector bt = RandomVec(kN * kK, 403); // [N,K] for MatmulBT + + vt::Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue cq = cpu.CreateQueue(); + const Device cd{DeviceType::kCPU, 0}; + std::vector ca = a, cb = b, cbt = bt; + std::vector ref_mm(kM * kN), ref_mmbt(kM * kN); + { + Tensor ta = T2(ca.data(), cd, kM, kK); + Tensor tb = T2(cb.data(), cd, kK, kN); + Tensor tbt = T2(cbt.data(), cd, kN, kK); + Tensor tmm = T2(ref_mm.data(), cd, kM, kN); + Tensor tmmbt = T2(ref_mmbt.data(), cd, kM, kN); + vt::Matmul(cq, tmm, ta, tb); + vt::MatmulBT(cq, tmmbt, ta, tbt); + } + + for (DeviceType dt : RegisteredDevices()) { + CAPTURE(DeviceName(dt)); + vt::Backend& dev = vt::GetBackend(dt); + Queue q = dev.CreateQueue(); + const Device d{dt, 0}; + + DevBuf da(dev, q, kM * kK), dout(dev, q, kM * kN); + da.Upload(a); + Tensor ta = T2(da.ptr(), d, kM, kK); + Tensor to = T2(dout.ptr(), d, kM, kN); + + if (OpAvailable(vt::OpId::kMatmul, dt)) { + DevBuf db(dev, q, kK * kN); + db.Upload(b); + Tensor tb = T2(db.ptr(), d, kK, kN); + vt::Matmul(q, to, ta, tb); + CHECK(Nmse(ref_mm, dout.Download()) <= kNmseTol); + } + // MatmulBT is a DIFFERENT indexing path (the torch Linear [N,K] weight + // layout), not a transpose of the same code, so it gets its own case. + if (OpAvailable(vt::OpId::kMatmulBT, dt)) { + DevBuf dbt(dev, q, kN * kK); + dbt.Upload(bt); + Tensor tbt = T2(dbt.ptr(), d, kN, kK); + vt::MatmulBT(q, to, ta, tbt); + CHECK(Nmse(ref_mmbt, dout.Download()) <= kNmseTol); + } + dev.DestroyQueue(q); + } + cpu.DestroyQueue(cq); +} + TEST_CASE("row-reducing ops match the CPU oracle within NMSE <= 5e-4") { // Widths chosen to exercise BOTH threadgroup regimes on a GPU: one that is a // clean power of two and one that is not (so the strided row loop has a diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index 9065805a..582cd3a9 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -53,7 +53,7 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // point of the split: at the target shader surface the words must not be // re-parsed by every TU that merely needs the table. const size_t n = vt::vulkan::kSpirvModuleCount; - CHECK(n == 7); + CHECK(n == 8); for (size_t mi = 0; mi < n; ++mi) { const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); @@ -63,8 +63,8 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // The eight registered ops are served by exactly these seven modules (kCastBf16 // and kCastF32 share vt_cast), so a rename in either direction breaks here // rather than at pipeline-creation time on a device we might not have. - for (const char* want : {"vt_add", "vt_cast", "vt_fused_chain", "vt_layer_norm", "vt_relu", - "vt_rms_norm", "vt_silu_and_mul"}) { + for (const char* want : {"vt_add", "vt_cast", "vt_fused_chain", "vt_layer_norm", "vt_matmul", + "vt_relu", "vt_rms_norm", "vt_silu_and_mul"}) { bool found = false; for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { if (std::strcmp(vt::vulkan::kSpirvModules[mi].name, want) == 0) found = true; @@ -100,9 +100,15 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const // reason in src/vt/vulkan/shaders/vt_common.glsl (local_size_x_id emits // LocalSize 1 1 1 at the vulkan1.1 target and computes ~1/128 of the tensor). if (std::strcmp(m.name, "vt_cast") == 0) { - REQUIRE(m.spec_id_count == 2); + REQUIRE(m.spec_id_count == 2); // src dtype, dst dtype CHECK(m.spec_ids[0] == 0u); CHECK(m.spec_ids[1] == 1u); + } else if (std::strcmp(m.name, "vt_matmul") == 0) { + // a dtype, b dtype, out dtype, orientation: 3*3*3*2 = 54 variants served by + // ONE committed module, which is the argument for specialization constants + // over llama.cpp's module-per-#define in miniature. + REQUIRE(m.spec_id_count == 4); + for (uint32_t want = 0; want < 4; ++want) CHECK(m.spec_ids[want] == want); } else { CHECK(m.spec_id_count == 0); } @@ -310,13 +316,14 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // work row cannot quietly claim more than it implements. for (vt::OpId op : {vt::OpId::kAdd, vt::OpId::kRelu, vt::OpId::kSiluAndMul, vt::OpId::kCastBf16, vt::OpId::kCastF32, vt::OpId::kLayerNorm, - vt::OpId::kRmsNorm, vt::OpId::kFusedChain}) { + vt::OpId::kRmsNorm, vt::OpId::kFusedChain, + // VK-B: the dense path's GEMM, both orientations. + vt::OpId::kMatmul, vt::OpId::kMatmulBT}) { CHECK(vt::OpRegistered(op, DeviceType::kVULKAN)); } - // No NATIVE Vulkan kernel yet for GEMM, attention, KV cache, quant, sampling. - for (vt::OpId op : {vt::OpId::kMatmul, vt::OpId::kMatmulBT, vt::OpId::kPagedAttention, - vt::OpId::kReshapeAndCache, vt::OpId::kEmbedding, - vt::OpId::kGreedyArgmax}) { + // No NATIVE Vulkan kernel yet for attention, KV cache, embedding, sampling. + for (vt::OpId op : {vt::OpId::kPagedAttention, vt::OpId::kReshapeAndCache, + vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax}) { CHECK_FALSE(vt::OpRegistered(op, DeviceType::kVULKAN)); } // ...but they no longer THROW, and this assertion used to say they did. @@ -336,11 +343,14 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // Measured on this tree (VK-A1, 2026-08-06): of 87 CPU-registered ops, 8 are // NATIVE on Vulkan, 79 are served by the reference tier, and ZERO throw. REQUIRE(vt::ReferenceTierEligible(DeviceType::kVULKAN)); - void* matmul = nullptr; - CHECK_NOTHROW(matmul = vt::GetOp(vt::OpId::kMatmul, DeviceType::kVULKAN)); - CHECK(matmul != nullptr); + // kPagedAttention, NOT kMatmul: matmul now has a native Vulkan kernel, so it + // would no longer exercise the tier. This op must stay one that is genuinely + // unimplemented, and it moves to the next such op as the backend fills in. + void* paged = nullptr; + CHECK_NOTHROW(paged = vt::GetOp(vt::OpId::kPagedAttention, DeviceType::kVULKAN)); + CHECK(paged != nullptr); // BY NAME, so a host kernel can never masquerade as a native Vulkan one (Risk 7). - const auto stats = vt::GetOpProviderStats(vt::OpId::kMatmul, DeviceType::kVULKAN); + const auto stats = vt::GetOpProviderStats(vt::OpId::kPagedAttention, DeviceType::kVULKAN); REQUIRE(stats.last_selected != nullptr); CHECK(std::string(stats.last_selected) == std::string(vt::kReferenceProviderName)); CHECK(vt::GetReferenceTierHits() > 0); From 3bfa1f127ea8523330268a1151f2f18885831b66 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 22:31:58 +0000 Subject: [PATCH 10/17] feat(vulkan): native embedding gather and greedy argmax The two ends of the model: token ids in, token ids out. 10 native kernels now. EmbeddingKernel (cpu_ops.cpp:661-672) is one output ELEMENT per invocation, with the id width (i32 vs i64, which vt::Embedding accepts both of) as a specialization constant rather than a per-element branch. Only the low 32 bits of an i64 id are read: an id is a vocabulary index that the host already range-checked, so it is far below 2^31, and reconstructing the full value would need VK_KHR_shader_int64 at a 1.1 floor for nothing. The CPU kernel's VT_CHECK on the range has no shader equivalent -- a shader cannot throw and a per-element bounds branch would cost the gather -- but vt::Embedding validates on the host before dispatch, so the error is already caught by the time this runs. GreedyArgmaxKernel (cpu_sample.cpp:40-56) is ONE INVOCATION PER ROW, and that is a contract decision rather than laziness. The CPU scan uses a strict `>` so the FIRST occurrence of the maximum wins; greedy decoding is compared token-for-token against a vLLM golden, so a tie-indifferent tree reduction returns a different token and fails the gate. A parallel reduction has to carry the index and break ties toward the lower one at every merge, which is a separate change with its own gate. Decode rows are few; the vocabulary scan is the slow axis and is left. Both are gated EXACTLY, not by NMSE -- a gather moves bytes and an argmax picks an index. The embedding case uses REPEATED ids (13 twice) so a kernel that consumed ids positionally fails, and covers i32 and i64 separately since they are different index paths. The argmax case plants a DELIBERATE TIE in row 0 at columns 2 and 5 and requires 2, which is what a `>=` or a tie-indifferent reduction would get wrong; the oracle is asserted to honour it first, so the test cannot pass by both sides being wrong together. Binder gains AddU32Only for operands bound through a single view -- integer ids and f32-by-contract logits -- because a descriptor a shader does not declare must not be written. Clean -Werror build 0 warnings. Vulkan gate 10/10 (434 assertions), cross-device 8/8 (88), generator 9/9. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- src/vt/vulkan/shaders/vt_embedding.comp | 58 +++ src/vt/vulkan/shaders/vt_greedy_argmax.comp | 57 +++ src/vt/vulkan/vulkan_ops.cpp | 59 +++ src/vt/vulkan/vulkan_spirv.cpp | 400 ++++++++++++++++++++ tests/scripts/test_gen_vulkan_spirv.py | 1 + tests/vt/test_backend_cross_device.cpp | 107 ++++++ tests/vt/test_vulkan_backend.cpp | 22 +- 7 files changed, 697 insertions(+), 7 deletions(-) create mode 100644 src/vt/vulkan/shaders/vt_embedding.comp create mode 100644 src/vt/vulkan/shaders/vt_greedy_argmax.comp diff --git a/src/vt/vulkan/shaders/vt_embedding.comp b/src/vt/vulkan/shaders/vt_embedding.comp new file mode 100644 index 00000000..b7ff4aa5 --- /dev/null +++ b/src/vt/vulkan/shaders/vt_embedding.comp @@ -0,0 +1,58 @@ +#version 450 +// vt::Embedding — gather rows of the embedding table by token id. +// Ported from src/vt/cpu/cpu_ops.cpp EmbeddingKernel (:661-672): out[i, :] = +// table[ids[i], :], one output ELEMENT per invocation. +// +// ID DTYPE. vt::Embedding accepts i32 or i64 ids (cpu_ops.cpp:665 branches on +// exactly that), so it is specialization constant 2. The ids operand is read +// through the uint32_t view: +// i32 -> word [i] +// i64 -> word [2*i], the LOW half on little-endian +// Reading only the low half is sound because an id is a vocabulary index, which +// the CPU kernel range-checks against `v` and is therefore far below 2^31. Vulkan +// has no 64-bit integer requirement at our 1.1 floor, so reconstructing the full +// value would need VK_KHR_shader_int64 for nothing. +// +// NO RANGE CHECK, deliberately. cpu_ops.cpp:666 VT_CHECKs `0 <= id < v` and +// throws; a shader cannot throw, and a per-element device-side branch would cost +// the whole gather. vt::Embedding validates on the host before dispatch, so an +// out-of-range id is already a caught error by the time this runs. +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) readonly buffer Tb32 { uint v[]; } T32; +layout(binding = 1) readonly buffer Tb16 { uint16_t v[]; } T16; +layout(binding = 2) readonly buffer Ib32 { uint v[]; } I32; +layout(binding = 3) readonly buffer Ib16 { uint16_t v[]; } I16; +layout(binding = 4) buffer Db32 { uint v[]; } D32; +layout(binding = 5) buffer Db16 { uint16_t v[]; } D16; + +#define VT_ID_I32 0u +#define VT_ID_I64 1u + +layout(constant_id = 0) const uint VT_EMB_TABLE_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_EMB_OUT_DT = VT_DT_F32; +layout(constant_id = 2) const uint VT_EMB_ID_DT = VT_ID_I32; + +layout(push_constant) uniform Params { + uint t; // tokens + uint h; // hidden size + uint table_off; + uint ids_off; + uint out_off; +} p; + +void main() { + uint gid = gl_GlobalInvocationID.x; + if (gid >= p.t * p.h) { return; } + uint i = gid / p.h; // token + uint j = gid % p.h; // hidden lane + + uint id_base = p.ids_off >> 2; + uint id = VT_EMB_ID_DT == VT_ID_I64 ? I32.v[id_base + 2u * i] : I32.v[id_base + i]; + + float val = VT_LOAD(T32, T16, VT_EMB_TABLE_DT, p.table_off, id * p.h + j); + VT_STORE(D32, D16, VT_EMB_OUT_DT, p.out_off, gid, val); +} diff --git a/src/vt/vulkan/shaders/vt_greedy_argmax.comp b/src/vt/vulkan/shaders/vt_greedy_argmax.comp new file mode 100644 index 00000000..539d5536 --- /dev/null +++ b/src/vt/vulkan/shaders/vt_greedy_argmax.comp @@ -0,0 +1,57 @@ +#version 450 +// vt::GreedyArgmax — per-row argmax over logits. +// Ported from src/vt/cpu/cpu_sample.cpp GreedyArgmaxKernel (:40-56). +// +// TIE-BREAKING IS THE CONTRACT, not an implementation detail. The CPU kernel +// scans with a STRICT `>` (cpu_sample.cpp:49), so the FIRST occurrence of the +// maximum wins. Greedy decoding is compared token-for-token against a vLLM +// golden, so a different tie-break is a different token and a failed gate, not a +// rounding difference. +// +// ONE INVOCATION PER ROW, scanning the vocabulary sequentially. That is O(V) on a +// single lane and slow for a 150k vocabulary, and it is the correct starting +// point anyway: a parallel tree reduction has to carry the index alongside the +// value AND break ties toward the lower index at every merge step to preserve the +// contract above, which is a separate change with its own gate. Decode rows are +// few (one per sequence), so the row dimension is not where the parallelism is +// missing. +// +// logits are f32 by contract (cpu_sample.cpp:42 reads Ptr), so there is no +// dtype axis here. +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) readonly buffer Lb32 { uint v[]; } L32; +layout(binding = 1) buffer Ob32 { uint v[]; } O32; + +layout(push_constant) uniform Params { + uint n; // rows + uint v; // vocabulary + uint logits_off; + uint out_off; +} p; + +void main() { + uint i = gl_GlobalInvocationID.x; + if (i >= p.n) { return; } + + uint row = (p.logits_off >> 2) + i * p.v; + float best_v = uintBitsToFloat(L32.v[row]); + uint best = 0u; + for (uint j = 1u; j < p.v; ++j) { + float x = uintBitsToFloat(L32.v[row + j]); + if (x > best_v) { // strict `>`: first occurrence of the max wins + best_v = x; + best = j; + } + } + + // token_ids is i64 (cpu_sample.cpp:43 writes Ptr). Write the low word + // and zero the high one: an argmax result is a vocabulary index, non-negative + // and far below 2^31, so no 64-bit integer support is needed at our 1.1 floor. + uint out_base = (p.out_off >> 2) + 2u * i; + O32.v[out_base] = best; + O32.v[out_base + 1u] = 0u; +} diff --git a/src/vt/vulkan/vulkan_ops.cpp b/src/vt/vulkan/vulkan_ops.cpp index 2717c546..dd3c6488 100644 --- a/src/vt/vulkan/vulkan_ops.cpp +++ b/src/vt/vulkan/vulkan_ops.cpp @@ -68,6 +68,19 @@ class Binder { // A raw buffer bound ONCE (no 16-bit view): the fused-chain step list. void AddRaw(void* buffer) { buffers_.push_back(buffer); } + // A tensor bound through the uint32_t view ONLY, for shaders that declare a + // single binding per operand because the operand is integer (embedding ids, + // sampler token ids) or f32-by-contract (logits). Binding the unused 16-bit + // view would need the shader to declare it too, and a descriptor a shader does + // not declare must not be written. + uint32_t AddU32Only(const Tensor& t, const char* what) { + Resolved r = Resolve(t.data, what); + buffers_.push_back(r.buffer); + VT_CHECK(r.offset % 4 == 0, + std::string("vulkan: ") + what + " has a byte offset that is not 4-byte aligned"); + return r.offset; + } + const void* const* data() const { return buffers_.data(); } uint32_t count() const { return static_cast(buffers_.size()); } @@ -93,6 +106,12 @@ struct CastParams { struct MatmulParams { uint32_t m, n, k, a_off, b_off, out_off; }; +struct EmbeddingParams { + uint32_t t, h, table_off, ids_off, out_off; +}; +struct ArgmaxParams { + uint32_t n, v, logits_off, out_off; +}; struct SiluMulParams { uint32_t t, d, x_dt, out_dt, x_off, out_off; }; @@ -337,6 +356,42 @@ void MatmulGeneric(Queue&, Tensor& out, const Tensor& a, const Tensor& b) { Go("vt_matmul", bind, p, FlatGroupCount(m * n), spec, 4); } +// cpu_ops.cpp:661-672 EmbeddingKernel. One output ELEMENT per invocation. +// The id dtype (i32 vs i64) is a specialization constant rather than a +// per-element branch; see the shader for why only the low 32 bits are read. +void EmbeddingKernel(Queue&, Tensor& out, const Tensor& table, const Tensor& ids) { + const int64_t t = ids.shape[0], h = table.shape[1]; + if (t == 0 || h == 0) return; + VT_CHECK(ids.dtype == DType::kI32 || ids.dtype == DType::kI64, + "vulkan embedding: ids must be i32 or i64"); + Binder bind; + const uint32_t table_off = bind.Add(table, "embedding: table"); + const uint32_t ids_off = bind.Add(ids, "embedding: ids"); + const uint32_t out_off = bind.Add(out, "embedding: out"); + const uint32_t spec[3] = {DtypeCode(table.dtype), DtypeCode(out.dtype), + ids.dtype == DType::kI64 ? 1u : 0u}; + EmbeddingParams p{static_cast(t), static_cast(h), table_off, ids_off, + out_off}; + Go("vt_embedding", bind, p, FlatGroupCount(t * h), spec, 3); +} + +// cpu_sample.cpp:40-56 GreedyArgmaxKernel. ONE INVOCATION PER ROW, because the +// tie-break (strict `>`, so the first maximum wins) is part of the token-exact +// contract and a tree reduction would have to carry the index and break ties +// toward the lower one at every merge. Rows are few at decode; the vocabulary +// scan is the slow axis and is deliberately left for a later change. +void GreedyArgmaxKernel(Queue&, Tensor& token_ids, const Tensor& logits) { + const int64_t n = logits.shape[0], v = logits.shape[1]; + if (n == 0 || v == 0) return; + VT_CHECK(logits.dtype == DType::kF32, "vulkan greedy argmax: logits must be f32"); + VT_CHECK(token_ids.dtype == DType::kI64, "vulkan greedy argmax: token_ids must be i64"); + Binder bind; + const uint32_t logits_off = bind.AddU32Only(logits, "argmax: logits"); + const uint32_t out_off = bind.AddU32Only(token_ids, "argmax: token_ids"); + ArgmaxParams p{static_cast(n), static_cast(v), logits_off, out_off}; + Go("vt_greedy_argmax", bind, p, FlatGroupCount(n)); +} + struct Registrar { Registrar() { // Same guard as the backend registrar: a Vulkan-enabled build on a host with @@ -345,6 +400,10 @@ struct Registrar { if (!VulkanContext::Available()) return; // static_cast against the ops.h aliases ties every kernel signature to the // registration contract at COMPILE time (the cpu_ops.cpp idiom). + RegisterOp(OpId::kEmbedding, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&EmbeddingKernel))); + RegisterOp(OpId::kGreedyArgmax, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&GreedyArgmaxKernel))); RegisterOp(OpId::kMatmul, DeviceType::kVULKAN, reinterpret_cast(static_cast(&MatmulGeneric))); RegisterOp(OpId::kMatmulBT, DeviceType::kVULKAN, diff --git a/src/vt/vulkan/vulkan_spirv.cpp b/src/vt/vulkan/vulkan_spirv.cpp index 2f97c51b..8b8cf4c7 100644 --- a/src/vt/vulkan/vulkan_spirv.cpp +++ b/src/vt/vulkan/vulkan_spirv.cpp @@ -638,6 +638,323 @@ constexpr uint32_t kSpv_vt_cast[] = { 0x000200feu, 0x0000014au, 0x00010038u, }; +constexpr uint32_t kSpv_vt_embedding[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001e9u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00040047u, 0x00000173u, + 0x00000001u, 0x00000002u, 0x00040047u, 0x00000178u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000179u, + 0x00000002u, 0x00040048u, 0x00000179u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000179u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x0000017bu, 0x00000018u, 0x00040047u, 0x0000017bu, 0x00000021u, + 0x00000002u, 0x00040047u, 0x0000017bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000018cu, 0x00000001u, + 0x00000000u, 0x00040047u, 0x00000191u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000192u, 0x00000002u, + 0x00040048u, 0x00000192u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000192u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x00000194u, 0x00000018u, 0x00040047u, 0x00000194u, 0x00000021u, 0x00000000u, + 0x00040047u, 0x00000194u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001a4u, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000001a5u, 0x00000002u, 0x00040048u, 0x000001a5u, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000001a5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001a7u, 0x00000018u, 0x00040047u, + 0x000001a7u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001a7u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000001beu, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001c2u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000001c3u, 0x00000002u, 0x00050048u, 0x000001c3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x000001c5u, 0x00000021u, 0x00000004u, 0x00040047u, 0x000001c5u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000001d0u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001d1u, 0x00000002u, 0x00050048u, 0x000001d1u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001d3u, 0x00000021u, 0x00000005u, 0x00040047u, + 0x000001d3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001e4u, 0x0000000bu, 0x00000019u, 0x00040047u, + 0x000001e5u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001e6u, 0x00000002u, 0x00040048u, 0x000001e6u, + 0x00000000u, 0x00000018u, 0x00050048u, 0x000001e6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x000001e8u, 0x00000018u, 0x00040047u, 0x000001e8u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000001e8u, + 0x00000022u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, + 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, + 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, + 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, + 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, + 0x00040015u, 0x00000023u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, + 0x00020014u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, + 0x00000034u, 0x007fffffu, 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, + 0x0000003du, 0x00000040u, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, + 0x00000043u, 0x00007fffu, 0x0004002bu, 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, + 0x00000052u, 0x00008000u, 0x0004002bu, 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, + 0x00000059u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, + 0x00000066u, 0x0000000du, 0x0004002bu, 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, + 0x00000080u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, + 0x0000008bu, 0x00000017u, 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, + 0x000000a9u, 0x000000ffu, 0x00040020u, 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, + 0x000000afu, 0x0000007fu, 0x0004002bu, 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, + 0x000000bbu, 0x00007c00u, 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, + 0x000000cbu, 0x0000001fu, 0x0004002bu, 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, + 0x000000d8u, 0xfffffff6u, 0x0004002bu, 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, + 0x000000e2u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, + 0x00000118u, 0x00001000u, 0x00040017u, 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, + 0x00000001u, 0x0000014eu, 0x0004003bu, 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, + 0x00000001u, 0x00000006u, 0x0007001eu, 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, + 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000023u, 0x0000016du, + 0x00000003u, 0x0004002bu, 0x00000023u, 0x00000170u, 0x00000002u, 0x00040032u, 0x00000006u, 0x00000173u, + 0x00000000u, 0x00060034u, 0x0000002cu, 0x00000174u, 0x000000aau, 0x00000173u, 0x00000046u, 0x0003001du, + 0x00000178u, 0x00000006u, 0x0003001eu, 0x00000179u, 0x00000178u, 0x00040020u, 0x0000017au, 0x0000000cu, + 0x00000179u, 0x0004003bu, 0x0000017au, 0x0000017bu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x0000017du, + 0x00000002u, 0x00040020u, 0x00000181u, 0x0000000cu, 0x00000006u, 0x00040032u, 0x00000006u, 0x0000018cu, + 0x00000000u, 0x00060034u, 0x0000002cu, 0x0000018du, 0x000000aau, 0x0000018cu, 0x00000036u, 0x0003001du, + 0x00000191u, 0x00000006u, 0x0003001eu, 0x00000192u, 0x00000191u, 0x00040020u, 0x00000193u, 0x0000000cu, + 0x00000192u, 0x0004003bu, 0x00000193u, 0x00000194u, 0x0000000cu, 0x00040015u, 0x000001a3u, 0x00000010u, + 0x00000000u, 0x0003001du, 0x000001a4u, 0x000001a3u, 0x0003001eu, 0x000001a5u, 0x000001a4u, 0x00040020u, + 0x000001a6u, 0x0000000cu, 0x000001a5u, 0x0004003bu, 0x000001a6u, 0x000001a7u, 0x0000000cu, 0x00040020u, + 0x000001b2u, 0x0000000cu, 0x000001a3u, 0x00040032u, 0x00000006u, 0x000001beu, 0x00000000u, 0x00060034u, + 0x0000002cu, 0x000001bfu, 0x000000aau, 0x000001beu, 0x00000036u, 0x0003001du, 0x000001c2u, 0x00000006u, + 0x0003001eu, 0x000001c3u, 0x000001c2u, 0x00040020u, 0x000001c4u, 0x0000000cu, 0x000001c3u, 0x0004003bu, + 0x000001c4u, 0x000001c5u, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x000001c6u, 0x00000004u, 0x0003001du, + 0x000001d0u, 0x000001a3u, 0x0003001eu, 0x000001d1u, 0x000001d0u, 0x00040020u, 0x000001d2u, 0x0000000cu, + 0x000001d1u, 0x0004003bu, 0x000001d2u, 0x000001d3u, 0x0000000cu, 0x0003002au, 0x0000002cu, 0x000001dfu, + 0x0004002bu, 0x00000006u, 0x000001e0u, 0x00000080u, 0x0004001cu, 0x000001e1u, 0x00000008u, 0x000001e0u, + 0x00040020u, 0x000001e2u, 0x00000004u, 0x000001e1u, 0x0004003bu, 0x000001e2u, 0x000001e3u, 0x00000004u, + 0x0006002cu, 0x0000014eu, 0x000001e4u, 0x000001e0u, 0x00000046u, 0x00000046u, 0x0003001du, 0x000001e5u, + 0x000001a3u, 0x0003001eu, 0x000001e6u, 0x000001e5u, 0x00040020u, 0x000001e7u, 0x0000000cu, 0x000001e6u, + 0x0004003bu, 0x000001e7u, 0x000001e8u, 0x0000000cu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, + 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000162u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000167u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000016cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000172u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000175u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000018bu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x0000018eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b6u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001b7u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001d9u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001dbu, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, 0x00000150u, 0x00000036u, + 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, 0x00000153u, 0x0004003du, + 0x00000006u, 0x00000154u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000159u, 0x00000157u, 0x000000d3u, + 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, 0x00050041u, 0x00000158u, 0x0000015bu, 0x00000157u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x0000015cu, 0x0000015bu, 0x00050084u, 0x00000006u, 0x0000015du, + 0x0000015au, 0x0000015cu, 0x000500aeu, 0x0000002cu, 0x0000015eu, 0x00000154u, 0x0000015du, 0x000300f7u, + 0x00000160u, 0x00000000u, 0x000400fau, 0x0000015eu, 0x0000015fu, 0x00000160u, 0x000200f8u, 0x0000015fu, + 0x000100fdu, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, 0x00000163u, 0x0000014du, 0x00050041u, + 0x00000158u, 0x00000164u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000165u, 0x00000164u, + 0x00050086u, 0x00000006u, 0x00000166u, 0x00000163u, 0x00000165u, 0x0003003eu, 0x00000162u, 0x00000166u, + 0x0004003du, 0x00000006u, 0x00000168u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000169u, 0x00000157u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x0000016au, 0x00000169u, 0x00050089u, 0x00000006u, 0x0000016bu, + 0x00000168u, 0x0000016au, 0x0003003eu, 0x00000167u, 0x0000016bu, 0x00050041u, 0x00000158u, 0x0000016eu, + 0x00000157u, 0x0000016du, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000016eu, 0x000500c2u, 0x00000006u, + 0x00000171u, 0x0000016fu, 0x00000170u, 0x0003003eu, 0x0000016cu, 0x00000171u, 0x000300f7u, 0x00000177u, + 0x00000000u, 0x000400fau, 0x00000174u, 0x00000176u, 0x00000184u, 0x000200f8u, 0x00000176u, 0x0004003du, + 0x00000006u, 0x0000017cu, 0x0000016cu, 0x0004003du, 0x00000006u, 0x0000017eu, 0x00000162u, 0x00050084u, + 0x00000006u, 0x0000017fu, 0x0000017du, 0x0000017eu, 0x00050080u, 0x00000006u, 0x00000180u, 0x0000017cu, + 0x0000017fu, 0x00060041u, 0x00000181u, 0x00000182u, 0x0000017bu, 0x000000d3u, 0x00000180u, 0x0004003du, + 0x00000006u, 0x00000183u, 0x00000182u, 0x0003003eu, 0x00000175u, 0x00000183u, 0x000200f9u, 0x00000177u, + 0x000200f8u, 0x00000184u, 0x0004003du, 0x00000006u, 0x00000185u, 0x0000016cu, 0x0004003du, 0x00000006u, + 0x00000186u, 0x00000162u, 0x00050080u, 0x00000006u, 0x00000187u, 0x00000185u, 0x00000186u, 0x00060041u, + 0x00000181u, 0x00000188u, 0x0000017bu, 0x000000d3u, 0x00000187u, 0x0004003du, 0x00000006u, 0x00000189u, + 0x00000188u, 0x0003003eu, 0x00000175u, 0x00000189u, 0x000200f9u, 0x00000177u, 0x000200f8u, 0x00000177u, + 0x0004003du, 0x00000006u, 0x0000018au, 0x00000175u, 0x0003003eu, 0x00000172u, 0x0000018au, 0x000300f7u, + 0x00000190u, 0x00000000u, 0x000400fau, 0x0000018du, 0x0000018fu, 0x000001a2u, 0x000200f8u, 0x0000018fu, + 0x00050041u, 0x00000158u, 0x00000195u, 0x00000157u, 0x00000170u, 0x0004003du, 0x00000006u, 0x00000196u, + 0x00000195u, 0x000500c2u, 0x00000006u, 0x00000197u, 0x00000196u, 0x00000170u, 0x0004003du, 0x00000006u, + 0x00000198u, 0x00000172u, 0x00050041u, 0x00000158u, 0x00000199u, 0x00000157u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x0000019au, 0x00000199u, 0x00050084u, 0x00000006u, 0x0000019bu, 0x00000198u, 0x0000019au, + 0x0004003du, 0x00000006u, 0x0000019cu, 0x00000167u, 0x00050080u, 0x00000006u, 0x0000019du, 0x0000019bu, + 0x0000019cu, 0x00050080u, 0x00000006u, 0x0000019eu, 0x00000197u, 0x0000019du, 0x00060041u, 0x00000181u, + 0x0000019fu, 0x00000194u, 0x000000d3u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x000001a0u, 0x0000019fu, + 0x0004007cu, 0x00000008u, 0x000001a1u, 0x000001a0u, 0x0003003eu, 0x0000018eu, 0x000001a1u, 0x000200f9u, + 0x00000190u, 0x000200f8u, 0x000001a2u, 0x00050041u, 0x00000158u, 0x000001a8u, 0x00000157u, 0x00000170u, + 0x0004003du, 0x00000006u, 0x000001a9u, 0x000001a8u, 0x000500c2u, 0x00000006u, 0x000001aau, 0x000001a9u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x000001abu, 0x00000172u, 0x00050041u, 0x00000158u, 0x000001acu, + 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001adu, 0x000001acu, 0x00050084u, 0x00000006u, + 0x000001aeu, 0x000001abu, 0x000001adu, 0x0004003du, 0x00000006u, 0x000001afu, 0x00000167u, 0x00050080u, + 0x00000006u, 0x000001b0u, 0x000001aeu, 0x000001afu, 0x00050080u, 0x00000006u, 0x000001b1u, 0x000001aau, + 0x000001b0u, 0x00060041u, 0x000001b2u, 0x000001b3u, 0x000001a7u, 0x000000d3u, 0x000001b1u, 0x0004003du, + 0x000001a3u, 0x000001b4u, 0x000001b3u, 0x00040071u, 0x00000006u, 0x000001b5u, 0x000001b4u, 0x0003003eu, + 0x000001b6u, 0x000001b5u, 0x0003003eu, 0x000001b7u, 0x0000018cu, 0x00060039u, 0x00000008u, 0x000001b8u, + 0x0000001bu, 0x000001b6u, 0x000001b7u, 0x0003003eu, 0x0000018eu, 0x000001b8u, 0x000200f9u, 0x00000190u, + 0x000200f8u, 0x00000190u, 0x0004003du, 0x00000008u, 0x000001b9u, 0x0000018eu, 0x0003003eu, 0x0000018bu, + 0x000001b9u, 0x000200f9u, 0x000001bau, 0x000200f8u, 0x000001bau, 0x000400f6u, 0x000001bcu, 0x000001bdu, + 0x00000000u, 0x000200f9u, 0x000001bbu, 0x000200f8u, 0x000001bbu, 0x000300f7u, 0x000001c1u, 0x00000000u, + 0x000400fau, 0x000001bfu, 0x000001c0u, 0x000001cfu, 0x000200f8u, 0x000001c0u, 0x00050041u, 0x00000158u, + 0x000001c7u, 0x00000157u, 0x000001c6u, 0x0004003du, 0x00000006u, 0x000001c8u, 0x000001c7u, 0x000500c2u, + 0x00000006u, 0x000001c9u, 0x000001c8u, 0x00000170u, 0x0004003du, 0x00000006u, 0x000001cau, 0x0000014du, + 0x00050080u, 0x00000006u, 0x000001cbu, 0x000001c9u, 0x000001cau, 0x0004003du, 0x00000008u, 0x000001ccu, + 0x0000018bu, 0x0004007cu, 0x00000006u, 0x000001cdu, 0x000001ccu, 0x00060041u, 0x00000181u, 0x000001ceu, + 0x000001c5u, 0x000000d3u, 0x000001cbu, 0x0003003eu, 0x000001ceu, 0x000001cdu, 0x000200f9u, 0x000001c1u, + 0x000200f8u, 0x000001cfu, 0x00050041u, 0x00000158u, 0x000001d4u, 0x00000157u, 0x000001c6u, 0x0004003du, + 0x00000006u, 0x000001d5u, 0x000001d4u, 0x000500c2u, 0x00000006u, 0x000001d6u, 0x000001d5u, 0x00000080u, + 0x0004003du, 0x00000006u, 0x000001d7u, 0x0000014du, 0x00050080u, 0x00000006u, 0x000001d8u, 0x000001d6u, + 0x000001d7u, 0x0004003du, 0x00000008u, 0x000001dau, 0x0000018bu, 0x0003003eu, 0x000001d9u, 0x000001dau, + 0x0003003eu, 0x000001dbu, 0x000001beu, 0x00060039u, 0x00000006u, 0x000001dcu, 0x00000020u, 0x000001d9u, + 0x000001dbu, 0x00040071u, 0x000001a3u, 0x000001ddu, 0x000001dcu, 0x00060041u, 0x000001b2u, 0x000001deu, + 0x000001d3u, 0x000000d3u, 0x000001d8u, 0x0003003eu, 0x000001deu, 0x000001ddu, 0x000200f9u, 0x000001c1u, + 0x000200f8u, 0x000001c1u, 0x000200f9u, 0x000001bdu, 0x000200f8u, 0x000001bdu, 0x000400fau, 0x000001dfu, + 0x000001bau, 0x000001bcu, 0x000200f8u, 0x000001bcu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, + 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, + 0x0004003du, 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, + 0x00000024u, 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, + 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000042u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, + 0x0000002bu, 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, + 0x00000029u, 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, + 0x00000030u, 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, + 0x00000031u, 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, + 0x000500c7u, 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, + 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, + 0x00000038u, 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, + 0x000400fau, 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, + 0x0000003bu, 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, + 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, + 0x0000003fu, 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, + 0x00000029u, 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, + 0x00000047u, 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, + 0x0003003eu, 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, + 0x00000006u, 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, + 0x000500c2u, 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, + 0x0000004cu, 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, + 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, + 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, + 0x00000006u, 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, + 0x000500c4u, 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, + 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, + 0x00000057u, 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, + 0x0000005au, 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, + 0x0000005cu, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, + 0x00000055u, 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, + 0x00000000u, 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, + 0x00000006u, 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, + 0x0004003du, 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, + 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, + 0x00000069u, 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, + 0x0000006bu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, + 0x0000006eu, 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, + 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, + 0x00000036u, 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, + 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, + 0x00000074u, 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, + 0x00000036u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, + 0x00000000u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, + 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, + 0x0000007fu, 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, + 0x00000078u, 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, + 0x00000081u, 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, + 0x00000076u, 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, + 0x00000084u, 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, + 0x00000079u, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, + 0x00000085u, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, + 0x00000050u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, + 0x00000088u, 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, + 0x00000006u, 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, + 0x000500c4u, 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, + 0x0000008du, 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, + 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, + 0x00000094u, 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, + 0x00000006u, 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, + 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, + 0x00000099u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, + 0x00000008u, 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, + 0x0004003bu, 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, + 0x0004003du, 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, + 0x0003003eu, 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, + 0x00000006u, 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, + 0x00000052u, 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, + 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, + 0x000000a8u, 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, + 0x000000a6u, 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, + 0x000000aeu, 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, + 0x000000acu, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, + 0x000000b5u, 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, + 0x000000b6u, 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, + 0x000000b9u, 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, + 0x0004003du, 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, + 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, + 0x000000bdu, 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, + 0x000000c6u, 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, + 0x00000006u, 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, + 0x000000c4u, 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, + 0x0003003eu, 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, + 0x00000006u, 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, + 0x000200feu, 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, + 0x000500afu, 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, + 0x000400fau, 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, + 0x000000cfu, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, + 0x000000d0u, 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, + 0x0000002cu, 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, + 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, + 0x000000acu, 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, + 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, + 0x00000006u, 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, + 0x00000006u, 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, + 0x0003003eu, 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, + 0x00000023u, 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, + 0x0003003eu, 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, + 0x00000006u, 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, + 0x0003003eu, 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, + 0x00000006u, 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, + 0x00050082u, 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, + 0x000000ebu, 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, + 0x000000e1u, 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, + 0x000000f3u, 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, + 0x000000f4u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, + 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, + 0x000000f9u, 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, + 0x0004003du, 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, + 0x000500aau, 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, + 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, + 0x000000ffu, 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, + 0x0000002cu, 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, + 0x000700f5u, 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, + 0x000000f9u, 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, + 0x00000102u, 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, + 0x00000105u, 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, + 0x00000006u, 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, + 0x00000105u, 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, + 0x00000006u, 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, + 0x000200feu, 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, + 0x0004007cu, 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, + 0x00000057u, 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, + 0x00000110u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, + 0x0000010cu, 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, + 0x00000116u, 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, + 0x00000117u, 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, + 0x0000002cu, 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, + 0x0000011bu, 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, + 0x000500aau, 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, + 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, + 0x00000121u, 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, + 0x0000002cu, 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, + 0x000700f5u, 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, + 0x0000011cu, 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, + 0x00000124u, 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, + 0x00000127u, 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, + 0x00000006u, 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, + 0x00000127u, 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, + 0x00000006u, 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, + 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, + 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, + 0x0004003bu, 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, + 0x000500aau, 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, + 0x000400fau, 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, + 0x00000135u, 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, + 0x00000013u, 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, + 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, + 0x00050039u, 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, + 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, + 0x000200feu, 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, + 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, + 0x0004003bu, 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, + 0x000500aau, 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, + 0x000400fau, 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, + 0x00000144u, 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, + 0x00000016u, 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, + 0x00000146u, 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, + 0x00050039u, 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, + 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, + 0x000200feu, 0x0000014au, 0x00010038u, +}; + constexpr uint32_t kSpv_vt_fused_chain[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000735u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -1836,6 +2153,83 @@ constexpr uint32_t kSpv_vt_fused_chain[] = { 0x00000182u, 0x00000181u, 0x000200feu, 0x00000182u, 0x00010038u, }; +constexpr uint32_t kSpv_vt_greedy_argmax[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000069u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, + 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, + 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000bu, 0x00060010u, 0x00000004u, + 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000000bu, 0x0000000bu, 0x0000001cu, + 0x00030047u, 0x00000011u, 0x00000002u, 0x00050048u, 0x00000011u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00050048u, 0x00000011u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000011u, 0x00000002u, + 0x00000023u, 0x00000008u, 0x00050048u, 0x00000011u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, + 0x0000002cu, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000002du, 0x00000002u, 0x00040048u, 0x0000002du, + 0x00000000u, 0x00000018u, 0x00050048u, 0x0000002du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x0000002fu, 0x00000018u, 0x00040047u, 0x0000002fu, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000002fu, + 0x00000022u, 0x00000000u, 0x00040047u, 0x0000005au, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000005bu, + 0x00000002u, 0x00050048u, 0x0000005bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000005du, + 0x00000021u, 0x00000001u, 0x00040047u, 0x0000005du, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000068u, + 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, + 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040017u, + 0x00000009u, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000000au, 0x00000001u, 0x00000009u, 0x0004003bu, + 0x0000000au, 0x0000000bu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000000cu, 0x00000000u, 0x00040020u, + 0x0000000du, 0x00000001u, 0x00000006u, 0x0006001eu, 0x00000011u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00040020u, 0x00000012u, 0x00000009u, 0x00000011u, 0x0004003bu, 0x00000012u, 0x00000013u, + 0x00000009u, 0x00040015u, 0x00000014u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000014u, 0x00000015u, + 0x00000000u, 0x00040020u, 0x00000016u, 0x00000009u, 0x00000006u, 0x00020014u, 0x00000019u, 0x0004002bu, + 0x00000014u, 0x0000001fu, 0x00000002u, 0x0004002bu, 0x00000014u, 0x00000024u, 0x00000001u, 0x00030016u, + 0x00000029u, 0x00000020u, 0x00040020u, 0x0000002au, 0x00000007u, 0x00000029u, 0x0003001du, 0x0000002cu, + 0x00000006u, 0x0003001eu, 0x0000002du, 0x0000002cu, 0x00040020u, 0x0000002eu, 0x0000000cu, 0x0000002du, + 0x0004003bu, 0x0000002eu, 0x0000002fu, 0x0000000cu, 0x00040020u, 0x00000031u, 0x0000000cu, 0x00000006u, + 0x0004002bu, 0x00000006u, 0x00000037u, 0x00000001u, 0x0004002bu, 0x00000014u, 0x00000052u, 0x00000003u, + 0x0004002bu, 0x00000006u, 0x00000056u, 0x00000002u, 0x0003001du, 0x0000005au, 0x00000006u, 0x0003001eu, + 0x0000005bu, 0x0000005au, 0x00040020u, 0x0000005cu, 0x0000000cu, 0x0000005bu, 0x0004003bu, 0x0000005cu, + 0x0000005du, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000064u, 0x00000080u, 0x0004001cu, 0x00000065u, + 0x00000029u, 0x00000064u, 0x00040020u, 0x00000066u, 0x00000004u, 0x00000065u, 0x0004003bu, 0x00000066u, + 0x00000067u, 0x00000004u, 0x0006002cu, 0x00000009u, 0x00000068u, 0x00000064u, 0x00000037u, 0x00000037u, + 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, + 0x00000007u, 0x00000008u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000001eu, 0x00000007u, 0x0004003bu, + 0x0000002au, 0x0000002bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000035u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000036u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000041u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000051u, 0x00000007u, 0x00050041u, 0x0000000du, 0x0000000eu, 0x0000000bu, 0x0000000cu, + 0x0004003du, 0x00000006u, 0x0000000fu, 0x0000000eu, 0x0003003eu, 0x00000008u, 0x0000000fu, 0x0004003du, + 0x00000006u, 0x00000010u, 0x00000008u, 0x00050041u, 0x00000016u, 0x00000017u, 0x00000013u, 0x00000015u, + 0x0004003du, 0x00000006u, 0x00000018u, 0x00000017u, 0x000500aeu, 0x00000019u, 0x0000001au, 0x00000010u, + 0x00000018u, 0x000300f7u, 0x0000001cu, 0x00000000u, 0x000400fau, 0x0000001au, 0x0000001bu, 0x0000001cu, + 0x000200f8u, 0x0000001bu, 0x000100fdu, 0x000200f8u, 0x0000001cu, 0x00050041u, 0x00000016u, 0x00000020u, + 0x00000013u, 0x0000001fu, 0x0004003du, 0x00000006u, 0x00000021u, 0x00000020u, 0x000500c2u, 0x00000006u, + 0x00000022u, 0x00000021u, 0x0000001fu, 0x0004003du, 0x00000006u, 0x00000023u, 0x00000008u, 0x00050041u, + 0x00000016u, 0x00000025u, 0x00000013u, 0x00000024u, 0x0004003du, 0x00000006u, 0x00000026u, 0x00000025u, + 0x00050084u, 0x00000006u, 0x00000027u, 0x00000023u, 0x00000026u, 0x00050080u, 0x00000006u, 0x00000028u, + 0x00000022u, 0x00000027u, 0x0003003eu, 0x0000001eu, 0x00000028u, 0x0004003du, 0x00000006u, 0x00000030u, + 0x0000001eu, 0x00060041u, 0x00000031u, 0x00000032u, 0x0000002fu, 0x00000015u, 0x00000030u, 0x0004003du, + 0x00000006u, 0x00000033u, 0x00000032u, 0x0004007cu, 0x00000029u, 0x00000034u, 0x00000033u, 0x0003003eu, + 0x0000002bu, 0x00000034u, 0x0003003eu, 0x00000035u, 0x0000000cu, 0x0003003eu, 0x00000036u, 0x00000037u, + 0x000200f9u, 0x00000038u, 0x000200f8u, 0x00000038u, 0x000400f6u, 0x0000003au, 0x0000003bu, 0x00000000u, + 0x000200f9u, 0x0000003cu, 0x000200f8u, 0x0000003cu, 0x0004003du, 0x00000006u, 0x0000003du, 0x00000036u, + 0x00050041u, 0x00000016u, 0x0000003eu, 0x00000013u, 0x00000024u, 0x0004003du, 0x00000006u, 0x0000003fu, + 0x0000003eu, 0x000500b0u, 0x00000019u, 0x00000040u, 0x0000003du, 0x0000003fu, 0x000400fau, 0x00000040u, + 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x00000042u, 0x0000001eu, + 0x0004003du, 0x00000006u, 0x00000043u, 0x00000036u, 0x00050080u, 0x00000006u, 0x00000044u, 0x00000042u, + 0x00000043u, 0x00060041u, 0x00000031u, 0x00000045u, 0x0000002fu, 0x00000015u, 0x00000044u, 0x0004003du, + 0x00000006u, 0x00000046u, 0x00000045u, 0x0004007cu, 0x00000029u, 0x00000047u, 0x00000046u, 0x0003003eu, + 0x00000041u, 0x00000047u, 0x0004003du, 0x00000029u, 0x00000048u, 0x00000041u, 0x0004003du, 0x00000029u, + 0x00000049u, 0x0000002bu, 0x000500bau, 0x00000019u, 0x0000004au, 0x00000048u, 0x00000049u, 0x000300f7u, + 0x0000004cu, 0x00000000u, 0x000400fau, 0x0000004au, 0x0000004bu, 0x0000004cu, 0x000200f8u, 0x0000004bu, + 0x0004003du, 0x00000029u, 0x0000004du, 0x00000041u, 0x0003003eu, 0x0000002bu, 0x0000004du, 0x0004003du, + 0x00000006u, 0x0000004eu, 0x00000036u, 0x0003003eu, 0x00000035u, 0x0000004eu, 0x000200f9u, 0x0000004cu, + 0x000200f8u, 0x0000004cu, 0x000200f9u, 0x0000003bu, 0x000200f8u, 0x0000003bu, 0x0004003du, 0x00000006u, + 0x0000004fu, 0x00000036u, 0x00050080u, 0x00000006u, 0x00000050u, 0x0000004fu, 0x00000024u, 0x0003003eu, + 0x00000036u, 0x00000050u, 0x000200f9u, 0x00000038u, 0x000200f8u, 0x0000003au, 0x00050041u, 0x00000016u, + 0x00000053u, 0x00000013u, 0x00000052u, 0x0004003du, 0x00000006u, 0x00000054u, 0x00000053u, 0x000500c2u, + 0x00000006u, 0x00000055u, 0x00000054u, 0x0000001fu, 0x0004003du, 0x00000006u, 0x00000057u, 0x00000008u, + 0x00050084u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, 0x00050080u, 0x00000006u, 0x00000059u, + 0x00000055u, 0x00000058u, 0x0003003eu, 0x00000051u, 0x00000059u, 0x0004003du, 0x00000006u, 0x0000005eu, + 0x00000051u, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000035u, 0x00060041u, 0x00000031u, 0x00000060u, + 0x0000005du, 0x00000015u, 0x0000005eu, 0x0003003eu, 0x00000060u, 0x0000005fu, 0x0004003du, 0x00000006u, + 0x00000061u, 0x00000051u, 0x00050080u, 0x00000006u, 0x00000062u, 0x00000061u, 0x00000037u, 0x00060041u, + 0x00000031u, 0x00000063u, 0x0000005du, 0x00000015u, 0x00000062u, 0x0003003eu, 0x00000063u, 0x0000000cu, + 0x000100fdu, 0x00010038u, +}; + constexpr uint32_t kSpv_vt_layer_norm[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x000002deu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -3814,6 +4208,10 @@ constexpr uint32_t kSpecIds_vt_cast[] = { 0u, 1u, }; +constexpr uint32_t kSpecIds_vt_embedding[] = { + 0u, 1u, 2u, +}; + constexpr uint32_t kSpecIds_vt_matmul[] = { 0u, 1u, 2u, 3u, }; @@ -3823,7 +4221,9 @@ constexpr uint32_t kSpecIds_vt_matmul[] = { const SpirvModule kSpirvModules[] = { {"vt_add", kSpv_vt_add, sizeof(kSpv_vt_add) / sizeof(uint32_t), nullptr, 0}, {"vt_cast", kSpv_vt_cast, sizeof(kSpv_vt_cast) / sizeof(uint32_t), kSpecIds_vt_cast, 2}, + {"vt_embedding", kSpv_vt_embedding, sizeof(kSpv_vt_embedding) / sizeof(uint32_t), kSpecIds_vt_embedding, 3}, {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t), nullptr, 0}, + {"vt_greedy_argmax", kSpv_vt_greedy_argmax, sizeof(kSpv_vt_greedy_argmax) / sizeof(uint32_t), nullptr, 0}, {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, {"vt_matmul", kSpv_vt_matmul, sizeof(kSpv_vt_matmul) / sizeof(uint32_t), kSpecIds_vt_matmul, 4}, {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py index 4f2de61a..28a9d21c 100644 --- a/tests/scripts/test_gen_vulkan_spirv.py +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -101,6 +101,7 @@ def test_header_declares_but_does_not_define_the_blobs(self): SPECIALIZED = { "vt_cast": "src and dst dtype", "vt_matmul": "a/b/out dtype plus the b orientation", + "vt_embedding": "table/out dtype plus the id width", } def test_specialized_shaders_declare_their_constants(self): diff --git a/tests/vt/test_backend_cross_device.cpp b/tests/vt/test_backend_cross_device.cpp index 3aa298fa..9da95a8b 100644 --- a/tests/vt/test_backend_cross_device.cpp +++ b/tests/vt/test_backend_cross_device.cpp @@ -141,6 +141,14 @@ Tensor T2(void* p, Device d, int64_t r, int64_t c) { Tensor T1(void* p, Device d, int64_t n) { return Tensor::Contiguous(p, DType::kF32, d, {n}); } +// Integer operands: embedding ids (i32 or i64, both accepted by vt::Embedding) +// and sampler token ids (i64 by contract). +Tensor TI32(void* p, Device d, int64_t n) { + return Tensor::Contiguous(p, DType::kI32, d, {n}); +} +Tensor TI64(void* p, Device d, int64_t n) { + return Tensor::Contiguous(p, DType::kI64, d, {n}); +} } // namespace @@ -349,6 +357,105 @@ TEST_CASE("elementwise ops match the CPU oracle within NMSE <= 5e-4") { cpu.DestroyQueue(cq); } +TEST_CASE("Embedding gather and greedy argmax match the CPU oracle EXACTLY") { + // Neither op is arithmetic, so neither gets the NMSE tier: a gather must move + // the exact bytes, and an argmax must pick the exact index. + constexpr int64_t kVocab = 61; + constexpr int64_t kHidden = 40; + constexpr int64_t kTokens = 7; + + const std::vector table = RandomVec(kVocab * kHidden, 501); + // Ids chosen to include 0 and the last row, and to REPEAT — a gather that + // accidentally consumed ids positionally would pass on distinct ids. + const std::vector ids32 = {0, 60, 13, 13, 1, 59, 0}; + std::vector ids64(ids32.begin(), ids32.end()); + + // Logits with a DELIBERATE TIE: row 0 has its maximum twice, at columns 2 and + // 5. The contract (cpu_sample.cpp:49, strict `>`) is that the FIRST wins, so a + // kernel that used `>=` or a tie-indifferent tree reduction returns 5 and fails + // here. That is a different token, not a rounding difference. + constexpr int64_t kRows = 3; + std::vector logits(kRows * kVocab, 0.0f); + for (int64_t r = 0; r < kRows; ++r) { + for (int64_t c = 0; c < kVocab; ++c) logits[r * kVocab + c] = -1.0f * float(c + 1); + } + logits[0 * kVocab + 2] = 9.0f; + logits[0 * kVocab + 5] = 9.0f; // tie with column 2; column 2 must win + logits[1 * kVocab + 60] = 5.0f; // last column + logits[2 * kVocab + 0] = 5.0f; // first column + + vt::Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue cq = cpu.CreateQueue(); + const Device cd{DeviceType::kCPU, 0}; + std::vector ctable = table, clogits = logits; + std::vector cids = ids32; + std::vector ref_emb(kTokens * kHidden); + std::vector ref_tok(kRows); + { + Tensor tt = T2(ctable.data(), cd, kVocab, kHidden); + Tensor ti = TI32(cids.data(), cd, kTokens); + Tensor to = T2(ref_emb.data(), cd, kTokens, kHidden); + vt::Embedding(cq, to, tt, ti); + Tensor tl = T2(clogits.data(), cd, kRows, kVocab); + Tensor ttok = TI64(ref_tok.data(), cd, kRows); + vt::GreedyArgmax(cq, ttok, tl); + } + REQUIRE(ref_tok[0] == 2); // the oracle itself must honour the tie-break + + for (DeviceType dt : RegisteredDevices()) { + CAPTURE(DeviceName(dt)); + vt::Backend& dev = vt::GetBackend(dt); + Queue q = dev.CreateQueue(); + const Device d{dt, 0}; + + if (OpAvailable(vt::OpId::kEmbedding, dt)) { + DevBuf dtable(dev, q, kVocab * kHidden), demb(dev, q, kTokens * kHidden); + dtable.Upload(table); + // i32 and i64 ids are DIFFERENT index paths, so both are exercised. + for (bool wide : {false, true}) { + CAPTURE(wide); + void* dids = dev.Alloc(kTokens * (wide ? sizeof(int64_t) : sizeof(int32_t))); + if (wide) { + dev.Copy(q, dids, ids64.data(), kTokens * sizeof(int64_t)); + } else { + dev.Copy(q, dids, ids32.data(), kTokens * sizeof(int32_t)); + } + dev.Synchronize(q); + Tensor tt = T2(dtable.ptr(), d, kVocab, kHidden); + Tensor ti = wide ? TI64(static_cast(dids), d, kTokens) + : TI32(static_cast(dids), d, kTokens); + Tensor to = T2(demb.ptr(), d, kTokens, kHidden); + vt::Embedding(q, to, tt, ti); + dev.Synchronize(q); + const std::vector got = demb.Download(); + // A gather moves bytes; equality is exact, not NMSE. + CHECK(std::memcmp(ref_emb.data(), got.data(), ref_emb.size() * sizeof(float)) == 0); + dev.Free(dids); + } + } + + if (OpAvailable(vt::OpId::kGreedyArgmax, dt)) { + DevBuf dlog(dev, q, kRows * kVocab); + dlog.Upload(logits); + void* dtok = dev.Alloc(kRows * sizeof(int64_t)); + Tensor tl = T2(dlog.ptr(), d, kRows, kVocab); + Tensor ttok = TI64(static_cast(dtok), d, kRows); + vt::GreedyArgmax(q, ttok, tl); + dev.Synchronize(q); + std::vector got(kRows); + dev.Copy(q, got.data(), dtok, kRows * sizeof(int64_t)); + dev.Synchronize(q); + for (int64_t r = 0; r < kRows; ++r) { + CAPTURE(r); + CHECK(got[r] == ref_tok[r]); + } + dev.Free(dtok); + } + dev.DestroyQueue(q); + } + cpu.DestroyQueue(cq); +} + TEST_CASE("GEMM matches the CPU oracle within NMSE <= 5e-4, both orientations") { // Shapes are deliberately RAGGED and not multiples of the workgroup size, so a // kernel that silently processed only whole tiles would fail rather than pass diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index 582cd3a9..5ceed8a6 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -53,7 +53,7 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // point of the split: at the target shader surface the words must not be // re-parsed by every TU that merely needs the table. const size_t n = vt::vulkan::kSpirvModuleCount; - CHECK(n == 8); + CHECK(n == 10); for (size_t mi = 0; mi < n; ++mi) { const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); @@ -63,8 +63,9 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // The eight registered ops are served by exactly these seven modules (kCastBf16 // and kCastF32 share vt_cast), so a rename in either direction breaks here // rather than at pipeline-creation time on a device we might not have. - for (const char* want : {"vt_add", "vt_cast", "vt_fused_chain", "vt_layer_norm", "vt_matmul", - "vt_relu", "vt_rms_norm", "vt_silu_and_mul"}) { + for (const char* want : {"vt_add", "vt_cast", "vt_embedding", "vt_fused_chain", + "vt_greedy_argmax", "vt_layer_norm", "vt_matmul", "vt_relu", + "vt_rms_norm", "vt_silu_and_mul"}) { bool found = false; for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { if (std::strcmp(vt::vulkan::kSpirvModules[mi].name, want) == 0) found = true; @@ -103,6 +104,10 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const REQUIRE(m.spec_id_count == 2); // src dtype, dst dtype CHECK(m.spec_ids[0] == 0u); CHECK(m.spec_ids[1] == 1u); + } else if (std::strcmp(m.name, "vt_embedding") == 0) { + // table dtype, out dtype, id width (i32 vs i64). + REQUIRE(m.spec_id_count == 3); + for (uint32_t want = 0; want < 3; ++want) CHECK(m.spec_ids[want] == want); } else if (std::strcmp(m.name, "vt_matmul") == 0) { // a dtype, b dtype, out dtype, orientation: 3*3*3*2 = 54 variants served by // ONE committed module, which is the argument for specialization constants @@ -317,13 +322,16 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { for (vt::OpId op : {vt::OpId::kAdd, vt::OpId::kRelu, vt::OpId::kSiluAndMul, vt::OpId::kCastBf16, vt::OpId::kCastF32, vt::OpId::kLayerNorm, vt::OpId::kRmsNorm, vt::OpId::kFusedChain, - // VK-B: the dense path's GEMM, both orientations. - vt::OpId::kMatmul, vt::OpId::kMatmulBT}) { + // VK-B: the dense path's GEMM (both orientations) and the + // two ends of the model, token ids in and out. + vt::OpId::kMatmul, vt::OpId::kMatmulBT, + vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax}) { CHECK(vt::OpRegistered(op, DeviceType::kVULKAN)); } - // No NATIVE Vulkan kernel yet for attention, KV cache, embedding, sampling. + // No NATIVE Vulkan kernel yet for attention, the KV cache, RoPE, or the + // sampler beyond greedy argmax. for (vt::OpId op : {vt::OpId::kPagedAttention, vt::OpId::kReshapeAndCache, - vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax}) { + vt::OpId::kRopeNeox, vt::OpId::kApplyTemperature}) { CHECK_FALSE(vt::OpRegistered(op, DeviceType::kVULKAN)); } // ...but they no longer THROW, and this assertion used to say they did. From 03f4d3c53ea5f487600f4c45c6420decb8f37221 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 22:34:20 +0000 Subject: [PATCH 11/17] record(vulkan): 12 native kernels, 75 still on the reference tier Re-measured with the same runtime probe rather than re-grepped, so the number is comparable to the VK-A1 baseline: native 8 -> 12, reference-tier 79 -> 75, still zero throwing. The four that moved are kMatmul, kMatmulBT, kEmbedding and kGreedyArgmax. Carries the same honest limits everywhere the counts appear: paged attention, the KV cache ops, the whole RoPE family, quant, MoE, GDN/MLA and every sampler beyond greedy argmax are still the CPU kernel running on shared memory; get_attn_backend_priority() is still EMPTY; no model runs end to end on Vulkan; no speed number is measured, claimed or owed. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .agents/feature-matrix.md | 2 +- .agents/specs/vulkan-full-support.md | 16 +++++++---- .agents/state.md | 42 ++++++++++++++++++++++++++++ docs/BENCHMARKS.md | 2 +- docs/FEATURES.md | 13 +++++---- docs/STATUS.md | 2 +- 6 files changed, 62 insertions(+), 15 deletions(-) diff --git a/.agents/feature-matrix.md b/.agents/feature-matrix.md index 707209d9..9da16478 100644 --- a/.agents/feature-matrix.md +++ b/.agents/feature-matrix.md @@ -277,7 +277,7 @@ evidence. | `BACKEND-CPU` | production CPU | `PARTIAL` | persistent threadpool + chunked GEMM/row dispatch is 1/3/20-thread bit-identical and TSAN-clean; idle-host performance/RSS gate and compute-in-quant remain open | [backend matrix](backend-matrix.md) | | `BACKEND-ROCM` | ROCm | `INVENTORIED` | source/dispatch spike required; no "one flag" support claim | [backend matrix](backend-matrix.md) | | `BACKEND-MLX` | Apple Metal through MLX | `ACTIVE` | Metal/MLX skeleton ACTIVE: two models (OPT-125m, Qwen3-0.6B) run e2e + pass correctness, native-MSL GEMM, batched command buffers 1.50x (compute-bound at 98%+); optional MLX GEMM provider | [backend matrix](backend-matrix.md) | -| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | gated skeleton: 8 NATIVE kernels of the CPU backend's 87 registered ops, the other 79 served by the portable reference tier (CPU kernel, unified memory); no model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | +| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | **12 NATIVE kernels** of the CPU backend's 87 registered ops (GEMM both orientations, embedding, greedy argmax, elementwise/norm/fusion); the other 75 served by the portable reference tier (CPU kernel, unified memory). No model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | | `BACKEND-XPU` | Intel XPU | `INVENTORIED` | loyal upstream-platform port, runtime absent | [backend matrix](backend-matrix.md) | | `BACKEND-ANE` | encoder/pooling accelerator | `INVENTORIED` | specialized CoreML route only | [backend matrix](backend-matrix.md) | diff --git a/.agents/specs/vulkan-full-support.md b/.agents/specs/vulkan-full-support.md index 6feb5787..fb908520 100644 --- a/.agents/specs/vulkan-full-support.md +++ b/.agents/specs/vulkan-full-support.md @@ -110,12 +110,16 @@ is correct; `feature-matrix` is the stale one. **REPAIRED 2026-08-06 by `VK-A1`. The op surface was re-counted at RUNTIME (not by grepping `RegisterOp`), on a Vulkan-ON build, by asking `vt::OpRegistered` and `vt::GetOp` for every `OpId`: -| | count | -|---|---| -| CPU-registered ops | **87** | -| **NATIVE** on Vulkan | **8** | -| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | -| **ABSENT** (`GetOp` throws) | **0** | +| | at `VK-A1` | after the first `VK-B` bricks | +|---|---|---| +| CPU-registered ops | **87** | **87** | +| **NATIVE** on Vulkan | **8** | **12** | +| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | **75** | +| **ABSENT** (`GetOp` throws) | **0** | **0** | + +The four that moved are `kMatmul`, `kMatmulBT` (dense GEMM, both orientations), +`kEmbedding` and `kGreedyArgmax` — the model's two ends plus the op it spends most +of its time in. Re-measure with the same method rather than quoting this table. `vt::ReferenceTierEligible(kVULKAN)` is TRUE — GB10 integrated and llvmpipe both report unified memory. So **every op the CPU backend has is already reachable on diff --git a/.agents/state.md b/.agents/state.md index 55b9ae05..13448b8a 100644 --- a/.agents/state.md +++ b/.agents/state.md @@ -39785,3 +39785,45 @@ Box left clean (GPU idle, both locks free, worker down). Evidence: Next: `VK-B` — but re-scoped by the reference-tier finding. It is no longer "make a model run"; it is "get the dense path off the host tier", starting with `get_attn_backend_priority()`, which is the untested platform-seam gate. + +- **2026-08-06 (later still)** — **First `VK-B` bricks: Vulkan gains native GEMM, + embedding and greedy argmax (`CLAIM-VULKAN-FULL-1`, row `BACKEND-VULKAN`).** + Native kernels **8 → 12**; reference-tier ops **79 → 75** (re-measured with the + same runtime probe, not re-grepped). The four that moved are `kMatmul`, + `kMatmulBT`, `kEmbedding`, `kGreedyArgmax` — the model's two ends plus the op it + spends most of its time in. + + **GEMM** ports the CPU numeric contract exactly (`cpu_ops.cpp:187-260` + `MatmulChunked`): one invocation per OUTPUT ELEMENT with the whole K reduction + on it, sequential f32 accumulation, rounded once on store — the CPU kernel never + splits a K reduction across threads, so the two backends share an accumulation + ORDER rather than merely a tolerance. **Deliberately not tiled**: llama.cpp's + `mul_mm.comp` / `mul_mm_cm2.comp` are `VK-C`, which needs this as a + known-correct same-device A/B reference. ONE module serves **54 variants** + (3 dtypes x a/b/out, times 2 orientations) through specialization constants — + the `VK-A1` mechanism paying for itself at 54:1, where llama.cpp would emit 54 + modules. + + **Greedy argmax is one invocation per ROW, and that is a contract decision.** + `cpu_sample.cpp:49` scans with a strict `>`, so the FIRST maximum wins; greedy + decode is gated token-for-token against a vLLM golden, so a tie-indifferent tree + reduction returns a DIFFERENT TOKEN, not a rounding difference. The gate plants + a deliberate tie (row 0, columns 2 and 5) and requires 2, and asserts the ORACLE + honours it first so the test cannot pass by both sides being wrong together. + A parallel reduction must carry the index and break ties toward the lower one at + every merge; that is a separate change with its own gate. + + **Embedding** reads only the low 32 bits of an i64 id (a vocabulary index the + host already range-checked, far below 2^31), avoiding `VK_KHR_shader_int64` at + the 1.1 floor. The CPU `VT_CHECK` on id range has no shader equivalent — a + shader cannot throw and a per-element bounds branch would cost the gather — but + `vt::Embedding` validates on the host before dispatch. Gated EXACTLY, not by + NMSE (a gather moves bytes), with REPEATED ids so a positional consumer fails, + and i32/i64 covered separately as different index paths. + + Gates: clean `-Werror` Vulkan-ON build 0 warnings; `test_vulkan_backend` 10/10 + (434 assertions), `test_backend_cross_device` 8/8 (88), generator suite 9/9, + `--check` green. Still on the reference tier and NOT native: paged attention, + the KV cache ops, the whole RoPE family, quant, MoE, GDN/MLA and every sampler + beyond greedy argmax. `get_attn_backend_priority()` remains EMPTY, so no model + runs end to end on Vulkan and no speed number is measured, claimed or owed. diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md index 89b6c1a3..403fcd45 100644 --- a/docs/BENCHMARKS.md +++ b/docs/BENCHMARKS.md @@ -304,7 +304,7 @@ built on it rather than keeping the flattering one. | vLLM 0.26 re-benchmark | Pending | Re-run the binding grids on the advanced pin | | MiniMax-H3 FP4 speed (W-FP4a) | **Measured GB10 (`row/H3-FP4-GPU-E2E`).** Marlin W4A16 byte-exact vs bf16; fp4 a memory win, 0.8x bf16/forward. Real-ckpt fp4-resident e2e RUNS (mp4/wav) but frame is a non-scene patch-grid | Render coherence ROOT-CAUSED (#70): VAE fine, DiT latent white. Geometry ladder (PR #74) REFUTES a DiT-math bug: ours==oracle to 8x8+temporal; white=trained-wts. fp4 speed CLOSED. Detail: benchmark-record + spec §8 | | MXFP4 Qwen3-8B (W4A16 Marlin) | **`KERNEL-MARLIN-DENSE-EXEC` x3 (dense-ON default): c1 1.020, c2/c4/c8 0.962/0.966/0.969, GPU mem 2.63x less** (beats #51 1.005/0.925/0.939/0.953 EVERY axis); #44 3/3, 32B-NVFP4A16 6/6; -Werror test-guard fixes x2 | **VT_MARLIN_DENSE default-ON** (+951us). `FLASH-OCCUPANCY` #75: matched-c8 ncu, occupancy IDENTICAL 8.33%; built vLLM's exact flash recipe, matched reg+instr, STILL +10us, gap is ptxas SASS quality, no lever/flip | -| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 8 NATIVE kernels; the other 79 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | +| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 12 NATIVE kernels; the other 75 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | | SGLang floor arms | Never ran | Both arms of the SGLang comparison | | cuBLAS invocation-parity guard | CI guard landed (CPU); `kGemvHeuristicAlgos` refactor build-verify owed | `nvcc` rebuild + SACRED gate on dgx | | Ampere consumer (`sm_86`, RTX 3090 class) | **No number owed; no such board here.** 2026-08-06 build-verify: 7/7 FA2 TUs 0-warn, real `sm_86` SASS. [Detail](../.agents/benchmark-record.md) | External RTX 3090 report. Floor is llama.cpp on that card (GGUF, not our Blackwell-only NVFP4 grid) | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 2cbfc2d7..96de97f4 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -206,12 +206,13 @@ CUDA runtime-verified on GB10 (sm_121a), Jetson Thor (sm_110) and Jetson AGX Orin (sm_87). sm_110 is a correctness venue only: CUTLASS has no FP4 tensor-core kernels for it. -Vulkan is a gated skeleton and the ◐ is generous. It has **8 native compute -kernels**; the other 79 ops the CPU backend registers resolve through the portable -reference tier, which runs the CPU kernel against shared memory on a unified -device. That is correct and arbitrarily slow, no model has been run end to end on -it, and no speed number exists or is owed. Build it with `-DVLLM_CPP_VULKAN=ON`; -it is off by default. +Vulkan is partial and the ◐ is honest but generous. It has **12 native compute +kernels** (dense GEMM in both orientations, embedding, greedy argmax, and the +elementwise/norm/fusion set); the other 75 ops the CPU backend registers resolve +through the portable reference tier, which runs the CPU kernel against shared +memory on a unified device. That is correct and arbitrarily slow, no model has +been run end to end on it, and no speed number exists or is owed. Build it with +`-DVLLM_CPP_VULKAN=ON`; it is off by default. ## Serving, API and operations diff --git a/docs/STATUS.md b/docs/STATUS.md index b688d031..c4040f7c 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -388,7 +388,7 @@ The correctness form and the full D0-D14 measured chronology live in ## Not supported yet LoRA (W1 CPU runtime brick landed — see the capability table; not yet usable -end-to-end), multi-GPU, Vulkan (8 native kernels, 79 ops on the CPU tier, no +end-to-end), multi-GPU, Vulkan (12 native kernels, 75 ops on the CPU tier, no model run e2e; [campaign](../.agents/specs/vulkan-full-support.md)), and the full tool-calling template surface. **Scale-out / distributed execution is scoped but unbuilt** (spike, 2026-07-28): the engine is From 34a3efe6af0b03ff0c17c8011bb1020878db9691 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 22:45:10 +0000 Subject: [PATCH 12/17] feat(vulkan): native block-paged attention (kPagedAttention) 13 native kernels now. This is the ONE kernel in the backend with no Vulkan port source: grep over all 132 .comp + 26 .glsl at pin 237ad9b96 finds ZERO block_table/paged matches, because ggml attention takes a contiguous KV buffer plus a mask. So the online-softmax skeleton follows flash_attn.comp's shape while the block-table indirection, GQA mapping and windowing are ported from our own cpu_paged_attn.cpp PagedAttentionKernel (:52-171), which is also the oracle. ONLINE SOFTMAX RATHER THAN THE CPU'S THREE PASSES, and the reason is structural, not preference: the CPU kernel materialises a `probs` array of one float per key in the window (:121,131), which is unbounded -- thousands at long context -- and a shader has no such allocation. The passes fuse into the standard running max/denominator recurrence, same mathematical result with a different rounding order, which is why this op sits in the NMSE tier and claims no bit-exactness. ONE WORKGROUP per (query token, query head), lanes splitting the head dimension, each key's q.k dot a cooperative vt_tg_sum. No broadcast of the score is needed: vt_tg_sum returns smem[0] to every lane and its leading barrier makes back-to-back calls safe, so all lanes derive the score from the same dot with the same instructions. An earlier draft added a lane-0 broadcast and two extra barriers for this; removing them is both simpler and one less barrier hazard. fp8 KV cache DECLINES rather than throws. Those pages are 1-byte and must be dequantised as Dequant(fp8) * k_scale|v_scale before the f32 softmax (cpu_paged_attn.cpp:79-93), which this shader does not do -- and throwing would REMOVE a capability the portable reference tier already provides. It forwards through GetOpFallback, which op_provider.h:94-100 documents as exactly the place for a per-call refusal, since GetOp has no shape or dtype to inspect. Gated against the CPU oracle in THREE configurations, because they are different branches and a single causal case would leave two unexercised: causal, causal+softcap (cap * tanh(s/cap)), and a sliding window. The block table is deliberately NON-IDENTITY (page j at cache block kBlocks-1-j) so a kernel that ignored it and indexed the cache linearly fails, and 37 tokens over block size 4 leaves the last page partly occupied so a whole-page walk reads past the sequence. Native 12 -> 13, reference-tier 75 -> 74. Clean -Werror build 0 warnings. Vulkan gate 10/10 (447 assertions), cross-device 9/9 (103), generator 10/10. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- src/vt/vulkan/shaders/vt_paged_attn.comp | 155 ++++++ src/vt/vulkan/vulkan_ops.cpp | 105 ++++ src/vt/vulkan/vulkan_spirv.cpp | 641 +++++++++++++++++++++++ tests/scripts/test_gen_vulkan_spirv.py | 1 + tests/vt/test_backend_cross_device.cpp | 96 ++++ tests/vt/test_vulkan_backend.cpp | 38 +- 6 files changed, 1021 insertions(+), 15 deletions(-) create mode 100644 src/vt/vulkan/shaders/vt_paged_attn.comp diff --git a/src/vt/vulkan/shaders/vt_paged_attn.comp b/src/vt/vulkan/shaders/vt_paged_attn.comp new file mode 100644 index 00000000..c1983654 --- /dev/null +++ b/src/vt/vulkan/shaders/vt_paged_attn.comp @@ -0,0 +1,155 @@ +#version 450 +// vt::PagedAttention — block-paged attention over a KV cache. +// +// THIS IS THE ONE KERNEL IN THE BACKEND WITH NO VULKAN PORT SOURCE. llama.cpp's +// Vulkan backend has no paged KV at all: `grep -l 'block_table\|paged'` over all +// 132 .comp + 26 .glsl at pin 237ad9b96 returns NOTHING, because ggml attention +// takes a contiguous KV buffer plus a mask. So the ONLINE-SOFTMAX SKELETON below +// follows the shape of flash_attn.comp, while the BLOCK-TABLE INDIRECTION, the +// GQA mapping and the windowing rules are ported from our own +// src/vt/cpu/cpu_paged_attn.cpp PagedAttentionKernel (:52-171), which is also the +// numeric oracle. Recorded as partial-from-scratch in porting-inventory §9. +// +// WHY ONLINE SOFTMAX AND NOT THE CPU'S THREE PASSES. The CPU kernel materialises +// a `probs` array of (jmax-jmin+1) floats (cpu_paged_attn.cpp:121,131) — one slot +// per key in the window, which is unbounded (thousands at long context). A shader +// has no such allocation, so the passes are fused into the standard running +// max/denominator recurrence. It computes the same mathematical result with a +// different rounding order, which is why this op sits in the NMSE <= 5e-4 tier +// rather than claiming bit-exactness against the CPU. +// +// PARALLELISATION: ONE WORKGROUP per (query token, query head), lanes split the +// HEAD DIMENSION. The keys are walked sequentially by the whole workgroup, and +// each key's q.k dot product is a cooperative vt_tg_sum across the lanes that own +// the head-dim slices. This keeps the per-lane state to acc[] only, and matches +// the CPU's structure of "one output row per unit of work". +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) readonly buffer Qb32 { uint v[]; } Q32; +layout(binding = 1) readonly buffer Qb16 { uint16_t v[]; } Q16; +layout(binding = 2) readonly buffer Kb32 { uint v[]; } K32; +layout(binding = 3) readonly buffer Kb16 { uint16_t v[]; } K16; +layout(binding = 4) readonly buffer Vb32 { uint v[]; } V32; +layout(binding = 5) readonly buffer Vb16 { uint16_t v[]; } V16; +layout(binding = 6) buffer Db32 { uint v[]; } D32; +layout(binding = 7) buffer Db16 { uint16_t v[]; } D16; +// Integer metadata, uint32 view only: block table, seq lens, query start loc. +layout(binding = 8) readonly buffer BTb { uint v[]; } BT; +layout(binding = 9) readonly buffer SLb { uint v[]; } SL; +layout(binding = 10) readonly buffer QSLb { uint v[]; } QSL; + +layout(constant_id = 0) const uint VT_PA_Q_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_PA_K_DT = VT_DT_F32; +layout(constant_id = 2) const uint VT_PA_V_DT = VT_DT_F32; +layout(constant_id = 3) const uint VT_PA_OUT_DT = VT_DT_F32; + +layout(push_constant) uniform Params { + uint total_q; + uint hq; // query heads + uint d; // head dim + uint block_size; // KV page size + uint qpk; // query heads per kv head (GQA ratio) + uint num_reqs; + uint causal; + int window_left; + int window_right; + uint kc_blk, kc_pg, kc_hd; // k-cache strides, in ELEMENTS + uint vc_blk, vc_pg, vc_hd; + uint bt_row, bt_col; // block-table strides, in elements + uint q_off, k_off, v_off, out_off; + uint bt_off, sl_off, qsl_off; + float scale; + float softcap; +} p; + +// Per-lane accumulator over the lane's slice of the head dimension. Eight slots +// covers d <= 8 * VT_TG = 1024, far above any head dim in the model matrix; the +// host asserts it rather than trusting it. +#define VT_PA_ACC_MAX 8 + +void main() { + uint unit = gl_WorkGroupID.x; // one workgroup per (token, head) + if (unit >= p.total_q * p.hq) { return; } + uint t = unit / p.hq; // query token (global) + uint h = unit % p.hq; // query head + uint g = h / p.qpk; // kv head (GQA) + uint tid = gl_LocalInvocationID.x; + + // Which request owns token t, and where the request starts. query_start_loc is + // [num_reqs+1] and small, so a linear scan here is cheaper than the extra + // device buffer the CPU kernel precomputes on the host + // (cpu_paged_attn.cpp:103-117 builds tok_pos/tok_slen/tok_req arrays). + uint qsl_base = p.qsl_off >> 2; + uint r = 0u; + for (uint i = 0u; i < p.num_reqs; ++i) { + if (t >= QSL.v[qsl_base + i] && t < QSL.v[qsl_base + i + 1u]) { r = i; break; } + } + uint q0 = QSL.v[qsl_base + r]; + uint query_len = QSL.v[qsl_base + r + 1u] - q0; + int seqlen = int(SL.v[(p.sl_off >> 2) + r]); + int pos = int(seqlen) - int(query_len) + int(t - q0); // absolute position + + // Window, exactly as cpu_paged_attn.cpp:126-130. + int jmin = p.window_left >= 0 ? max(0, pos - p.window_left) : 0; + int jmax = p.causal != 0u ? pos : seqlen - 1; + if (p.window_right >= 0) jmax = min(jmax, pos + p.window_right); + jmax = min(jmax, seqlen - 1); + + uint qbase = (t * p.hq + h) * p.d; + + float acc[VT_PA_ACC_MAX]; + for (uint s = 0u; s < VT_PA_ACC_MAX; ++s) acc[s] = 0.0; + float m = -1.0 / 0.0; // -inf + float l = 0.0; + + if (jmax >= jmin) { + for (int j = jmin; j <= jmax; ++j) { + uint blk = BT.v[(p.bt_off >> 2) + uint(r) * p.bt_row + (uint(j) / p.block_size) * p.bt_col]; + uint off = uint(j) % p.block_size; + uint kbase = blk * p.kc_blk + off * p.kc_pg + g * p.kc_hd; + + // Cooperative q.k over the head dimension: each lane sums its own slice, + // then one tree reduction over the workgroup. + float partial = 0.0; + for (uint e = tid; e < p.d; e += VT_TG) { + partial += VT_LOAD(Q32, Q16, VT_PA_Q_DT, p.q_off, qbase + e) + * VT_LOAD(K32, K16, VT_PA_K_DT, p.k_off, kbase + e); + } + // vt_tg_sum returns smem[0] to EVERY lane, and its leading barrier makes + // back-to-back calls in this loop safe (all lanes finish reading the + // previous total before the next call overwrites it). So no broadcast is + // needed: every lane derives the score from the same `dot` with the same + // instructions and therefore gets bit-identical results. + float dot = vt_tg_sum(tid, partial); + float s = dot * p.scale; + // cpu_paged_attn.cpp:144-145: optional cap * tanh(score / cap). + if (p.softcap > 0.0) s = p.softcap * tanh(s / p.softcap); + + // Online softmax update. Equivalent to the CPU's max/exp/denominator + // passes, evaluated incrementally. + float m_new = max(m, s); + float corr = exp(m - m_new); // 0 on the first key, since m == -inf + float w = exp(s - m_new); + l = l * corr + w; + + uint vbase = blk * p.vc_blk + off * p.vc_pg + g * p.vc_hd; + uint slot = 0u; + for (uint e = tid; e < p.d; e += VT_TG, ++slot) { + acc[slot] = acc[slot] * corr + + w * VT_LOAD(V32, V16, VT_PA_V_DT, p.v_off, vbase + e); + } + m = m_new; + } + } + + // cpu_paged_attn.cpp:150 divides by the denominator once; an empty window + // (jmax < jmin) leaves the row untouched there, so it is left zero here. + float inv = l > 0.0 ? 1.0 / l : 0.0; + uint slot = 0u; + for (uint e = tid; e < p.d; e += VT_TG, ++slot) { + VT_STORE(D32, D16, VT_PA_OUT_DT, p.out_off, qbase + e, acc[slot] * inv); + } +} diff --git a/src/vt/vulkan/vulkan_ops.cpp b/src/vt/vulkan/vulkan_ops.cpp index dd3c6488..c3584672 100644 --- a/src/vt/vulkan/vulkan_ops.cpp +++ b/src/vt/vulkan/vulkan_ops.cpp @@ -112,6 +112,18 @@ struct EmbeddingParams { struct ArgmaxParams { uint32_t n, v, logits_off, out_off; }; +struct PagedAttnParams { + uint32_t total_q, hq, d, block_size, qpk, num_reqs; + uint32_t causal; + int32_t window_left, window_right; + uint32_t kc_blk, kc_pg, kc_hd; + uint32_t vc_blk, vc_pg, vc_hd; + uint32_t bt_row, bt_col; + uint32_t q_off, k_off, v_off, out_off; + uint32_t bt_off, sl_off, qsl_off; + float scale; + float softcap; +}; struct SiluMulParams { uint32_t t, d, x_dt, out_dt, x_off, out_off; }; @@ -133,6 +145,8 @@ struct FcParams { static_assert(sizeof(RmsParams) <= 128, "push constants must fit the guaranteed 128 bytes"); static_assert(sizeof(LayerNormParams) <= 128, "push constants must fit the guaranteed 128 bytes"); static_assert(sizeof(FcParams) <= 128, "push constants must fit the guaranteed 128 bytes"); +static_assert(sizeof(PagedAttnParams) <= 128, + "push constants must fit the guaranteed 128 bytes"); template void Go(const char* name, const Binder& b, const P& p, uint32_t groups, @@ -392,6 +406,95 @@ void GreedyArgmaxKernel(Queue&, Tensor& token_ids, const Tensor& logits) { Go("vt_greedy_argmax", bind, p, FlatGroupCount(n)); } +// cpu_paged_attn.cpp:52-171 PagedAttentionKernel. ONE WORKGROUP per (query +// token, query head), lanes splitting the head dimension; see the shader for why +// the CPU's three passes become one online-softmax recurrence (its `probs` array +// is one float per key in the window, which a shader cannot allocate). +// +// This is the only kernel in the backend with NO llama.cpp counterpart to port +// from: its Vulkan backend has no paged KV anywhere. The block-table indirection +// and windowing come from the CPU kernel above, the online-softmax skeleton from +// flash_attn.comp's shape. +void PagedAttentionKernel(Queue& q, Tensor& out, const Tensor& query, const Tensor& k_cache, + const Tensor& v_cache, const Tensor& block_table, + const Tensor& seq_lens, const Tensor& query_start_loc, + const PagedAttentionArgs& args) { + const int64_t num_reqs = seq_lens.shape[0]; + const int64_t total_q = query.shape[0]; + const int64_t hq = query.shape[1], d = query.shape[2]; + const int64_t block_size = k_cache.shape[1]; + const int64_t num_kv_heads = k_cache.shape[2]; + + // PER-CALL REFUSAL, not a silent regression. An fp8 KV cache stores 1-byte + // pages that must be dequantised as Dequant(fp8) * k_scale|v_scale before the + // f32 softmax (cpu_paged_attn.cpp:79-93). This shader reads f32/f16/bf16 only, + // so rather than throw -- which would REMOVE a capability the portable + // reference tier already provides -- it declines through the provider seam and + // forwards to the next provider down, which is exactly what GetOpFallback is + // for (op_provider.h:94-100: per-call refusal belongs in the kernel, because + // GetOp has no shape or dtype to inspect). + if (args.kv_cache_dtype != vt::Fp8KVCacheDataType::kAuto) { + auto next = reinterpret_cast( + GetOpFallback(OpId::kPagedAttention, DeviceType::kVULKAN, kNativeProviderName)); + next(q, out, query, k_cache, v_cache, block_table, seq_lens, query_start_loc, args); + return; + } + + if (total_q == 0 || hq == 0 || d == 0) return; + // The shader keeps its accumulator in VT_PA_ACC_MAX slots per lane, one per + // head-dim element the lane owns. Asserted rather than trusted: overflowing it + // would write past a local array. + VT_CHECK(d <= 8 * static_cast(kWorkgroupSize), + "vulkan paged attention: head dim " + std::to_string(d) + + " exceeds the per-lane accumulator (8 * workgroup)"); + VT_CHECK(num_kv_heads > 0 && hq % num_kv_heads == 0, + "vulkan paged attention: query heads must be a multiple of kv heads"); + + Binder bind; + const uint32_t q_off = bind.Add(query, "paged_attn: query"); + const uint32_t k_off = bind.Add(k_cache, "paged_attn: k_cache"); + const uint32_t v_off = bind.Add(v_cache, "paged_attn: v_cache"); + const uint32_t out_off = bind.Add(out, "paged_attn: out"); + const uint32_t bt_off = bind.AddU32Only(block_table, "paged_attn: block_table"); + const uint32_t sl_off = bind.AddU32Only(seq_lens, "paged_attn: seq_lens"); + const uint32_t qsl_off = bind.AddU32Only(query_start_loc, "paged_attn: query_start_loc"); + + const int64_t wl = args.window_size.has_value() ? args.window_size->left : -1; + const int64_t wr = args.window_size.has_value() ? args.window_size->right : -1; + + const uint32_t spec[4] = {DtypeCode(query.dtype), DtypeCode(k_cache.dtype), + DtypeCode(v_cache.dtype), DtypeCode(out.dtype)}; + PagedAttnParams p{static_cast(total_q), + static_cast(hq), + static_cast(d), + static_cast(block_size), + static_cast(hq / num_kv_heads), + static_cast(num_reqs), + args.causal ? 1u : 0u, + static_cast(wl), + static_cast(wr), + static_cast(k_cache.stride[0]), + static_cast(k_cache.stride[1]), + static_cast(k_cache.stride[2]), + static_cast(v_cache.stride[0]), + static_cast(v_cache.stride[1]), + static_cast(v_cache.stride[2]), + static_cast(block_table.stride[0]), + static_cast(block_table.stride[1]), + q_off, + k_off, + v_off, + out_off, + bt_off, + sl_off, + qsl_off, + args.scale, + args.logits_soft_cap}; + // One workgroup per (token, head) -- NOT FlatGroupCount, which divides by the + // workgroup size; here the whole workgroup cooperates on one output row. + Go("vt_paged_attn", bind, p, static_cast(total_q * hq), spec, 4); +} + struct Registrar { Registrar() { // Same guard as the backend registrar: a Vulkan-enabled build on a host with @@ -400,6 +503,8 @@ struct Registrar { if (!VulkanContext::Available()) return; // static_cast against the ops.h aliases ties every kernel signature to the // registration contract at COMPILE time (the cpu_ops.cpp idiom). + RegisterOp(OpId::kPagedAttention, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&PagedAttentionKernel))); RegisterOp(OpId::kEmbedding, DeviceType::kVULKAN, reinterpret_cast(static_cast(&EmbeddingKernel))); RegisterOp(OpId::kGreedyArgmax, DeviceType::kVULKAN, diff --git a/src/vt/vulkan/vulkan_spirv.cpp b/src/vt/vulkan/vulkan_spirv.cpp index 8b8cf4c7..42f5c250 100644 --- a/src/vt/vulkan/vulkan_spirv.cpp +++ b/src/vt/vulkan/vulkan_spirv.cpp @@ -3059,6 +3059,642 @@ constexpr uint32_t kSpv_vt_matmul[] = { 0x00010038u, }; +constexpr uint32_t kSpv_vt_paged_attn[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000003b3u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000017cu, + 0x0000019fu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x0000017cu, 0x0000000bu, 0x0000001au, 0x00030047u, 0x00000181u, 0x00000002u, 0x00050048u, 0x00000181u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000181u, 0x00000001u, 0x00000023u, 0x00000004u, + 0x00050048u, 0x00000181u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000181u, 0x00000003u, + 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000181u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, + 0x00000181u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000181u, 0x00000006u, 0x00000023u, + 0x00000018u, 0x00050048u, 0x00000181u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000181u, + 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000181u, 0x00000009u, 0x00000023u, 0x00000024u, + 0x00050048u, 0x00000181u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000181u, 0x0000000bu, + 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000181u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, + 0x00000181u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000181u, 0x0000000eu, 0x00000023u, + 0x00000038u, 0x00050048u, 0x00000181u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000181u, + 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000181u, 0x00000011u, 0x00000023u, 0x00000044u, + 0x00050048u, 0x00000181u, 0x00000012u, 0x00000023u, 0x00000048u, 0x00050048u, 0x00000181u, 0x00000013u, + 0x00000023u, 0x0000004cu, 0x00050048u, 0x00000181u, 0x00000014u, 0x00000023u, 0x00000050u, 0x00050048u, + 0x00000181u, 0x00000015u, 0x00000023u, 0x00000054u, 0x00050048u, 0x00000181u, 0x00000016u, 0x00000023u, + 0x00000058u, 0x00050048u, 0x00000181u, 0x00000017u, 0x00000023u, 0x0000005cu, 0x00050048u, 0x00000181u, + 0x00000018u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000181u, 0x00000019u, 0x00000023u, 0x00000064u, + 0x00040047u, 0x0000019fu, 0x0000000bu, 0x0000001bu, 0x00040047u, 0x000001b4u, 0x00000006u, 0x00000004u, + 0x00030047u, 0x000001b5u, 0x00000002u, 0x00040048u, 0x000001b5u, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000001b5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b7u, 0x00000018u, 0x00040047u, + 0x000001b7u, 0x00000021u, 0x0000000au, 0x00040047u, 0x000001b7u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000001e0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001e1u, 0x00000002u, 0x00040048u, 0x000001e1u, + 0x00000000u, 0x00000018u, 0x00050048u, 0x000001e1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x000001e3u, 0x00000018u, 0x00040047u, 0x000001e3u, 0x00000021u, 0x00000009u, 0x00040047u, 0x000001e3u, + 0x00000022u, 0x00000000u, 0x00040047u, 0x00000252u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000253u, + 0x00000002u, 0x00040048u, 0x00000253u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000253u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x00000255u, 0x00000018u, 0x00040047u, 0x00000255u, 0x00000021u, + 0x00000008u, 0x00040047u, 0x00000255u, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000028eu, 0x00000001u, + 0x00000000u, 0x00040047u, 0x00000293u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000294u, 0x00000002u, + 0x00040048u, 0x00000294u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000294u, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x00000296u, 0x00000018u, 0x00040047u, 0x00000296u, 0x00000021u, 0x00000000u, + 0x00040047u, 0x00000296u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002a4u, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000002a5u, 0x00000002u, 0x00040048u, 0x000002a5u, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000002a5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002a7u, 0x00000018u, 0x00040047u, + 0x000002a7u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000002a7u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000002b7u, 0x00000001u, 0x00000001u, 0x00040047u, 0x000002bcu, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000002bdu, 0x00000002u, 0x00040048u, 0x000002bdu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002bdu, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002bfu, 0x00000018u, 0x00040047u, 0x000002bfu, + 0x00000021u, 0x00000002u, 0x00040047u, 0x000002bfu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ccu, + 0x00000006u, 0x00000002u, 0x00030047u, 0x000002cdu, 0x00000002u, 0x00040048u, 0x000002cdu, 0x00000000u, + 0x00000018u, 0x00050048u, 0x000002cdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002cfu, + 0x00000018u, 0x00040047u, 0x000002cfu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002cfu, 0x00000022u, + 0x00000000u, 0x00040047u, 0x00000334u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000339u, 0x00000006u, + 0x00000004u, 0x00030047u, 0x0000033au, 0x00000002u, 0x00040048u, 0x0000033au, 0x00000000u, 0x00000018u, + 0x00050048u, 0x0000033au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000033cu, 0x00000018u, + 0x00040047u, 0x0000033cu, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000033cu, 0x00000022u, 0x00000000u, + 0x00040047u, 0x00000349u, 0x00000006u, 0x00000002u, 0x00030047u, 0x0000034au, 0x00000002u, 0x00040048u, + 0x0000034au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000034au, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00030047u, 0x0000034cu, 0x00000018u, 0x00040047u, 0x0000034cu, 0x00000021u, 0x00000005u, 0x00040047u, + 0x0000034cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000380u, 0x00000001u, 0x00000003u, 0x00040047u, + 0x00000384u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000385u, 0x00000002u, 0x00050048u, 0x00000385u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000387u, 0x00000021u, 0x00000006u, 0x00040047u, + 0x00000387u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000398u, 0x00000006u, 0x00000002u, 0x00030047u, + 0x00000399u, 0x00000002u, 0x00050048u, 0x00000399u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x0000039bu, 0x00000021u, 0x00000007u, 0x00040047u, 0x0000039bu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000003b2u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, + 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, + 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, + 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, + 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, + 0x00000007u, 0x00050021u, 0x00000022u, 0x00000008u, 0x00000007u, 0x0000000du, 0x00040015u, 0x00000028u, + 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000028u, 0x00000029u, 0x00000010u, 0x00020014u, 0x00000031u, + 0x0004002bu, 0x00000006u, 0x00000033u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000039u, 0x007fffffu, + 0x0004002bu, 0x00000006u, 0x0000003bu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000042u, 0x00000040u, + 0x0004002bu, 0x00000006u, 0x00000044u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000048u, 0x00007fffu, + 0x0004002bu, 0x00000006u, 0x0000004bu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000057u, 0x00008000u, + 0x0004002bu, 0x00000028u, 0x0000005cu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000005eu, 0x0000001fu, + 0x0004002bu, 0x00000006u, 0x00000062u, 0x000003ffu, 0x0004002bu, 0x00000028u, 0x0000006bu, 0x0000000du, + 0x0004002bu, 0x00000006u, 0x00000082u, 0x00000400u, 0x0004002bu, 0x00000028u, 0x00000085u, 0x00000001u, + 0x0004002bu, 0x00000006u, 0x0000008du, 0x00000071u, 0x0004002bu, 0x00000028u, 0x00000090u, 0x00000017u, + 0x0004002bu, 0x00000006u, 0x0000009au, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000aeu, 0x000000ffu, + 0x00040020u, 0x000000b0u, 0x00000007u, 0x00000028u, 0x0004002bu, 0x00000028u, 0x000000b4u, 0x0000007fu, + 0x0004002bu, 0x00000028u, 0x000000b6u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000c0u, 0x00007c00u, + 0x0004002bu, 0x00000006u, 0x000000c7u, 0x00000200u, 0x0004002bu, 0x00000028u, 0x000000d0u, 0x0000001fu, + 0x0004002bu, 0x00000028u, 0x000000d8u, 0x00000000u, 0x0004002bu, 0x00000028u, 0x000000ddu, 0xfffffff6u, + 0x0004002bu, 0x00000006u, 0x000000e3u, 0x00800000u, 0x0004002bu, 0x00000028u, 0x000000e7u, 0x0000000eu, + 0x0004002bu, 0x00000006u, 0x0000011au, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x0000011du, 0x00001000u, + 0x0004002bu, 0x00000006u, 0x00000152u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000153u, 0x00000108u, + 0x0004002bu, 0x00000006u, 0x00000154u, 0x00000080u, 0x0004001cu, 0x00000155u, 0x00000008u, 0x00000154u, + 0x00040020u, 0x00000156u, 0x00000004u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000004u, + 0x00040020u, 0x0000015au, 0x00000004u, 0x00000008u, 0x00040017u, 0x0000017au, 0x00000006u, 0x00000003u, + 0x00040020u, 0x0000017bu, 0x00000001u, 0x0000017au, 0x0004003bu, 0x0000017bu, 0x0000017cu, 0x00000001u, + 0x00040020u, 0x0000017du, 0x00000001u, 0x00000006u, 0x001c001eu, 0x00000181u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000028u, 0x00000028u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, + 0x00040020u, 0x00000182u, 0x00000009u, 0x00000181u, 0x0004003bu, 0x00000182u, 0x00000183u, 0x00000009u, + 0x00040020u, 0x00000184u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000028u, 0x0000019au, 0x00000004u, + 0x0004003bu, 0x0000017bu, 0x0000019fu, 0x00000001u, 0x0004002bu, 0x00000028u, 0x000001a5u, 0x00000002u, + 0x0004002bu, 0x00000028u, 0x000001afu, 0x00000005u, 0x0003001du, 0x000001b4u, 0x00000006u, 0x0003001eu, + 0x000001b5u, 0x000001b4u, 0x00040020u, 0x000001b6u, 0x0000000cu, 0x000001b5u, 0x0004003bu, 0x000001b6u, + 0x000001b7u, 0x0000000cu, 0x00040020u, 0x000001bbu, 0x0000000cu, 0x00000006u, 0x0003001du, 0x000001e0u, + 0x00000006u, 0x0003001eu, 0x000001e1u, 0x000001e0u, 0x00040020u, 0x000001e2u, 0x0000000cu, 0x000001e1u, + 0x0004003bu, 0x000001e2u, 0x000001e3u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000001e4u, 0x00000016u, + 0x0004002bu, 0x00000028u, 0x000001f8u, 0x00000007u, 0x00040020u, 0x000001f9u, 0x00000009u, 0x00000028u, + 0x0004002bu, 0x00000028u, 0x00000208u, 0x00000006u, 0x0004002bu, 0x00000028u, 0x00000214u, 0x00000008u, + 0x0004002bu, 0x00000006u, 0x00000235u, 0x00000008u, 0x0004001cu, 0x00000237u, 0x00000008u, 0x00000235u, + 0x00040020u, 0x00000238u, 0x00000007u, 0x00000237u, 0x0004002bu, 0x00000008u, 0x0000023bu, 0x00000000u, + 0x0004002bu, 0x00000008u, 0x00000240u, 0xff800000u, 0x0003001du, 0x00000252u, 0x00000006u, 0x0003001eu, + 0x00000253u, 0x00000252u, 0x00040020u, 0x00000254u, 0x0000000cu, 0x00000253u, 0x0004003bu, 0x00000254u, + 0x00000255u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x00000256u, 0x00000015u, 0x0004002bu, 0x00000028u, + 0x00000261u, 0x00000003u, 0x0004002bu, 0x00000028u, 0x00000273u, 0x00000009u, 0x0004002bu, 0x00000028u, + 0x0000027du, 0x0000000bu, 0x00040032u, 0x00000006u, 0x0000028eu, 0x00000000u, 0x00060034u, 0x00000031u, + 0x0000028fu, 0x000000aau, 0x0000028eu, 0x0000003bu, 0x0003001du, 0x00000293u, 0x00000006u, 0x0003001eu, + 0x00000294u, 0x00000293u, 0x00040020u, 0x00000295u, 0x0000000cu, 0x00000294u, 0x0004003bu, 0x00000295u, + 0x00000296u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x00000297u, 0x00000011u, 0x00040015u, 0x000002a3u, + 0x00000010u, 0x00000000u, 0x0003001du, 0x000002a4u, 0x000002a3u, 0x0003001eu, 0x000002a5u, 0x000002a4u, + 0x00040020u, 0x000002a6u, 0x0000000cu, 0x000002a5u, 0x0004003bu, 0x000002a6u, 0x000002a7u, 0x0000000cu, + 0x00040020u, 0x000002afu, 0x0000000cu, 0x000002a3u, 0x00040032u, 0x00000006u, 0x000002b7u, 0x00000000u, + 0x00060034u, 0x00000031u, 0x000002b8u, 0x000000aau, 0x000002b7u, 0x0000003bu, 0x0003001du, 0x000002bcu, + 0x00000006u, 0x0003001eu, 0x000002bdu, 0x000002bcu, 0x00040020u, 0x000002beu, 0x0000000cu, 0x000002bdu, + 0x0004003bu, 0x000002beu, 0x000002bfu, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x000002c0u, 0x00000012u, + 0x0003001du, 0x000002ccu, 0x000002a3u, 0x0003001eu, 0x000002cdu, 0x000002ccu, 0x00040020u, 0x000002ceu, + 0x0000000cu, 0x000002cdu, 0x0004003bu, 0x000002ceu, 0x000002cfu, 0x0000000cu, 0x0004002bu, 0x00000028u, + 0x000002ebu, 0x00000018u, 0x00040020u, 0x000002ecu, 0x00000009u, 0x00000008u, 0x0004002bu, 0x00000028u, + 0x000002f0u, 0x00000019u, 0x0004002bu, 0x00000028u, 0x00000313u, 0x0000000cu, 0x00040032u, 0x00000006u, + 0x00000334u, 0x00000000u, 0x00060034u, 0x00000031u, 0x00000335u, 0x000000aau, 0x00000334u, 0x0000003bu, + 0x0003001du, 0x00000339u, 0x00000006u, 0x0003001eu, 0x0000033au, 0x00000339u, 0x00040020u, 0x0000033bu, + 0x0000000cu, 0x0000033au, 0x0004003bu, 0x0000033bu, 0x0000033cu, 0x0000000cu, 0x0004002bu, 0x00000028u, + 0x0000033du, 0x00000013u, 0x0003001du, 0x00000349u, 0x000002a3u, 0x0003001eu, 0x0000034au, 0x00000349u, + 0x00040020u, 0x0000034bu, 0x0000000cu, 0x0000034au, 0x0004003bu, 0x0000034bu, 0x0000034cu, 0x0000000cu, + 0x0004002bu, 0x00000008u, 0x0000036bu, 0x3f800000u, 0x00040032u, 0x00000006u, 0x00000380u, 0x00000000u, + 0x00060034u, 0x00000031u, 0x00000381u, 0x000000aau, 0x00000380u, 0x0000003bu, 0x0003001du, 0x00000384u, + 0x00000006u, 0x0003001eu, 0x00000385u, 0x00000384u, 0x00040020u, 0x00000386u, 0x0000000cu, 0x00000385u, + 0x0004003bu, 0x00000386u, 0x00000387u, 0x0000000cu, 0x0004002bu, 0x00000028u, 0x00000388u, 0x00000014u, + 0x0003001du, 0x00000398u, 0x000002a3u, 0x0003001eu, 0x00000399u, 0x00000398u, 0x00040020u, 0x0000039au, + 0x0000000cu, 0x00000399u, 0x0004003bu, 0x0000039au, 0x0000039bu, 0x0000000cu, 0x0003002au, 0x00000031u, + 0x000003adu, 0x0006002cu, 0x0000017au, 0x000003b2u, 0x00000154u, 0x0000004bu, 0x0000004bu, 0x00050036u, + 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, + 0x00000179u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018eu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000193u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000198u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000019eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a2u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a8u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d6u, 0x00000007u, 0x0004003bu, 0x000000b0u, + 0x000001dfu, 0x00000007u, 0x0004003bu, 0x000000b0u, 0x000001edu, 0x00000007u, 0x0004003bu, 0x000000b0u, + 0x000001f7u, 0x00000007u, 0x0004003bu, 0x000000b0u, 0x000001fdu, 0x00000007u, 0x0004003bu, 0x000000b0u, + 0x00000207u, 0x00000007u, 0x0004003bu, 0x000000b0u, 0x0000020cu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000224u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000022eu, 0x00000007u, 0x0004003bu, 0x00000238u, + 0x00000239u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000023fu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000241u, 0x00000007u, 0x0004003bu, 0x000000b0u, 0x00000247u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000251u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000026bu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000271u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000282u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000283u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000290u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000002b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b4u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000002b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002dau, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000002dbu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002e3u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000002e4u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002e6u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000002e9u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002feu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000302u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000307u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000311u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000321u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000322u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000336u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000357u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000358u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000365u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000368u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000370u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000371u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000003a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003a9u, 0x00000007u, 0x00050041u, 0x0000017du, + 0x0000017eu, 0x0000017cu, 0x0000003bu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x0000017eu, 0x0003003eu, + 0x00000179u, 0x0000017fu, 0x0004003du, 0x00000006u, 0x00000180u, 0x00000179u, 0x00050041u, 0x00000184u, + 0x00000185u, 0x00000183u, 0x000000d8u, 0x0004003du, 0x00000006u, 0x00000186u, 0x00000185u, 0x00050041u, + 0x00000184u, 0x00000187u, 0x00000183u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000188u, 0x00000187u, + 0x00050084u, 0x00000006u, 0x00000189u, 0x00000186u, 0x00000188u, 0x000500aeu, 0x00000031u, 0x0000018au, + 0x00000180u, 0x00000189u, 0x000300f7u, 0x0000018cu, 0x00000000u, 0x000400fau, 0x0000018au, 0x0000018bu, + 0x0000018cu, 0x000200f8u, 0x0000018bu, 0x000100fdu, 0x000200f8u, 0x0000018cu, 0x0004003du, 0x00000006u, + 0x0000018fu, 0x00000179u, 0x00050041u, 0x00000184u, 0x00000190u, 0x00000183u, 0x00000085u, 0x0004003du, + 0x00000006u, 0x00000191u, 0x00000190u, 0x00050086u, 0x00000006u, 0x00000192u, 0x0000018fu, 0x00000191u, + 0x0003003eu, 0x0000018eu, 0x00000192u, 0x0004003du, 0x00000006u, 0x00000194u, 0x00000179u, 0x00050041u, + 0x00000184u, 0x00000195u, 0x00000183u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000196u, 0x00000195u, + 0x00050089u, 0x00000006u, 0x00000197u, 0x00000194u, 0x00000196u, 0x0003003eu, 0x00000193u, 0x00000197u, + 0x0004003du, 0x00000006u, 0x00000199u, 0x00000193u, 0x00050041u, 0x00000184u, 0x0000019bu, 0x00000183u, + 0x0000019au, 0x0004003du, 0x00000006u, 0x0000019cu, 0x0000019bu, 0x00050086u, 0x00000006u, 0x0000019du, + 0x00000199u, 0x0000019cu, 0x0003003eu, 0x00000198u, 0x0000019du, 0x00050041u, 0x0000017du, 0x000001a0u, + 0x0000019fu, 0x0000003bu, 0x0004003du, 0x00000006u, 0x000001a1u, 0x000001a0u, 0x0003003eu, 0x0000019eu, + 0x000001a1u, 0x00050041u, 0x00000184u, 0x000001a3u, 0x00000183u, 0x00000090u, 0x0004003du, 0x00000006u, + 0x000001a4u, 0x000001a3u, 0x000500c2u, 0x00000006u, 0x000001a6u, 0x000001a4u, 0x000001a5u, 0x0003003eu, + 0x000001a2u, 0x000001a6u, 0x0003003eu, 0x000001a7u, 0x0000003bu, 0x0003003eu, 0x000001a8u, 0x0000003bu, + 0x000200f9u, 0x000001a9u, 0x000200f8u, 0x000001a9u, 0x000400f6u, 0x000001abu, 0x000001acu, 0x00000000u, + 0x000200f9u, 0x000001adu, 0x000200f8u, 0x000001adu, 0x0004003du, 0x00000006u, 0x000001aeu, 0x000001a8u, + 0x00050041u, 0x00000184u, 0x000001b0u, 0x00000183u, 0x000001afu, 0x0004003du, 0x00000006u, 0x000001b1u, + 0x000001b0u, 0x000500b0u, 0x00000031u, 0x000001b2u, 0x000001aeu, 0x000001b1u, 0x000400fau, 0x000001b2u, + 0x000001aau, 0x000001abu, 0x000200f8u, 0x000001aau, 0x0004003du, 0x00000006u, 0x000001b3u, 0x0000018eu, + 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001a2u, 0x0004003du, 0x00000006u, 0x000001b9u, 0x000001a8u, + 0x00050080u, 0x00000006u, 0x000001bau, 0x000001b8u, 0x000001b9u, 0x00060041u, 0x000001bbu, 0x000001bcu, + 0x000001b7u, 0x000000d8u, 0x000001bau, 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001bcu, 0x000500aeu, + 0x00000031u, 0x000001beu, 0x000001b3u, 0x000001bdu, 0x000300f7u, 0x000001c0u, 0x00000000u, 0x000400fau, + 0x000001beu, 0x000001bfu, 0x000001c0u, 0x000200f8u, 0x000001bfu, 0x0004003du, 0x00000006u, 0x000001c1u, + 0x0000018eu, 0x0004003du, 0x00000006u, 0x000001c2u, 0x000001a2u, 0x0004003du, 0x00000006u, 0x000001c3u, + 0x000001a8u, 0x00050080u, 0x00000006u, 0x000001c4u, 0x000001c2u, 0x000001c3u, 0x00050080u, 0x00000006u, + 0x000001c5u, 0x000001c4u, 0x0000004bu, 0x00060041u, 0x000001bbu, 0x000001c6u, 0x000001b7u, 0x000000d8u, + 0x000001c5u, 0x0004003du, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x000500b0u, 0x00000031u, 0x000001c8u, + 0x000001c1u, 0x000001c7u, 0x000200f9u, 0x000001c0u, 0x000200f8u, 0x000001c0u, 0x000700f5u, 0x00000031u, + 0x000001c9u, 0x000001beu, 0x000001aau, 0x000001c8u, 0x000001bfu, 0x000300f7u, 0x000001cbu, 0x00000000u, + 0x000400fau, 0x000001c9u, 0x000001cau, 0x000001cbu, 0x000200f8u, 0x000001cau, 0x0004003du, 0x00000006u, + 0x000001ccu, 0x000001a8u, 0x0003003eu, 0x000001a7u, 0x000001ccu, 0x000200f9u, 0x000001abu, 0x000200f8u, + 0x000001cbu, 0x000200f9u, 0x000001acu, 0x000200f8u, 0x000001acu, 0x0004003du, 0x00000006u, 0x000001ceu, + 0x000001a8u, 0x00050080u, 0x00000006u, 0x000001cfu, 0x000001ceu, 0x00000085u, 0x0003003eu, 0x000001a8u, + 0x000001cfu, 0x000200f9u, 0x000001a9u, 0x000200f8u, 0x000001abu, 0x0004003du, 0x00000006u, 0x000001d1u, + 0x000001a2u, 0x0004003du, 0x00000006u, 0x000001d2u, 0x000001a7u, 0x00050080u, 0x00000006u, 0x000001d3u, + 0x000001d1u, 0x000001d2u, 0x00060041u, 0x000001bbu, 0x000001d4u, 0x000001b7u, 0x000000d8u, 0x000001d3u, + 0x0004003du, 0x00000006u, 0x000001d5u, 0x000001d4u, 0x0003003eu, 0x000001d0u, 0x000001d5u, 0x0004003du, + 0x00000006u, 0x000001d7u, 0x000001a2u, 0x0004003du, 0x00000006u, 0x000001d8u, 0x000001a7u, 0x00050080u, + 0x00000006u, 0x000001d9u, 0x000001d7u, 0x000001d8u, 0x00050080u, 0x00000006u, 0x000001dau, 0x000001d9u, + 0x0000004bu, 0x00060041u, 0x000001bbu, 0x000001dbu, 0x000001b7u, 0x000000d8u, 0x000001dau, 0x0004003du, + 0x00000006u, 0x000001dcu, 0x000001dbu, 0x0004003du, 0x00000006u, 0x000001ddu, 0x000001d0u, 0x00050082u, + 0x00000006u, 0x000001deu, 0x000001dcu, 0x000001ddu, 0x0003003eu, 0x000001d6u, 0x000001deu, 0x00050041u, + 0x00000184u, 0x000001e5u, 0x00000183u, 0x000001e4u, 0x0004003du, 0x00000006u, 0x000001e6u, 0x000001e5u, + 0x000500c2u, 0x00000006u, 0x000001e7u, 0x000001e6u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001e8u, + 0x000001a7u, 0x00050080u, 0x00000006u, 0x000001e9u, 0x000001e7u, 0x000001e8u, 0x00060041u, 0x000001bbu, + 0x000001eau, 0x000001e3u, 0x000000d8u, 0x000001e9u, 0x0004003du, 0x00000006u, 0x000001ebu, 0x000001eau, + 0x0004007cu, 0x00000028u, 0x000001ecu, 0x000001ebu, 0x0003003eu, 0x000001dfu, 0x000001ecu, 0x0004003du, + 0x00000028u, 0x000001eeu, 0x000001dfu, 0x0004003du, 0x00000006u, 0x000001efu, 0x000001d6u, 0x0004007cu, + 0x00000028u, 0x000001f0u, 0x000001efu, 0x00050082u, 0x00000028u, 0x000001f1u, 0x000001eeu, 0x000001f0u, + 0x0004003du, 0x00000006u, 0x000001f2u, 0x0000018eu, 0x0004003du, 0x00000006u, 0x000001f3u, 0x000001d0u, + 0x00050082u, 0x00000006u, 0x000001f4u, 0x000001f2u, 0x000001f3u, 0x0004007cu, 0x00000028u, 0x000001f5u, + 0x000001f4u, 0x00050080u, 0x00000028u, 0x000001f6u, 0x000001f1u, 0x000001f5u, 0x0003003eu, 0x000001edu, + 0x000001f6u, 0x00050041u, 0x000001f9u, 0x000001fau, 0x00000183u, 0x000001f8u, 0x0004003du, 0x00000028u, + 0x000001fbu, 0x000001fau, 0x000500afu, 0x00000031u, 0x000001fcu, 0x000001fbu, 0x000000d8u, 0x000300f7u, + 0x000001ffu, 0x00000000u, 0x000400fau, 0x000001fcu, 0x000001feu, 0x00000205u, 0x000200f8u, 0x000001feu, + 0x0004003du, 0x00000028u, 0x00000200u, 0x000001edu, 0x00050041u, 0x000001f9u, 0x00000201u, 0x00000183u, + 0x000001f8u, 0x0004003du, 0x00000028u, 0x00000202u, 0x00000201u, 0x00050082u, 0x00000028u, 0x00000203u, + 0x00000200u, 0x00000202u, 0x0007000cu, 0x00000028u, 0x00000204u, 0x00000001u, 0x0000002au, 0x000000d8u, + 0x00000203u, 0x0003003eu, 0x000001fdu, 0x00000204u, 0x000200f9u, 0x000001ffu, 0x000200f8u, 0x00000205u, + 0x0003003eu, 0x000001fdu, 0x000000d8u, 0x000200f9u, 0x000001ffu, 0x000200f8u, 0x000001ffu, 0x0004003du, + 0x00000028u, 0x00000206u, 0x000001fdu, 0x0003003eu, 0x000001f7u, 0x00000206u, 0x00050041u, 0x00000184u, + 0x00000209u, 0x00000183u, 0x00000208u, 0x0004003du, 0x00000006u, 0x0000020au, 0x00000209u, 0x000500abu, + 0x00000031u, 0x0000020bu, 0x0000020au, 0x0000003bu, 0x000300f7u, 0x0000020eu, 0x00000000u, 0x000400fau, + 0x0000020bu, 0x0000020du, 0x00000210u, 0x000200f8u, 0x0000020du, 0x0004003du, 0x00000028u, 0x0000020fu, + 0x000001edu, 0x0003003eu, 0x0000020cu, 0x0000020fu, 0x000200f9u, 0x0000020eu, 0x000200f8u, 0x00000210u, + 0x0004003du, 0x00000028u, 0x00000211u, 0x000001dfu, 0x00050082u, 0x00000028u, 0x00000212u, 0x00000211u, + 0x00000085u, 0x0003003eu, 0x0000020cu, 0x00000212u, 0x000200f9u, 0x0000020eu, 0x000200f8u, 0x0000020eu, + 0x0004003du, 0x00000028u, 0x00000213u, 0x0000020cu, 0x0003003eu, 0x00000207u, 0x00000213u, 0x00050041u, + 0x000001f9u, 0x00000215u, 0x00000183u, 0x00000214u, 0x0004003du, 0x00000028u, 0x00000216u, 0x00000215u, + 0x000500afu, 0x00000031u, 0x00000217u, 0x00000216u, 0x000000d8u, 0x000300f7u, 0x00000219u, 0x00000000u, + 0x000400fau, 0x00000217u, 0x00000218u, 0x00000219u, 0x000200f8u, 0x00000218u, 0x0004003du, 0x00000028u, + 0x0000021au, 0x00000207u, 0x0004003du, 0x00000028u, 0x0000021bu, 0x000001edu, 0x00050041u, 0x000001f9u, + 0x0000021cu, 0x00000183u, 0x00000214u, 0x0004003du, 0x00000028u, 0x0000021du, 0x0000021cu, 0x00050080u, + 0x00000028u, 0x0000021eu, 0x0000021bu, 0x0000021du, 0x0007000cu, 0x00000028u, 0x0000021fu, 0x00000001u, + 0x00000027u, 0x0000021au, 0x0000021eu, 0x0003003eu, 0x00000207u, 0x0000021fu, 0x000200f9u, 0x00000219u, + 0x000200f8u, 0x00000219u, 0x0004003du, 0x00000028u, 0x00000220u, 0x00000207u, 0x0004003du, 0x00000028u, + 0x00000221u, 0x000001dfu, 0x00050082u, 0x00000028u, 0x00000222u, 0x00000221u, 0x00000085u, 0x0007000cu, + 0x00000028u, 0x00000223u, 0x00000001u, 0x00000027u, 0x00000220u, 0x00000222u, 0x0003003eu, 0x00000207u, + 0x00000223u, 0x0004003du, 0x00000006u, 0x00000225u, 0x0000018eu, 0x00050041u, 0x00000184u, 0x00000226u, + 0x00000183u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000227u, 0x00000226u, 0x00050084u, 0x00000006u, + 0x00000228u, 0x00000225u, 0x00000227u, 0x0004003du, 0x00000006u, 0x00000229u, 0x00000193u, 0x00050080u, + 0x00000006u, 0x0000022au, 0x00000228u, 0x00000229u, 0x00050041u, 0x00000184u, 0x0000022bu, 0x00000183u, + 0x000001a5u, 0x0004003du, 0x00000006u, 0x0000022cu, 0x0000022bu, 0x00050084u, 0x00000006u, 0x0000022du, + 0x0000022au, 0x0000022cu, 0x0003003eu, 0x00000224u, 0x0000022du, 0x0003003eu, 0x0000022eu, 0x0000003bu, + 0x000200f9u, 0x0000022fu, 0x000200f8u, 0x0000022fu, 0x000400f6u, 0x00000231u, 0x00000232u, 0x00000000u, + 0x000200f9u, 0x00000233u, 0x000200f8u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000234u, 0x0000022eu, + 0x000500b0u, 0x00000031u, 0x00000236u, 0x00000234u, 0x00000235u, 0x000400fau, 0x00000236u, 0x00000230u, + 0x00000231u, 0x000200f8u, 0x00000230u, 0x0004003du, 0x00000006u, 0x0000023au, 0x0000022eu, 0x00050041u, + 0x0000000du, 0x0000023cu, 0x00000239u, 0x0000023au, 0x0003003eu, 0x0000023cu, 0x0000023bu, 0x000200f9u, + 0x00000232u, 0x000200f8u, 0x00000232u, 0x0004003du, 0x00000006u, 0x0000023du, 0x0000022eu, 0x00050080u, + 0x00000006u, 0x0000023eu, 0x0000023du, 0x00000085u, 0x0003003eu, 0x0000022eu, 0x0000023eu, 0x000200f9u, + 0x0000022fu, 0x000200f8u, 0x00000231u, 0x0003003eu, 0x0000023fu, 0x00000240u, 0x0003003eu, 0x00000241u, + 0x0000023bu, 0x0004003du, 0x00000028u, 0x00000242u, 0x00000207u, 0x0004003du, 0x00000028u, 0x00000243u, + 0x000001f7u, 0x000500afu, 0x00000031u, 0x00000244u, 0x00000242u, 0x00000243u, 0x000300f7u, 0x00000246u, + 0x00000000u, 0x000400fau, 0x00000244u, 0x00000245u, 0x00000246u, 0x000200f8u, 0x00000245u, 0x0004003du, + 0x00000028u, 0x00000248u, 0x000001f7u, 0x0003003eu, 0x00000247u, 0x00000248u, 0x000200f9u, 0x00000249u, + 0x000200f8u, 0x00000249u, 0x000400f6u, 0x0000024bu, 0x0000024cu, 0x00000000u, 0x000200f9u, 0x0000024du, + 0x000200f8u, 0x0000024du, 0x0004003du, 0x00000028u, 0x0000024eu, 0x00000247u, 0x0004003du, 0x00000028u, + 0x0000024fu, 0x00000207u, 0x000500b3u, 0x00000031u, 0x00000250u, 0x0000024eu, 0x0000024fu, 0x000400fau, + 0x00000250u, 0x0000024au, 0x0000024bu, 0x000200f8u, 0x0000024au, 0x00050041u, 0x00000184u, 0x00000257u, + 0x00000183u, 0x00000256u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000257u, 0x000500c2u, 0x00000006u, + 0x00000259u, 0x00000258u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x0000025au, 0x000001a7u, 0x00050041u, + 0x00000184u, 0x0000025bu, 0x00000183u, 0x000000b6u, 0x0004003du, 0x00000006u, 0x0000025cu, 0x0000025bu, + 0x00050084u, 0x00000006u, 0x0000025du, 0x0000025au, 0x0000025cu, 0x00050080u, 0x00000006u, 0x0000025eu, + 0x00000259u, 0x0000025du, 0x0004003du, 0x00000028u, 0x0000025fu, 0x00000247u, 0x0004007cu, 0x00000006u, + 0x00000260u, 0x0000025fu, 0x00050041u, 0x00000184u, 0x00000262u, 0x00000183u, 0x00000261u, 0x0004003du, + 0x00000006u, 0x00000263u, 0x00000262u, 0x00050086u, 0x00000006u, 0x00000264u, 0x00000260u, 0x00000263u, + 0x00050041u, 0x00000184u, 0x00000265u, 0x00000183u, 0x00000029u, 0x0004003du, 0x00000006u, 0x00000266u, + 0x00000265u, 0x00050084u, 0x00000006u, 0x00000267u, 0x00000264u, 0x00000266u, 0x00050080u, 0x00000006u, + 0x00000268u, 0x0000025eu, 0x00000267u, 0x00060041u, 0x000001bbu, 0x00000269u, 0x00000255u, 0x000000d8u, + 0x00000268u, 0x0004003du, 0x00000006u, 0x0000026au, 0x00000269u, 0x0003003eu, 0x00000251u, 0x0000026au, + 0x0004003du, 0x00000028u, 0x0000026cu, 0x00000247u, 0x0004007cu, 0x00000006u, 0x0000026du, 0x0000026cu, + 0x00050041u, 0x00000184u, 0x0000026eu, 0x00000183u, 0x00000261u, 0x0004003du, 0x00000006u, 0x0000026fu, + 0x0000026eu, 0x00050089u, 0x00000006u, 0x00000270u, 0x0000026du, 0x0000026fu, 0x0003003eu, 0x0000026bu, + 0x00000270u, 0x0004003du, 0x00000006u, 0x00000272u, 0x00000251u, 0x00050041u, 0x00000184u, 0x00000274u, + 0x00000183u, 0x00000273u, 0x0004003du, 0x00000006u, 0x00000275u, 0x00000274u, 0x00050084u, 0x00000006u, + 0x00000276u, 0x00000272u, 0x00000275u, 0x0004003du, 0x00000006u, 0x00000277u, 0x0000026bu, 0x00050041u, + 0x00000184u, 0x00000278u, 0x00000183u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000279u, 0x00000278u, + 0x00050084u, 0x00000006u, 0x0000027au, 0x00000277u, 0x00000279u, 0x00050080u, 0x00000006u, 0x0000027bu, + 0x00000276u, 0x0000027au, 0x0004003du, 0x00000006u, 0x0000027cu, 0x00000198u, 0x00050041u, 0x00000184u, + 0x0000027eu, 0x00000183u, 0x0000027du, 0x0004003du, 0x00000006u, 0x0000027fu, 0x0000027eu, 0x00050084u, + 0x00000006u, 0x00000280u, 0x0000027cu, 0x0000027fu, 0x00050080u, 0x00000006u, 0x00000281u, 0x0000027bu, + 0x00000280u, 0x0003003eu, 0x00000271u, 0x00000281u, 0x0003003eu, 0x00000282u, 0x0000023bu, 0x0004003du, + 0x00000006u, 0x00000284u, 0x0000019eu, 0x0003003eu, 0x00000283u, 0x00000284u, 0x000200f9u, 0x00000285u, + 0x000200f8u, 0x00000285u, 0x000400f6u, 0x00000287u, 0x00000288u, 0x00000000u, 0x000200f9u, 0x00000289u, + 0x000200f8u, 0x00000289u, 0x0004003du, 0x00000006u, 0x0000028au, 0x00000283u, 0x00050041u, 0x00000184u, + 0x0000028bu, 0x00000183u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x0000028cu, 0x0000028bu, 0x000500b0u, + 0x00000031u, 0x0000028du, 0x0000028au, 0x0000028cu, 0x000400fau, 0x0000028du, 0x00000286u, 0x00000287u, + 0x000200f8u, 0x00000286u, 0x000300f7u, 0x00000292u, 0x00000000u, 0x000400fau, 0x0000028fu, 0x00000291u, + 0x000002a2u, 0x000200f8u, 0x00000291u, 0x00050041u, 0x00000184u, 0x00000298u, 0x00000183u, 0x00000297u, + 0x0004003du, 0x00000006u, 0x00000299u, 0x00000298u, 0x000500c2u, 0x00000006u, 0x0000029au, 0x00000299u, + 0x000001a5u, 0x0004003du, 0x00000006u, 0x0000029bu, 0x00000224u, 0x0004003du, 0x00000006u, 0x0000029cu, + 0x00000283u, 0x00050080u, 0x00000006u, 0x0000029du, 0x0000029bu, 0x0000029cu, 0x00050080u, 0x00000006u, + 0x0000029eu, 0x0000029au, 0x0000029du, 0x00060041u, 0x000001bbu, 0x0000029fu, 0x00000296u, 0x000000d8u, + 0x0000029eu, 0x0004003du, 0x00000006u, 0x000002a0u, 0x0000029fu, 0x0004007cu, 0x00000008u, 0x000002a1u, + 0x000002a0u, 0x0003003eu, 0x00000290u, 0x000002a1u, 0x000200f9u, 0x00000292u, 0x000200f8u, 0x000002a2u, + 0x00050041u, 0x00000184u, 0x000002a8u, 0x00000183u, 0x00000297u, 0x0004003du, 0x00000006u, 0x000002a9u, + 0x000002a8u, 0x000500c2u, 0x00000006u, 0x000002aau, 0x000002a9u, 0x00000085u, 0x0004003du, 0x00000006u, + 0x000002abu, 0x00000224u, 0x0004003du, 0x00000006u, 0x000002acu, 0x00000283u, 0x00050080u, 0x00000006u, + 0x000002adu, 0x000002abu, 0x000002acu, 0x00050080u, 0x00000006u, 0x000002aeu, 0x000002aau, 0x000002adu, + 0x00060041u, 0x000002afu, 0x000002b0u, 0x000002a7u, 0x000000d8u, 0x000002aeu, 0x0004003du, 0x000002a3u, + 0x000002b1u, 0x000002b0u, 0x00040071u, 0x00000006u, 0x000002b2u, 0x000002b1u, 0x0003003eu, 0x000002b3u, + 0x000002b2u, 0x0003003eu, 0x000002b4u, 0x0000028eu, 0x00060039u, 0x00000008u, 0x000002b5u, 0x0000001bu, + 0x000002b3u, 0x000002b4u, 0x0003003eu, 0x00000290u, 0x000002b5u, 0x000200f9u, 0x00000292u, 0x000200f8u, + 0x00000292u, 0x0004003du, 0x00000008u, 0x000002b6u, 0x00000290u, 0x000300f7u, 0x000002bbu, 0x00000000u, + 0x000400fau, 0x000002b8u, 0x000002bau, 0x000002cbu, 0x000200f8u, 0x000002bau, 0x00050041u, 0x00000184u, + 0x000002c1u, 0x00000183u, 0x000002c0u, 0x0004003du, 0x00000006u, 0x000002c2u, 0x000002c1u, 0x000500c2u, + 0x00000006u, 0x000002c3u, 0x000002c2u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000002c4u, 0x00000271u, + 0x0004003du, 0x00000006u, 0x000002c5u, 0x00000283u, 0x00050080u, 0x00000006u, 0x000002c6u, 0x000002c4u, + 0x000002c5u, 0x00050080u, 0x00000006u, 0x000002c7u, 0x000002c3u, 0x000002c6u, 0x00060041u, 0x000001bbu, + 0x000002c8u, 0x000002bfu, 0x000000d8u, 0x000002c7u, 0x0004003du, 0x00000006u, 0x000002c9u, 0x000002c8u, + 0x0004007cu, 0x00000008u, 0x000002cau, 0x000002c9u, 0x0003003eu, 0x000002b9u, 0x000002cau, 0x000200f9u, + 0x000002bbu, 0x000200f8u, 0x000002cbu, 0x00050041u, 0x00000184u, 0x000002d0u, 0x00000183u, 0x000002c0u, + 0x0004003du, 0x00000006u, 0x000002d1u, 0x000002d0u, 0x000500c2u, 0x00000006u, 0x000002d2u, 0x000002d1u, + 0x00000085u, 0x0004003du, 0x00000006u, 0x000002d3u, 0x00000271u, 0x0004003du, 0x00000006u, 0x000002d4u, + 0x00000283u, 0x00050080u, 0x00000006u, 0x000002d5u, 0x000002d3u, 0x000002d4u, 0x00050080u, 0x00000006u, + 0x000002d6u, 0x000002d2u, 0x000002d5u, 0x00060041u, 0x000002afu, 0x000002d7u, 0x000002cfu, 0x000000d8u, + 0x000002d6u, 0x0004003du, 0x000002a3u, 0x000002d8u, 0x000002d7u, 0x00040071u, 0x00000006u, 0x000002d9u, + 0x000002d8u, 0x0003003eu, 0x000002dau, 0x000002d9u, 0x0003003eu, 0x000002dbu, 0x000002b7u, 0x00060039u, + 0x00000008u, 0x000002dcu, 0x0000001bu, 0x000002dau, 0x000002dbu, 0x0003003eu, 0x000002b9u, 0x000002dcu, + 0x000200f9u, 0x000002bbu, 0x000200f8u, 0x000002bbu, 0x0004003du, 0x00000008u, 0x000002ddu, 0x000002b9u, + 0x00050085u, 0x00000008u, 0x000002deu, 0x000002b6u, 0x000002ddu, 0x0004003du, 0x00000008u, 0x000002dfu, + 0x00000282u, 0x00050081u, 0x00000008u, 0x000002e0u, 0x000002dfu, 0x000002deu, 0x0003003eu, 0x00000282u, + 0x000002e0u, 0x000200f9u, 0x00000288u, 0x000200f8u, 0x00000288u, 0x0004003du, 0x00000006u, 0x000002e1u, + 0x00000283u, 0x00050080u, 0x00000006u, 0x000002e2u, 0x000002e1u, 0x00000154u, 0x0003003eu, 0x00000283u, + 0x000002e2u, 0x000200f9u, 0x00000285u, 0x000200f8u, 0x00000287u, 0x0004003du, 0x00000006u, 0x000002e5u, + 0x0000019eu, 0x0003003eu, 0x000002e4u, 0x000002e5u, 0x0004003du, 0x00000008u, 0x000002e7u, 0x00000282u, + 0x0003003eu, 0x000002e6u, 0x000002e7u, 0x00060039u, 0x00000008u, 0x000002e8u, 0x00000025u, 0x000002e4u, + 0x000002e6u, 0x0003003eu, 0x000002e3u, 0x000002e8u, 0x0004003du, 0x00000008u, 0x000002eau, 0x000002e3u, + 0x00050041u, 0x000002ecu, 0x000002edu, 0x00000183u, 0x000002ebu, 0x0004003du, 0x00000008u, 0x000002eeu, + 0x000002edu, 0x00050085u, 0x00000008u, 0x000002efu, 0x000002eau, 0x000002eeu, 0x0003003eu, 0x000002e9u, + 0x000002efu, 0x00050041u, 0x000002ecu, 0x000002f1u, 0x00000183u, 0x000002f0u, 0x0004003du, 0x00000008u, + 0x000002f2u, 0x000002f1u, 0x000500bau, 0x00000031u, 0x000002f3u, 0x000002f2u, 0x0000023bu, 0x000300f7u, + 0x000002f5u, 0x00000000u, 0x000400fau, 0x000002f3u, 0x000002f4u, 0x000002f5u, 0x000200f8u, 0x000002f4u, + 0x00050041u, 0x000002ecu, 0x000002f6u, 0x00000183u, 0x000002f0u, 0x0004003du, 0x00000008u, 0x000002f7u, + 0x000002f6u, 0x0004003du, 0x00000008u, 0x000002f8u, 0x000002e9u, 0x00050041u, 0x000002ecu, 0x000002f9u, + 0x00000183u, 0x000002f0u, 0x0004003du, 0x00000008u, 0x000002fau, 0x000002f9u, 0x00050088u, 0x00000008u, + 0x000002fbu, 0x000002f8u, 0x000002fau, 0x0006000cu, 0x00000008u, 0x000002fcu, 0x00000001u, 0x00000015u, + 0x000002fbu, 0x00050085u, 0x00000008u, 0x000002fdu, 0x000002f7u, 0x000002fcu, 0x0003003eu, 0x000002e9u, + 0x000002fdu, 0x000200f9u, 0x000002f5u, 0x000200f8u, 0x000002f5u, 0x0004003du, 0x00000008u, 0x000002ffu, + 0x0000023fu, 0x0004003du, 0x00000008u, 0x00000300u, 0x000002e9u, 0x0007000cu, 0x00000008u, 0x00000301u, + 0x00000001u, 0x00000028u, 0x000002ffu, 0x00000300u, 0x0003003eu, 0x000002feu, 0x00000301u, 0x0004003du, + 0x00000008u, 0x00000303u, 0x0000023fu, 0x0004003du, 0x00000008u, 0x00000304u, 0x000002feu, 0x00050083u, + 0x00000008u, 0x00000305u, 0x00000303u, 0x00000304u, 0x0006000cu, 0x00000008u, 0x00000306u, 0x00000001u, + 0x0000001bu, 0x00000305u, 0x0003003eu, 0x00000302u, 0x00000306u, 0x0004003du, 0x00000008u, 0x00000308u, + 0x000002e9u, 0x0004003du, 0x00000008u, 0x00000309u, 0x000002feu, 0x00050083u, 0x00000008u, 0x0000030au, + 0x00000308u, 0x00000309u, 0x0006000cu, 0x00000008u, 0x0000030bu, 0x00000001u, 0x0000001bu, 0x0000030au, + 0x0003003eu, 0x00000307u, 0x0000030bu, 0x0004003du, 0x00000008u, 0x0000030cu, 0x00000241u, 0x0004003du, + 0x00000008u, 0x0000030du, 0x00000302u, 0x00050085u, 0x00000008u, 0x0000030eu, 0x0000030cu, 0x0000030du, + 0x0004003du, 0x00000008u, 0x0000030fu, 0x00000307u, 0x00050081u, 0x00000008u, 0x00000310u, 0x0000030eu, + 0x0000030fu, 0x0003003eu, 0x00000241u, 0x00000310u, 0x0004003du, 0x00000006u, 0x00000312u, 0x00000251u, + 0x00050041u, 0x00000184u, 0x00000314u, 0x00000183u, 0x00000313u, 0x0004003du, 0x00000006u, 0x00000315u, + 0x00000314u, 0x00050084u, 0x00000006u, 0x00000316u, 0x00000312u, 0x00000315u, 0x0004003du, 0x00000006u, + 0x00000317u, 0x0000026bu, 0x00050041u, 0x00000184u, 0x00000318u, 0x00000183u, 0x0000006bu, 0x0004003du, + 0x00000006u, 0x00000319u, 0x00000318u, 0x00050084u, 0x00000006u, 0x0000031au, 0x00000317u, 0x00000319u, + 0x00050080u, 0x00000006u, 0x0000031bu, 0x00000316u, 0x0000031au, 0x0004003du, 0x00000006u, 0x0000031cu, + 0x00000198u, 0x00050041u, 0x00000184u, 0x0000031du, 0x00000183u, 0x000000e7u, 0x0004003du, 0x00000006u, + 0x0000031eu, 0x0000031du, 0x00050084u, 0x00000006u, 0x0000031fu, 0x0000031cu, 0x0000031eu, 0x00050080u, + 0x00000006u, 0x00000320u, 0x0000031bu, 0x0000031fu, 0x0003003eu, 0x00000311u, 0x00000320u, 0x0003003eu, + 0x00000321u, 0x0000003bu, 0x0004003du, 0x00000006u, 0x00000323u, 0x0000019eu, 0x0003003eu, 0x00000322u, + 0x00000323u, 0x000200f9u, 0x00000324u, 0x000200f8u, 0x00000324u, 0x000400f6u, 0x00000326u, 0x00000327u, + 0x00000000u, 0x000200f9u, 0x00000328u, 0x000200f8u, 0x00000328u, 0x0004003du, 0x00000006u, 0x00000329u, + 0x00000322u, 0x00050041u, 0x00000184u, 0x0000032au, 0x00000183u, 0x000001a5u, 0x0004003du, 0x00000006u, + 0x0000032bu, 0x0000032au, 0x000500b0u, 0x00000031u, 0x0000032cu, 0x00000329u, 0x0000032bu, 0x000400fau, + 0x0000032cu, 0x00000325u, 0x00000326u, 0x000200f8u, 0x00000325u, 0x0004003du, 0x00000006u, 0x0000032du, + 0x00000321u, 0x0004003du, 0x00000006u, 0x0000032eu, 0x00000321u, 0x00050041u, 0x0000000du, 0x0000032fu, + 0x00000239u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00000330u, 0x0000032fu, 0x0004003du, 0x00000008u, + 0x00000331u, 0x00000302u, 0x00050085u, 0x00000008u, 0x00000332u, 0x00000330u, 0x00000331u, 0x0004003du, + 0x00000008u, 0x00000333u, 0x00000307u, 0x000300f7u, 0x00000338u, 0x00000000u, 0x000400fau, 0x00000335u, + 0x00000337u, 0x00000348u, 0x000200f8u, 0x00000337u, 0x00050041u, 0x00000184u, 0x0000033eu, 0x00000183u, + 0x0000033du, 0x0004003du, 0x00000006u, 0x0000033fu, 0x0000033eu, 0x000500c2u, 0x00000006u, 0x00000340u, + 0x0000033fu, 0x000001a5u, 0x0004003du, 0x00000006u, 0x00000341u, 0x00000311u, 0x0004003du, 0x00000006u, + 0x00000342u, 0x00000322u, 0x00050080u, 0x00000006u, 0x00000343u, 0x00000341u, 0x00000342u, 0x00050080u, + 0x00000006u, 0x00000344u, 0x00000340u, 0x00000343u, 0x00060041u, 0x000001bbu, 0x00000345u, 0x0000033cu, + 0x000000d8u, 0x00000344u, 0x0004003du, 0x00000006u, 0x00000346u, 0x00000345u, 0x0004007cu, 0x00000008u, + 0x00000347u, 0x00000346u, 0x0003003eu, 0x00000336u, 0x00000347u, 0x000200f9u, 0x00000338u, 0x000200f8u, + 0x00000348u, 0x00050041u, 0x00000184u, 0x0000034du, 0x00000183u, 0x0000033du, 0x0004003du, 0x00000006u, + 0x0000034eu, 0x0000034du, 0x000500c2u, 0x00000006u, 0x0000034fu, 0x0000034eu, 0x00000085u, 0x0004003du, + 0x00000006u, 0x00000350u, 0x00000311u, 0x0004003du, 0x00000006u, 0x00000351u, 0x00000322u, 0x00050080u, + 0x00000006u, 0x00000352u, 0x00000350u, 0x00000351u, 0x00050080u, 0x00000006u, 0x00000353u, 0x0000034fu, + 0x00000352u, 0x00060041u, 0x000002afu, 0x00000354u, 0x0000034cu, 0x000000d8u, 0x00000353u, 0x0004003du, + 0x000002a3u, 0x00000355u, 0x00000354u, 0x00040071u, 0x00000006u, 0x00000356u, 0x00000355u, 0x0003003eu, + 0x00000357u, 0x00000356u, 0x0003003eu, 0x00000358u, 0x00000334u, 0x00060039u, 0x00000008u, 0x00000359u, + 0x0000001bu, 0x00000357u, 0x00000358u, 0x0003003eu, 0x00000336u, 0x00000359u, 0x000200f9u, 0x00000338u, + 0x000200f8u, 0x00000338u, 0x0004003du, 0x00000008u, 0x0000035au, 0x00000336u, 0x00050085u, 0x00000008u, + 0x0000035bu, 0x00000333u, 0x0000035au, 0x00050081u, 0x00000008u, 0x0000035cu, 0x00000332u, 0x0000035bu, + 0x00050041u, 0x0000000du, 0x0000035du, 0x00000239u, 0x0000032du, 0x0003003eu, 0x0000035du, 0x0000035cu, + 0x000200f9u, 0x00000327u, 0x000200f8u, 0x00000327u, 0x0004003du, 0x00000006u, 0x0000035eu, 0x00000322u, + 0x00050080u, 0x00000006u, 0x0000035fu, 0x0000035eu, 0x00000154u, 0x0003003eu, 0x00000322u, 0x0000035fu, + 0x0004003du, 0x00000006u, 0x00000360u, 0x00000321u, 0x00050080u, 0x00000006u, 0x00000361u, 0x00000360u, + 0x00000085u, 0x0003003eu, 0x00000321u, 0x00000361u, 0x000200f9u, 0x00000324u, 0x000200f8u, 0x00000326u, + 0x0004003du, 0x00000008u, 0x00000362u, 0x000002feu, 0x0003003eu, 0x0000023fu, 0x00000362u, 0x000200f9u, + 0x0000024cu, 0x000200f8u, 0x0000024cu, 0x0004003du, 0x00000028u, 0x00000363u, 0x00000247u, 0x00050080u, + 0x00000028u, 0x00000364u, 0x00000363u, 0x00000085u, 0x0003003eu, 0x00000247u, 0x00000364u, 0x000200f9u, + 0x00000249u, 0x000200f8u, 0x0000024bu, 0x000200f9u, 0x00000246u, 0x000200f8u, 0x00000246u, 0x0004003du, + 0x00000008u, 0x00000366u, 0x00000241u, 0x000500bau, 0x00000031u, 0x00000367u, 0x00000366u, 0x0000023bu, + 0x000300f7u, 0x0000036au, 0x00000000u, 0x000400fau, 0x00000367u, 0x00000369u, 0x0000036eu, 0x000200f8u, + 0x00000369u, 0x0004003du, 0x00000008u, 0x0000036cu, 0x00000241u, 0x00050088u, 0x00000008u, 0x0000036du, + 0x0000036bu, 0x0000036cu, 0x0003003eu, 0x00000368u, 0x0000036du, 0x000200f9u, 0x0000036au, 0x000200f8u, + 0x0000036eu, 0x0003003eu, 0x00000368u, 0x0000023bu, 0x000200f9u, 0x0000036au, 0x000200f8u, 0x0000036au, + 0x0004003du, 0x00000008u, 0x0000036fu, 0x00000368u, 0x0003003eu, 0x00000365u, 0x0000036fu, 0x0003003eu, + 0x00000370u, 0x0000003bu, 0x0004003du, 0x00000006u, 0x00000372u, 0x0000019eu, 0x0003003eu, 0x00000371u, + 0x00000372u, 0x000200f9u, 0x00000373u, 0x000200f8u, 0x00000373u, 0x000400f6u, 0x00000375u, 0x00000376u, + 0x00000000u, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000377u, 0x0004003du, 0x00000006u, 0x00000378u, + 0x00000371u, 0x00050041u, 0x00000184u, 0x00000379u, 0x00000183u, 0x000001a5u, 0x0004003du, 0x00000006u, + 0x0000037au, 0x00000379u, 0x000500b0u, 0x00000031u, 0x0000037bu, 0x00000378u, 0x0000037au, 0x000400fau, + 0x0000037bu, 0x00000374u, 0x00000375u, 0x000200f8u, 0x00000374u, 0x000200f9u, 0x0000037cu, 0x000200f8u, + 0x0000037cu, 0x000400f6u, 0x0000037eu, 0x0000037fu, 0x00000000u, 0x000200f9u, 0x0000037du, 0x000200f8u, + 0x0000037du, 0x000300f7u, 0x00000383u, 0x00000000u, 0x000400fau, 0x00000381u, 0x00000382u, 0x00000397u, + 0x000200f8u, 0x00000382u, 0x00050041u, 0x00000184u, 0x00000389u, 0x00000183u, 0x00000388u, 0x0004003du, + 0x00000006u, 0x0000038au, 0x00000389u, 0x000500c2u, 0x00000006u, 0x0000038bu, 0x0000038au, 0x000001a5u, + 0x0004003du, 0x00000006u, 0x0000038cu, 0x00000224u, 0x0004003du, 0x00000006u, 0x0000038du, 0x00000371u, + 0x00050080u, 0x00000006u, 0x0000038eu, 0x0000038cu, 0x0000038du, 0x00050080u, 0x00000006u, 0x0000038fu, + 0x0000038bu, 0x0000038eu, 0x0004003du, 0x00000006u, 0x00000390u, 0x00000370u, 0x00050041u, 0x0000000du, + 0x00000391u, 0x00000239u, 0x00000390u, 0x0004003du, 0x00000008u, 0x00000392u, 0x00000391u, 0x0004003du, + 0x00000008u, 0x00000393u, 0x00000365u, 0x00050085u, 0x00000008u, 0x00000394u, 0x00000392u, 0x00000393u, + 0x0004007cu, 0x00000006u, 0x00000395u, 0x00000394u, 0x00060041u, 0x000001bbu, 0x00000396u, 0x00000387u, + 0x000000d8u, 0x0000038fu, 0x0003003eu, 0x00000396u, 0x00000395u, 0x000200f9u, 0x00000383u, 0x000200f8u, + 0x00000397u, 0x00050041u, 0x00000184u, 0x0000039cu, 0x00000183u, 0x00000388u, 0x0004003du, 0x00000006u, + 0x0000039du, 0x0000039cu, 0x000500c2u, 0x00000006u, 0x0000039eu, 0x0000039du, 0x00000085u, 0x0004003du, + 0x00000006u, 0x0000039fu, 0x00000224u, 0x0004003du, 0x00000006u, 0x000003a0u, 0x00000371u, 0x00050080u, + 0x00000006u, 0x000003a1u, 0x0000039fu, 0x000003a0u, 0x00050080u, 0x00000006u, 0x000003a2u, 0x0000039eu, + 0x000003a1u, 0x0004003du, 0x00000006u, 0x000003a3u, 0x00000370u, 0x00050041u, 0x0000000du, 0x000003a4u, + 0x00000239u, 0x000003a3u, 0x0004003du, 0x00000008u, 0x000003a5u, 0x000003a4u, 0x0004003du, 0x00000008u, + 0x000003a6u, 0x00000365u, 0x00050085u, 0x00000008u, 0x000003a7u, 0x000003a5u, 0x000003a6u, 0x0003003eu, + 0x000003a8u, 0x000003a7u, 0x0003003eu, 0x000003a9u, 0x00000380u, 0x00060039u, 0x00000006u, 0x000003aau, + 0x00000020u, 0x000003a8u, 0x000003a9u, 0x00040071u, 0x000002a3u, 0x000003abu, 0x000003aau, 0x00060041u, + 0x000002afu, 0x000003acu, 0x0000039bu, 0x000000d8u, 0x000003a2u, 0x0003003eu, 0x000003acu, 0x000003abu, + 0x000200f9u, 0x00000383u, 0x000200f8u, 0x00000383u, 0x000200f9u, 0x0000037fu, 0x000200f8u, 0x0000037fu, + 0x000400fau, 0x000003adu, 0x0000037cu, 0x0000037eu, 0x000200f8u, 0x0000037eu, 0x000200f9u, 0x00000376u, + 0x000200f8u, 0x00000376u, 0x0004003du, 0x00000006u, 0x000003aeu, 0x00000371u, 0x00050080u, 0x00000006u, + 0x000003afu, 0x000003aeu, 0x00000154u, 0x0003003eu, 0x00000371u, 0x000003afu, 0x0004003du, 0x00000006u, + 0x000003b0u, 0x00000370u, 0x00050080u, 0x00000006u, 0x000003b1u, 0x000003b0u, 0x00000085u, 0x0003003eu, + 0x00000370u, 0x000003b1u, 0x000200f9u, 0x00000373u, 0x000200f8u, 0x00000375u, 0x000100fdu, 0x00010038u, + 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, + 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000027u, 0x0000000au, 0x000500c4u, 0x00000006u, + 0x0000002au, 0x00000027u, 0x00000029u, 0x0004007cu, 0x00000008u, 0x0000002bu, 0x0000002au, 0x000200feu, + 0x0000002bu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, + 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000002eu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000047u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002fu, 0x0000000fu, + 0x0004007cu, 0x00000006u, 0x00000030u, 0x0000002fu, 0x0003003eu, 0x0000002eu, 0x00000030u, 0x0004003du, + 0x00000006u, 0x00000032u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x00000034u, 0x00000032u, 0x00000033u, + 0x000500aau, 0x00000031u, 0x00000035u, 0x00000034u, 0x00000033u, 0x000300f7u, 0x00000037u, 0x00000000u, + 0x000400fau, 0x00000035u, 0x00000036u, 0x00000037u, 0x000200f8u, 0x00000036u, 0x0004003du, 0x00000006u, + 0x00000038u, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x0000003au, 0x00000038u, 0x00000039u, 0x000500abu, + 0x00000031u, 0x0000003cu, 0x0000003au, 0x0000003bu, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000037u, + 0x000700f5u, 0x00000031u, 0x0000003du, 0x00000035u, 0x00000011u, 0x0000003cu, 0x00000036u, 0x000300f7u, + 0x0000003fu, 0x00000000u, 0x000400fau, 0x0000003du, 0x0000003eu, 0x0000003fu, 0x000200f8u, 0x0000003eu, + 0x0004003du, 0x00000006u, 0x00000040u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x00000041u, 0x00000040u, + 0x00000029u, 0x000500c5u, 0x00000006u, 0x00000043u, 0x00000041u, 0x00000042u, 0x000500c7u, 0x00000006u, + 0x00000045u, 0x00000043u, 0x00000044u, 0x000200feu, 0x00000045u, 0x000200f8u, 0x0000003fu, 0x0004003du, + 0x00000006u, 0x00000049u, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x0000004au, 0x00000049u, 0x00000029u, + 0x000500c7u, 0x00000006u, 0x0000004cu, 0x0000004au, 0x0000004bu, 0x00050080u, 0x00000006u, 0x0000004du, + 0x00000048u, 0x0000004cu, 0x0003003eu, 0x00000047u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000004eu, + 0x0000002eu, 0x0004003du, 0x00000006u, 0x0000004fu, 0x00000047u, 0x00050080u, 0x00000006u, 0x00000050u, + 0x0000004eu, 0x0000004fu, 0x000500c2u, 0x00000006u, 0x00000051u, 0x00000050u, 0x00000029u, 0x000500c7u, + 0x00000006u, 0x00000052u, 0x00000051u, 0x00000044u, 0x000200feu, 0x00000052u, 0x00010038u, 0x00050036u, + 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, + 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005au, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000060u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007bu, + 0x00000007u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000058u, + 0x00000056u, 0x00000057u, 0x000500c4u, 0x00000006u, 0x00000059u, 0x00000058u, 0x00000029u, 0x0003003eu, + 0x00000055u, 0x00000059u, 0x0004003du, 0x00000006u, 0x0000005bu, 0x00000012u, 0x000500c2u, 0x00000006u, + 0x0000005du, 0x0000005bu, 0x0000005cu, 0x000500c7u, 0x00000006u, 0x0000005fu, 0x0000005du, 0x0000005eu, + 0x0003003eu, 0x0000005au, 0x0000005fu, 0x0004003du, 0x00000006u, 0x00000061u, 0x00000012u, 0x000500c7u, + 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x0003003eu, 0x00000060u, 0x00000063u, 0x0004003du, + 0x00000006u, 0x00000064u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000065u, 0x00000064u, 0x0000005eu, + 0x000300f7u, 0x00000067u, 0x00000000u, 0x000400fau, 0x00000065u, 0x00000066u, 0x00000067u, 0x000200f8u, + 0x00000066u, 0x0004003du, 0x00000006u, 0x00000068u, 0x00000055u, 0x000500c5u, 0x00000006u, 0x00000069u, + 0x00000068u, 0x00000033u, 0x0004003du, 0x00000006u, 0x0000006au, 0x00000060u, 0x000500c4u, 0x00000006u, + 0x0000006cu, 0x0000006au, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x0000006du, 0x00000069u, 0x0000006cu, + 0x0004007cu, 0x00000008u, 0x0000006eu, 0x0000006du, 0x000200feu, 0x0000006eu, 0x000200f8u, 0x00000067u, + 0x0004003du, 0x00000006u, 0x00000070u, 0x0000005au, 0x000500aau, 0x00000031u, 0x00000071u, 0x00000070u, + 0x0000003bu, 0x000300f7u, 0x00000073u, 0x00000000u, 0x000400fau, 0x00000071u, 0x00000072u, 0x00000073u, + 0x000200f8u, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000074u, 0x00000060u, 0x000500aau, 0x00000031u, + 0x00000075u, 0x00000074u, 0x0000003bu, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, + 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, 0x0004003du, 0x00000006u, 0x00000078u, 0x00000055u, + 0x0004007cu, 0x00000008u, 0x00000079u, 0x00000078u, 0x000200feu, 0x00000079u, 0x000200f8u, 0x00000077u, + 0x0003003eu, 0x0000007bu, 0x0000003bu, 0x000200f9u, 0x0000007cu, 0x000200f8u, 0x0000007cu, 0x000400f6u, + 0x0000007eu, 0x0000007fu, 0x00000000u, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x00000081u, 0x00000060u, 0x000500c7u, 0x00000006u, 0x00000083u, 0x00000081u, 0x00000082u, + 0x000500aau, 0x00000031u, 0x00000084u, 0x00000083u, 0x0000003bu, 0x000400fau, 0x00000084u, 0x0000007du, + 0x0000007eu, 0x000200f8u, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000086u, 0x00000060u, 0x000500c4u, + 0x00000006u, 0x00000087u, 0x00000086u, 0x00000085u, 0x0003003eu, 0x00000060u, 0x00000087u, 0x0004003du, + 0x00000006u, 0x00000088u, 0x0000007bu, 0x00050080u, 0x00000006u, 0x00000089u, 0x00000088u, 0x0000004bu, + 0x0003003eu, 0x0000007bu, 0x00000089u, 0x000200f9u, 0x0000007fu, 0x000200f8u, 0x0000007fu, 0x000200f9u, + 0x0000007cu, 0x000200f8u, 0x0000007eu, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000060u, 0x000500c7u, + 0x00000006u, 0x0000008bu, 0x0000008au, 0x00000062u, 0x0003003eu, 0x00000060u, 0x0000008bu, 0x0004003du, + 0x00000006u, 0x0000008cu, 0x00000055u, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000007bu, 0x00050082u, + 0x00000006u, 0x0000008fu, 0x0000008du, 0x0000008eu, 0x000500c4u, 0x00000006u, 0x00000091u, 0x0000008fu, + 0x00000090u, 0x000500c5u, 0x00000006u, 0x00000092u, 0x0000008cu, 0x00000091u, 0x0004003du, 0x00000006u, + 0x00000093u, 0x00000060u, 0x000500c4u, 0x00000006u, 0x00000094u, 0x00000093u, 0x0000006bu, 0x000500c5u, + 0x00000006u, 0x00000095u, 0x00000092u, 0x00000094u, 0x0004007cu, 0x00000008u, 0x00000096u, 0x00000095u, + 0x000200feu, 0x00000096u, 0x000200f8u, 0x00000073u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000055u, + 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005au, 0x00050080u, 0x00000006u, 0x0000009bu, 0x00000099u, + 0x0000009au, 0x000500c4u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x00000090u, 0x000500c5u, 0x00000006u, + 0x0000009du, 0x00000098u, 0x0000009cu, 0x0004003du, 0x00000006u, 0x0000009eu, 0x00000060u, 0x000500c4u, + 0x00000006u, 0x0000009fu, 0x0000009eu, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x000000a0u, 0x0000009du, + 0x0000009fu, 0x0004007cu, 0x00000008u, 0x000000a1u, 0x000000a0u, 0x000200feu, 0x000000a1u, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, + 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000abu, 0x00000007u, 0x0004003bu, 0x000000b0u, + 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000efu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000111u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000118u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a5u, 0x00000015u, 0x0004007cu, 0x00000006u, + 0x000000a6u, 0x000000a5u, 0x0003003eu, 0x000000a4u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000000a8u, + 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000a9u, 0x000000a8u, 0x00000029u, 0x000500c7u, 0x00000006u, + 0x000000aau, 0x000000a9u, 0x00000057u, 0x0003003eu, 0x000000a7u, 0x000000aau, 0x0004003du, 0x00000006u, + 0x000000acu, 0x000000a4u, 0x000500c2u, 0x00000006u, 0x000000adu, 0x000000acu, 0x00000090u, 0x000500c7u, + 0x00000006u, 0x000000afu, 0x000000adu, 0x000000aeu, 0x0003003eu, 0x000000abu, 0x000000afu, 0x0004003du, + 0x00000006u, 0x000000b2u, 0x000000abu, 0x0004007cu, 0x00000028u, 0x000000b3u, 0x000000b2u, 0x00050082u, + 0x00000028u, 0x000000b5u, 0x000000b3u, 0x000000b4u, 0x00050080u, 0x00000028u, 0x000000b7u, 0x000000b5u, + 0x000000b6u, 0x0003003eu, 0x000000b1u, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000000b9u, 0x000000a4u, + 0x000500c7u, 0x00000006u, 0x000000bau, 0x000000b9u, 0x00000039u, 0x0003003eu, 0x000000b8u, 0x000000bau, + 0x0004003du, 0x00000006u, 0x000000bbu, 0x000000abu, 0x000500aau, 0x00000031u, 0x000000bcu, 0x000000bbu, + 0x000000aeu, 0x000300f7u, 0x000000beu, 0x00000000u, 0x000400fau, 0x000000bcu, 0x000000bdu, 0x000000beu, + 0x000200f8u, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000bfu, 0x000000a7u, 0x000500c5u, 0x00000006u, + 0x000000c1u, 0x000000bfu, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c2u, 0x000000b8u, 0x000500abu, + 0x00000031u, 0x000000c3u, 0x000000c2u, 0x0000003bu, 0x000300f7u, 0x000000c6u, 0x00000000u, 0x000400fau, + 0x000000c3u, 0x000000c5u, 0x000000cbu, 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000c8u, + 0x000000b8u, 0x000500c2u, 0x00000006u, 0x000000c9u, 0x000000c8u, 0x0000006bu, 0x000500c5u, 0x00000006u, + 0x000000cau, 0x000000c7u, 0x000000c9u, 0x0003003eu, 0x000000c4u, 0x000000cau, 0x000200f9u, 0x000000c6u, + 0x000200f8u, 0x000000cbu, 0x0003003eu, 0x000000c4u, 0x0000003bu, 0x000200f9u, 0x000000c6u, 0x000200f8u, + 0x000000c6u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000c4u, 0x000500c5u, 0x00000006u, 0x000000cdu, + 0x000000c1u, 0x000000ccu, 0x000200feu, 0x000000cdu, 0x000200f8u, 0x000000beu, 0x0004003du, 0x00000028u, + 0x000000cfu, 0x000000b1u, 0x000500afu, 0x00000031u, 0x000000d1u, 0x000000cfu, 0x000000d0u, 0x000300f7u, + 0x000000d3u, 0x00000000u, 0x000400fau, 0x000000d1u, 0x000000d2u, 0x000000d3u, 0x000200f8u, 0x000000d2u, + 0x0004003du, 0x00000006u, 0x000000d4u, 0x000000a7u, 0x000500c5u, 0x00000006u, 0x000000d5u, 0x000000d4u, + 0x000000c0u, 0x000200feu, 0x000000d5u, 0x000200f8u, 0x000000d3u, 0x0004003du, 0x00000028u, 0x000000d7u, + 0x000000b1u, 0x000500b3u, 0x00000031u, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, + 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, + 0x00000028u, 0x000000dcu, 0x000000b1u, 0x000500b1u, 0x00000031u, 0x000000deu, 0x000000dcu, 0x000000ddu, + 0x000300f7u, 0x000000e0u, 0x00000000u, 0x000400fau, 0x000000deu, 0x000000dfu, 0x000000e0u, 0x000200f8u, + 0x000000dfu, 0x0004003du, 0x00000006u, 0x000000e1u, 0x000000a7u, 0x000200feu, 0x000000e1u, 0x000200f8u, + 0x000000e0u, 0x0004003du, 0x00000006u, 0x000000e4u, 0x000000b8u, 0x000500c5u, 0x00000006u, 0x000000e5u, + 0x000000e4u, 0x000000e3u, 0x0003003eu, 0x000000b8u, 0x000000e5u, 0x0004003du, 0x00000028u, 0x000000e8u, + 0x000000b1u, 0x00050082u, 0x00000028u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0004007cu, 0x00000006u, + 0x000000eau, 0x000000e9u, 0x0003003eu, 0x000000e6u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000ecu, + 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000edu, 0x000000e6u, 0x000500c2u, 0x00000006u, 0x000000eeu, + 0x000000ecu, 0x000000edu, 0x0003003eu, 0x000000ebu, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, + 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e6u, 0x000500c4u, 0x00000006u, 0x000000f2u, + 0x0000004bu, 0x000000f1u, 0x00050082u, 0x00000006u, 0x000000f3u, 0x000000f2u, 0x0000004bu, 0x000500c7u, + 0x00000006u, 0x000000f4u, 0x000000f0u, 0x000000f3u, 0x0003003eu, 0x000000efu, 0x000000f4u, 0x0004003du, + 0x00000006u, 0x000000f6u, 0x000000e6u, 0x00050082u, 0x00000006u, 0x000000f7u, 0x000000f6u, 0x0000004bu, + 0x000500c4u, 0x00000006u, 0x000000f8u, 0x0000004bu, 0x000000f7u, 0x0003003eu, 0x000000f5u, 0x000000f8u, + 0x0004003du, 0x00000006u, 0x000000f9u, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000f5u, + 0x000500acu, 0x00000031u, 0x000000fbu, 0x000000f9u, 0x000000fau, 0x000400a8u, 0x00000031u, 0x000000fcu, + 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, + 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000efu, 0x0004003du, 0x00000006u, + 0x00000100u, 0x000000f5u, 0x000500aau, 0x00000031u, 0x00000101u, 0x000000ffu, 0x00000100u, 0x000300f7u, + 0x00000103u, 0x00000000u, 0x000400fau, 0x00000101u, 0x00000102u, 0x00000103u, 0x000200f8u, 0x00000102u, + 0x0004003du, 0x00000006u, 0x00000104u, 0x000000ebu, 0x000500c7u, 0x00000006u, 0x00000105u, 0x00000104u, + 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000106u, 0x00000105u, 0x0000003bu, 0x000200f9u, 0x00000103u, + 0x000200f8u, 0x00000103u, 0x000700f5u, 0x00000031u, 0x00000107u, 0x00000101u, 0x000000fdu, 0x00000106u, + 0x00000102u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x00000031u, 0x00000108u, + 0x000000fbu, 0x000000e0u, 0x00000107u, 0x00000103u, 0x000300f7u, 0x0000010au, 0x00000000u, 0x000400fau, + 0x00000108u, 0x00000109u, 0x0000010au, 0x000200f8u, 0x00000109u, 0x0004003du, 0x00000006u, 0x0000010bu, + 0x000000ebu, 0x00050080u, 0x00000006u, 0x0000010cu, 0x0000010bu, 0x0000004bu, 0x0003003eu, 0x000000ebu, + 0x0000010cu, 0x000200f9u, 0x0000010au, 0x000200f8u, 0x0000010au, 0x0004003du, 0x00000006u, 0x0000010du, + 0x000000a7u, 0x0004003du, 0x00000006u, 0x0000010eu, 0x000000ebu, 0x000500c5u, 0x00000006u, 0x0000010fu, + 0x0000010du, 0x0000010eu, 0x000200feu, 0x0000010fu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000028u, + 0x00000112u, 0x000000b1u, 0x0004007cu, 0x00000006u, 0x00000113u, 0x00000112u, 0x000500c4u, 0x00000006u, + 0x00000114u, 0x00000113u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000115u, 0x000000b8u, 0x000500c2u, + 0x00000006u, 0x00000116u, 0x00000115u, 0x0000006bu, 0x000500c5u, 0x00000006u, 0x00000117u, 0x00000114u, + 0x00000116u, 0x0003003eu, 0x00000111u, 0x00000117u, 0x0004003du, 0x00000006u, 0x00000119u, 0x000000b8u, + 0x000500c7u, 0x00000006u, 0x0000011bu, 0x00000119u, 0x0000011au, 0x0003003eu, 0x00000118u, 0x0000011bu, + 0x0004003du, 0x00000006u, 0x0000011cu, 0x00000118u, 0x000500acu, 0x00000031u, 0x0000011eu, 0x0000011cu, + 0x0000011du, 0x000400a8u, 0x00000031u, 0x0000011fu, 0x0000011eu, 0x000300f7u, 0x00000121u, 0x00000000u, + 0x000400fau, 0x0000011fu, 0x00000120u, 0x00000121u, 0x000200f8u, 0x00000120u, 0x0004003du, 0x00000006u, + 0x00000122u, 0x00000118u, 0x000500aau, 0x00000031u, 0x00000123u, 0x00000122u, 0x0000011du, 0x000300f7u, + 0x00000125u, 0x00000000u, 0x000400fau, 0x00000123u, 0x00000124u, 0x00000125u, 0x000200f8u, 0x00000124u, + 0x0004003du, 0x00000006u, 0x00000126u, 0x00000111u, 0x000500c7u, 0x00000006u, 0x00000127u, 0x00000126u, + 0x0000004bu, 0x000500abu, 0x00000031u, 0x00000128u, 0x00000127u, 0x0000003bu, 0x000200f9u, 0x00000125u, + 0x000200f8u, 0x00000125u, 0x000700f5u, 0x00000031u, 0x00000129u, 0x00000123u, 0x00000120u, 0x00000128u, + 0x00000124u, 0x000200f9u, 0x00000121u, 0x000200f8u, 0x00000121u, 0x000700f5u, 0x00000031u, 0x0000012au, + 0x0000011eu, 0x000000dbu, 0x00000129u, 0x00000125u, 0x000300f7u, 0x0000012cu, 0x00000000u, 0x000400fau, + 0x0000012au, 0x0000012bu, 0x0000012cu, 0x000200f8u, 0x0000012bu, 0x0004003du, 0x00000006u, 0x0000012du, + 0x00000111u, 0x00050080u, 0x00000006u, 0x0000012eu, 0x0000012du, 0x0000004bu, 0x0003003eu, 0x00000111u, + 0x0000012eu, 0x000200f9u, 0x0000012cu, 0x000200f8u, 0x0000012cu, 0x0004003du, 0x00000006u, 0x0000012fu, + 0x000000a7u, 0x0004003du, 0x00000006u, 0x00000130u, 0x00000111u, 0x000500c5u, 0x00000006u, 0x00000131u, + 0x0000012fu, 0x00000130u, 0x000200feu, 0x00000131u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, + 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, + 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000136u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000139u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013du, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000134u, 0x0000001au, 0x000500aau, 0x00000031u, 0x00000135u, 0x00000134u, 0x0000004bu, 0x000300f7u, + 0x00000138u, 0x00000000u, 0x000400fau, 0x00000135u, 0x00000137u, 0x0000013cu, 0x000200f8u, 0x00000137u, + 0x0004003du, 0x00000006u, 0x0000013au, 0x00000019u, 0x0003003eu, 0x00000139u, 0x0000013au, 0x00050039u, + 0x00000008u, 0x0000013bu, 0x00000013u, 0x00000139u, 0x0003003eu, 0x00000136u, 0x0000013bu, 0x000200f9u, + 0x00000138u, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000006u, 0x0000013eu, 0x00000019u, 0x0003003eu, + 0x0000013du, 0x0000013eu, 0x00050039u, 0x00000008u, 0x0000013fu, 0x0000000bu, 0x0000013du, 0x0003003eu, + 0x00000136u, 0x0000013fu, 0x000200f9u, 0x00000138u, 0x000200f8u, 0x00000138u, 0x0004003du, 0x00000008u, + 0x00000140u, 0x00000136u, 0x000200feu, 0x00000140u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, + 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, + 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000145u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000148u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000014cu, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000143u, 0x0000001fu, 0x000500aau, 0x00000031u, 0x00000144u, 0x00000143u, 0x0000004bu, 0x000300f7u, + 0x00000147u, 0x00000000u, 0x000400fau, 0x00000144u, 0x00000146u, 0x0000014bu, 0x000200f8u, 0x00000146u, + 0x0004003du, 0x00000008u, 0x00000149u, 0x0000001eu, 0x0003003eu, 0x00000148u, 0x00000149u, 0x00050039u, + 0x00000006u, 0x0000014au, 0x00000016u, 0x00000148u, 0x0003003eu, 0x00000145u, 0x0000014au, 0x000200f9u, + 0x00000147u, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000008u, 0x0000014du, 0x0000001eu, 0x0003003eu, + 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000006u, 0x0000014eu, 0x00000010u, 0x0000014cu, 0x0003003eu, + 0x00000145u, 0x0000014eu, 0x000200f9u, 0x00000147u, 0x000200f8u, 0x00000147u, 0x0004003du, 0x00000006u, + 0x0000014fu, 0x00000145u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000025u, + 0x00000000u, 0x00000022u, 0x00030037u, 0x00000007u, 0x00000023u, 0x00030037u, 0x0000000du, 0x00000024u, + 0x000200f8u, 0x00000026u, 0x0004003bu, 0x00000007u, 0x0000015cu, 0x00000007u, 0x000400e0u, 0x00000152u, + 0x00000152u, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000158u, 0x00000023u, 0x0004003du, 0x00000008u, + 0x00000159u, 0x00000024u, 0x00050041u, 0x0000015au, 0x0000015bu, 0x00000157u, 0x00000158u, 0x0003003eu, + 0x0000015bu, 0x00000159u, 0x000400e0u, 0x00000152u, 0x00000152u, 0x00000153u, 0x0003003eu, 0x0000015cu, + 0x00000042u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015du, 0x000400f6u, 0x0000015fu, 0x00000160u, + 0x00000000u, 0x000200f9u, 0x00000161u, 0x000200f8u, 0x00000161u, 0x0004003du, 0x00000006u, 0x00000162u, + 0x0000015cu, 0x000500acu, 0x00000031u, 0x00000163u, 0x00000162u, 0x0000003bu, 0x000400fau, 0x00000163u, + 0x0000015eu, 0x0000015fu, 0x000200f8u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x00000164u, 0x00000023u, + 0x0004003du, 0x00000006u, 0x00000165u, 0x0000015cu, 0x000500b0u, 0x00000031u, 0x00000166u, 0x00000164u, + 0x00000165u, 0x000300f7u, 0x00000168u, 0x00000000u, 0x000400fau, 0x00000166u, 0x00000167u, 0x00000168u, + 0x000200f8u, 0x00000167u, 0x0004003du, 0x00000006u, 0x00000169u, 0x00000023u, 0x0004003du, 0x00000006u, + 0x0000016au, 0x00000023u, 0x0004003du, 0x00000006u, 0x0000016bu, 0x0000015cu, 0x00050080u, 0x00000006u, + 0x0000016cu, 0x0000016au, 0x0000016bu, 0x00050041u, 0x0000015au, 0x0000016du, 0x00000157u, 0x0000016cu, + 0x0004003du, 0x00000008u, 0x0000016eu, 0x0000016du, 0x00050041u, 0x0000015au, 0x0000016fu, 0x00000157u, + 0x00000169u, 0x0004003du, 0x00000008u, 0x00000170u, 0x0000016fu, 0x00050081u, 0x00000008u, 0x00000171u, + 0x00000170u, 0x0000016eu, 0x00050041u, 0x0000015au, 0x00000172u, 0x00000157u, 0x00000169u, 0x0003003eu, + 0x00000172u, 0x00000171u, 0x000200f9u, 0x00000168u, 0x000200f8u, 0x00000168u, 0x000400e0u, 0x00000152u, + 0x00000152u, 0x00000153u, 0x000200f9u, 0x00000160u, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, + 0x00000173u, 0x0000015cu, 0x000500c2u, 0x00000006u, 0x00000174u, 0x00000173u, 0x00000085u, 0x0003003eu, + 0x0000015cu, 0x00000174u, 0x000200f9u, 0x0000015du, 0x000200f8u, 0x0000015fu, 0x00050041u, 0x0000015au, + 0x00000175u, 0x00000157u, 0x000000d8u, 0x0004003du, 0x00000008u, 0x00000176u, 0x00000175u, 0x000200feu, + 0x00000176u, 0x00010038u, +}; + constexpr uint32_t kSpv_vt_relu[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001bfu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -4216,6 +4852,10 @@ constexpr uint32_t kSpecIds_vt_matmul[] = { 0u, 1u, 2u, 3u, }; +constexpr uint32_t kSpecIds_vt_paged_attn[] = { + 0u, 1u, 2u, 3u, +}; + } // namespace const SpirvModule kSpirvModules[] = { @@ -4226,6 +4866,7 @@ const SpirvModule kSpirvModules[] = { {"vt_greedy_argmax", kSpv_vt_greedy_argmax, sizeof(kSpv_vt_greedy_argmax) / sizeof(uint32_t), nullptr, 0}, {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, {"vt_matmul", kSpv_vt_matmul, sizeof(kSpv_vt_matmul) / sizeof(uint32_t), kSpecIds_vt_matmul, 4}, + {"vt_paged_attn", kSpv_vt_paged_attn, sizeof(kSpv_vt_paged_attn) / sizeof(uint32_t), kSpecIds_vt_paged_attn, 4}, {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t), nullptr, 0}, {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t), nullptr, 0}, diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py index 28a9d21c..62ad4916 100644 --- a/tests/scripts/test_gen_vulkan_spirv.py +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -102,6 +102,7 @@ def test_header_declares_but_does_not_define_the_blobs(self): "vt_cast": "src and dst dtype", "vt_matmul": "a/b/out dtype plus the b orientation", "vt_embedding": "table/out dtype plus the id width", + "vt_paged_attn": "query/k-cache/v-cache/out dtype", } def test_specialized_shaders_declare_their_constants(self): diff --git a/tests/vt/test_backend_cross_device.cpp b/tests/vt/test_backend_cross_device.cpp index 9da95a8b..ed29a6bb 100644 --- a/tests/vt/test_backend_cross_device.cpp +++ b/tests/vt/test_backend_cross_device.cpp @@ -357,6 +357,102 @@ TEST_CASE("elementwise ops match the CPU oracle within NMSE <= 5e-4") { cpu.DestroyQueue(cq); } +TEST_CASE("paged attention matches the CPU oracle within NMSE <= 5e-4") { + // GQA prefill: Hq=4 query heads over Hk=2 kv heads, head dim 8, block size 4, + // one request of 37 tokens spanning 10 pages. Ragged on purpose -- 37 is not a + // multiple of the block size, so the last page is partly occupied and a kernel + // that walked whole pages would read past the sequence. + constexpr int64_t kT = 37, kHq = 4, kHk = 2, kD = 8, kBS = 4; + constexpr int64_t kBlocks = (kT + kBS - 1) / kBS; // 10 + + const std::vector query = RandomVec(kT * kHq * kD, 601); + const std::vector kc = RandomVec(kBlocks * kBS * kHk * kD, 602); + const std::vector vc = RandomVec(kBlocks * kBS * kHk * kD, 603); + std::vector block_table(kBlocks); + // A NON-IDENTITY mapping, so a kernel that ignored the block table and indexed + // the cache linearly would fail. Page j lives at cache block (kBlocks-1-j). + for (int64_t b = 0; b < kBlocks; ++b) { + block_table[static_cast(b)] = static_cast(kBlocks - 1 - b); + } + const std::vector seq_lens = {static_cast(kT)}; + const std::vector qsl = {0, static_cast(kT)}; + + // Three configurations, because they are different branches in the kernel and + // a single causal case would leave two of them unexercised. + struct Cfg { const char* name; bool causal; bool window; float softcap; }; + const Cfg cfgs[] = { + {"causal", true, false, 0.0f}, + {"causal+softcap", true, false, 30.0f}, // cap * tanh(s / cap) + {"sliding-window", true, true, 0.0f}, // window_left bounds jmin + }; + + for (const Cfg& cfg : cfgs) { + CAPTURE(cfg.name); + vt::PagedAttentionArgs args; + args.scale = 0.353553f; + args.causal = cfg.causal; + args.logits_soft_cap = cfg.softcap; + // Both bounds must be >= 0 (ops.cpp:2778). right = 0 is the causal + // sliding window: no future keys, at most 8 past ones. + if (cfg.window) args.window_size = vt::AttentionWindow{8, 0}; + + vt::Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue cq = cpu.CreateQueue(); + const Device cd{DeviceType::kCPU, 0}; + std::vector cq_v = query, ckc = kc, cvc = vc, ref(kT * kHq * kD); + std::vector cbt = block_table, csl = seq_lens, cqsl = qsl; + { + Tensor tq = Tensor::Contiguous(cq_v.data(), DType::kF32, cd, {kT, kHq, kD}); + Tensor tkc = Tensor::Contiguous(ckc.data(), DType::kF32, cd, {kBlocks, kBS, kHk, kD}); + Tensor tvc = Tensor::Contiguous(cvc.data(), DType::kF32, cd, {kBlocks, kBS, kHk, kD}); + Tensor tbt = Tensor::Contiguous(cbt.data(), DType::kI32, cd, {1, kBlocks}); + Tensor tsl = Tensor::Contiguous(csl.data(), DType::kI32, cd, {1}); + Tensor tqsl = Tensor::Contiguous(cqsl.data(), DType::kI32, cd, {2}); + Tensor to = Tensor::Contiguous(ref.data(), DType::kF32, cd, {kT, kHq, kD}); + vt::PagedAttention(cq, to, tq, tkc, tvc, tbt, tsl, tqsl, args); + } + cpu.DestroyQueue(cq); + + for (DeviceType dt : RegisteredDevices()) { + if (!OpAvailable(vt::OpId::kPagedAttention, dt)) continue; + CAPTURE(DeviceName(dt)); + vt::Backend& dev = vt::GetBackend(dt); + Queue q = dev.CreateQueue(); + const Device d{dt, 0}; + + DevBuf dq(dev, q, kT * kHq * kD), dkc(dev, q, kBlocks * kBS * kHk * kD), + dvc(dev, q, kBlocks * kBS * kHk * kD), dout(dev, q, kT * kHq * kD); + dq.Upload(query); + dkc.Upload(kc); + dvc.Upload(vc); + void* dbt = dev.Alloc(kBlocks * sizeof(int32_t)); + void* dsl = dev.Alloc(sizeof(int32_t)); + void* dqsl = dev.Alloc(2 * sizeof(int32_t)); + dev.Copy(q, dbt, block_table.data(), kBlocks * sizeof(int32_t)); + dev.Copy(q, dsl, seq_lens.data(), sizeof(int32_t)); + dev.Copy(q, dqsl, qsl.data(), 2 * sizeof(int32_t)); + dev.Synchronize(q); + + Tensor tq = Tensor::Contiguous(dq.ptr(), DType::kF32, d, {kT, kHq, kD}); + Tensor tkc = Tensor::Contiguous(dkc.ptr(), DType::kF32, d, {kBlocks, kBS, kHk, kD}); + Tensor tvc = Tensor::Contiguous(dvc.ptr(), DType::kF32, d, {kBlocks, kBS, kHk, kD}); + Tensor tbt = Tensor::Contiguous(dbt, DType::kI32, d, {1, kBlocks}); + Tensor tsl = Tensor::Contiguous(dsl, DType::kI32, d, {1}); + Tensor tqsl = Tensor::Contiguous(dqsl, DType::kI32, d, {2}); + Tensor to = Tensor::Contiguous(dout.ptr(), DType::kF32, d, {kT, kHq, kD}); + vt::PagedAttention(q, to, tq, tkc, tvc, tbt, tsl, tqsl, args); + dev.Synchronize(q); + + CHECK(Nmse(ref, dout.Download()) <= kNmseTol); + + dev.Free(dbt); + dev.Free(dsl); + dev.Free(dqsl); + dev.DestroyQueue(q); + } + } +} + TEST_CASE("Embedding gather and greedy argmax match the CPU oracle EXACTLY") { // Neither op is arithmetic, so neither gets the NMSE tier: a gather must move // the exact bytes, and an argmax must pick the exact index. diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index 5ceed8a6..159d09ef 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -53,7 +53,7 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // point of the split: at the target shader surface the words must not be // re-parsed by every TU that merely needs the table. const size_t n = vt::vulkan::kSpirvModuleCount; - CHECK(n == 10); + CHECK(n == 11); for (size_t mi = 0; mi < n; ++mi) { const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); @@ -64,8 +64,9 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // and kCastF32 share vt_cast), so a rename in either direction breaks here // rather than at pipeline-creation time on a device we might not have. for (const char* want : {"vt_add", "vt_cast", "vt_embedding", "vt_fused_chain", - "vt_greedy_argmax", "vt_layer_norm", "vt_matmul", "vt_relu", - "vt_rms_norm", "vt_silu_and_mul"}) { + "vt_greedy_argmax", "vt_layer_norm", "vt_matmul", + "vt_paged_attn", "vt_relu", "vt_rms_norm", + "vt_silu_and_mul"}) { bool found = false; for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { if (std::strcmp(vt::vulkan::kSpirvModules[mi].name, want) == 0) found = true; @@ -108,6 +109,10 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const // table dtype, out dtype, id width (i32 vs i64). REQUIRE(m.spec_id_count == 3); for (uint32_t want = 0; want < 3; ++want) CHECK(m.spec_ids[want] == want); + } else if (std::strcmp(m.name, "vt_paged_attn") == 0) { + // query / k-cache / v-cache / out dtype. + REQUIRE(m.spec_id_count == 4); + for (uint32_t want = 0; want < 4; ++want) CHECK(m.spec_ids[want] == want); } else if (std::strcmp(m.name, "vt_matmul") == 0) { // a dtype, b dtype, out dtype, orientation: 3*3*3*2 = 54 variants served by // ONE committed module, which is the argument for specialization constants @@ -325,13 +330,16 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // VK-B: the dense path's GEMM (both orientations) and the // two ends of the model, token ids in and out. vt::OpId::kMatmul, vt::OpId::kMatmulBT, - vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax}) { + vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax, + // Block-paged attention: the one kernel with no llama.cpp + // Vulkan counterpart to port from. + vt::OpId::kPagedAttention}) { CHECK(vt::OpRegistered(op, DeviceType::kVULKAN)); } - // No NATIVE Vulkan kernel yet for attention, the KV cache, RoPE, or the - // sampler beyond greedy argmax. - for (vt::OpId op : {vt::OpId::kPagedAttention, vt::OpId::kReshapeAndCache, - vt::OpId::kRopeNeox, vt::OpId::kApplyTemperature}) { + // No NATIVE Vulkan kernel yet for the KV cache write, RoPE, or the sampler + // beyond greedy argmax. + for (vt::OpId op : {vt::OpId::kReshapeAndCache, vt::OpId::kRopeNeox, + vt::OpId::kApplyTemperature, vt::OpId::kMoeRouterTopK}) { CHECK_FALSE(vt::OpRegistered(op, DeviceType::kVULKAN)); } // ...but they no longer THROW, and this assertion used to say they did. @@ -351,14 +359,14 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // Measured on this tree (VK-A1, 2026-08-06): of 87 CPU-registered ops, 8 are // NATIVE on Vulkan, 79 are served by the reference tier, and ZERO throw. REQUIRE(vt::ReferenceTierEligible(DeviceType::kVULKAN)); - // kPagedAttention, NOT kMatmul: matmul now has a native Vulkan kernel, so it - // would no longer exercise the tier. This op must stay one that is genuinely - // unimplemented, and it moves to the next such op as the backend fills in. - void* paged = nullptr; - CHECK_NOTHROW(paged = vt::GetOp(vt::OpId::kPagedAttention, DeviceType::kVULKAN)); - CHECK(paged != nullptr); + // This must stay an op that is GENUINELY unimplemented natively, and it moves + // on as the backend fills in: it was kMatmul, then kPagedAttention, and both + // now have native kernels. kReshapeAndCache is the current one. + void* rac = nullptr; + CHECK_NOTHROW(rac = vt::GetOp(vt::OpId::kReshapeAndCache, DeviceType::kVULKAN)); + CHECK(rac != nullptr); // BY NAME, so a host kernel can never masquerade as a native Vulkan one (Risk 7). - const auto stats = vt::GetOpProviderStats(vt::OpId::kPagedAttention, DeviceType::kVULKAN); + const auto stats = vt::GetOpProviderStats(vt::OpId::kReshapeAndCache, DeviceType::kVULKAN); REQUIRE(stats.last_selected != nullptr); CHECK(std::string(stats.last_selected) == std::string(vt::kReferenceProviderName)); CHECK(vt::GetReferenceTierHits() > 0); From b1b68c1e2ec0bd01ff617ce175f9ba0d60273ec4 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 22:46:11 +0000 Subject: [PATCH 13/17] record(vulkan): 13 native kernels, and AMD testing answered NO on this box Refreshes the measured counts (native 12 -> 13, reference tier 75 -> 74) after paged attention landed, re-measured with the same runtime probe. Also records the answer to "can we test Vulkan on AMD here": NO, and the reason is worth keeping. The dev box is a KVM virtual machine and the AMD is the CPU (Ryzen 9 9950X3D), not a GPU -- display is QEMU virtual VGA 1234:1111, /dev/dri has no renderD* node at all, and Vulkan enumerates only llvmpipe. The useful corollary is that RADV (radeon_icd.json) is already installed, so an AMD GPU passed into this VM would enumerate with zero code changes and VK-I's discrete-GPU staging path -- still dead code, since GB10 and llvmpipe are both unified -- would become testable. The blocker is hardware passthrough, not software. Noted but not acted on: environment.md describes the dev box as having an RTX 5070 Ti, which this VM does not see. Left for the owner rather than guessed at. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .agents/feature-matrix.md | 2 +- .agents/specs/vulkan-full-support.md | 11 +++--- .agents/state.md | 58 ++++++++++++++++++++++++++++ docs/BENCHMARKS.md | 2 +- docs/FEATURES.md | 6 +-- docs/STATUS.md | 2 +- 6 files changed, 70 insertions(+), 11 deletions(-) diff --git a/.agents/feature-matrix.md b/.agents/feature-matrix.md index 9da16478..08600500 100644 --- a/.agents/feature-matrix.md +++ b/.agents/feature-matrix.md @@ -277,7 +277,7 @@ evidence. | `BACKEND-CPU` | production CPU | `PARTIAL` | persistent threadpool + chunked GEMM/row dispatch is 1/3/20-thread bit-identical and TSAN-clean; idle-host performance/RSS gate and compute-in-quant remain open | [backend matrix](backend-matrix.md) | | `BACKEND-ROCM` | ROCm | `INVENTORIED` | source/dispatch spike required; no "one flag" support claim | [backend matrix](backend-matrix.md) | | `BACKEND-MLX` | Apple Metal through MLX | `ACTIVE` | Metal/MLX skeleton ACTIVE: two models (OPT-125m, Qwen3-0.6B) run e2e + pass correctness, native-MSL GEMM, batched command buffers 1.50x (compute-bound at 98%+); optional MLX GEMM provider | [backend matrix](backend-matrix.md) | -| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | **12 NATIVE kernels** of the CPU backend's 87 registered ops (GEMM both orientations, embedding, greedy argmax, elementwise/norm/fusion); the other 75 served by the portable reference tier (CPU kernel, unified memory). No model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | +| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | **13 NATIVE kernels** of the CPU backend's 87 registered ops (GEMM both orientations, embedding, greedy argmax, block-paged attention, elementwise/norm/fusion); the other 74 served by the portable reference tier (CPU kernel, unified memory). No model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | | `BACKEND-XPU` | Intel XPU | `INVENTORIED` | loyal upstream-platform port, runtime absent | [backend matrix](backend-matrix.md) | | `BACKEND-ANE` | encoder/pooling accelerator | `INVENTORIED` | specialized CoreML route only | [backend matrix](backend-matrix.md) | diff --git a/.agents/specs/vulkan-full-support.md b/.agents/specs/vulkan-full-support.md index fb908520..ef0a49f8 100644 --- a/.agents/specs/vulkan-full-support.md +++ b/.agents/specs/vulkan-full-support.md @@ -113,13 +113,14 @@ Vulkan-ON build, by asking `vt::OpRegistered` and `vt::GetOp` for every `OpId`: | | at `VK-A1` | after the first `VK-B` bricks | |---|---|---| | CPU-registered ops | **87** | **87** | -| **NATIVE** on Vulkan | **8** | **12** | -| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | **75** | +| **NATIVE** on Vulkan | **8** | **13** | +| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | **74** | | **ABSENT** (`GetOp` throws) | **0** | **0** | -The four that moved are `kMatmul`, `kMatmulBT` (dense GEMM, both orientations), -`kEmbedding` and `kGreedyArgmax` — the model's two ends plus the op it spends most -of its time in. Re-measure with the same method rather than quoting this table. +The five that moved are `kMatmul`, `kMatmulBT` (dense GEMM, both orientations), +`kEmbedding`, `kGreedyArgmax` and `kPagedAttention` — the model's two ends, the op +it spends most of its time in, and the one kernel with no llama.cpp Vulkan +counterpart to port from. Re-measure with the same method rather than quoting this table. `vt::ReferenceTierEligible(kVULKAN)` is TRUE — GB10 integrated and llvmpipe both report unified memory. So **every op the CPU backend has is already reachable on diff --git a/.agents/state.md b/.agents/state.md index 13448b8a..cb13e0e2 100644 --- a/.agents/state.md +++ b/.agents/state.md @@ -39827,3 +39827,61 @@ Box left clean (GPU idle, both locks free, worker down). Evidence: the KV cache ops, the whole RoPE family, quant, MoE, GDN/MLA and every sampler beyond greedy argmax. `get_attn_backend_priority()` remains EMPTY, so no model runs end to end on Vulkan and no speed number is measured, claimed or owed. + +- **2026-08-06 (later still, 2)** — **Vulkan gains NATIVE BLOCK-PAGED ATTENTION + (`CLAIM-VULKAN-FULL-1`, row `BACKEND-VULKAN`).** Native **12 → 13**, + reference-tier **75 → 74**. + + **This is the only kernel in the backend with NO Vulkan port source**, and the + spec predicted it: `grep` over all 132 `.comp` + 26 `.glsl` at pin `237ad9b96` + finds ZERO `block_table`/`paged` matches, because ggml attention takes a + contiguous KV buffer plus a mask. The online-softmax SKELETON follows + `flash_attn.comp`'s shape; the block-table indirection, GQA mapping and + windowing are ported from our own `cpu_paged_attn.cpp` (:52-171), which is also + the numeric oracle. Recorded as partial-from-scratch. + + **The CPU's three passes could not be mirrored, for a structural reason.** The + CPU kernel materialises a `probs` array of one float PER KEY IN THE WINDOW + (:121,131) — unbounded, thousands at long context — and a shader has no such + allocation. The passes fuse into the standard running max/denominator + recurrence: same mathematical result, different rounding ORDER, so this op sits + in the NMSE ≤ 5e-4 tier and claims no bit-exactness against the CPU. That is a + deliberate tier choice, not a tolerance that was widened to fit. + + Structure: ONE WORKGROUP per (query token, query head), lanes splitting the head + dimension, each key's q·k a cooperative `vt_tg_sum`. A first draft added a + lane-0 broadcast of the score plus two barriers; that was removed once + `vt_tg_sum`'s contract was actually read — it returns `smem[0]` to EVERY lane + and its leading barrier makes back-to-back calls in a loop safe, so all lanes + derive the score from the same dot with the same instructions. Simpler, and one + fewer barrier hazard. + + **fp8 KV DECLINES rather than throws.** Those pages are 1-byte and need + `Dequant(fp8) * k_scale|v_scale` before the f32 softmax + (`cpu_paged_attn.cpp:79-93`), which this shader does not do — and throwing would + REMOVE a capability the portable reference tier already provides. It forwards + through `GetOpFallback`, which `op_provider.h:94-100` documents as exactly the + place for a per-call refusal since `GetOp` has no shape or dtype to inspect. + + Gated in THREE configurations (causal; causal+softcap; sliding window) because + they are different branches and one causal case would leave two unexercised. The + block table is deliberately NON-IDENTITY (page j at cache block `nblocks-1-j`) + so a kernel that ignored it and indexed linearly fails, and 37 tokens over block + size 4 leaves the last page partly occupied so a whole-page walk reads past the + sequence. One defect found by the gate and it was the TEST's: `AttentionWindow` + requires both bounds ≥ 0 (`ops.cpp:2778`), so `{8, -1}` threw at the seam. + + **AMD Vulkan testing asked about and ANSWERED NO (2026-08-06).** The dev box is + a KVM virtual machine; the AMD here is the **CPU** (Ryzen 9 9950X3D), not a GPU. + Display is QEMU virtual VGA `1234:1111`, `/dev/dri` has **no `renderD*` node**, + and Vulkan enumerates only `llvmpipe`. Useful corollary: `radeon_icd.json` + (RADV) IS installed, so an AMD GPU passed into this VM would enumerate with zero + code changes and `VK-I`'s discrete-GPU staging path would become testable. The + blocker is hardware passthrough, not software. (Separately, `environment.md` + describes the dev box as having an RTX 5070 Ti, which this VM does not see — + left for the owner rather than guessed at.) + + Still on the reference tier: the KV cache write, the whole RoPE family, quant, + MoE, GDN/MLA and every sampler beyond greedy argmax. + `get_attn_backend_priority()` remains EMPTY, so no model runs end to end on + Vulkan and no speed number is measured, claimed or owed. diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md index 403fcd45..81462f3e 100644 --- a/docs/BENCHMARKS.md +++ b/docs/BENCHMARKS.md @@ -304,7 +304,7 @@ built on it rather than keeping the flattering one. | vLLM 0.26 re-benchmark | Pending | Re-run the binding grids on the advanced pin | | MiniMax-H3 FP4 speed (W-FP4a) | **Measured GB10 (`row/H3-FP4-GPU-E2E`).** Marlin W4A16 byte-exact vs bf16; fp4 a memory win, 0.8x bf16/forward. Real-ckpt fp4-resident e2e RUNS (mp4/wav) but frame is a non-scene patch-grid | Render coherence ROOT-CAUSED (#70): VAE fine, DiT latent white. Geometry ladder (PR #74) REFUTES a DiT-math bug: ours==oracle to 8x8+temporal; white=trained-wts. fp4 speed CLOSED. Detail: benchmark-record + spec §8 | | MXFP4 Qwen3-8B (W4A16 Marlin) | **`KERNEL-MARLIN-DENSE-EXEC` x3 (dense-ON default): c1 1.020, c2/c4/c8 0.962/0.966/0.969, GPU mem 2.63x less** (beats #51 1.005/0.925/0.939/0.953 EVERY axis); #44 3/3, 32B-NVFP4A16 6/6; -Werror test-guard fixes x2 | **VT_MARLIN_DENSE default-ON** (+951us). `FLASH-OCCUPANCY` #75: matched-c8 ncu, occupancy IDENTICAL 8.33%; built vLLM's exact flash recipe, matched reg+instr, STILL +10us, gap is ptxas SASS quality, no lever/flip | -| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 12 NATIVE kernels; the other 75 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | +| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 13 NATIVE kernels; the other 74 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | | SGLang floor arms | Never ran | Both arms of the SGLang comparison | | cuBLAS invocation-parity guard | CI guard landed (CPU); `kGemvHeuristicAlgos` refactor build-verify owed | `nvcc` rebuild + SACRED gate on dgx | | Ampere consumer (`sm_86`, RTX 3090 class) | **No number owed; no such board here.** 2026-08-06 build-verify: 7/7 FA2 TUs 0-warn, real `sm_86` SASS. [Detail](../.agents/benchmark-record.md) | External RTX 3090 report. Floor is llama.cpp on that card (GGUF, not our Blackwell-only NVFP4 grid) | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 96de97f4..6e749435 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -206,9 +206,9 @@ CUDA runtime-verified on GB10 (sm_121a), Jetson Thor (sm_110) and Jetson AGX Orin (sm_87). sm_110 is a correctness venue only: CUTLASS has no FP4 tensor-core kernels for it. -Vulkan is partial and the ◐ is honest but generous. It has **12 native compute -kernels** (dense GEMM in both orientations, embedding, greedy argmax, and the -elementwise/norm/fusion set); the other 75 ops the CPU backend registers resolve +Vulkan is partial and the ◐ is honest but generous. It has **13 native compute +kernels** (dense GEMM in both orientations, block-paged attention, embedding, +greedy argmax, and the elementwise/norm/fusion set); the other 74 ops the CPU backend registers resolve through the portable reference tier, which runs the CPU kernel against shared memory on a unified device. That is correct and arbitrarily slow, no model has been run end to end on it, and no speed number exists or is owed. Build it with diff --git a/docs/STATUS.md b/docs/STATUS.md index c4040f7c..67233aa3 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -388,7 +388,7 @@ The correctness form and the full D0-D14 measured chronology live in ## Not supported yet LoRA (W1 CPU runtime brick landed — see the capability table; not yet usable -end-to-end), multi-GPU, Vulkan (12 native kernels, 75 ops on the CPU tier, no +end-to-end), multi-GPU, Vulkan (13 native kernels, 74 ops on the CPU tier, no model run e2e; [campaign](../.agents/specs/vulkan-full-support.md)), and the full tool-calling template surface. **Scale-out / distributed execution is scoped but unbuilt** (spike, 2026-07-28): the engine is From 2c86f79ece1297a5fe4f2956e531633ae0a2f29f Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 22:52:53 +0000 Subject: [PATCH 14/17] feat(vulkan): native KV-cache write (kReshapeAndCache) 14 native kernels. This completes the attention block's device side: paged attention reads the cache, this writes it. Ported from cpu_cache.cpp ReshapeAndCacheKernel (:33-72), which is two memcpys per token and CONVERTS NOTHING. So the dtype here selects only the storage WIDTH to copy at -- 32-bit through the uint32 view, 16-bit through the uint16 view, never mixing -- and the gate is BIT-EXACTNESS rather than NMSE. The host refuses a source/cache dtype mismatch rather than silently converting. SLOT -1 IS NOT AN ERROR and the gate proves the kernel knows it. Upstream pads the slot mapping and marks padded tokens negative (:60); those tokens are SKIPPED, leaving the page as it was. The mapping is i64, so the shader reads both halves and tests the HIGH word for the sign -- reading it as unsigned would turn -1 into 0xFFFFFFFF and index astronomically out of range. The gate seeds the cache with RANDOM contents rather than zeros, so "the padded token left the page intact" cannot pass vacuously, and uses scattered out-of-order slots (20, -1, 3, 11, -1, 0, 23, 7, 15) so a kernel that assumed slot == token index fails. Native 13 -> 14, reference tier 74 -> 73. Clean -Werror build 0 warnings. Vulkan gate 10/10 (454 assertions), cross-device 10/10 (109), generator 11/11. NEXT IS RoPE, AND IT NEEDS A DECISION FIRST. The CPU kernel computes the angle in DOUBLE (cpu_ops.cpp:701-705: std::pow for the frequency, std::cos/std::sin of pos * freq). In f32 that loses precision badly at long context, where pos is in the thousands and the angle is large. Shipping an f32 transcription would be subtly wrong in exactly the regime that matters, so it is not done here. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .../vulkan/shaders/vt_reshape_and_cache.comp | 75 ++++++++ src/vt/vulkan/vulkan_ops.cpp | 48 +++++ src/vt/vulkan/vulkan_spirv.cpp | 182 ++++++++++++++++++ tests/scripts/test_gen_vulkan_spirv.py | 1 + tests/vt/test_backend_cross_device.cpp | 69 +++++++ tests/vt/test_vulkan_backend.cpp | 36 ++-- 6 files changed, 396 insertions(+), 15 deletions(-) create mode 100644 src/vt/vulkan/shaders/vt_reshape_and_cache.comp diff --git a/src/vt/vulkan/shaders/vt_reshape_and_cache.comp b/src/vt/vulkan/shaders/vt_reshape_and_cache.comp new file mode 100644 index 00000000..6c68b102 --- /dev/null +++ b/src/vt/vulkan/shaders/vt_reshape_and_cache.comp @@ -0,0 +1,75 @@ +#version 450 +// vt::ReshapeAndCache — scatter this step's K/V rows into their KV-cache pages. +// Ported from src/vt/cpu/cpu_cache.cpp ReshapeAndCacheKernel (:33-72). +// +// THIS OP MOVES BYTES, IT DOES NOT COMPUTE. The CPU kernel is two memcpys per +// token (:67-70) and nothing is converted, reassociated or rounded, so the gate +// for it is BIT-EXACTNESS rather than NMSE. The dtype therefore selects only the +// STORAGE WIDTH to copy at, never a conversion: a 32-bit dtype copies through the +// uint32 view and a 16-bit dtype through the uint16 view, which is why the dtype +// is a specialization constant and the two branches never mix. +// +// SLOT -1 IS NOT AN ERROR. Upstream pads the slot mapping and marks padded tokens +// with a negative slot (:60, "upstream NOTE: slot can be -1"); those tokens are +// SKIPPED, leaving whatever the cache already held. A kernel that clamped instead +// of skipping would silently corrupt a real page. +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) readonly buffer Kb32 { uint v[]; } K32; +layout(binding = 1) readonly buffer Kb16 { uint16_t v[]; } K16; +layout(binding = 2) readonly buffer Vb32 { uint v[]; } V32; +layout(binding = 3) readonly buffer Vb16 { uint16_t v[]; } V16; +layout(binding = 4) buffer KCb32 { uint v[]; } KC32; +layout(binding = 5) buffer KCb16 { uint16_t v[]; } KC16; +layout(binding = 6) buffer VCb32 { uint v[]; } VC32; +layout(binding = 7) buffer VCb16 { uint16_t v[]; } VC16; +layout(binding = 8) readonly buffer SMb { uint v[]; } SM; // slot mapping, i64 + +// 0 = the operand is 32-bit (f32), 1 = 16-bit (f16/bf16). NOT a VT_DT_* code: +// nothing here converts, so only the width matters. +layout(constant_id = 0) const uint VT_RAC_W16 = 0u; + +layout(push_constant) uniform Params { + uint num_slots; + uint n_elems; // num_kv_heads * head_size — one token's page payload + uint block_size; + uint k_blk, k_pg; // k-cache block / page strides, in ELEMENTS + uint v_blk, v_pg; + uint k_tok, v_tok; // source per-token strides, in elements + uint k_off, v_off, kc_off, vc_off, sm_off; +} p; + +void main() { + uint gid = gl_GlobalInvocationID.x; + if (gid >= p.num_slots * p.n_elems) { return; } + uint t = gid / p.n_elems; // token + uint e = gid % p.n_elems; // element within the token's page + + // slot_mapping is i64; read the LOW word and the HIGH word so the sign is + // visible. A padded token carries -1, which is 0xFFFFFFFF in both halves, and + // treating it as unsigned would index astronomically out of range. + uint sm_base = (p.sm_off >> 2) + 2u * t; + int slot_hi = int(SM.v[sm_base + 1u]); + int slot_lo = int(SM.v[sm_base]); + if (slot_hi < 0) { return; } // negative slot => padded token, skip (cpu_cache.cpp:60) + + uint slot = uint(slot_lo); + uint block = slot / p.block_size; + uint offset = slot % p.block_size; + + uint kdst = block * p.k_blk + offset * p.k_pg + e; + uint vdst = block * p.v_blk + offset * p.v_pg + e; + uint ksrc = t * p.k_tok + e; + uint vsrc = t * p.v_tok + e; + + if (VT_RAC_W16 == 1u) { + KC16.v[(p.kc_off >> 1) + kdst] = K16.v[(p.k_off >> 1) + ksrc]; + VC16.v[(p.vc_off >> 1) + vdst] = V16.v[(p.v_off >> 1) + vsrc]; + } else { + KC32.v[(p.kc_off >> 2) + kdst] = K32.v[(p.k_off >> 2) + ksrc]; + VC32.v[(p.vc_off >> 2) + vdst] = V32.v[(p.v_off >> 2) + vsrc]; + } +} diff --git a/src/vt/vulkan/vulkan_ops.cpp b/src/vt/vulkan/vulkan_ops.cpp index c3584672..5be7d398 100644 --- a/src/vt/vulkan/vulkan_ops.cpp +++ b/src/vt/vulkan/vulkan_ops.cpp @@ -112,6 +112,12 @@ struct EmbeddingParams { struct ArgmaxParams { uint32_t n, v, logits_off, out_off; }; +struct ReshapeAndCacheParams { + uint32_t num_slots, n_elems, block_size; + uint32_t k_blk, k_pg, v_blk, v_pg; + uint32_t k_tok, v_tok; + uint32_t k_off, v_off, kc_off, vc_off, sm_off; +}; struct PagedAttnParams { uint32_t total_q, hq, d, block_size, qpk, num_reqs; uint32_t causal; @@ -495,6 +501,46 @@ void PagedAttentionKernel(Queue& q, Tensor& out, const Tensor& query, const Tens Go("vt_paged_attn", bind, p, static_cast(total_q * hq), spec, 4); } +// cpu_cache.cpp:33-72 ReshapeAndCacheKernel. Pure BYTE MOVEMENT -- the CPU +// kernel is two memcpys per token and converts nothing -- so the dtype selects +// only the storage WIDTH to copy at, and the gate for it is bit-exactness. +void ReshapeAndCacheKernel(Queue&, const Tensor& k, const Tensor& v, Tensor& k_cache, + Tensor& v_cache, const Tensor& slot_mapping) { + const int64_t num_slots = slot_mapping.shape[0]; + const int64_t block_size = k_cache.shape[1]; + const int64_t n_elems = k_cache.shape[2] * k_cache.shape[3]; // one token's page + if (num_slots == 0 || n_elems == 0) return; + VT_CHECK(slot_mapping.dtype == DType::kI64, + "vulkan reshape_and_cache: slot_mapping must be i64"); + VT_CHECK(k.dtype == k_cache.dtype && v.dtype == v_cache.dtype, + "vulkan reshape_and_cache: source and cache dtypes must match (this op " + "moves bytes and converts nothing)"); + + Binder bind; + const uint32_t k_off = bind.Add(k, "reshape_and_cache: k"); + const uint32_t v_off = bind.Add(v, "reshape_and_cache: v"); + const uint32_t kc_off = bind.Add(k_cache, "reshape_and_cache: k_cache"); + const uint32_t vc_off = bind.Add(v_cache, "reshape_and_cache: v_cache"); + const uint32_t sm_off = bind.AddU32Only(slot_mapping, "reshape_and_cache: slot_mapping"); + + const uint32_t spec[1] = {k.dtype == DType::kF32 ? 0u : 1u}; + ReshapeAndCacheParams p{static_cast(num_slots), + static_cast(n_elems), + static_cast(block_size), + static_cast(k_cache.stride[0]), + static_cast(k_cache.stride[1]), + static_cast(v_cache.stride[0]), + static_cast(v_cache.stride[1]), + static_cast(k.stride[0]), + static_cast(v.stride[0]), + k_off, + v_off, + kc_off, + vc_off, + sm_off}; + Go("vt_reshape_and_cache", bind, p, FlatGroupCount(num_slots * n_elems), spec, 1); +} + struct Registrar { Registrar() { // Same guard as the backend registrar: a Vulkan-enabled build on a host with @@ -503,6 +549,8 @@ struct Registrar { if (!VulkanContext::Available()) return; // static_cast against the ops.h aliases ties every kernel signature to the // registration contract at COMPILE time (the cpu_ops.cpp idiom). + RegisterOp(OpId::kReshapeAndCache, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&ReshapeAndCacheKernel))); RegisterOp(OpId::kPagedAttention, DeviceType::kVULKAN, reinterpret_cast(static_cast(&PagedAttentionKernel))); RegisterOp(OpId::kEmbedding, DeviceType::kVULKAN, diff --git a/src/vt/vulkan/vulkan_spirv.cpp b/src/vt/vulkan/vulkan_spirv.cpp index 42f5c250..b3eab774 100644 --- a/src/vt/vulkan/vulkan_spirv.cpp +++ b/src/vt/vulkan/vulkan_spirv.cpp @@ -3978,6 +3978,183 @@ constexpr uint32_t kSpv_vt_relu[] = { 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, 0x0000014au, 0x00010038u, }; +constexpr uint32_t kSpv_vt_reshape_and_cache[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x000000ebu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000bu, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000000bu, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000011u, 0x00000002u, 0x00050048u, 0x00000011u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000011u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000011u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000011u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000011u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000011u, + 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000011u, 0x00000006u, 0x00000023u, 0x00000018u, + 0x00050048u, 0x00000011u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000011u, 0x00000008u, + 0x00000023u, 0x00000020u, 0x00050048u, 0x00000011u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, + 0x00000011u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000011u, 0x0000000bu, 0x00000023u, + 0x0000002cu, 0x00050048u, 0x00000011u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000011u, + 0x0000000du, 0x00000023u, 0x00000034u, 0x00040047u, 0x00000038u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x00000039u, 0x00000002u, 0x00040048u, 0x00000039u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000039u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000003bu, 0x00000018u, 0x00040047u, 0x0000003bu, + 0x00000021u, 0x00000008u, 0x00040047u, 0x0000003bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000086u, + 0x00000001u, 0x00000000u, 0x00040047u, 0x0000008bu, 0x00000006u, 0x00000002u, 0x00030047u, 0x0000008cu, + 0x00000002u, 0x00050048u, 0x0000008cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000008eu, + 0x00000021u, 0x00000005u, 0x00040047u, 0x0000008eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000095u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x00000096u, 0x00000002u, 0x00040048u, 0x00000096u, 0x00000000u, + 0x00000018u, 0x00050048u, 0x00000096u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000098u, + 0x00000018u, 0x00040047u, 0x00000098u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000098u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x000000a3u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000000a4u, 0x00000002u, + 0x00050048u, 0x000000a4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000000a6u, 0x00000021u, + 0x00000007u, 0x00040047u, 0x000000a6u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000adu, 0x00000006u, + 0x00000002u, 0x00030047u, 0x000000aeu, 0x00000002u, 0x00040048u, 0x000000aeu, 0x00000000u, 0x00000018u, + 0x00050048u, 0x000000aeu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000b0u, 0x00000018u, + 0x00040047u, 0x000000b0u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000000b0u, 0x00000022u, 0x00000000u, + 0x00040047u, 0x000000bbu, 0x00000006u, 0x00000004u, 0x00030047u, 0x000000bcu, 0x00000002u, 0x00050048u, + 0x000000bcu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000000beu, 0x00000021u, 0x00000004u, + 0x00040047u, 0x000000beu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000c4u, 0x00000006u, 0x00000004u, + 0x00030047u, 0x000000c5u, 0x00000002u, 0x00040048u, 0x000000c5u, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000000c5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000c7u, 0x00000018u, 0x00040047u, + 0x000000c7u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000000c7u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000000d0u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000000d1u, 0x00000002u, 0x00050048u, 0x000000d1u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000000d3u, 0x00000021u, 0x00000006u, 0x00040047u, + 0x000000d3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000d9u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000000dau, 0x00000002u, 0x00040048u, 0x000000dau, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000dau, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000dcu, 0x00000018u, 0x00040047u, 0x000000dcu, + 0x00000021u, 0x00000002u, 0x00040047u, 0x000000dcu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000eau, + 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, + 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040017u, + 0x00000009u, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000000au, 0x00000001u, 0x00000009u, 0x0004003bu, + 0x0000000au, 0x0000000bu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000000cu, 0x00000000u, 0x00040020u, + 0x0000000du, 0x00000001u, 0x00000006u, 0x0010001eu, 0x00000011u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000012u, 0x00000009u, 0x00000011u, 0x0004003bu, + 0x00000012u, 0x00000013u, 0x00000009u, 0x00040015u, 0x00000014u, 0x00000020u, 0x00000001u, 0x0004002bu, + 0x00000014u, 0x00000015u, 0x00000000u, 0x00040020u, 0x00000016u, 0x00000009u, 0x00000006u, 0x0004002bu, + 0x00000014u, 0x00000019u, 0x00000001u, 0x00020014u, 0x0000001du, 0x0004002bu, 0x00000014u, 0x0000002du, + 0x0000000du, 0x0004002bu, 0x00000014u, 0x00000030u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000032u, + 0x00000002u, 0x00040020u, 0x00000036u, 0x00000007u, 0x00000014u, 0x0003001du, 0x00000038u, 0x00000006u, + 0x0003001eu, 0x00000039u, 0x00000038u, 0x00040020u, 0x0000003au, 0x0000000cu, 0x00000039u, 0x0004003bu, + 0x0000003au, 0x0000003bu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000001u, 0x00040020u, + 0x0000003fu, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000014u, 0x0000005cu, 0x00000003u, 0x0004002bu, + 0x00000014u, 0x00000061u, 0x00000004u, 0x0004002bu, 0x00000014u, 0x0000006au, 0x00000005u, 0x0004002bu, + 0x00000014u, 0x0000006fu, 0x00000006u, 0x0004002bu, 0x00000014u, 0x00000078u, 0x00000007u, 0x0004002bu, + 0x00000014u, 0x00000080u, 0x00000008u, 0x00040032u, 0x00000006u, 0x00000086u, 0x00000000u, 0x00060034u, + 0x0000001du, 0x00000087u, 0x000000aau, 0x00000086u, 0x0000003du, 0x00040015u, 0x0000008au, 0x00000010u, + 0x00000000u, 0x0003001du, 0x0000008bu, 0x0000008au, 0x0003001eu, 0x0000008cu, 0x0000008bu, 0x00040020u, + 0x0000008du, 0x0000000cu, 0x0000008cu, 0x0004003bu, 0x0000008du, 0x0000008eu, 0x0000000cu, 0x0004002bu, + 0x00000014u, 0x0000008fu, 0x0000000bu, 0x0003001du, 0x00000095u, 0x0000008au, 0x0003001eu, 0x00000096u, + 0x00000095u, 0x00040020u, 0x00000097u, 0x0000000cu, 0x00000096u, 0x0004003bu, 0x00000097u, 0x00000098u, + 0x0000000cu, 0x0004002bu, 0x00000014u, 0x00000099u, 0x00000009u, 0x00040020u, 0x0000009fu, 0x0000000cu, + 0x0000008au, 0x0003001du, 0x000000a3u, 0x0000008au, 0x0003001eu, 0x000000a4u, 0x000000a3u, 0x00040020u, + 0x000000a5u, 0x0000000cu, 0x000000a4u, 0x0004003bu, 0x000000a5u, 0x000000a6u, 0x0000000cu, 0x0004002bu, + 0x00000014u, 0x000000a7u, 0x0000000cu, 0x0003001du, 0x000000adu, 0x0000008au, 0x0003001eu, 0x000000aeu, + 0x000000adu, 0x00040020u, 0x000000afu, 0x0000000cu, 0x000000aeu, 0x0004003bu, 0x000000afu, 0x000000b0u, + 0x0000000cu, 0x0004002bu, 0x00000014u, 0x000000b1u, 0x0000000au, 0x0003001du, 0x000000bbu, 0x00000006u, + 0x0003001eu, 0x000000bcu, 0x000000bbu, 0x00040020u, 0x000000bdu, 0x0000000cu, 0x000000bcu, 0x0004003bu, + 0x000000bdu, 0x000000beu, 0x0000000cu, 0x0003001du, 0x000000c4u, 0x00000006u, 0x0003001eu, 0x000000c5u, + 0x000000c4u, 0x00040020u, 0x000000c6u, 0x0000000cu, 0x000000c5u, 0x0004003bu, 0x000000c6u, 0x000000c7u, + 0x0000000cu, 0x0003001du, 0x000000d0u, 0x00000006u, 0x0003001eu, 0x000000d1u, 0x000000d0u, 0x00040020u, + 0x000000d2u, 0x0000000cu, 0x000000d1u, 0x0004003bu, 0x000000d2u, 0x000000d3u, 0x0000000cu, 0x0003001du, + 0x000000d9u, 0x00000006u, 0x0003001eu, 0x000000dau, 0x000000d9u, 0x00040020u, 0x000000dbu, 0x0000000cu, + 0x000000dau, 0x0004003bu, 0x000000dbu, 0x000000dcu, 0x0000000cu, 0x00030016u, 0x000000e5u, 0x00000020u, + 0x0004002bu, 0x00000006u, 0x000000e6u, 0x00000080u, 0x0004001cu, 0x000000e7u, 0x000000e5u, 0x000000e6u, + 0x00040020u, 0x000000e8u, 0x00000004u, 0x000000e7u, 0x0004003bu, 0x000000e8u, 0x000000e9u, 0x00000004u, + 0x0006002cu, 0x00000009u, 0x000000eau, 0x000000e6u, 0x0000003du, 0x0000003du, 0x00050036u, 0x00000002u, + 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000008u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000022u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000027u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000002cu, 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000037u, + 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000043u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000004du, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000068u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007eu, + 0x00000007u, 0x00050041u, 0x0000000du, 0x0000000eu, 0x0000000bu, 0x0000000cu, 0x0004003du, 0x00000006u, + 0x0000000fu, 0x0000000eu, 0x0003003eu, 0x00000008u, 0x0000000fu, 0x0004003du, 0x00000006u, 0x00000010u, + 0x00000008u, 0x00050041u, 0x00000016u, 0x00000017u, 0x00000013u, 0x00000015u, 0x0004003du, 0x00000006u, + 0x00000018u, 0x00000017u, 0x00050041u, 0x00000016u, 0x0000001au, 0x00000013u, 0x00000019u, 0x0004003du, + 0x00000006u, 0x0000001bu, 0x0000001au, 0x00050084u, 0x00000006u, 0x0000001cu, 0x00000018u, 0x0000001bu, + 0x000500aeu, 0x0000001du, 0x0000001eu, 0x00000010u, 0x0000001cu, 0x000300f7u, 0x00000020u, 0x00000000u, + 0x000400fau, 0x0000001eu, 0x0000001fu, 0x00000020u, 0x000200f8u, 0x0000001fu, 0x000100fdu, 0x000200f8u, + 0x00000020u, 0x0004003du, 0x00000006u, 0x00000023u, 0x00000008u, 0x00050041u, 0x00000016u, 0x00000024u, + 0x00000013u, 0x00000019u, 0x0004003du, 0x00000006u, 0x00000025u, 0x00000024u, 0x00050086u, 0x00000006u, + 0x00000026u, 0x00000023u, 0x00000025u, 0x0003003eu, 0x00000022u, 0x00000026u, 0x0004003du, 0x00000006u, + 0x00000028u, 0x00000008u, 0x00050041u, 0x00000016u, 0x00000029u, 0x00000013u, 0x00000019u, 0x0004003du, + 0x00000006u, 0x0000002au, 0x00000029u, 0x00050089u, 0x00000006u, 0x0000002bu, 0x00000028u, 0x0000002au, + 0x0003003eu, 0x00000027u, 0x0000002bu, 0x00050041u, 0x00000016u, 0x0000002eu, 0x00000013u, 0x0000002du, + 0x0004003du, 0x00000006u, 0x0000002fu, 0x0000002eu, 0x000500c2u, 0x00000006u, 0x00000031u, 0x0000002fu, + 0x00000030u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000022u, 0x00050084u, 0x00000006u, 0x00000034u, + 0x00000032u, 0x00000033u, 0x00050080u, 0x00000006u, 0x00000035u, 0x00000031u, 0x00000034u, 0x0003003eu, + 0x0000002cu, 0x00000035u, 0x0004003du, 0x00000006u, 0x0000003cu, 0x0000002cu, 0x00050080u, 0x00000006u, + 0x0000003eu, 0x0000003cu, 0x0000003du, 0x00060041u, 0x0000003fu, 0x00000040u, 0x0000003bu, 0x00000015u, + 0x0000003eu, 0x0004003du, 0x00000006u, 0x00000041u, 0x00000040u, 0x0004007cu, 0x00000014u, 0x00000042u, + 0x00000041u, 0x0003003eu, 0x00000037u, 0x00000042u, 0x0004003du, 0x00000006u, 0x00000044u, 0x0000002cu, + 0x00060041u, 0x0000003fu, 0x00000045u, 0x0000003bu, 0x00000015u, 0x00000044u, 0x0004003du, 0x00000006u, + 0x00000046u, 0x00000045u, 0x0004007cu, 0x00000014u, 0x00000047u, 0x00000046u, 0x0003003eu, 0x00000043u, + 0x00000047u, 0x0004003du, 0x00000014u, 0x00000048u, 0x00000037u, 0x000500b1u, 0x0000001du, 0x00000049u, + 0x00000048u, 0x00000015u, 0x000300f7u, 0x0000004bu, 0x00000000u, 0x000400fau, 0x00000049u, 0x0000004au, + 0x0000004bu, 0x000200f8u, 0x0000004au, 0x000100fdu, 0x000200f8u, 0x0000004bu, 0x0004003du, 0x00000014u, + 0x0000004eu, 0x00000043u, 0x0004007cu, 0x00000006u, 0x0000004fu, 0x0000004eu, 0x0003003eu, 0x0000004du, + 0x0000004fu, 0x0004003du, 0x00000006u, 0x00000051u, 0x0000004du, 0x00050041u, 0x00000016u, 0x00000052u, + 0x00000013u, 0x00000030u, 0x0004003du, 0x00000006u, 0x00000053u, 0x00000052u, 0x00050086u, 0x00000006u, + 0x00000054u, 0x00000051u, 0x00000053u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, 0x00000006u, + 0x00000056u, 0x0000004du, 0x00050041u, 0x00000016u, 0x00000057u, 0x00000013u, 0x00000030u, 0x0004003du, + 0x00000006u, 0x00000058u, 0x00000057u, 0x00050089u, 0x00000006u, 0x00000059u, 0x00000056u, 0x00000058u, + 0x0003003eu, 0x00000055u, 0x00000059u, 0x0004003du, 0x00000006u, 0x0000005bu, 0x00000050u, 0x00050041u, + 0x00000016u, 0x0000005du, 0x00000013u, 0x0000005cu, 0x0004003du, 0x00000006u, 0x0000005eu, 0x0000005du, + 0x00050084u, 0x00000006u, 0x0000005fu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x00000060u, + 0x00000055u, 0x00050041u, 0x00000016u, 0x00000062u, 0x00000013u, 0x00000061u, 0x0004003du, 0x00000006u, + 0x00000063u, 0x00000062u, 0x00050084u, 0x00000006u, 0x00000064u, 0x00000060u, 0x00000063u, 0x00050080u, + 0x00000006u, 0x00000065u, 0x0000005fu, 0x00000064u, 0x0004003du, 0x00000006u, 0x00000066u, 0x00000027u, + 0x00050080u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, 0x0003003eu, 0x0000005au, 0x00000067u, + 0x0004003du, 0x00000006u, 0x00000069u, 0x00000050u, 0x00050041u, 0x00000016u, 0x0000006bu, 0x00000013u, + 0x0000006au, 0x0004003du, 0x00000006u, 0x0000006cu, 0x0000006bu, 0x00050084u, 0x00000006u, 0x0000006du, + 0x00000069u, 0x0000006cu, 0x0004003du, 0x00000006u, 0x0000006eu, 0x00000055u, 0x00050041u, 0x00000016u, + 0x00000070u, 0x00000013u, 0x0000006fu, 0x0004003du, 0x00000006u, 0x00000071u, 0x00000070u, 0x00050084u, + 0x00000006u, 0x00000072u, 0x0000006eu, 0x00000071u, 0x00050080u, 0x00000006u, 0x00000073u, 0x0000006du, + 0x00000072u, 0x0004003du, 0x00000006u, 0x00000074u, 0x00000027u, 0x00050080u, 0x00000006u, 0x00000075u, + 0x00000073u, 0x00000074u, 0x0003003eu, 0x00000068u, 0x00000075u, 0x0004003du, 0x00000006u, 0x00000077u, + 0x00000022u, 0x00050041u, 0x00000016u, 0x00000079u, 0x00000013u, 0x00000078u, 0x0004003du, 0x00000006u, + 0x0000007au, 0x00000079u, 0x00050084u, 0x00000006u, 0x0000007bu, 0x00000077u, 0x0000007au, 0x0004003du, + 0x00000006u, 0x0000007cu, 0x00000027u, 0x00050080u, 0x00000006u, 0x0000007du, 0x0000007bu, 0x0000007cu, + 0x0003003eu, 0x00000076u, 0x0000007du, 0x0004003du, 0x00000006u, 0x0000007fu, 0x00000022u, 0x00050041u, + 0x00000016u, 0x00000081u, 0x00000013u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000082u, 0x00000081u, + 0x00050084u, 0x00000006u, 0x00000083u, 0x0000007fu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000084u, + 0x00000027u, 0x00050080u, 0x00000006u, 0x00000085u, 0x00000083u, 0x00000084u, 0x0003003eu, 0x0000007eu, + 0x00000085u, 0x000300f7u, 0x00000089u, 0x00000000u, 0x000400fau, 0x00000087u, 0x00000088u, 0x000000bau, + 0x000200f8u, 0x00000088u, 0x00050041u, 0x00000016u, 0x00000090u, 0x00000013u, 0x0000008fu, 0x0004003du, + 0x00000006u, 0x00000091u, 0x00000090u, 0x000500c2u, 0x00000006u, 0x00000092u, 0x00000091u, 0x00000019u, + 0x0004003du, 0x00000006u, 0x00000093u, 0x0000005au, 0x00050080u, 0x00000006u, 0x00000094u, 0x00000092u, + 0x00000093u, 0x00050041u, 0x00000016u, 0x0000009au, 0x00000013u, 0x00000099u, 0x0004003du, 0x00000006u, + 0x0000009bu, 0x0000009au, 0x000500c2u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x00000019u, 0x0004003du, + 0x00000006u, 0x0000009du, 0x00000076u, 0x00050080u, 0x00000006u, 0x0000009eu, 0x0000009cu, 0x0000009du, + 0x00060041u, 0x0000009fu, 0x000000a0u, 0x00000098u, 0x00000015u, 0x0000009eu, 0x0004003du, 0x0000008au, + 0x000000a1u, 0x000000a0u, 0x00060041u, 0x0000009fu, 0x000000a2u, 0x0000008eu, 0x00000015u, 0x00000094u, + 0x0003003eu, 0x000000a2u, 0x000000a1u, 0x00050041u, 0x00000016u, 0x000000a8u, 0x00000013u, 0x000000a7u, + 0x0004003du, 0x00000006u, 0x000000a9u, 0x000000a8u, 0x000500c2u, 0x00000006u, 0x000000aau, 0x000000a9u, + 0x00000019u, 0x0004003du, 0x00000006u, 0x000000abu, 0x00000068u, 0x00050080u, 0x00000006u, 0x000000acu, + 0x000000aau, 0x000000abu, 0x00050041u, 0x00000016u, 0x000000b2u, 0x00000013u, 0x000000b1u, 0x0004003du, + 0x00000006u, 0x000000b3u, 0x000000b2u, 0x000500c2u, 0x00000006u, 0x000000b4u, 0x000000b3u, 0x00000019u, + 0x0004003du, 0x00000006u, 0x000000b5u, 0x0000007eu, 0x00050080u, 0x00000006u, 0x000000b6u, 0x000000b4u, + 0x000000b5u, 0x00060041u, 0x0000009fu, 0x000000b7u, 0x000000b0u, 0x00000015u, 0x000000b6u, 0x0004003du, + 0x0000008au, 0x000000b8u, 0x000000b7u, 0x00060041u, 0x0000009fu, 0x000000b9u, 0x000000a6u, 0x00000015u, + 0x000000acu, 0x0003003eu, 0x000000b9u, 0x000000b8u, 0x000200f9u, 0x00000089u, 0x000200f8u, 0x000000bau, + 0x00050041u, 0x00000016u, 0x000000bfu, 0x00000013u, 0x0000008fu, 0x0004003du, 0x00000006u, 0x000000c0u, + 0x000000bfu, 0x000500c2u, 0x00000006u, 0x000000c1u, 0x000000c0u, 0x00000030u, 0x0004003du, 0x00000006u, + 0x000000c2u, 0x0000005au, 0x00050080u, 0x00000006u, 0x000000c3u, 0x000000c1u, 0x000000c2u, 0x00050041u, + 0x00000016u, 0x000000c8u, 0x00000013u, 0x00000099u, 0x0004003du, 0x00000006u, 0x000000c9u, 0x000000c8u, + 0x000500c2u, 0x00000006u, 0x000000cau, 0x000000c9u, 0x00000030u, 0x0004003du, 0x00000006u, 0x000000cbu, + 0x00000076u, 0x00050080u, 0x00000006u, 0x000000ccu, 0x000000cau, 0x000000cbu, 0x00060041u, 0x0000003fu, + 0x000000cdu, 0x000000c7u, 0x00000015u, 0x000000ccu, 0x0004003du, 0x00000006u, 0x000000ceu, 0x000000cdu, + 0x00060041u, 0x0000003fu, 0x000000cfu, 0x000000beu, 0x00000015u, 0x000000c3u, 0x0003003eu, 0x000000cfu, + 0x000000ceu, 0x00050041u, 0x00000016u, 0x000000d4u, 0x00000013u, 0x000000a7u, 0x0004003du, 0x00000006u, + 0x000000d5u, 0x000000d4u, 0x000500c2u, 0x00000006u, 0x000000d6u, 0x000000d5u, 0x00000030u, 0x0004003du, + 0x00000006u, 0x000000d7u, 0x00000068u, 0x00050080u, 0x00000006u, 0x000000d8u, 0x000000d6u, 0x000000d7u, + 0x00050041u, 0x00000016u, 0x000000ddu, 0x00000013u, 0x000000b1u, 0x0004003du, 0x00000006u, 0x000000deu, + 0x000000ddu, 0x000500c2u, 0x00000006u, 0x000000dfu, 0x000000deu, 0x00000030u, 0x0004003du, 0x00000006u, + 0x000000e0u, 0x0000007eu, 0x00050080u, 0x00000006u, 0x000000e1u, 0x000000dfu, 0x000000e0u, 0x00060041u, + 0x0000003fu, 0x000000e2u, 0x000000dcu, 0x00000015u, 0x000000e1u, 0x0004003du, 0x00000006u, 0x000000e3u, + 0x000000e2u, 0x00060041u, 0x0000003fu, 0x000000e4u, 0x000000d3u, 0x00000015u, 0x000000d8u, 0x0003003eu, + 0x000000e4u, 0x000000e3u, 0x000200f9u, 0x00000089u, 0x000200f8u, 0x00000089u, 0x000100fdu, 0x00010038u, +}; + constexpr uint32_t kSpv_vt_rms_norm[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000031fu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -4856,6 +5033,10 @@ constexpr uint32_t kSpecIds_vt_paged_attn[] = { 0u, 1u, 2u, 3u, }; +constexpr uint32_t kSpecIds_vt_reshape_and_cache[] = { + 0u, +}; + } // namespace const SpirvModule kSpirvModules[] = { @@ -4868,6 +5049,7 @@ const SpirvModule kSpirvModules[] = { {"vt_matmul", kSpv_vt_matmul, sizeof(kSpv_vt_matmul) / sizeof(uint32_t), kSpecIds_vt_matmul, 4}, {"vt_paged_attn", kSpv_vt_paged_attn, sizeof(kSpv_vt_paged_attn) / sizeof(uint32_t), kSpecIds_vt_paged_attn, 4}, {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, + {"vt_reshape_and_cache", kSpv_vt_reshape_and_cache, sizeof(kSpv_vt_reshape_and_cache) / sizeof(uint32_t), kSpecIds_vt_reshape_and_cache, 1}, {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t), nullptr, 0}, {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t), nullptr, 0}, }; diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py index 62ad4916..82e93a48 100644 --- a/tests/scripts/test_gen_vulkan_spirv.py +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -103,6 +103,7 @@ def test_header_declares_but_does_not_define_the_blobs(self): "vt_matmul": "a/b/out dtype plus the b orientation", "vt_embedding": "table/out dtype plus the id width", "vt_paged_attn": "query/k-cache/v-cache/out dtype", + "vt_reshape_and_cache": "the 32- vs 16-bit copy width", } def test_specialized_shaders_declare_their_constants(self): diff --git a/tests/vt/test_backend_cross_device.cpp b/tests/vt/test_backend_cross_device.cpp index ed29a6bb..ec4a075e 100644 --- a/tests/vt/test_backend_cross_device.cpp +++ b/tests/vt/test_backend_cross_device.cpp @@ -357,6 +357,75 @@ TEST_CASE("elementwise ops match the CPU oracle within NMSE <= 5e-4") { cpu.DestroyQueue(cq); } +TEST_CASE("ReshapeAndCache scatters into the KV cache BIT-EXACTLY") { + // Byte movement, so the bar is memcmp against the CPU oracle, not NMSE. + constexpr int64_t kTokens = 9, kHk = 2, kD = 8, kBS = 4, kBlocks = 6; + constexpr int64_t kElems = kHk * kD; // one token's page payload + constexpr int64_t kCacheN = kBlocks * kBS * kHk * kD; + + const std::vector knew = RandomVec(kTokens * kElems, 701); + const std::vector vnew = RandomVec(kTokens * kElems, 702); + // Pre-existing cache contents: the padded-token case must leave these INTACT, + // so they cannot start as zeros or the check would pass vacuously. + const std::vector kc0 = RandomVec(kCacheN, 703); + const std::vector vc0 = RandomVec(kCacheN, 704); + + // Slots are deliberately SCATTERED and out of order, and two tokens carry -1. + // Upstream pads the mapping and marks padded tokens negative (cpu_cache.cpp:60); + // a kernel that clamped instead of skipping would corrupt a real page, and one + // that read the i64 slot as unsigned would index astronomically out of range. + const std::vector slots = {20, -1, 3, 11, -1, 0, 23, 7, 15}; + + vt::Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue cq = cpu.CreateQueue(); + const Device cd{DeviceType::kCPU, 0}; + std::vector ck = knew, cv = vnew, ref_kc = kc0, ref_vc = vc0; + std::vector cslots = slots; + { + Tensor tk = Tensor::Contiguous(ck.data(), DType::kF32, cd, {kTokens, kHk, kD}); + Tensor tv = Tensor::Contiguous(cv.data(), DType::kF32, cd, {kTokens, kHk, kD}); + Tensor tkc = Tensor::Contiguous(ref_kc.data(), DType::kF32, cd, {kBlocks, kBS, kHk, kD}); + Tensor tvc = Tensor::Contiguous(ref_vc.data(), DType::kF32, cd, {kBlocks, kBS, kHk, kD}); + Tensor tsm = Tensor::Contiguous(cslots.data(), DType::kI64, cd, {kTokens}); + vt::ReshapeAndCache(cq, tk, tv, tkc, tvc, tsm); + } + cpu.DestroyQueue(cq); + + for (DeviceType dt : RegisteredDevices()) { + if (!OpAvailable(vt::OpId::kReshapeAndCache, dt)) continue; + CAPTURE(DeviceName(dt)); + vt::Backend& dev = vt::GetBackend(dt); + Queue q = dev.CreateQueue(); + const Device d{dt, 0}; + + DevBuf dk(dev, q, kTokens * kElems), dv(dev, q, kTokens * kElems), + dkc(dev, q, kCacheN), dvc(dev, q, kCacheN); + dk.Upload(knew); + dv.Upload(vnew); + dkc.Upload(kc0); // seeded, so an untouched page must survive + dvc.Upload(vc0); + void* dsm = dev.Alloc(kTokens * sizeof(int64_t)); + dev.Copy(q, dsm, slots.data(), kTokens * sizeof(int64_t)); + dev.Synchronize(q); + + Tensor tk = Tensor::Contiguous(dk.ptr(), DType::kF32, d, {kTokens, kHk, kD}); + Tensor tv = Tensor::Contiguous(dv.ptr(), DType::kF32, d, {kTokens, kHk, kD}); + Tensor tkc = Tensor::Contiguous(dkc.ptr(), DType::kF32, d, {kBlocks, kBS, kHk, kD}); + Tensor tvc = Tensor::Contiguous(dvc.ptr(), DType::kF32, d, {kBlocks, kBS, kHk, kD}); + Tensor tsm = Tensor::Contiguous(dsm, DType::kI64, d, {kTokens}); + vt::ReshapeAndCache(q, tk, tv, tkc, tvc, tsm); + dev.Synchronize(q); + + const std::vector got_kc = dkc.Download(); + const std::vector got_vc = dvc.Download(); + CHECK(std::memcmp(ref_kc.data(), got_kc.data(), ref_kc.size() * sizeof(float)) == 0); + CHECK(std::memcmp(ref_vc.data(), got_vc.data(), ref_vc.size() * sizeof(float)) == 0); + + dev.Free(dsm); + dev.DestroyQueue(q); + } +} + TEST_CASE("paged attention matches the CPU oracle within NMSE <= 5e-4") { // GQA prefill: Hq=4 query heads over Hk=2 kv heads, head dim 8, block size 4, // one request of 37 tokens spanning 10 pages. Ragged on purpose -- 37 is not a diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index 159d09ef..262aacbf 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -53,7 +53,7 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // point of the split: at the target shader surface the words must not be // re-parsed by every TU that merely needs the table. const size_t n = vt::vulkan::kSpirvModuleCount; - CHECK(n == 11); + CHECK(n == 12); for (size_t mi = 0; mi < n; ++mi) { const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); @@ -65,8 +65,8 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // rather than at pipeline-creation time on a device we might not have. for (const char* want : {"vt_add", "vt_cast", "vt_embedding", "vt_fused_chain", "vt_greedy_argmax", "vt_layer_norm", "vt_matmul", - "vt_paged_attn", "vt_relu", "vt_rms_norm", - "vt_silu_and_mul"}) { + "vt_paged_attn", "vt_relu", "vt_reshape_and_cache", + "vt_rms_norm", "vt_silu_and_mul"}) { bool found = false; for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { if (std::strcmp(vt::vulkan::kSpirvModules[mi].name, want) == 0) found = true; @@ -109,6 +109,11 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const // table dtype, out dtype, id width (i32 vs i64). REQUIRE(m.spec_id_count == 3); for (uint32_t want = 0; want < 3; ++want) CHECK(m.spec_ids[want] == want); + } else if (std::strcmp(m.name, "vt_reshape_and_cache") == 0) { + // A single WIDTH selector, not a dtype code: this op moves bytes and + // converts nothing, so 32-bit and 16-bit are the only two paths. + REQUIRE(m.spec_id_count == 1); + CHECK(m.spec_ids[0] == 0u); } else if (std::strcmp(m.name, "vt_paged_attn") == 0) { // query / k-cache / v-cache / out dtype. REQUIRE(m.spec_id_count == 4); @@ -331,14 +336,14 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // two ends of the model, token ids in and out. vt::OpId::kMatmul, vt::OpId::kMatmulBT, vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax, - // Block-paged attention: the one kernel with no llama.cpp - // Vulkan counterpart to port from. - vt::OpId::kPagedAttention}) { + // The attention block: paged attention (the one kernel + // with no llama.cpp Vulkan counterpart) and the KV write. + vt::OpId::kPagedAttention, vt::OpId::kReshapeAndCache}) { CHECK(vt::OpRegistered(op, DeviceType::kVULKAN)); } - // No NATIVE Vulkan kernel yet for the KV cache write, RoPE, or the sampler - // beyond greedy argmax. - for (vt::OpId op : {vt::OpId::kReshapeAndCache, vt::OpId::kRopeNeox, + // No NATIVE Vulkan kernel yet for RoPE, quant, MoE, or the sampler beyond + // greedy argmax. + for (vt::OpId op : {vt::OpId::kRopeNeox, vt::OpId::kRopeFromCache, vt::OpId::kApplyTemperature, vt::OpId::kMoeRouterTopK}) { CHECK_FALSE(vt::OpRegistered(op, DeviceType::kVULKAN)); } @@ -360,13 +365,14 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // NATIVE on Vulkan, 79 are served by the reference tier, and ZERO throw. REQUIRE(vt::ReferenceTierEligible(DeviceType::kVULKAN)); // This must stay an op that is GENUINELY unimplemented natively, and it moves - // on as the backend fills in: it was kMatmul, then kPagedAttention, and both - // now have native kernels. kReshapeAndCache is the current one. - void* rac = nullptr; - CHECK_NOTHROW(rac = vt::GetOp(vt::OpId::kReshapeAndCache, DeviceType::kVULKAN)); - CHECK(rac != nullptr); + // on as the backend fills in: kMatmul, then kPagedAttention, then + // kReshapeAndCache all had their turn and now have native kernels. kRopeNeox is + // the current one. + void* rope = nullptr; + CHECK_NOTHROW(rope = vt::GetOp(vt::OpId::kRopeNeox, DeviceType::kVULKAN)); + CHECK(rope != nullptr); // BY NAME, so a host kernel can never masquerade as a native Vulkan one (Risk 7). - const auto stats = vt::GetOpProviderStats(vt::OpId::kReshapeAndCache, DeviceType::kVULKAN); + const auto stats = vt::GetOpProviderStats(vt::OpId::kRopeNeox, DeviceType::kVULKAN); REQUIRE(stats.last_selected != nullptr); CHECK(std::string(stats.last_selected) == std::string(vt::kReferenceProviderName)); CHECK(vt::GetReferenceTierHits() > 0); From d9ca9d92917071b139e11fcf02ca5b65d3cc36c7 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 22:53:35 +0000 Subject: [PATCH 15/17] record(vulkan): 14 native kernels, and the RoPE decision that comes before more work Refreshes the measured counts after the KV-cache write landed (native 13 -> 14, reference tier 74 -> 73), and records the reason the next brick stopped at a decision rather than a commit. RoPE's CPU kernel computes the angle in DOUBLE (cpu_ops.cpp:701-705). An f32 transcription loses precision badly at long context, where pos is in the thousands and the angle is large -- subtly wrong in exactly the regime that matters, and it would still pass a short-sequence gate, which is the dangerous combination. Two ways out are on record: require shaderFloat64 and transcribe faithfully, or implement kRopeFromCache (the apply, pure f32 multiply-add) natively and leave kRopeCosSinCache (the once-per-model table build, where the double math lives) on the reference tier. The second matches vLLM's own structure and costs no device feature; it is the recommendation. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .agents/feature-matrix.md | 2 +- .agents/specs/vulkan-full-support.md | 21 +++++++++++++----- .agents/state.md | 33 ++++++++++++++++++++++++++++ docs/BENCHMARKS.md | 2 +- docs/FEATURES.md | 7 +++--- docs/STATUS.md | 2 +- 6 files changed, 55 insertions(+), 12 deletions(-) diff --git a/.agents/feature-matrix.md b/.agents/feature-matrix.md index 08600500..6f202137 100644 --- a/.agents/feature-matrix.md +++ b/.agents/feature-matrix.md @@ -277,7 +277,7 @@ evidence. | `BACKEND-CPU` | production CPU | `PARTIAL` | persistent threadpool + chunked GEMM/row dispatch is 1/3/20-thread bit-identical and TSAN-clean; idle-host performance/RSS gate and compute-in-quant remain open | [backend matrix](backend-matrix.md) | | `BACKEND-ROCM` | ROCm | `INVENTORIED` | source/dispatch spike required; no "one flag" support claim | [backend matrix](backend-matrix.md) | | `BACKEND-MLX` | Apple Metal through MLX | `ACTIVE` | Metal/MLX skeleton ACTIVE: two models (OPT-125m, Qwen3-0.6B) run e2e + pass correctness, native-MSL GEMM, batched command buffers 1.50x (compute-bound at 98%+); optional MLX GEMM provider | [backend matrix](backend-matrix.md) | -| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | **13 NATIVE kernels** of the CPU backend's 87 registered ops (GEMM both orientations, embedding, greedy argmax, block-paged attention, elementwise/norm/fusion); the other 74 served by the portable reference tier (CPU kernel, unified memory). No model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | +| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | **14 NATIVE kernels** of the CPU backend's 87 registered ops (GEMM both orientations, embedding, greedy argmax, block-paged attention + KV write, elementwise/norm/fusion); the other 73 served by the portable reference tier (CPU kernel, unified memory). No model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | | `BACKEND-XPU` | Intel XPU | `INVENTORIED` | loyal upstream-platform port, runtime absent | [backend matrix](backend-matrix.md) | | `BACKEND-ANE` | encoder/pooling accelerator | `INVENTORIED` | specialized CoreML route only | [backend matrix](backend-matrix.md) | diff --git a/.agents/specs/vulkan-full-support.md b/.agents/specs/vulkan-full-support.md index ef0a49f8..53c3d87e 100644 --- a/.agents/specs/vulkan-full-support.md +++ b/.agents/specs/vulkan-full-support.md @@ -113,14 +113,23 @@ Vulkan-ON build, by asking `vt::OpRegistered` and `vt::GetOp` for every `OpId`: | | at `VK-A1` | after the first `VK-B` bricks | |---|---|---| | CPU-registered ops | **87** | **87** | -| **NATIVE** on Vulkan | **8** | **13** | -| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | **74** | +| **NATIVE** on Vulkan | **8** | **14** | +| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | **73** | | **ABSENT** (`GetOp` throws) | **0** | **0** | -The five that moved are `kMatmul`, `kMatmulBT` (dense GEMM, both orientations), -`kEmbedding`, `kGreedyArgmax` and `kPagedAttention` — the model's two ends, the op -it spends most of its time in, and the one kernel with no llama.cpp Vulkan -counterpart to port from. Re-measure with the same method rather than quoting this table. +The six that moved are `kMatmul`, `kMatmulBT` (dense GEMM, both orientations), +`kEmbedding`, `kGreedyArgmax`, `kPagedAttention` and `kReshapeAndCache` — the +model's two ends, the op it spends most of its time in, and the attention block's +read and write halves. + +**`VK-B`'s next brick needs a DECISION, not just work: RoPE.** The CPU kernel +computes the angle in DOUBLE (`cpu_ops.cpp:701-705` — `std::pow` for the +frequency, `std::cos`/`std::sin` of `pos * freq`), and an f32 transcription loses +precision badly at long context, where `pos` is in the thousands. Two ways out: +require `shaderFloat64` and transcribe faithfully, or implement `kRopeFromCache` +(the apply, pure f32 multiply-add) natively and leave `kRopeCosSinCache` (the +once-per-model table build, where the double math lives) on the reference tier. +The second is what vLLM's own structure suggests and costs no device feature. Re-measure with the same method rather than quoting this table. `vt::ReferenceTierEligible(kVULKAN)` is TRUE — GB10 integrated and llvmpipe both report unified memory. So **every op the CPU backend has is already reachable on diff --git a/.agents/state.md b/.agents/state.md index cb13e0e2..f5dfa25f 100644 --- a/.agents/state.md +++ b/.agents/state.md @@ -39885,3 +39885,36 @@ Box left clean (GPU idle, both locks free, worker down). Evidence: MoE, GDN/MLA and every sampler beyond greedy argmax. `get_attn_backend_priority()` remains EMPTY, so no model runs end to end on Vulkan and no speed number is measured, claimed or owed. + +- **2026-08-06 (later still, 3)** — **Vulkan gains the KV-CACHE WRITE + (`kReshapeAndCache`), completing the attention block's device side + (`CLAIM-VULKAN-FULL-1`).** Native **13 → 14**, reference tier **74 → 73**. Paged + attention reads the cache; this writes it. + + Ported from `cpu_cache.cpp` (:33-72), which is two memcpys per token and + CONVERTS NOTHING — so the dtype selects only the copy WIDTH (32-bit via the + uint32 view, 16-bit via the uint16 view, never mixed) and the gate is + BIT-EXACTNESS, not NMSE. The host refuses a source/cache dtype mismatch rather + than silently converting. Slot `-1` is a PADDED token and must be SKIPPED + (:60); the mapping is i64, so the shader tests the HIGH word for the sign — + reading it unsigned would turn `-1` into `0xFFFFFFFF` and index astronomically + out of range. The gate seeds the cache with RANDOM contents (not zeros, so + "padded token left the page intact" cannot pass vacuously) and uses scattered + out-of-order slots so a kernel assuming `slot == token index` fails. + + **RoPE IS NEXT AND IT NEEDS A DECISION FIRST — flagged rather than half-built.** + The CPU kernel computes the angle in DOUBLE (`cpu_ops.cpp:701-705`: `std::pow` + for the frequency, `std::cos`/`std::sin` of `pos * freq`). An f32 transcription + loses precision badly at long context, where `pos` is in the thousands and the + angle is large — i.e. it would be subtly wrong in exactly the regime that + matters, and would still pass a short-sequence gate. Two ways out: (a) require + `shaderFloat64` and transcribe faithfully, or (b) implement `kRopeFromCache` + (the apply — pure f32 multiply-add) natively and leave `kRopeCosSinCache` (the + once-per-model table build, where the double math lives) on the reference tier. + (b) matches vLLM's own structure and costs no device feature; it is the + recommendation on record. + + Still on the reference tier: the whole RoPE family, quant, MoE, GDN/MLA and + every sampler beyond greedy argmax. `get_attn_backend_priority()` remains EMPTY, + so no model runs end to end on Vulkan and no speed number is measured, claimed + or owed. diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md index 81462f3e..5fa1321e 100644 --- a/docs/BENCHMARKS.md +++ b/docs/BENCHMARKS.md @@ -304,7 +304,7 @@ built on it rather than keeping the flattering one. | vLLM 0.26 re-benchmark | Pending | Re-run the binding grids on the advanced pin | | MiniMax-H3 FP4 speed (W-FP4a) | **Measured GB10 (`row/H3-FP4-GPU-E2E`).** Marlin W4A16 byte-exact vs bf16; fp4 a memory win, 0.8x bf16/forward. Real-ckpt fp4-resident e2e RUNS (mp4/wav) but frame is a non-scene patch-grid | Render coherence ROOT-CAUSED (#70): VAE fine, DiT latent white. Geometry ladder (PR #74) REFUTES a DiT-math bug: ours==oracle to 8x8+temporal; white=trained-wts. fp4 speed CLOSED. Detail: benchmark-record + spec §8 | | MXFP4 Qwen3-8B (W4A16 Marlin) | **`KERNEL-MARLIN-DENSE-EXEC` x3 (dense-ON default): c1 1.020, c2/c4/c8 0.962/0.966/0.969, GPU mem 2.63x less** (beats #51 1.005/0.925/0.939/0.953 EVERY axis); #44 3/3, 32B-NVFP4A16 6/6; -Werror test-guard fixes x2 | **VT_MARLIN_DENSE default-ON** (+951us). `FLASH-OCCUPANCY` #75: matched-c8 ncu, occupancy IDENTICAL 8.33%; built vLLM's exact flash recipe, matched reg+instr, STILL +10us, gap is ptxas SASS quality, no lever/flip | -| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 13 NATIVE kernels; the other 74 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | +| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 14 NATIVE kernels; the other 73 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | | SGLang floor arms | Never ran | Both arms of the SGLang comparison | | cuBLAS invocation-parity guard | CI guard landed (CPU); `kGemvHeuristicAlgos` refactor build-verify owed | `nvcc` rebuild + SACRED gate on dgx | | Ampere consumer (`sm_86`, RTX 3090 class) | **No number owed; no such board here.** 2026-08-06 build-verify: 7/7 FA2 TUs 0-warn, real `sm_86` SASS. [Detail](../.agents/benchmark-record.md) | External RTX 3090 report. Floor is llama.cpp on that card (GGUF, not our Blackwell-only NVFP4 grid) | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 6e749435..a9186a51 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -206,9 +206,10 @@ CUDA runtime-verified on GB10 (sm_121a), Jetson Thor (sm_110) and Jetson AGX Orin (sm_87). sm_110 is a correctness venue only: CUTLASS has no FP4 tensor-core kernels for it. -Vulkan is partial and the ◐ is honest but generous. It has **13 native compute -kernels** (dense GEMM in both orientations, block-paged attention, embedding, -greedy argmax, and the elementwise/norm/fusion set); the other 74 ops the CPU backend registers resolve +Vulkan is partial and the ◐ is honest but generous. It has **14 native compute +kernels** (dense GEMM in both orientations, block-paged attention and the KV +cache write, embedding, greedy argmax, and the elementwise/norm/fusion set); the +other 73 ops the CPU backend registers resolve through the portable reference tier, which runs the CPU kernel against shared memory on a unified device. That is correct and arbitrarily slow, no model has been run end to end on it, and no speed number exists or is owed. Build it with diff --git a/docs/STATUS.md b/docs/STATUS.md index 67233aa3..26d1c0a0 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -388,7 +388,7 @@ The correctness form and the full D0-D14 measured chronology live in ## Not supported yet LoRA (W1 CPU runtime brick landed — see the capability table; not yet usable -end-to-end), multi-GPU, Vulkan (13 native kernels, 74 ops on the CPU tier, no +end-to-end), multi-GPU, Vulkan (14 native kernels, 73 ops on the CPU tier, no model run e2e; [campaign](../.agents/specs/vulkan-full-support.md)), and the full tool-calling template surface. **Scale-out / distributed execution is scoped but unbuilt** (spike, 2026-07-28): the engine is From f4738bb8c2281e3a7cb0cf319fd65020d298dc98 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 23:35:17 +0000 Subject: [PATCH 16/17] feat(vulkan): a model runs END TO END on Vulkan, token-exact vs the vLLM oracle opt-125m, greedy, on llvmpipe: the engine selected device type 3 (VULKAN) BACKEND PROOF -- all 9 OPT ops dispatched on device type 3 with 0 declines (kPagedAttention selections=1152) STRICT correctness gate: 6/6 prompts token-exact (96/96 tokens) vs the vLLM 0.25.0 oracle The strong form of the claim, not "it produced plausible text". The gate first verifies vLLM's own greedy is deterministic here (0 multi-valued cells over K=5 runs) so it is the STRICT bar rather than the distributional one; the engine picks Vulkan itself through CurrentPlatform() with no test-side override; and ZERO declines is the load-bearing half, because a provider can be selected and then decline INSIDE its kernel and forward to the CPU tier -- 1152 kPagedAttention selections with no declines means attention really ran on Vulkan rather than the host fallback wearing its name. Three pieces got it there. RoPE, SPLIT THE WAY vLLM SPLITS IT. RotaryEmbedding builds cos_sin_cache once in __init__ and the forward only applies it, which is why ops.rotary_embedding() takes the cache rather than a base and a scaling factor (rotary_embedding/base.py:160-252, common.py:145-185 @ e24d1b24fe96). So the table build stays on the portable tier -- where the double-precision pow/cos/sin lives -- and the per-token apply is native. Faithfulness and numerics agreed here: an f32 transcription of the angle construction would be wrong at long context and would still pass a short-sequence gate. mrope DECLINES through the provider seam rather than throwing, like fp8 KV. Gated on both NeoX and GPT-J pairings, with positions deliberately NOT 0..n-1 so a kernel using the token index instead of the position fails. kQkvSplit mirrors QKVParallelLinear's qkv.split([q_size, kv_size, kv_size]) -- three INDEPENDENT widths, because under GQA k and v are narrower than q. FLASH_ATTN registered for kVULKAN on exactly Metal's footing. The real precondition is not the device name but that our kPagedAttention and kReshapeAndCache read and write the same NHD layout get_kv_cache_shape allocates, which they do since both are ports of the CPU pair. MLA still returns EMPTY DELIBERATELY: kMlaDecodeAttention / kMlaPrefillAttention / kConcatAndCacheMla have no Vulkan kernel, and naming a backend there would route an MLA model into one that cannot serve it. Native 14 -> 16 (measured with the runtime probe, not counted by hand). Clean -Werror Vulkan-ON build 0 warnings; Vulkan gate 10/10 (480 assertions), cross-device 11/11 (123), test_opt_load 1/1 (958), generator 13/13. FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- src/vllm/platforms/vulkan.cpp | 16 +- src/vllm/v1/attention/backend.cpp | 11 + src/vt/vulkan/shaders/vt_qkv_split.comp | 60 + src/vt/vulkan/shaders/vt_rope_from_cache.comp | 109 ++ src/vt/vulkan/vulkan_ops.cpp | 99 ++ src/vt/vulkan/vulkan_spirv.cpp | 1077 +++++++++++++++++ tests/scripts/test_gen_vulkan_spirv.py | 2 + tests/vt/test_backend_cross_device.cpp | 69 ++ tests/vt/test_vulkan_backend.cpp | 50 +- 9 files changed, 1480 insertions(+), 13 deletions(-) create mode 100644 src/vt/vulkan/shaders/vt_qkv_split.comp create mode 100644 src/vt/vulkan/shaders/vt_rope_from_cache.comp diff --git a/src/vllm/platforms/vulkan.cpp b/src/vllm/platforms/vulkan.cpp index a46d40d0..226972df 100644 --- a/src/vllm/platforms/vulkan.cpp +++ b/src/vllm/platforms/vulkan.cpp @@ -67,10 +67,22 @@ class VulkanPlatform final : public Platform { // back a backend whose kernels do not exist on this device. Work row V4 (the // port of llama.cpp's flash_attn.comp family) adds the kernel and the one-line // name here in the same change. + // interface.py get_attn_backend_cls. EMPTY until VK-B: the selector must not be + // able to hand out a backend whose kernels do not exist, and until Vulkan had + // native kPagedAttention + kReshapeAndCache the honest answer was "none". + // + // Both now exist and read/write the same NHD layout FlashAttentionBackend's + // get_kv_cache_shape allocates, so FLASH_ATTN is reachable on exactly the + // footing Metal reached it (metal.cpp:88-92). + // + // MLA still returns EMPTY, and that is not a stub: MLA needs + // kMlaDecodeAttention / kMlaPrefillAttention / kConcatAndCacheMla, none of + // which has a Vulkan kernel. Answering FLASH_ATTN there would route an MLA + // model into a backend that cannot serve it. std::vector get_attn_backend_priority( const AttnSelectorConfig& cfg) const override { - (void)cfg; - return {}; + if (cfg.use_mla) return {}; + return {"FLASH_ATTN"}; } }; diff --git a/src/vllm/v1/attention/backend.cpp b/src/vllm/v1/attention/backend.cpp index a1d22e7e..9d492a34 100644 --- a/src/vllm/v1/attention/backend.cpp +++ b/src/vllm/v1/attention/backend.cpp @@ -210,6 +210,17 @@ const AttentionBackendRegistrar kFlashAttnCpu{vt::DeviceType::kCPU, const AttentionBackendRegistrar kFlashAttnMetal{vt::DeviceType::kMETAL, FlashAttentionBackend::kName, MakeFlashAttentionBackend}; +// ...and kVULKAN, on exactly the same footing (BACKEND-VULKAN work row VK-B). The +// Vulkan kPagedAttention / kReshapeAndCache kernels +// (src/vt/vulkan/shaders/vt_paged_attn.comp, vt_reshape_and_cache.comp) are ports +// of the CPU pair and read and write the SAME NHD +// (num_blocks, 2, block_size, num_kv_heads, head_size) layout get_kv_cache_shape +// allocates -- that shared layout is the actual precondition for this line, not +// the device name. So this is a NAME registration only, and +// VulkanPlatform::get_attn_backend_priority is what decides whether it is reached. +const AttentionBackendRegistrar kFlashAttnVulkan{vt::DeviceType::kVULKAN, + FlashAttentionBackend::kName, + MakeFlashAttentionBackend}; } // namespace } // namespace vllm::v1 diff --git a/src/vt/vulkan/shaders/vt_qkv_split.comp b/src/vt/vulkan/shaders/vt_qkv_split.comp new file mode 100644 index 00000000..106a17aa --- /dev/null +++ b/src/vt/vulkan/shaders/vt_qkv_split.comp @@ -0,0 +1,60 @@ +#version 450 +// vt::QkvSplit — slice one fused QKV projection row into q, k and v. +// Ported from src/vt/cpu/cpu_ops.cpp QkvSplitKernel (:2162-2176). +// +// Mirrors vLLM's `QKVParallelLinear` output split (`qkv.split([q_size, kv_size, +// kv_size], dim=-1)` in every attention module), which is why the three widths +// are independent rather than three equal thirds: under GQA k and v are narrower +// than q. +// +// One invocation per OUTPUT element across all three destinations, so the three +// slices are one dispatch rather than three. Dtypes are specialization constants +// (source and the three destinations share one code here because every caller +// splits a projection output into tensors of its own dtype). +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) readonly buffer Sb32 { uint v[]; } S32; +layout(binding = 1) readonly buffer Sb16 { uint16_t v[]; } S16; +layout(binding = 2) buffer Qb32 { uint v[]; } Q32; +layout(binding = 3) buffer Qb16 { uint16_t v[]; } Q16; +layout(binding = 4) buffer Kb32 { uint v[]; } K32; +layout(binding = 5) buffer Kb16 { uint16_t v[]; } K16; +layout(binding = 6) buffer Vb32 { uint v[]; } V32; +layout(binding = 7) buffer Vb16 { uint16_t v[]; } V16; + +layout(constant_id = 0) const uint VT_QKV_SRC_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_QKV_DST_DT = VT_DT_F32; + +layout(push_constant) uniform Params { + uint tokens; + uint q_dim, k_dim, v_dim; + uint src_off, q_off, k_off, v_off; +} p; + +void main() { + uint gid = gl_GlobalInvocationID.x; + uint total = p.q_dim + p.k_dim + p.v_dim; + if (gid >= p.tokens * total) { return; } + + uint i = gid / total; // token + uint j = gid % total; // column within the fused row + uint row = i * total; + + // The column decides which destination this element belongs to; the source + // offset is the same fused row in every case (cpu_ops.cpp:2169-2173). + if (j < p.q_dim) { + VT_STORE(Q32, Q16, VT_QKV_DST_DT, p.q_off, i * p.q_dim + j, + VT_LOAD(S32, S16, VT_QKV_SRC_DT, p.src_off, row + j)); + } else if (j < p.q_dim + p.k_dim) { + uint c = j - p.q_dim; + VT_STORE(K32, K16, VT_QKV_DST_DT, p.k_off, i * p.k_dim + c, + VT_LOAD(S32, S16, VT_QKV_SRC_DT, p.src_off, row + p.q_dim + c)); + } else { + uint c = j - p.q_dim - p.k_dim; + VT_STORE(V32, V16, VT_QKV_DST_DT, p.v_off, i * p.v_dim + c, + VT_LOAD(S32, S16, VT_QKV_SRC_DT, p.src_off, row + p.q_dim + p.k_dim + c)); + } +} diff --git a/src/vt/vulkan/shaders/vt_rope_from_cache.comp b/src/vt/vulkan/shaders/vt_rope_from_cache.comp new file mode 100644 index 00000000..656c7abe --- /dev/null +++ b/src/vt/vulkan/shaders/vt_rope_from_cache.comp @@ -0,0 +1,109 @@ +#version 450 +// vt::RopeFromCache — apply a PRECOMPUTED cos/sin table to q (and optionally k). +// +// UPSTREAM: vLLM's supplied-cache rotary path, +// `vllm/model_executor/layers/rotary_embedding/base.py:160-252` and +// `common.py:145-185` @ pin e24d1b24fe96 — the same citation our CPU reference +// carries (src/vt/cpu/cpu_ops.cpp:765-767). Our port of it is +// RopeFromCacheKernel (cpu_ops.cpp:751-802), which is the numeric oracle here. +// +// THIS IS vLLM'S OWN SPLIT, not a shortcut around a hard kernel. `RotaryEmbedding` +// builds `cos_sin_cache` ONCE in `__init__` (`_compute_cos_sin_cache`) and the +// forward does nothing but apply it, which is why `ops.rotary_embedding(...)` +// takes the cache as an argument rather than a base and a scaling factor. So the +// backend mirrors that boundary exactly: the TABLE build (kRopeCosSinCache) stays +// on the portable tier and the per-token APPLY is this native kernel. +// +// The boundary also happens to sit where the numerics demand it. The angle +// construction is DOUBLE precision — std::pow(base, -2i/rot) for the frequency +// and std::cos/std::sin of pos * freq (cpu_ops.cpp:701-705, mirroring vLLM's +// float64 inv_freq) — and transcribed to f32 it loses precision badly at long +// context, where pos is in the thousands and the angle is large. That would be +// subtly wrong in exactly the regime that matters AND would still pass a +// short-sequence gate. The apply, by contrast, is pure f32 multiply-add with no +// such trap. Faithfulness and numerics point the same way here. +// +// PAIR LAYOUT is a specialization constant because it is a per-ELEMENT branch in +// the CPU loop (:781-784): NeoX rotates (pair, pair+half), GPT-J style rotates +// (2*pair, 2*pair+1). Folding it at pipeline creation removes the branch. +// +// STRIDED q/k are load-bearing, not defensive. DeepSeek's decoupled RoPE rotates +// only the trailing slice of a query head and its k_pe is a column block of a +// fused projection output, so both arrive as strided VIEWS (:759-765). Addressing +// through stride[0]/stride[1] is integer-identical to the contiguous formula when +// the tensor is contiguous. +// +// NO PER-ELEMENT POSITION BOUNDS CHECK. The CPU kernel VT_CHECKs +// 0 <= position < cache.shape[0] (:775) and throws; a shader cannot throw, and a +// per-element branch would cost the whole apply. The host validates before +// dispatch. +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) buffer Qb32 { uint v[]; } Q32; +layout(binding = 1) buffer Qb16 { uint16_t v[]; } Q16; +layout(binding = 2) buffer Kb32 { uint v[]; } K32; +layout(binding = 3) buffer Kb16 { uint16_t v[]; } K16; +layout(binding = 4) readonly buffer Cb32 { uint v[]; } C32; +layout(binding = 5) readonly buffer Cb16 { uint16_t v[]; } C16; +layout(binding = 6) readonly buffer Pb { uint v[]; } P; // positions, i32 or i64 + +#define VT_POS_I32 0u +#define VT_POS_I64 1u + +layout(constant_id = 0) const uint VT_ROPE_Q_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_ROPE_K_DT = VT_DT_F32; +layout(constant_id = 2) const uint VT_ROPE_C_DT = VT_DT_F32; +layout(constant_id = 3) const uint VT_ROPE_NEOX = 1u; +layout(constant_id = 4) const uint VT_ROPE_POS_DT = VT_POS_I32; + +layout(push_constant) uniform Params { + uint tokens; + uint half_dim; // rotary_dim / 2 + uint rotary_dim; + uint hq; + uint hk; // 0 when k is absent + uint q_s0, q_s1; // q strides, in ELEMENTS + uint k_s0, k_s1; + uint q_off, k_off, c_off, p_off; +} p; + +void main() { + uint gid = gl_GlobalInvocationID.x; + uint heads = p.hq + p.hk; + if (gid >= p.tokens * p.half_dim * heads) { return; } + + uint per_token = p.half_dim * heads; + uint token = gid / per_token; + uint rem = gid % per_token; + uint pair = rem / heads; + uint head = rem % heads; + + uint pbase = p.p_off >> 2; + uint position = VT_ROPE_POS_DT == VT_POS_I64 ? P.v[pbase + 2u * token] : P.v[pbase + token]; + + uint cache_off = position * p.rotary_dim; + float c = VT_LOAD(C32, C16, VT_ROPE_C_DT, p.c_off, cache_off + pair); + float s = VT_LOAD(C32, C16, VT_ROPE_C_DT, p.c_off, cache_off + p.half_dim + pair); + + // cpu_ops.cpp:781-784. + uint first = VT_ROPE_NEOX == 1u ? pair : pair * 2u; + uint second = VT_ROPE_NEOX == 1u ? pair + p.half_dim : pair * 2u + 1u; + + if (head < p.hq) { + uint off = token * p.q_s0 + head * p.q_s1; + float x = VT_LOAD(Q32, Q16, VT_ROPE_Q_DT, p.q_off, off + first); + float y = VT_LOAD(Q32, Q16, VT_ROPE_Q_DT, p.q_off, off + second); + VT_STORE(Q32, Q16, VT_ROPE_Q_DT, p.q_off, off + first, x * c - y * s); + VT_STORE(Q32, Q16, VT_ROPE_Q_DT, p.q_off, off + second, x * s + y * c); + } else { + uint kh = head - p.hq; + uint off = token * p.k_s0 + kh * p.k_s1; + float x = VT_LOAD(K32, K16, VT_ROPE_K_DT, p.k_off, off + first); + float y = VT_LOAD(K32, K16, VT_ROPE_K_DT, p.k_off, off + second); + VT_STORE(K32, K16, VT_ROPE_K_DT, p.k_off, off + first, x * c - y * s); + VT_STORE(K32, K16, VT_ROPE_K_DT, p.k_off, off + second, x * s + y * c); + } +} diff --git a/src/vt/vulkan/vulkan_ops.cpp b/src/vt/vulkan/vulkan_ops.cpp index 5be7d398..b2010c73 100644 --- a/src/vt/vulkan/vulkan_ops.cpp +++ b/src/vt/vulkan/vulkan_ops.cpp @@ -112,6 +112,14 @@ struct EmbeddingParams { struct ArgmaxParams { uint32_t n, v, logits_off, out_off; }; +struct QkvSplitParams { + uint32_t tokens, q_dim, k_dim, v_dim, src_off, q_off, k_off, v_off; +}; +struct RopeFromCacheParams { + uint32_t tokens, half_dim, rotary_dim, hq, hk; + uint32_t q_s0, q_s1, k_s0, k_s1; + uint32_t q_off, k_off, c_off, p_off; +}; struct ReshapeAndCacheParams { uint32_t num_slots, n_elems, block_size; uint32_t k_blk, k_pg, v_blk, v_pg; @@ -541,6 +549,93 @@ void ReshapeAndCacheKernel(Queue&, const Tensor& k, const Tensor& v, Tensor& k_c Go("vt_reshape_and_cache", bind, p, FlatGroupCount(num_slots * n_elems), spec, 1); } +// vt::RopeFromCache — the APPLY half of vLLM's rotary split. +// Upstream: rotary_embedding/base.py:160-252, common.py:145-185 @ e24d1b24fe96; +// our reference is cpu_ops.cpp RopeFromCacheKernel (:751-802). +// +// vLLM's RotaryEmbedding builds cos_sin_cache once in __init__ and the forward +// only applies it, so kRopeCosSinCache (the table, built in double) stays on the +// portable tier and this native kernel is the per-token apply. See the shader for +// why that boundary is also the right one numerically. +void RopeFromCacheKernel(Queue& queue, Tensor& qs, Tensor* ks, const Tensor& positions, + const Tensor& cache, const RopeArgs& args) { + // MROPE DECLINES rather than throws. Multimodal RoPE selects a different + // position AXIS per pair (cpu_ops.cpp:769-771 via MropeAxisForPair, mirroring + // vLLM mrope.py), which this shader does not implement -- and throwing would + // REMOVE a capability the portable reference tier already provides. Forwarded + // through the provider seam, the same per-call refusal fp8 KV uses. + if (positions.rank == 2) { + auto next = reinterpret_cast( + GetOpFallback(OpId::kRopeFromCache, DeviceType::kVULKAN, kNativeProviderName)); + next(queue, qs, ks, positions, cache, args); + return; + } + + const int64_t tokens = qs.shape[0]; + const int64_t hq = qs.shape[1]; + const int64_t hk = ks == nullptr ? 0 : ks->shape[1]; + const int64_t half = args.rotary_dim / 2; + if (tokens == 0 || half == 0 || (hq + hk) == 0) return; + VT_CHECK(positions.dtype == DType::kI32 || positions.dtype == DType::kI64, + "vulkan rope_from_cache: positions must be i32 or i64"); + + Binder bind; + const uint32_t q_off = bind.Add(qs, "rope_from_cache: q"); + // Bindings 2/3 are declared by the shader whether or not k exists, and a + // descriptor a shader statically uses must be valid even on the path that never + // reads it -- so with hk == 0 they alias q and are dead. Same arrangement the + // rmsnorm kernel already uses for its optional residual. + const uint32_t k_off = ks != nullptr ? bind.Add(*ks, "rope_from_cache: k") + : bind.Add(qs, "rope_from_cache: q"); + const uint32_t c_off = bind.Add(cache, "rope_from_cache: cos_sin_cache"); + const uint32_t p_off = bind.AddU32Only(positions, "rope_from_cache: positions"); + + const uint32_t spec[5] = {DtypeCode(qs.dtype), + ks != nullptr ? DtypeCode(ks->dtype) : DtypeCode(qs.dtype), + DtypeCode(cache.dtype), + args.is_neox_style ? 1u : 0u, + positions.dtype == DType::kI64 ? 1u : 0u}; + RopeFromCacheParams p{static_cast(tokens), + static_cast(half), + static_cast(args.rotary_dim), + static_cast(hq), + static_cast(hk), + static_cast(qs.stride[0]), + static_cast(qs.stride[1]), + static_cast(ks != nullptr ? ks->stride[0] : 0), + static_cast(ks != nullptr ? ks->stride[1] : 0), + q_off, + k_off, + c_off, + p_off}; + Go("vt_rope_from_cache", bind, p, FlatGroupCount(tokens * half * (hq + hk)), spec, 5); +} + +// cpu_ops.cpp:2162-2176 QkvSplitKernel. Mirrors vLLM's QKVParallelLinear output +// split (qkv.split([q_size, kv_size, kv_size], dim=-1)); the three widths are +// independent because under GQA k and v are narrower than q. One invocation per +// OUTPUT element across all three destinations, so this is one dispatch. +void QkvSplitKernel(Queue&, Tensor& q_out, Tensor& k_out, Tensor& v_out, const Tensor& qkv) { + const int64_t t = qkv.shape[0]; + if (t == 0) return; + const int64_t q_dim = q_out.Numel() / t; + const int64_t k_dim = k_out.Numel() / t; + const int64_t v_dim = v_out.Numel() / t; + VT_CHECK(q_out.dtype == k_out.dtype && k_out.dtype == v_out.dtype, + "vulkan qkv_split: the three destinations must share a dtype"); + Binder bind; + const uint32_t src_off = bind.Add(qkv, "qkv_split: qkv"); + const uint32_t q_off = bind.Add(q_out, "qkv_split: q"); + const uint32_t k_off = bind.Add(k_out, "qkv_split: k"); + const uint32_t v_off = bind.Add(v_out, "qkv_split: v"); + const uint32_t spec[2] = {DtypeCode(qkv.dtype), DtypeCode(q_out.dtype)}; + QkvSplitParams p{static_cast(t), static_cast(q_dim), + static_cast(k_dim), static_cast(v_dim), + src_off, q_off, + k_off, v_off}; + Go("vt_qkv_split", bind, p, FlatGroupCount(t * (q_dim + k_dim + v_dim)), spec, 2); +} + struct Registrar { Registrar() { // Same guard as the backend registrar: a Vulkan-enabled build on a host with @@ -549,6 +644,10 @@ struct Registrar { if (!VulkanContext::Available()) return; // static_cast against the ops.h aliases ties every kernel signature to the // registration contract at COMPILE time (the cpu_ops.cpp idiom). + RegisterOp(OpId::kQkvSplit, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&QkvSplitKernel))); + RegisterOp(OpId::kRopeFromCache, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&RopeFromCacheKernel))); RegisterOp(OpId::kReshapeAndCache, DeviceType::kVULKAN, reinterpret_cast(static_cast(&ReshapeAndCacheKernel))); RegisterOp(OpId::kPagedAttention, DeviceType::kVULKAN, diff --git a/src/vt/vulkan/vulkan_spirv.cpp b/src/vt/vulkan/vulkan_spirv.cpp index b3eab774..668928dd 100644 --- a/src/vt/vulkan/vulkan_spirv.cpp +++ b/src/vt/vulkan/vulkan_spirv.cpp @@ -3695,6 +3695,502 @@ constexpr uint32_t kSpv_vt_paged_attn[] = { 0x00000176u, 0x00010038u, }; +constexpr uint32_t kSpv_vt_qkv_split[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000300u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000155u, + 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000155u, 0x00000006u, 0x00000023u, 0x00000018u, + 0x00050048u, 0x00000155u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x00000182u, 0x00000001u, + 0x00000001u, 0x00040047u, 0x00000186u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000187u, 0x00000002u, + 0x00050048u, 0x00000187u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000189u, 0x00000021u, + 0x00000002u, 0x00040047u, 0x00000189u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000195u, 0x00000001u, + 0x00000000u, 0x00040047u, 0x0000019au, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000019bu, 0x00000002u, + 0x00040048u, 0x0000019bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000019bu, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x0000019du, 0x00000018u, 0x00040047u, 0x0000019du, 0x00000021u, 0x00000000u, + 0x00040047u, 0x0000019du, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001acu, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000001adu, 0x00000002u, 0x00040048u, 0x000001adu, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000001adu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001afu, 0x00000018u, 0x00040047u, + 0x000001afu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001afu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000001c2u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000001c3u, 0x00000002u, 0x00050048u, 0x000001c3u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000001c5u, 0x00000021u, 0x00000003u, 0x00040047u, + 0x000001c5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000209u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x0000020au, 0x00000002u, 0x00050048u, 0x0000020au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x0000020cu, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000020cu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x0000023eu, 0x00000006u, 0x00000002u, 0x00030047u, 0x0000023fu, 0x00000002u, 0x00050048u, 0x0000023fu, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000241u, 0x00000021u, 0x00000005u, 0x00040047u, + 0x00000241u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000284u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x00000285u, 0x00000002u, 0x00050048u, 0x00000285u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x00000287u, 0x00000021u, 0x00000006u, 0x00040047u, 0x00000287u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000002bfu, 0x00000006u, 0x00000002u, 0x00030047u, 0x000002c0u, 0x00000002u, 0x00050048u, 0x000002c0u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000002c2u, 0x00000021u, 0x00000007u, 0x00040047u, + 0x000002c2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ffu, 0x0000000bu, 0x00000019u, 0x00020013u, + 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, + 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, + 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, + 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, + 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, 0x00000020u, + 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, 0x0004002bu, + 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, 0x0004002bu, + 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, 0x0004002bu, + 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, 0x0004002bu, + 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, 0x0004002bu, + 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, 0x0004002bu, + 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, 0x0004002bu, + 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, 0x0004002bu, + 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, 0x0004002bu, + 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, 0x00040020u, + 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, 0x0004002bu, + 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, 0x0004002bu, + 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, 0x0004002bu, + 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, 0x0004002bu, + 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, 0x0004002bu, + 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, 0x00040017u, + 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, 0x0004003bu, + 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, 0x000a001eu, + 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00040020u, 0x00000156u, 0x00000009u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, + 0x00000009u, 0x00040020u, 0x00000158u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000023u, 0x0000015bu, + 0x00000002u, 0x0004002bu, 0x00000023u, 0x0000015fu, 0x00000003u, 0x00040032u, 0x00000006u, 0x00000182u, + 0x00000000u, 0x00060034u, 0x0000002cu, 0x00000183u, 0x000000aau, 0x00000182u, 0x00000036u, 0x0003001du, + 0x00000186u, 0x00000006u, 0x0003001eu, 0x00000187u, 0x00000186u, 0x00040020u, 0x00000188u, 0x0000000cu, + 0x00000187u, 0x0004003bu, 0x00000188u, 0x00000189u, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x0000018au, + 0x00000005u, 0x00040032u, 0x00000006u, 0x00000195u, 0x00000000u, 0x00060034u, 0x0000002cu, 0x00000196u, + 0x000000aau, 0x00000195u, 0x00000036u, 0x0003001du, 0x0000019au, 0x00000006u, 0x0003001eu, 0x0000019bu, + 0x0000019au, 0x00040020u, 0x0000019cu, 0x0000000cu, 0x0000019bu, 0x0004003bu, 0x0000019cu, 0x0000019du, + 0x0000000cu, 0x0004002bu, 0x00000023u, 0x0000019eu, 0x00000004u, 0x00040020u, 0x000001a6u, 0x0000000cu, + 0x00000006u, 0x00040015u, 0x000001abu, 0x00000010u, 0x00000000u, 0x0003001du, 0x000001acu, 0x000001abu, + 0x0003001eu, 0x000001adu, 0x000001acu, 0x00040020u, 0x000001aeu, 0x0000000cu, 0x000001adu, 0x0004003bu, + 0x000001aeu, 0x000001afu, 0x0000000cu, 0x00040020u, 0x000001b7u, 0x0000000cu, 0x000001abu, 0x0003001du, + 0x000001c2u, 0x000001abu, 0x0003001eu, 0x000001c3u, 0x000001c2u, 0x00040020u, 0x000001c4u, 0x0000000cu, + 0x000001c3u, 0x0004003bu, 0x000001c4u, 0x000001c5u, 0x0000000cu, 0x00060034u, 0x0000002cu, 0x000001d0u, + 0x000000aau, 0x00000195u, 0x00000036u, 0x0003002au, 0x0000002cu, 0x000001f2u, 0x00060034u, 0x0000002cu, + 0x00000206u, 0x000000aau, 0x00000182u, 0x00000036u, 0x0003001du, 0x00000209u, 0x00000006u, 0x0003001eu, + 0x0000020au, 0x00000209u, 0x00040020u, 0x0000020bu, 0x0000000cu, 0x0000020au, 0x0004003bu, 0x0000020bu, + 0x0000020cu, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x0000020du, 0x00000006u, 0x00060034u, 0x0000002cu, + 0x00000218u, 0x000000aau, 0x00000195u, 0x00000036u, 0x0003001du, 0x0000023eu, 0x000001abu, 0x0003001eu, + 0x0000023fu, 0x0000023eu, 0x00040020u, 0x00000240u, 0x0000000cu, 0x0000023fu, 0x0004003bu, 0x00000240u, + 0x00000241u, 0x0000000cu, 0x00060034u, 0x0000002cu, 0x0000024cu, 0x000000aau, 0x00000195u, 0x00000036u, + 0x00060034u, 0x0000002cu, 0x00000281u, 0x000000aau, 0x00000182u, 0x00000036u, 0x0003001du, 0x00000284u, + 0x00000006u, 0x0003001eu, 0x00000285u, 0x00000284u, 0x00040020u, 0x00000286u, 0x0000000cu, 0x00000285u, + 0x0004003bu, 0x00000286u, 0x00000287u, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x00000288u, 0x00000007u, + 0x00060034u, 0x0000002cu, 0x00000293u, 0x000000aau, 0x00000195u, 0x00000036u, 0x0003001du, 0x000002bfu, + 0x000001abu, 0x0003001eu, 0x000002c0u, 0x000002bfu, 0x00040020u, 0x000002c1u, 0x0000000cu, 0x000002c0u, + 0x0004003bu, 0x000002c1u, 0x000002c2u, 0x0000000cu, 0x00060034u, 0x0000002cu, 0x000002cdu, 0x000000aau, + 0x00000195u, 0x00000036u, 0x0004002bu, 0x00000006u, 0x000002fbu, 0x00000080u, 0x0004001cu, 0x000002fcu, + 0x00000008u, 0x000002fbu, 0x00040020u, 0x000002fdu, 0x00000004u, 0x000002fcu, 0x0004003bu, 0x000002fdu, + 0x000002feu, 0x00000004u, 0x0006002cu, 0x0000014eu, 0x000002ffu, 0x000002fbu, 0x00000046u, 0x00000046u, + 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, + 0x00000007u, 0x0000014du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000154u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000016cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000170u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000174u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000197u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001bcu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x000001d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001e9u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001eau, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001ecu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000001eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001fdu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000219u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000237u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000238u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000024du, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x0000026bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000026cu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x0000026eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000270u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000275u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000294u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000002b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b9u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x000002ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002f2u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000002f3u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002f5u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000002f7u, 0x00000007u, 0x00050041u, 0x00000151u, 0x00000152u, 0x00000150u, 0x00000036u, + 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, 0x0000014du, 0x00000153u, 0x00050041u, + 0x00000158u, 0x00000159u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000015au, 0x00000159u, + 0x00050041u, 0x00000158u, 0x0000015cu, 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x0000015du, + 0x0000015cu, 0x00050080u, 0x00000006u, 0x0000015eu, 0x0000015au, 0x0000015du, 0x00050041u, 0x00000158u, + 0x00000160u, 0x00000157u, 0x0000015fu, 0x0004003du, 0x00000006u, 0x00000161u, 0x00000160u, 0x00050080u, + 0x00000006u, 0x00000162u, 0x0000015eu, 0x00000161u, 0x0003003eu, 0x00000154u, 0x00000162u, 0x0004003du, + 0x00000006u, 0x00000163u, 0x0000014du, 0x00050041u, 0x00000158u, 0x00000164u, 0x00000157u, 0x000000d3u, + 0x0004003du, 0x00000006u, 0x00000165u, 0x00000164u, 0x0004003du, 0x00000006u, 0x00000166u, 0x00000154u, + 0x00050084u, 0x00000006u, 0x00000167u, 0x00000165u, 0x00000166u, 0x000500aeu, 0x0000002cu, 0x00000168u, + 0x00000163u, 0x00000167u, 0x000300f7u, 0x0000016au, 0x00000000u, 0x000400fau, 0x00000168u, 0x00000169u, + 0x0000016au, 0x000200f8u, 0x00000169u, 0x000100fdu, 0x000200f8u, 0x0000016au, 0x0004003du, 0x00000006u, + 0x0000016du, 0x0000014du, 0x0004003du, 0x00000006u, 0x0000016eu, 0x00000154u, 0x00050086u, 0x00000006u, + 0x0000016fu, 0x0000016du, 0x0000016eu, 0x0003003eu, 0x0000016cu, 0x0000016fu, 0x0004003du, 0x00000006u, + 0x00000171u, 0x0000014du, 0x0004003du, 0x00000006u, 0x00000172u, 0x00000154u, 0x00050089u, 0x00000006u, + 0x00000173u, 0x00000171u, 0x00000172u, 0x0003003eu, 0x00000170u, 0x00000173u, 0x0004003du, 0x00000006u, + 0x00000175u, 0x0000016cu, 0x0004003du, 0x00000006u, 0x00000176u, 0x00000154u, 0x00050084u, 0x00000006u, + 0x00000177u, 0x00000175u, 0x00000176u, 0x0003003eu, 0x00000174u, 0x00000177u, 0x0004003du, 0x00000006u, + 0x00000178u, 0x00000170u, 0x00050041u, 0x00000158u, 0x00000179u, 0x00000157u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x0000017au, 0x00000179u, 0x000500b0u, 0x0000002cu, 0x0000017bu, 0x00000178u, 0x0000017au, + 0x000300f7u, 0x0000017du, 0x00000000u, 0x000400fau, 0x0000017bu, 0x0000017cu, 0x000001f3u, 0x000200f8u, + 0x0000017cu, 0x000200f9u, 0x0000017eu, 0x000200f8u, 0x0000017eu, 0x000400f6u, 0x00000180u, 0x00000181u, + 0x00000000u, 0x000200f9u, 0x0000017fu, 0x000200f8u, 0x0000017fu, 0x000300f7u, 0x00000185u, 0x00000000u, + 0x000400fau, 0x00000183u, 0x00000184u, 0x000001c1u, 0x000200f8u, 0x00000184u, 0x00050041u, 0x00000158u, + 0x0000018bu, 0x00000157u, 0x0000018au, 0x0004003du, 0x00000006u, 0x0000018cu, 0x0000018bu, 0x000500c2u, + 0x00000006u, 0x0000018du, 0x0000018cu, 0x0000015bu, 0x0004003du, 0x00000006u, 0x0000018eu, 0x0000016cu, + 0x00050041u, 0x00000158u, 0x0000018fu, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000190u, + 0x0000018fu, 0x00050084u, 0x00000006u, 0x00000191u, 0x0000018eu, 0x00000190u, 0x0004003du, 0x00000006u, + 0x00000192u, 0x00000170u, 0x00050080u, 0x00000006u, 0x00000193u, 0x00000191u, 0x00000192u, 0x00050080u, + 0x00000006u, 0x00000194u, 0x0000018du, 0x00000193u, 0x000300f7u, 0x00000199u, 0x00000000u, 0x000400fau, + 0x00000196u, 0x00000198u, 0x000001aau, 0x000200f8u, 0x00000198u, 0x00050041u, 0x00000158u, 0x0000019fu, + 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x000001a0u, 0x0000019fu, 0x000500c2u, 0x00000006u, + 0x000001a1u, 0x000001a0u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x000001a2u, 0x00000174u, 0x0004003du, + 0x00000006u, 0x000001a3u, 0x00000170u, 0x00050080u, 0x00000006u, 0x000001a4u, 0x000001a2u, 0x000001a3u, + 0x00050080u, 0x00000006u, 0x000001a5u, 0x000001a1u, 0x000001a4u, 0x00060041u, 0x000001a6u, 0x000001a7u, + 0x0000019du, 0x000000d3u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001a8u, 0x000001a7u, 0x0004007cu, + 0x00000008u, 0x000001a9u, 0x000001a8u, 0x0003003eu, 0x00000197u, 0x000001a9u, 0x000200f9u, 0x00000199u, + 0x000200f8u, 0x000001aau, 0x00050041u, 0x00000158u, 0x000001b0u, 0x00000157u, 0x0000019eu, 0x0004003du, + 0x00000006u, 0x000001b1u, 0x000001b0u, 0x000500c2u, 0x00000006u, 0x000001b2u, 0x000001b1u, 0x00000080u, + 0x0004003du, 0x00000006u, 0x000001b3u, 0x00000174u, 0x0004003du, 0x00000006u, 0x000001b4u, 0x00000170u, + 0x00050080u, 0x00000006u, 0x000001b5u, 0x000001b3u, 0x000001b4u, 0x00050080u, 0x00000006u, 0x000001b6u, + 0x000001b2u, 0x000001b5u, 0x00060041u, 0x000001b7u, 0x000001b8u, 0x000001afu, 0x000000d3u, 0x000001b6u, + 0x0004003du, 0x000001abu, 0x000001b9u, 0x000001b8u, 0x00040071u, 0x00000006u, 0x000001bau, 0x000001b9u, + 0x0003003eu, 0x000001bbu, 0x000001bau, 0x0003003eu, 0x000001bcu, 0x00000195u, 0x00060039u, 0x00000008u, + 0x000001bdu, 0x0000001bu, 0x000001bbu, 0x000001bcu, 0x0003003eu, 0x00000197u, 0x000001bdu, 0x000200f9u, + 0x00000199u, 0x000200f8u, 0x00000199u, 0x0004003du, 0x00000008u, 0x000001beu, 0x00000197u, 0x0004007cu, + 0x00000006u, 0x000001bfu, 0x000001beu, 0x00060041u, 0x000001a6u, 0x000001c0u, 0x00000189u, 0x000000d3u, + 0x00000194u, 0x0003003eu, 0x000001c0u, 0x000001bfu, 0x000200f9u, 0x00000185u, 0x000200f8u, 0x000001c1u, + 0x00050041u, 0x00000158u, 0x000001c6u, 0x00000157u, 0x0000018au, 0x0004003du, 0x00000006u, 0x000001c7u, + 0x000001c6u, 0x000500c2u, 0x00000006u, 0x000001c8u, 0x000001c7u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x000001c9u, 0x0000016cu, 0x00050041u, 0x00000158u, 0x000001cau, 0x00000157u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x000001cbu, 0x000001cau, 0x00050084u, 0x00000006u, 0x000001ccu, 0x000001c9u, 0x000001cbu, + 0x0004003du, 0x00000006u, 0x000001cdu, 0x00000170u, 0x00050080u, 0x00000006u, 0x000001ceu, 0x000001ccu, + 0x000001cdu, 0x00050080u, 0x00000006u, 0x000001cfu, 0x000001c8u, 0x000001ceu, 0x000300f7u, 0x000001d3u, + 0x00000000u, 0x000400fau, 0x000001d0u, 0x000001d2u, 0x000001deu, 0x000200f8u, 0x000001d2u, 0x00050041u, + 0x00000158u, 0x000001d4u, 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x000001d5u, 0x000001d4u, + 0x000500c2u, 0x00000006u, 0x000001d6u, 0x000001d5u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x000001d7u, + 0x00000174u, 0x0004003du, 0x00000006u, 0x000001d8u, 0x00000170u, 0x00050080u, 0x00000006u, 0x000001d9u, + 0x000001d7u, 0x000001d8u, 0x00050080u, 0x00000006u, 0x000001dau, 0x000001d6u, 0x000001d9u, 0x00060041u, + 0x000001a6u, 0x000001dbu, 0x0000019du, 0x000000d3u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000001dcu, + 0x000001dbu, 0x0004007cu, 0x00000008u, 0x000001ddu, 0x000001dcu, 0x0003003eu, 0x000001d1u, 0x000001ddu, + 0x000200f9u, 0x000001d3u, 0x000200f8u, 0x000001deu, 0x00050041u, 0x00000158u, 0x000001dfu, 0x00000157u, + 0x0000019eu, 0x0004003du, 0x00000006u, 0x000001e0u, 0x000001dfu, 0x000500c2u, 0x00000006u, 0x000001e1u, + 0x000001e0u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001e2u, 0x00000174u, 0x0004003du, 0x00000006u, + 0x000001e3u, 0x00000170u, 0x00050080u, 0x00000006u, 0x000001e4u, 0x000001e2u, 0x000001e3u, 0x00050080u, + 0x00000006u, 0x000001e5u, 0x000001e1u, 0x000001e4u, 0x00060041u, 0x000001b7u, 0x000001e6u, 0x000001afu, + 0x000000d3u, 0x000001e5u, 0x0004003du, 0x000001abu, 0x000001e7u, 0x000001e6u, 0x00040071u, 0x00000006u, + 0x000001e8u, 0x000001e7u, 0x0003003eu, 0x000001e9u, 0x000001e8u, 0x0003003eu, 0x000001eau, 0x00000195u, + 0x00060039u, 0x00000008u, 0x000001ebu, 0x0000001bu, 0x000001e9u, 0x000001eau, 0x0003003eu, 0x000001d1u, + 0x000001ebu, 0x000200f9u, 0x000001d3u, 0x000200f8u, 0x000001d3u, 0x0004003du, 0x00000008u, 0x000001edu, + 0x000001d1u, 0x0003003eu, 0x000001ecu, 0x000001edu, 0x0003003eu, 0x000001eeu, 0x00000182u, 0x00060039u, + 0x00000006u, 0x000001efu, 0x00000020u, 0x000001ecu, 0x000001eeu, 0x00040071u, 0x000001abu, 0x000001f0u, + 0x000001efu, 0x00060041u, 0x000001b7u, 0x000001f1u, 0x000001c5u, 0x000000d3u, 0x000001cfu, 0x0003003eu, + 0x000001f1u, 0x000001f0u, 0x000200f9u, 0x00000185u, 0x000200f8u, 0x00000185u, 0x000200f9u, 0x00000181u, + 0x000200f8u, 0x00000181u, 0x000400fau, 0x000001f2u, 0x0000017eu, 0x00000180u, 0x000200f8u, 0x00000180u, + 0x000200f9u, 0x0000017du, 0x000200f8u, 0x000001f3u, 0x0004003du, 0x00000006u, 0x000001f4u, 0x00000170u, + 0x00050041u, 0x00000158u, 0x000001f5u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001f6u, + 0x000001f5u, 0x00050041u, 0x00000158u, 0x000001f7u, 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, + 0x000001f8u, 0x000001f7u, 0x00050080u, 0x00000006u, 0x000001f9u, 0x000001f6u, 0x000001f8u, 0x000500b0u, + 0x0000002cu, 0x000001fau, 0x000001f4u, 0x000001f9u, 0x000300f7u, 0x000001fcu, 0x00000000u, 0x000400fau, + 0x000001fau, 0x000001fbu, 0x00000274u, 0x000200f8u, 0x000001fbu, 0x0004003du, 0x00000006u, 0x000001feu, + 0x00000170u, 0x00050041u, 0x00000158u, 0x000001ffu, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x00000200u, 0x000001ffu, 0x00050082u, 0x00000006u, 0x00000201u, 0x000001feu, 0x00000200u, 0x0003003eu, + 0x000001fdu, 0x00000201u, 0x000200f9u, 0x00000202u, 0x000200f8u, 0x00000202u, 0x000400f6u, 0x00000204u, + 0x00000205u, 0x00000000u, 0x000200f9u, 0x00000203u, 0x000200f8u, 0x00000203u, 0x000300f7u, 0x00000208u, + 0x00000000u, 0x000400fau, 0x00000206u, 0x00000207u, 0x0000023du, 0x000200f8u, 0x00000207u, 0x00050041u, + 0x00000158u, 0x0000020eu, 0x00000157u, 0x0000020du, 0x0004003du, 0x00000006u, 0x0000020fu, 0x0000020eu, + 0x000500c2u, 0x00000006u, 0x00000210u, 0x0000020fu, 0x0000015bu, 0x0004003du, 0x00000006u, 0x00000211u, + 0x0000016cu, 0x00050041u, 0x00000158u, 0x00000212u, 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, + 0x00000213u, 0x00000212u, 0x00050084u, 0x00000006u, 0x00000214u, 0x00000211u, 0x00000213u, 0x0004003du, + 0x00000006u, 0x00000215u, 0x000001fdu, 0x00050080u, 0x00000006u, 0x00000216u, 0x00000214u, 0x00000215u, + 0x00050080u, 0x00000006u, 0x00000217u, 0x00000210u, 0x00000216u, 0x000300f7u, 0x0000021bu, 0x00000000u, + 0x000400fau, 0x00000218u, 0x0000021au, 0x00000229u, 0x000200f8u, 0x0000021au, 0x00050041u, 0x00000158u, + 0x0000021cu, 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x0000021du, 0x0000021cu, 0x000500c2u, + 0x00000006u, 0x0000021eu, 0x0000021du, 0x0000015bu, 0x0004003du, 0x00000006u, 0x0000021fu, 0x00000174u, + 0x00050041u, 0x00000158u, 0x00000220u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000221u, + 0x00000220u, 0x00050080u, 0x00000006u, 0x00000222u, 0x0000021fu, 0x00000221u, 0x0004003du, 0x00000006u, + 0x00000223u, 0x000001fdu, 0x00050080u, 0x00000006u, 0x00000224u, 0x00000222u, 0x00000223u, 0x00050080u, + 0x00000006u, 0x00000225u, 0x0000021eu, 0x00000224u, 0x00060041u, 0x000001a6u, 0x00000226u, 0x0000019du, + 0x000000d3u, 0x00000225u, 0x0004003du, 0x00000006u, 0x00000227u, 0x00000226u, 0x0004007cu, 0x00000008u, + 0x00000228u, 0x00000227u, 0x0003003eu, 0x00000219u, 0x00000228u, 0x000200f9u, 0x0000021bu, 0x000200f8u, + 0x00000229u, 0x00050041u, 0x00000158u, 0x0000022au, 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, + 0x0000022bu, 0x0000022au, 0x000500c2u, 0x00000006u, 0x0000022cu, 0x0000022bu, 0x00000080u, 0x0004003du, + 0x00000006u, 0x0000022du, 0x00000174u, 0x00050041u, 0x00000158u, 0x0000022eu, 0x00000157u, 0x00000080u, + 0x0004003du, 0x00000006u, 0x0000022fu, 0x0000022eu, 0x00050080u, 0x00000006u, 0x00000230u, 0x0000022du, + 0x0000022fu, 0x0004003du, 0x00000006u, 0x00000231u, 0x000001fdu, 0x00050080u, 0x00000006u, 0x00000232u, + 0x00000230u, 0x00000231u, 0x00050080u, 0x00000006u, 0x00000233u, 0x0000022cu, 0x00000232u, 0x00060041u, + 0x000001b7u, 0x00000234u, 0x000001afu, 0x000000d3u, 0x00000233u, 0x0004003du, 0x000001abu, 0x00000235u, + 0x00000234u, 0x00040071u, 0x00000006u, 0x00000236u, 0x00000235u, 0x0003003eu, 0x00000237u, 0x00000236u, + 0x0003003eu, 0x00000238u, 0x00000195u, 0x00060039u, 0x00000008u, 0x00000239u, 0x0000001bu, 0x00000237u, + 0x00000238u, 0x0003003eu, 0x00000219u, 0x00000239u, 0x000200f9u, 0x0000021bu, 0x000200f8u, 0x0000021bu, + 0x0004003du, 0x00000008u, 0x0000023au, 0x00000219u, 0x0004007cu, 0x00000006u, 0x0000023bu, 0x0000023au, + 0x00060041u, 0x000001a6u, 0x0000023cu, 0x0000020cu, 0x000000d3u, 0x00000217u, 0x0003003eu, 0x0000023cu, + 0x0000023bu, 0x000200f9u, 0x00000208u, 0x000200f8u, 0x0000023du, 0x00050041u, 0x00000158u, 0x00000242u, + 0x00000157u, 0x0000020du, 0x0004003du, 0x00000006u, 0x00000243u, 0x00000242u, 0x000500c2u, 0x00000006u, + 0x00000244u, 0x00000243u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000245u, 0x0000016cu, 0x00050041u, + 0x00000158u, 0x00000246u, 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x00000247u, 0x00000246u, + 0x00050084u, 0x00000006u, 0x00000248u, 0x00000245u, 0x00000247u, 0x0004003du, 0x00000006u, 0x00000249u, + 0x000001fdu, 0x00050080u, 0x00000006u, 0x0000024au, 0x00000248u, 0x00000249u, 0x00050080u, 0x00000006u, + 0x0000024bu, 0x00000244u, 0x0000024au, 0x000300f7u, 0x0000024fu, 0x00000000u, 0x000400fau, 0x0000024cu, + 0x0000024eu, 0x0000025du, 0x000200f8u, 0x0000024eu, 0x00050041u, 0x00000158u, 0x00000250u, 0x00000157u, + 0x0000019eu, 0x0004003du, 0x00000006u, 0x00000251u, 0x00000250u, 0x000500c2u, 0x00000006u, 0x00000252u, + 0x00000251u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x00000253u, 0x00000174u, 0x00050041u, 0x00000158u, + 0x00000254u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000255u, 0x00000254u, 0x00050080u, + 0x00000006u, 0x00000256u, 0x00000253u, 0x00000255u, 0x0004003du, 0x00000006u, 0x00000257u, 0x000001fdu, + 0x00050080u, 0x00000006u, 0x00000258u, 0x00000256u, 0x00000257u, 0x00050080u, 0x00000006u, 0x00000259u, + 0x00000252u, 0x00000258u, 0x00060041u, 0x000001a6u, 0x0000025au, 0x0000019du, 0x000000d3u, 0x00000259u, + 0x0004003du, 0x00000006u, 0x0000025bu, 0x0000025au, 0x0004007cu, 0x00000008u, 0x0000025cu, 0x0000025bu, + 0x0003003eu, 0x0000024du, 0x0000025cu, 0x000200f9u, 0x0000024fu, 0x000200f8u, 0x0000025du, 0x00050041u, + 0x00000158u, 0x0000025eu, 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x0000025fu, 0x0000025eu, + 0x000500c2u, 0x00000006u, 0x00000260u, 0x0000025fu, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000261u, + 0x00000174u, 0x00050041u, 0x00000158u, 0x00000262u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x00000263u, 0x00000262u, 0x00050080u, 0x00000006u, 0x00000264u, 0x00000261u, 0x00000263u, 0x0004003du, + 0x00000006u, 0x00000265u, 0x000001fdu, 0x00050080u, 0x00000006u, 0x00000266u, 0x00000264u, 0x00000265u, + 0x00050080u, 0x00000006u, 0x00000267u, 0x00000260u, 0x00000266u, 0x00060041u, 0x000001b7u, 0x00000268u, + 0x000001afu, 0x000000d3u, 0x00000267u, 0x0004003du, 0x000001abu, 0x00000269u, 0x00000268u, 0x00040071u, + 0x00000006u, 0x0000026au, 0x00000269u, 0x0003003eu, 0x0000026bu, 0x0000026au, 0x0003003eu, 0x0000026cu, + 0x00000195u, 0x00060039u, 0x00000008u, 0x0000026du, 0x0000001bu, 0x0000026bu, 0x0000026cu, 0x0003003eu, + 0x0000024du, 0x0000026du, 0x000200f9u, 0x0000024fu, 0x000200f8u, 0x0000024fu, 0x0004003du, 0x00000008u, + 0x0000026fu, 0x0000024du, 0x0003003eu, 0x0000026eu, 0x0000026fu, 0x0003003eu, 0x00000270u, 0x00000182u, + 0x00060039u, 0x00000006u, 0x00000271u, 0x00000020u, 0x0000026eu, 0x00000270u, 0x00040071u, 0x000001abu, + 0x00000272u, 0x00000271u, 0x00060041u, 0x000001b7u, 0x00000273u, 0x00000241u, 0x000000d3u, 0x0000024bu, + 0x0003003eu, 0x00000273u, 0x00000272u, 0x000200f9u, 0x00000208u, 0x000200f8u, 0x00000208u, 0x000200f9u, + 0x00000205u, 0x000200f8u, 0x00000205u, 0x000400fau, 0x000001f2u, 0x00000202u, 0x00000204u, 0x000200f8u, + 0x00000204u, 0x000200f9u, 0x000001fcu, 0x000200f8u, 0x00000274u, 0x0004003du, 0x00000006u, 0x00000276u, + 0x00000170u, 0x00050041u, 0x00000158u, 0x00000277u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x00000278u, 0x00000277u, 0x00050082u, 0x00000006u, 0x00000279u, 0x00000276u, 0x00000278u, 0x00050041u, + 0x00000158u, 0x0000027au, 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x0000027bu, 0x0000027au, + 0x00050082u, 0x00000006u, 0x0000027cu, 0x00000279u, 0x0000027bu, 0x0003003eu, 0x00000275u, 0x0000027cu, + 0x000200f9u, 0x0000027du, 0x000200f8u, 0x0000027du, 0x000400f6u, 0x0000027fu, 0x00000280u, 0x00000000u, + 0x000200f9u, 0x0000027eu, 0x000200f8u, 0x0000027eu, 0x000300f7u, 0x00000283u, 0x00000000u, 0x000400fau, + 0x00000281u, 0x00000282u, 0x000002beu, 0x000200f8u, 0x00000282u, 0x00050041u, 0x00000158u, 0x00000289u, + 0x00000157u, 0x00000288u, 0x0004003du, 0x00000006u, 0x0000028au, 0x00000289u, 0x000500c2u, 0x00000006u, + 0x0000028bu, 0x0000028au, 0x0000015bu, 0x0004003du, 0x00000006u, 0x0000028cu, 0x0000016cu, 0x00050041u, + 0x00000158u, 0x0000028du, 0x00000157u, 0x0000015fu, 0x0004003du, 0x00000006u, 0x0000028eu, 0x0000028du, + 0x00050084u, 0x00000006u, 0x0000028fu, 0x0000028cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000290u, + 0x00000275u, 0x00050080u, 0x00000006u, 0x00000291u, 0x0000028fu, 0x00000290u, 0x00050080u, 0x00000006u, + 0x00000292u, 0x0000028bu, 0x00000291u, 0x000300f7u, 0x00000296u, 0x00000000u, 0x000400fau, 0x00000293u, + 0x00000295u, 0x000002a7u, 0x000200f8u, 0x00000295u, 0x00050041u, 0x00000158u, 0x00000297u, 0x00000157u, + 0x0000019eu, 0x0004003du, 0x00000006u, 0x00000298u, 0x00000297u, 0x000500c2u, 0x00000006u, 0x00000299u, + 0x00000298u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x0000029au, 0x00000174u, 0x00050041u, 0x00000158u, + 0x0000029bu, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000029cu, 0x0000029bu, 0x00050080u, + 0x00000006u, 0x0000029du, 0x0000029au, 0x0000029cu, 0x00050041u, 0x00000158u, 0x0000029eu, 0x00000157u, + 0x0000015bu, 0x0004003du, 0x00000006u, 0x0000029fu, 0x0000029eu, 0x00050080u, 0x00000006u, 0x000002a0u, + 0x0000029du, 0x0000029fu, 0x0004003du, 0x00000006u, 0x000002a1u, 0x00000275u, 0x00050080u, 0x00000006u, + 0x000002a2u, 0x000002a0u, 0x000002a1u, 0x00050080u, 0x00000006u, 0x000002a3u, 0x00000299u, 0x000002a2u, + 0x00060041u, 0x000001a6u, 0x000002a4u, 0x0000019du, 0x000000d3u, 0x000002a3u, 0x0004003du, 0x00000006u, + 0x000002a5u, 0x000002a4u, 0x0004007cu, 0x00000008u, 0x000002a6u, 0x000002a5u, 0x0003003eu, 0x00000294u, + 0x000002a6u, 0x000200f9u, 0x00000296u, 0x000200f8u, 0x000002a7u, 0x00050041u, 0x00000158u, 0x000002a8u, + 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x000002a9u, 0x000002a8u, 0x000500c2u, 0x00000006u, + 0x000002aau, 0x000002a9u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000002abu, 0x00000174u, 0x00050041u, + 0x00000158u, 0x000002acu, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000002adu, 0x000002acu, + 0x00050080u, 0x00000006u, 0x000002aeu, 0x000002abu, 0x000002adu, 0x00050041u, 0x00000158u, 0x000002afu, + 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x000002b0u, 0x000002afu, 0x00050080u, 0x00000006u, + 0x000002b1u, 0x000002aeu, 0x000002b0u, 0x0004003du, 0x00000006u, 0x000002b2u, 0x00000275u, 0x00050080u, + 0x00000006u, 0x000002b3u, 0x000002b1u, 0x000002b2u, 0x00050080u, 0x00000006u, 0x000002b4u, 0x000002aau, + 0x000002b3u, 0x00060041u, 0x000001b7u, 0x000002b5u, 0x000001afu, 0x000000d3u, 0x000002b4u, 0x0004003du, + 0x000001abu, 0x000002b6u, 0x000002b5u, 0x00040071u, 0x00000006u, 0x000002b7u, 0x000002b6u, 0x0003003eu, + 0x000002b8u, 0x000002b7u, 0x0003003eu, 0x000002b9u, 0x00000195u, 0x00060039u, 0x00000008u, 0x000002bau, + 0x0000001bu, 0x000002b8u, 0x000002b9u, 0x0003003eu, 0x00000294u, 0x000002bau, 0x000200f9u, 0x00000296u, + 0x000200f8u, 0x00000296u, 0x0004003du, 0x00000008u, 0x000002bbu, 0x00000294u, 0x0004007cu, 0x00000006u, + 0x000002bcu, 0x000002bbu, 0x00060041u, 0x000001a6u, 0x000002bdu, 0x00000287u, 0x000000d3u, 0x00000292u, + 0x0003003eu, 0x000002bdu, 0x000002bcu, 0x000200f9u, 0x00000283u, 0x000200f8u, 0x000002beu, 0x00050041u, + 0x00000158u, 0x000002c3u, 0x00000157u, 0x00000288u, 0x0004003du, 0x00000006u, 0x000002c4u, 0x000002c3u, + 0x000500c2u, 0x00000006u, 0x000002c5u, 0x000002c4u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000002c6u, + 0x0000016cu, 0x00050041u, 0x00000158u, 0x000002c7u, 0x00000157u, 0x0000015fu, 0x0004003du, 0x00000006u, + 0x000002c8u, 0x000002c7u, 0x00050084u, 0x00000006u, 0x000002c9u, 0x000002c6u, 0x000002c8u, 0x0004003du, + 0x00000006u, 0x000002cau, 0x00000275u, 0x00050080u, 0x00000006u, 0x000002cbu, 0x000002c9u, 0x000002cau, + 0x00050080u, 0x00000006u, 0x000002ccu, 0x000002c5u, 0x000002cbu, 0x000300f7u, 0x000002d0u, 0x00000000u, + 0x000400fau, 0x000002cdu, 0x000002cfu, 0x000002e1u, 0x000200f8u, 0x000002cfu, 0x00050041u, 0x00000158u, + 0x000002d1u, 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x000002d2u, 0x000002d1u, 0x000500c2u, + 0x00000006u, 0x000002d3u, 0x000002d2u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x000002d4u, 0x00000174u, + 0x00050041u, 0x00000158u, 0x000002d5u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000002d6u, + 0x000002d5u, 0x00050080u, 0x00000006u, 0x000002d7u, 0x000002d4u, 0x000002d6u, 0x00050041u, 0x00000158u, + 0x000002d8u, 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x000002d9u, 0x000002d8u, 0x00050080u, + 0x00000006u, 0x000002dau, 0x000002d7u, 0x000002d9u, 0x0004003du, 0x00000006u, 0x000002dbu, 0x00000275u, + 0x00050080u, 0x00000006u, 0x000002dcu, 0x000002dau, 0x000002dbu, 0x00050080u, 0x00000006u, 0x000002ddu, + 0x000002d3u, 0x000002dcu, 0x00060041u, 0x000001a6u, 0x000002deu, 0x0000019du, 0x000000d3u, 0x000002ddu, + 0x0004003du, 0x00000006u, 0x000002dfu, 0x000002deu, 0x0004007cu, 0x00000008u, 0x000002e0u, 0x000002dfu, + 0x0003003eu, 0x000002ceu, 0x000002e0u, 0x000200f9u, 0x000002d0u, 0x000200f8u, 0x000002e1u, 0x00050041u, + 0x00000158u, 0x000002e2u, 0x00000157u, 0x0000019eu, 0x0004003du, 0x00000006u, 0x000002e3u, 0x000002e2u, + 0x000500c2u, 0x00000006u, 0x000002e4u, 0x000002e3u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000002e5u, + 0x00000174u, 0x00050041u, 0x00000158u, 0x000002e6u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x000002e7u, 0x000002e6u, 0x00050080u, 0x00000006u, 0x000002e8u, 0x000002e5u, 0x000002e7u, 0x00050041u, + 0x00000158u, 0x000002e9u, 0x00000157u, 0x0000015bu, 0x0004003du, 0x00000006u, 0x000002eau, 0x000002e9u, + 0x00050080u, 0x00000006u, 0x000002ebu, 0x000002e8u, 0x000002eau, 0x0004003du, 0x00000006u, 0x000002ecu, + 0x00000275u, 0x00050080u, 0x00000006u, 0x000002edu, 0x000002ebu, 0x000002ecu, 0x00050080u, 0x00000006u, + 0x000002eeu, 0x000002e4u, 0x000002edu, 0x00060041u, 0x000001b7u, 0x000002efu, 0x000001afu, 0x000000d3u, + 0x000002eeu, 0x0004003du, 0x000001abu, 0x000002f0u, 0x000002efu, 0x00040071u, 0x00000006u, 0x000002f1u, + 0x000002f0u, 0x0003003eu, 0x000002f2u, 0x000002f1u, 0x0003003eu, 0x000002f3u, 0x00000195u, 0x00060039u, + 0x00000008u, 0x000002f4u, 0x0000001bu, 0x000002f2u, 0x000002f3u, 0x0003003eu, 0x000002ceu, 0x000002f4u, + 0x000200f9u, 0x000002d0u, 0x000200f8u, 0x000002d0u, 0x0004003du, 0x00000008u, 0x000002f6u, 0x000002ceu, + 0x0003003eu, 0x000002f5u, 0x000002f6u, 0x0003003eu, 0x000002f7u, 0x00000182u, 0x00060039u, 0x00000006u, + 0x000002f8u, 0x00000020u, 0x000002f5u, 0x000002f7u, 0x00040071u, 0x000001abu, 0x000002f9u, 0x000002f8u, + 0x00060041u, 0x000001b7u, 0x000002fau, 0x000002c2u, 0x000000d3u, 0x000002ccu, 0x0003003eu, 0x000002fau, + 0x000002f9u, 0x000200f9u, 0x00000283u, 0x000200f8u, 0x00000283u, 0x000200f9u, 0x00000280u, 0x000200f8u, + 0x00000280u, 0x000400fau, 0x000001f2u, 0x0000027du, 0x0000027fu, 0x000200f8u, 0x0000027fu, 0x000200f9u, + 0x000001fcu, 0x000200f8u, 0x000001fcu, 0x000200f9u, 0x0000017du, 0x000200f8u, 0x0000017du, 0x000100fdu, + 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, + 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x00000022u, 0x0000000au, 0x000500c4u, + 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, 0x0004007cu, 0x00000008u, 0x00000026u, 0x00000025u, + 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, + 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000029u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000002au, + 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, 0x0000002au, 0x0003003eu, 0x00000029u, 0x0000002bu, + 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002du, + 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, 0x0000002fu, 0x0000002eu, 0x000300f7u, 0x00000032u, + 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, 0x00000032u, 0x000200f8u, 0x00000031u, 0x0004003du, + 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, 0x00000006u, 0x00000035u, 0x00000033u, 0x00000034u, + 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000032u, 0x000200f8u, + 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, 0x00000030u, 0x00000011u, 0x00000037u, 0x00000031u, + 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, 0x00000038u, 0x00000039u, 0x0000003au, 0x000200f8u, + 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, 0x00000029u, 0x000500c2u, 0x00000006u, 0x0000003cu, + 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, 0x0000003eu, 0x0000003cu, 0x0000003du, 0x000500c7u, + 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000003au, + 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, 0x000500c2u, 0x00000006u, 0x00000045u, 0x00000044u, + 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, 0x00000045u, 0x00000046u, 0x00050080u, 0x00000006u, + 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, 0x00000042u, 0x00000048u, 0x0004003du, 0x00000006u, + 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, 0x0000004au, 0x00000042u, 0x00050080u, 0x00000006u, + 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, 0x00000006u, 0x0000004cu, 0x0000004bu, 0x00000024u, + 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, 0x0000003fu, 0x000200feu, 0x0000004du, 0x00010038u, + 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, + 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000050u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005bu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000051u, 0x00000012u, 0x000500c7u, 0x00000006u, + 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, 0x00000006u, 0x00000054u, 0x00000053u, 0x00000024u, + 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000012u, 0x000500c2u, + 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, 0x000500c7u, 0x00000006u, 0x0000005au, 0x00000058u, + 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000012u, + 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x0000005eu, + 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x00000060u, 0x0000005fu, + 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, 0x000400fau, 0x00000060u, 0x00000061u, 0x00000062u, + 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, 0x00000063u, 0x00000050u, 0x000500c5u, 0x00000006u, + 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, 0x00000006u, 0x00000065u, 0x0000005bu, 0x000500c4u, + 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000068u, 0x00000064u, + 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, 0x00000068u, 0x000200feu, 0x00000069u, 0x000200f8u, + 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000055u, 0x000500aau, 0x0000002cu, 0x0000006cu, + 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, 0x00000000u, 0x000400fau, 0x0000006cu, 0x0000006du, + 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000005bu, 0x000500aau, + 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, 0x000300f7u, 0x00000072u, 0x00000000u, 0x000400fau, + 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, 0x00000071u, 0x0004003du, 0x00000006u, 0x00000073u, + 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, 0x00000073u, 0x000200feu, 0x00000074u, 0x000200f8u, + 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, + 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, + 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x0000007eu, 0x0000007cu, + 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, 0x0000007eu, 0x00000036u, 0x000400fau, 0x0000007fu, + 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, 0x0004003du, 0x00000006u, 0x00000081u, 0x0000005bu, + 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, 0x00000080u, 0x0003003eu, 0x0000005bu, 0x00000082u, + 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, 0x00050080u, 0x00000006u, 0x00000084u, 0x00000083u, + 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, 0x000200f9u, 0x0000007au, 0x000200f8u, 0x0000007au, + 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000005bu, + 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, 0x0000005du, 0x0003003eu, 0x0000005bu, 0x00000086u, + 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000076u, + 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000008cu, + 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x0000008du, 0x00000087u, 0x0000008cu, 0x0004003du, + 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000008fu, 0x0000008eu, 0x00000066u, + 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, 0x0000008fu, 0x0004007cu, 0x00000008u, 0x00000091u, + 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000006u, 0x00000093u, + 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000055u, 0x00050080u, 0x00000006u, 0x00000096u, + 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, 0x00000097u, 0x00000096u, 0x0000008bu, 0x000500c5u, + 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, 0x0000005bu, + 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x0000009bu, + 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, 0x0000009cu, 0x0000009bu, 0x000200feu, 0x0000009cu, + 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, + 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x0000009fu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a6u, 0x00000007u, 0x0004003bu, + 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b3u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e1u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000eau, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000010cu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000a0u, 0x00000015u, 0x0004007cu, + 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, 0x0000009fu, 0x000000a1u, 0x0004003du, 0x00000006u, + 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a4u, 0x000000a3u, 0x00000024u, 0x000500c7u, + 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, 0x0003003eu, 0x000000a2u, 0x000000a5u, 0x0004003du, + 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x0000008bu, + 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, 0x000000a9u, 0x0003003eu, 0x000000a6u, 0x000000aau, + 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, 0x0004007cu, 0x00000023u, 0x000000aeu, 0x000000adu, + 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, 0x000000afu, 0x00050080u, 0x00000023u, 0x000000b2u, + 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, + 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, 0x000000b4u, 0x00000034u, 0x0003003eu, 0x000000b3u, + 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, 0x000000a6u, 0x000500aau, 0x0000002cu, 0x000000b7u, + 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, 0x00000000u, 0x000400fau, 0x000000b7u, 0x000000b8u, + 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000bau, 0x000000a2u, 0x000500c5u, + 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000bdu, 0x000000b3u, + 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, 0x00000036u, 0x000300f7u, 0x000000c1u, 0x00000000u, + 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, 0x000200f8u, 0x000000c0u, 0x0004003du, 0x00000006u, + 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x000000c4u, 0x000000c3u, 0x00000066u, 0x000500c5u, + 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, 0x0003003eu, 0x000000bfu, 0x000000c5u, 0x000200f9u, + 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, 0x000000bfu, 0x00000036u, 0x000200f9u, 0x000000c1u, + 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x000000c7u, 0x000000bfu, 0x000500c5u, 0x00000006u, + 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, 0x000000c8u, 0x000200f8u, 0x000000b9u, 0x0004003du, + 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, 0x0000002cu, 0x000000ccu, 0x000000cau, 0x000000cbu, + 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, 0x000000ccu, 0x000000cdu, 0x000000ceu, 0x000200f8u, + 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000d0u, + 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, 0x000200f8u, 0x000000ceu, 0x0004003du, 0x00000023u, + 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x000300f7u, + 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, + 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, 0x000500b1u, 0x0000002cu, 0x000000d9u, 0x000000d7u, + 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, + 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, 0x000000dcu, 0x000000a2u, 0x000200feu, 0x000000dcu, + 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, 0x000000dfu, 0x000000b3u, 0x000500c5u, 0x00000006u, + 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, 0x000000b3u, 0x000000e0u, 0x0004003du, 0x00000023u, + 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x0004007cu, + 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, 0x000000e1u, 0x000000e5u, 0x0004003du, 0x00000006u, + 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000e8u, 0x000000e1u, 0x000500c2u, 0x00000006u, + 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, 0x000000e6u, 0x000000e9u, 0x0004003du, 0x00000006u, + 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000ecu, 0x000000e1u, 0x000500c4u, 0x00000006u, + 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, 0x00000006u, 0x000000eeu, 0x000000edu, 0x00000046u, + 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, 0x000000eeu, 0x0003003eu, 0x000000eau, 0x000000efu, + 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, 0x00050082u, 0x00000006u, 0x000000f2u, 0x000000f1u, + 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, 0x00000046u, 0x000000f2u, 0x0003003eu, 0x000000f0u, + 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000f5u, + 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x000400a8u, 0x0000002cu, + 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, 0x00000000u, 0x000400fau, 0x000000f7u, 0x000000f8u, + 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, 0x00000006u, 0x000000fau, 0x000000eau, 0x0004003du, + 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, 0x0000002cu, 0x000000fcu, 0x000000fau, 0x000000fbu, + 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, 0x000000fdu, 0x000000feu, 0x000200f8u, + 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000e6u, 0x000500c7u, 0x00000006u, 0x00000100u, + 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000101u, 0x00000100u, 0x00000036u, 0x000200f9u, + 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x0000002cu, 0x00000102u, 0x000000fcu, 0x000000f8u, + 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, 0x000200f8u, 0x000000f9u, 0x000700f5u, 0x0000002cu, + 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, 0x000000feu, 0x000300f7u, 0x00000105u, 0x00000000u, + 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, 0x000200f8u, 0x00000104u, 0x0004003du, 0x00000006u, + 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, 0x00000107u, 0x00000106u, 0x00000046u, 0x0003003eu, + 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, 0x000200f8u, 0x00000105u, 0x0004003du, 0x00000006u, + 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, 0x00000109u, 0x000000e6u, 0x000500c5u, 0x00000006u, + 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, 0x0000010au, 0x000200f8u, 0x000000d6u, 0x0004003du, + 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, 0x00000006u, 0x0000010eu, 0x0000010du, 0x000500c4u, + 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, 0x0004003du, 0x00000006u, 0x00000110u, 0x000000b3u, + 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000112u, + 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, 0x00000112u, 0x0004003du, 0x00000006u, 0x00000114u, + 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, 0x00000114u, 0x00000115u, 0x0003003eu, 0x00000113u, + 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000113u, 0x000500acu, 0x0000002cu, 0x00000119u, + 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, 0x0000011au, 0x00000119u, 0x000300f7u, 0x0000011cu, + 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, 0x0000011cu, 0x000200f8u, 0x0000011bu, 0x0004003du, + 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, 0x0000002cu, 0x0000011eu, 0x0000011du, 0x00000118u, + 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, 0x0000011eu, 0x0000011fu, 0x00000120u, 0x000200f8u, + 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, 0x0000010cu, 0x000500c7u, 0x00000006u, 0x00000122u, + 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000123u, 0x00000122u, 0x00000036u, 0x000200f9u, + 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, 0x0000002cu, 0x00000124u, 0x0000011eu, 0x0000011bu, + 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, 0x000200f8u, 0x0000011cu, 0x000700f5u, 0x0000002cu, + 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, 0x00000120u, 0x000300f7u, 0x00000127u, 0x00000000u, + 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, 0x000200f8u, 0x00000126u, 0x0004003du, 0x00000006u, + 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, 0x00000129u, 0x00000128u, 0x00000046u, 0x0003003eu, + 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, 0x000200f8u, 0x00000127u, 0x0004003du, 0x00000006u, + 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000010cu, 0x000500c5u, 0x00000006u, + 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000008u, + 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, + 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000131u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003du, + 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, 0x0000002cu, 0x00000130u, 0x0000012fu, 0x00000046u, + 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, 0x00000130u, 0x00000132u, 0x00000137u, 0x000200f8u, + 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, 0x00000019u, 0x0003003eu, 0x00000134u, 0x00000135u, + 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, 0x00000134u, 0x0003003eu, 0x00000131u, 0x00000136u, + 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, 0x00000019u, + 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, 0x00000008u, 0x0000013au, 0x0000000bu, 0x00000138u, + 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, 0x0004003du, + 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, 0x0000013bu, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, + 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000140u, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000147u, 0x00000007u, 0x0004003du, + 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, 0x0000002cu, 0x0000013fu, 0x0000013eu, 0x00000046u, + 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, 0x0000013fu, 0x00000141u, 0x00000146u, 0x000200f8u, + 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, 0x0000001eu, 0x0003003eu, 0x00000143u, 0x00000144u, + 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, 0x00000143u, 0x0003003eu, 0x00000140u, 0x00000145u, + 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, 0x0004003du, 0x00000008u, 0x00000148u, 0x0000001eu, + 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, 0x00000006u, 0x00000149u, 0x00000010u, 0x00000147u, + 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000142u, 0x0004003du, + 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, 0x0000014au, 0x00010038u, +}; + constexpr uint32_t kSpv_vt_relu[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x000001bfu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -4678,6 +5174,577 @@ constexpr uint32_t kSpv_vt_rms_norm[] = { 0x00000176u, 0x00010038u, }; +constexpr uint32_t kSpv_vt_rope_from_cache[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000036du, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000150u, + 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000150u, + 0x0000000bu, 0x0000001cu, 0x00030047u, 0x00000155u, 0x00000002u, 0x00050048u, 0x00000155u, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00050048u, 0x00000155u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, + 0x00000155u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000155u, 0x00000003u, 0x00000023u, + 0x0000000cu, 0x00050048u, 0x00000155u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000155u, + 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000155u, 0x00000006u, 0x00000023u, 0x00000018u, + 0x00050048u, 0x00000155u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000155u, 0x00000008u, + 0x00000023u, 0x00000020u, 0x00050048u, 0x00000155u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, + 0x00000155u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000155u, 0x0000000bu, 0x00000023u, + 0x0000002cu, 0x00050048u, 0x00000155u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x00000188u, + 0x00000001u, 0x00000004u, 0x00040047u, 0x0000018du, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000018eu, + 0x00000002u, 0x00040048u, 0x0000018eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000018eu, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x00000190u, 0x00000018u, 0x00040047u, 0x00000190u, 0x00000021u, + 0x00000006u, 0x00040047u, 0x00000190u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001a6u, 0x00000001u, + 0x00000002u, 0x00040047u, 0x000001abu, 0x00000006u, 0x00000004u, 0x00030047u, 0x000001acu, 0x00000002u, + 0x00040048u, 0x000001acu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001acu, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x000001aeu, 0x00000018u, 0x00040047u, 0x000001aeu, 0x00000021u, 0x00000004u, + 0x00040047u, 0x000001aeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001bcu, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000001bdu, 0x00000002u, 0x00040048u, 0x000001bdu, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000001bdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001bfu, 0x00000018u, 0x00040047u, + 0x000001bfu, 0x00000021u, 0x00000005u, 0x00040047u, 0x000001bfu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000001f4u, 0x00000001u, 0x00000003u, 0x00040047u, 0x0000021fu, 0x00000001u, 0x00000000u, 0x00040047u, + 0x00000224u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000225u, 0x00000002u, 0x00050048u, 0x00000225u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000227u, 0x00000021u, 0x00000000u, 0x00040047u, + 0x00000227u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000234u, 0x00000006u, 0x00000002u, 0x00030047u, + 0x00000235u, 0x00000002u, 0x00050048u, 0x00000235u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x00000237u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000237u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000002ceu, 0x00000001u, 0x00000001u, 0x00040047u, 0x000002d3u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000002d4u, 0x00000002u, 0x00050048u, 0x000002d4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x000002d6u, 0x00000021u, 0x00000002u, 0x00040047u, 0x000002d6u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000002e2u, 0x00000006u, 0x00000002u, 0x00030047u, 0x000002e3u, 0x00000002u, 0x00050048u, 0x000002e3u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000002e5u, 0x00000021u, 0x00000003u, 0x00040047u, + 0x000002e5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000036cu, 0x0000000bu, 0x00000019u, 0x00020013u, + 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, + 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040021u, + 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000008u, 0x00040021u, + 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, 0x00000008u, 0x00000007u, 0x00000007u, + 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, 0x00040015u, 0x00000023u, 0x00000020u, + 0x00000001u, 0x0004002bu, 0x00000023u, 0x00000024u, 0x00000010u, 0x00020014u, 0x0000002cu, 0x0004002bu, + 0x00000006u, 0x0000002eu, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x00000034u, 0x007fffffu, 0x0004002bu, + 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000003du, 0x00000040u, 0x0004002bu, + 0x00000006u, 0x0000003fu, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00007fffu, 0x0004002bu, + 0x00000006u, 0x00000046u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000052u, 0x00008000u, 0x0004002bu, + 0x00000023u, 0x00000057u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000059u, 0x0000001fu, 0x0004002bu, + 0x00000006u, 0x0000005du, 0x000003ffu, 0x0004002bu, 0x00000023u, 0x00000066u, 0x0000000du, 0x0004002bu, + 0x00000006u, 0x0000007du, 0x00000400u, 0x0004002bu, 0x00000023u, 0x00000080u, 0x00000001u, 0x0004002bu, + 0x00000006u, 0x00000088u, 0x00000071u, 0x0004002bu, 0x00000023u, 0x0000008bu, 0x00000017u, 0x0004002bu, + 0x00000006u, 0x00000095u, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x000000ffu, 0x00040020u, + 0x000000abu, 0x00000007u, 0x00000023u, 0x0004002bu, 0x00000023u, 0x000000afu, 0x0000007fu, 0x0004002bu, + 0x00000023u, 0x000000b1u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00007c00u, 0x0004002bu, + 0x00000006u, 0x000000c2u, 0x00000200u, 0x0004002bu, 0x00000023u, 0x000000cbu, 0x0000001fu, 0x0004002bu, + 0x00000023u, 0x000000d3u, 0x00000000u, 0x0004002bu, 0x00000023u, 0x000000d8u, 0xfffffff6u, 0x0004002bu, + 0x00000006u, 0x000000deu, 0x00800000u, 0x0004002bu, 0x00000023u, 0x000000e2u, 0x0000000eu, 0x0004002bu, + 0x00000006u, 0x00000115u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00001000u, 0x00040017u, + 0x0000014eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000014fu, 0x00000001u, 0x0000014eu, 0x0004003bu, + 0x0000014fu, 0x00000150u, 0x00000001u, 0x00040020u, 0x00000151u, 0x00000001u, 0x00000006u, 0x000f001eu, + 0x00000155u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000156u, + 0x00000009u, 0x00000155u, 0x0004003bu, 0x00000156u, 0x00000157u, 0x00000009u, 0x0004002bu, 0x00000023u, + 0x00000158u, 0x00000003u, 0x00040020u, 0x00000159u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000023u, + 0x0000015cu, 0x00000004u, 0x0004002bu, 0x00000023u, 0x00000182u, 0x0000000cu, 0x0004002bu, 0x00000023u, + 0x00000185u, 0x00000002u, 0x00040032u, 0x00000006u, 0x00000188u, 0x00000000u, 0x00060034u, 0x0000002cu, + 0x00000189u, 0x000000aau, 0x00000188u, 0x00000046u, 0x0003001du, 0x0000018du, 0x00000006u, 0x0003001eu, + 0x0000018eu, 0x0000018du, 0x00040020u, 0x0000018fu, 0x0000000cu, 0x0000018eu, 0x0004003bu, 0x0000018fu, + 0x00000190u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000192u, 0x00000002u, 0x00040020u, 0x00000196u, + 0x0000000cu, 0x00000006u, 0x00040032u, 0x00000006u, 0x000001a6u, 0x00000000u, 0x00060034u, 0x0000002cu, + 0x000001a7u, 0x000000aau, 0x000001a6u, 0x00000036u, 0x0003001du, 0x000001abu, 0x00000006u, 0x0003001eu, + 0x000001acu, 0x000001abu, 0x00040020u, 0x000001adu, 0x0000000cu, 0x000001acu, 0x0004003bu, 0x000001adu, + 0x000001aeu, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x000001afu, 0x0000000bu, 0x00040015u, 0x000001bbu, + 0x00000010u, 0x00000000u, 0x0003001du, 0x000001bcu, 0x000001bbu, 0x0003001eu, 0x000001bdu, 0x000001bcu, + 0x00040020u, 0x000001beu, 0x0000000cu, 0x000001bdu, 0x0004003bu, 0x000001beu, 0x000001bfu, 0x0000000cu, + 0x00040020u, 0x000001c7u, 0x0000000cu, 0x000001bbu, 0x00060034u, 0x0000002cu, 0x000001d0u, 0x000000aau, + 0x000001a6u, 0x00000036u, 0x00040032u, 0x00000006u, 0x000001f4u, 0x00000001u, 0x00060034u, 0x0000002cu, + 0x000001f5u, 0x000000aau, 0x000001f4u, 0x00000046u, 0x00060034u, 0x0000002cu, 0x000001ffu, 0x000000aau, + 0x000001f4u, 0x00000046u, 0x0004002bu, 0x00000023u, 0x00000214u, 0x00000005u, 0x0004002bu, 0x00000023u, + 0x00000219u, 0x00000006u, 0x00040032u, 0x00000006u, 0x0000021fu, 0x00000000u, 0x00060034u, 0x0000002cu, + 0x00000220u, 0x000000aau, 0x0000021fu, 0x00000036u, 0x0003001du, 0x00000224u, 0x00000006u, 0x0003001eu, + 0x00000225u, 0x00000224u, 0x00040020u, 0x00000226u, 0x0000000cu, 0x00000225u, 0x0004003bu, 0x00000226u, + 0x00000227u, 0x0000000cu, 0x0004002bu, 0x00000023u, 0x00000228u, 0x00000009u, 0x0003001du, 0x00000234u, + 0x000001bbu, 0x0003001eu, 0x00000235u, 0x00000234u, 0x00040020u, 0x00000236u, 0x0000000cu, 0x00000235u, + 0x0004003bu, 0x00000236u, 0x00000237u, 0x0000000cu, 0x00060034u, 0x0000002cu, 0x00000247u, 0x000000aau, + 0x0000021fu, 0x00000036u, 0x00060034u, 0x0000002cu, 0x00000268u, 0x000000aau, 0x0000021fu, 0x00000036u, + 0x0003002au, 0x0000002cu, 0x0000028fu, 0x00060034u, 0x0000002cu, 0x00000294u, 0x000000aau, 0x0000021fu, + 0x00000036u, 0x0004002bu, 0x00000023u, 0x000002c3u, 0x00000007u, 0x0004002bu, 0x00000023u, 0x000002c8u, + 0x00000008u, 0x00040032u, 0x00000006u, 0x000002ceu, 0x00000000u, 0x00060034u, 0x0000002cu, 0x000002cfu, + 0x000000aau, 0x000002ceu, 0x00000036u, 0x0003001du, 0x000002d3u, 0x00000006u, 0x0003001eu, 0x000002d4u, + 0x000002d3u, 0x00040020u, 0x000002d5u, 0x0000000cu, 0x000002d4u, 0x0004003bu, 0x000002d5u, 0x000002d6u, + 0x0000000cu, 0x0003001du, 0x000002e2u, 0x000001bbu, 0x0003001eu, 0x000002e3u, 0x000002e2u, 0x00040020u, + 0x000002e4u, 0x0000000cu, 0x000002e3u, 0x0004003bu, 0x000002e4u, 0x000002e5u, 0x0000000cu, 0x00060034u, + 0x0000002cu, 0x000002f5u, 0x000000aau, 0x000002ceu, 0x00000036u, 0x00060034u, 0x0000002cu, 0x00000316u, + 0x000000aau, 0x000002ceu, 0x00000036u, 0x00060034u, 0x0000002cu, 0x00000341u, 0x000000aau, 0x000002ceu, + 0x00000036u, 0x0004002bu, 0x00000006u, 0x00000368u, 0x00000080u, 0x0004001cu, 0x00000369u, 0x00000008u, + 0x00000368u, 0x00040020u, 0x0000036au, 0x00000004u, 0x00000369u, 0x0004003bu, 0x0000036au, 0x0000036bu, + 0x00000004u, 0x0006002cu, 0x0000014eu, 0x0000036cu, 0x00000368u, 0x00000046u, 0x00000046u, 0x00050036u, + 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, + 0x0000014du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000154u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000016cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000171u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000175u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000179u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000017du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000181u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000187u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018au, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001a0u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001a5u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000001a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001cbu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001ccu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001cfu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000001d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001efu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001f3u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000001f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001feu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000200u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000212u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000021eu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000221u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000242u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000243u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000246u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000248u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000260u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000261u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000028au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000002b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b7u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000002bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002c1u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000002cdu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002d0u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000002f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002f1u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x000002f4u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002f6u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000030eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000030fu, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000338u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000339u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000363u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000364u, 0x00000007u, 0x00050041u, 0x00000151u, + 0x00000152u, 0x00000150u, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000153u, 0x00000152u, 0x0003003eu, + 0x0000014du, 0x00000153u, 0x00050041u, 0x00000159u, 0x0000015au, 0x00000157u, 0x00000158u, 0x0004003du, + 0x00000006u, 0x0000015bu, 0x0000015au, 0x00050041u, 0x00000159u, 0x0000015du, 0x00000157u, 0x0000015cu, + 0x0004003du, 0x00000006u, 0x0000015eu, 0x0000015du, 0x00050080u, 0x00000006u, 0x0000015fu, 0x0000015bu, + 0x0000015eu, 0x0003003eu, 0x00000154u, 0x0000015fu, 0x0004003du, 0x00000006u, 0x00000160u, 0x0000014du, + 0x00050041u, 0x00000159u, 0x00000161u, 0x00000157u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x00000162u, + 0x00000161u, 0x00050041u, 0x00000159u, 0x00000163u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x00000164u, 0x00000163u, 0x00050084u, 0x00000006u, 0x00000165u, 0x00000162u, 0x00000164u, 0x0004003du, + 0x00000006u, 0x00000166u, 0x00000154u, 0x00050084u, 0x00000006u, 0x00000167u, 0x00000165u, 0x00000166u, + 0x000500aeu, 0x0000002cu, 0x00000168u, 0x00000160u, 0x00000167u, 0x000300f7u, 0x0000016au, 0x00000000u, + 0x000400fau, 0x00000168u, 0x00000169u, 0x0000016au, 0x000200f8u, 0x00000169u, 0x000100fdu, 0x000200f8u, + 0x0000016au, 0x00050041u, 0x00000159u, 0x0000016du, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x0000016eu, 0x0000016du, 0x0004003du, 0x00000006u, 0x0000016fu, 0x00000154u, 0x00050084u, 0x00000006u, + 0x00000170u, 0x0000016eu, 0x0000016fu, 0x0003003eu, 0x0000016cu, 0x00000170u, 0x0004003du, 0x00000006u, + 0x00000172u, 0x0000014du, 0x0004003du, 0x00000006u, 0x00000173u, 0x0000016cu, 0x00050086u, 0x00000006u, + 0x00000174u, 0x00000172u, 0x00000173u, 0x0003003eu, 0x00000171u, 0x00000174u, 0x0004003du, 0x00000006u, + 0x00000176u, 0x0000014du, 0x0004003du, 0x00000006u, 0x00000177u, 0x0000016cu, 0x00050089u, 0x00000006u, + 0x00000178u, 0x00000176u, 0x00000177u, 0x0003003eu, 0x00000175u, 0x00000178u, 0x0004003du, 0x00000006u, + 0x0000017au, 0x00000175u, 0x0004003du, 0x00000006u, 0x0000017bu, 0x00000154u, 0x00050086u, 0x00000006u, + 0x0000017cu, 0x0000017au, 0x0000017bu, 0x0003003eu, 0x00000179u, 0x0000017cu, 0x0004003du, 0x00000006u, + 0x0000017eu, 0x00000175u, 0x0004003du, 0x00000006u, 0x0000017fu, 0x00000154u, 0x00050089u, 0x00000006u, + 0x00000180u, 0x0000017eu, 0x0000017fu, 0x0003003eu, 0x0000017du, 0x00000180u, 0x00050041u, 0x00000159u, + 0x00000183u, 0x00000157u, 0x00000182u, 0x0004003du, 0x00000006u, 0x00000184u, 0x00000183u, 0x000500c2u, + 0x00000006u, 0x00000186u, 0x00000184u, 0x00000185u, 0x0003003eu, 0x00000181u, 0x00000186u, 0x000300f7u, + 0x0000018cu, 0x00000000u, 0x000400fau, 0x00000189u, 0x0000018bu, 0x00000199u, 0x000200f8u, 0x0000018bu, + 0x0004003du, 0x00000006u, 0x00000191u, 0x00000181u, 0x0004003du, 0x00000006u, 0x00000193u, 0x00000171u, + 0x00050084u, 0x00000006u, 0x00000194u, 0x00000192u, 0x00000193u, 0x00050080u, 0x00000006u, 0x00000195u, + 0x00000191u, 0x00000194u, 0x00060041u, 0x00000196u, 0x00000197u, 0x00000190u, 0x000000d3u, 0x00000195u, + 0x0004003du, 0x00000006u, 0x00000198u, 0x00000197u, 0x0003003eu, 0x0000018au, 0x00000198u, 0x000200f9u, + 0x0000018cu, 0x000200f8u, 0x00000199u, 0x0004003du, 0x00000006u, 0x0000019au, 0x00000181u, 0x0004003du, + 0x00000006u, 0x0000019bu, 0x00000171u, 0x00050080u, 0x00000006u, 0x0000019cu, 0x0000019au, 0x0000019bu, + 0x00060041u, 0x00000196u, 0x0000019du, 0x00000190u, 0x000000d3u, 0x0000019cu, 0x0004003du, 0x00000006u, + 0x0000019eu, 0x0000019du, 0x0003003eu, 0x0000018au, 0x0000019eu, 0x000200f9u, 0x0000018cu, 0x000200f8u, + 0x0000018cu, 0x0004003du, 0x00000006u, 0x0000019fu, 0x0000018au, 0x0003003eu, 0x00000187u, 0x0000019fu, + 0x0004003du, 0x00000006u, 0x000001a1u, 0x00000187u, 0x00050041u, 0x00000159u, 0x000001a2u, 0x00000157u, + 0x00000185u, 0x0004003du, 0x00000006u, 0x000001a3u, 0x000001a2u, 0x00050084u, 0x00000006u, 0x000001a4u, + 0x000001a1u, 0x000001a3u, 0x0003003eu, 0x000001a0u, 0x000001a4u, 0x000300f7u, 0x000001aau, 0x00000000u, + 0x000400fau, 0x000001a7u, 0x000001a9u, 0x000001bau, 0x000200f8u, 0x000001a9u, 0x00050041u, 0x00000159u, + 0x000001b0u, 0x00000157u, 0x000001afu, 0x0004003du, 0x00000006u, 0x000001b1u, 0x000001b0u, 0x000500c2u, + 0x00000006u, 0x000001b2u, 0x000001b1u, 0x00000185u, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001a0u, + 0x0004003du, 0x00000006u, 0x000001b4u, 0x00000179u, 0x00050080u, 0x00000006u, 0x000001b5u, 0x000001b3u, + 0x000001b4u, 0x00050080u, 0x00000006u, 0x000001b6u, 0x000001b2u, 0x000001b5u, 0x00060041u, 0x00000196u, + 0x000001b7u, 0x000001aeu, 0x000000d3u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, + 0x0004007cu, 0x00000008u, 0x000001b9u, 0x000001b8u, 0x0003003eu, 0x000001a8u, 0x000001b9u, 0x000200f9u, + 0x000001aau, 0x000200f8u, 0x000001bau, 0x00050041u, 0x00000159u, 0x000001c0u, 0x00000157u, 0x000001afu, + 0x0004003du, 0x00000006u, 0x000001c1u, 0x000001c0u, 0x000500c2u, 0x00000006u, 0x000001c2u, 0x000001c1u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x000001c3u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000001c4u, + 0x00000179u, 0x00050080u, 0x00000006u, 0x000001c5u, 0x000001c3u, 0x000001c4u, 0x00050080u, 0x00000006u, + 0x000001c6u, 0x000001c2u, 0x000001c5u, 0x00060041u, 0x000001c7u, 0x000001c8u, 0x000001bfu, 0x000000d3u, + 0x000001c6u, 0x0004003du, 0x000001bbu, 0x000001c9u, 0x000001c8u, 0x00040071u, 0x00000006u, 0x000001cau, + 0x000001c9u, 0x0003003eu, 0x000001cbu, 0x000001cau, 0x0003003eu, 0x000001ccu, 0x000001a6u, 0x00060039u, + 0x00000008u, 0x000001cdu, 0x0000001bu, 0x000001cbu, 0x000001ccu, 0x0003003eu, 0x000001a8u, 0x000001cdu, + 0x000200f9u, 0x000001aau, 0x000200f8u, 0x000001aau, 0x0004003du, 0x00000008u, 0x000001ceu, 0x000001a8u, + 0x0003003eu, 0x000001a5u, 0x000001ceu, 0x000300f7u, 0x000001d3u, 0x00000000u, 0x000400fau, 0x000001d0u, + 0x000001d2u, 0x000001e1u, 0x000200f8u, 0x000001d2u, 0x00050041u, 0x00000159u, 0x000001d4u, 0x00000157u, + 0x000001afu, 0x0004003du, 0x00000006u, 0x000001d5u, 0x000001d4u, 0x000500c2u, 0x00000006u, 0x000001d6u, + 0x000001d5u, 0x00000185u, 0x0004003du, 0x00000006u, 0x000001d7u, 0x000001a0u, 0x00050041u, 0x00000159u, + 0x000001d8u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001d9u, 0x000001d8u, 0x00050080u, + 0x00000006u, 0x000001dau, 0x000001d7u, 0x000001d9u, 0x0004003du, 0x00000006u, 0x000001dbu, 0x00000179u, + 0x00050080u, 0x00000006u, 0x000001dcu, 0x000001dau, 0x000001dbu, 0x00050080u, 0x00000006u, 0x000001ddu, + 0x000001d6u, 0x000001dcu, 0x00060041u, 0x00000196u, 0x000001deu, 0x000001aeu, 0x000000d3u, 0x000001ddu, + 0x0004003du, 0x00000006u, 0x000001dfu, 0x000001deu, 0x0004007cu, 0x00000008u, 0x000001e0u, 0x000001dfu, + 0x0003003eu, 0x000001d1u, 0x000001e0u, 0x000200f9u, 0x000001d3u, 0x000200f8u, 0x000001e1u, 0x00050041u, + 0x00000159u, 0x000001e2u, 0x00000157u, 0x000001afu, 0x0004003du, 0x00000006u, 0x000001e3u, 0x000001e2u, + 0x000500c2u, 0x00000006u, 0x000001e4u, 0x000001e3u, 0x00000080u, 0x0004003du, 0x00000006u, 0x000001e5u, + 0x000001a0u, 0x00050041u, 0x00000159u, 0x000001e6u, 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x000001e7u, 0x000001e6u, 0x00050080u, 0x00000006u, 0x000001e8u, 0x000001e5u, 0x000001e7u, 0x0004003du, + 0x00000006u, 0x000001e9u, 0x00000179u, 0x00050080u, 0x00000006u, 0x000001eau, 0x000001e8u, 0x000001e9u, + 0x00050080u, 0x00000006u, 0x000001ebu, 0x000001e4u, 0x000001eau, 0x00060041u, 0x000001c7u, 0x000001ecu, + 0x000001bfu, 0x000000d3u, 0x000001ebu, 0x0004003du, 0x000001bbu, 0x000001edu, 0x000001ecu, 0x00040071u, + 0x00000006u, 0x000001eeu, 0x000001edu, 0x0003003eu, 0x000001efu, 0x000001eeu, 0x0003003eu, 0x000001f0u, + 0x000001a6u, 0x00060039u, 0x00000008u, 0x000001f1u, 0x0000001bu, 0x000001efu, 0x000001f0u, 0x0003003eu, + 0x000001d1u, 0x000001f1u, 0x000200f9u, 0x000001d3u, 0x000200f8u, 0x000001d3u, 0x0004003du, 0x00000008u, + 0x000001f2u, 0x000001d1u, 0x0003003eu, 0x000001cfu, 0x000001f2u, 0x000300f7u, 0x000001f8u, 0x00000000u, + 0x000400fau, 0x000001f5u, 0x000001f7u, 0x000001fau, 0x000200f8u, 0x000001f7u, 0x0004003du, 0x00000006u, + 0x000001f9u, 0x00000179u, 0x0003003eu, 0x000001f6u, 0x000001f9u, 0x000200f9u, 0x000001f8u, 0x000200f8u, + 0x000001fau, 0x0004003du, 0x00000006u, 0x000001fbu, 0x00000179u, 0x00050084u, 0x00000006u, 0x000001fcu, + 0x000001fbu, 0x00000192u, 0x0003003eu, 0x000001f6u, 0x000001fcu, 0x000200f9u, 0x000001f8u, 0x000200f8u, + 0x000001f8u, 0x0004003du, 0x00000006u, 0x000001fdu, 0x000001f6u, 0x0003003eu, 0x000001f3u, 0x000001fdu, + 0x000300f7u, 0x00000202u, 0x00000000u, 0x000400fau, 0x000001ffu, 0x00000201u, 0x00000207u, 0x000200f8u, + 0x00000201u, 0x0004003du, 0x00000006u, 0x00000203u, 0x00000179u, 0x00050041u, 0x00000159u, 0x00000204u, + 0x00000157u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000205u, 0x00000204u, 0x00050080u, 0x00000006u, + 0x00000206u, 0x00000203u, 0x00000205u, 0x0003003eu, 0x00000200u, 0x00000206u, 0x000200f9u, 0x00000202u, + 0x000200f8u, 0x00000207u, 0x0004003du, 0x00000006u, 0x00000208u, 0x00000179u, 0x00050084u, 0x00000006u, + 0x00000209u, 0x00000208u, 0x00000192u, 0x00050080u, 0x00000006u, 0x0000020au, 0x00000209u, 0x00000046u, + 0x0003003eu, 0x00000200u, 0x0000020au, 0x000200f9u, 0x00000202u, 0x000200f8u, 0x00000202u, 0x0004003du, + 0x00000006u, 0x0000020bu, 0x00000200u, 0x0003003eu, 0x000001feu, 0x0000020bu, 0x0004003du, 0x00000006u, + 0x0000020cu, 0x0000017du, 0x00050041u, 0x00000159u, 0x0000020du, 0x00000157u, 0x00000158u, 0x0004003du, + 0x00000006u, 0x0000020eu, 0x0000020du, 0x000500b0u, 0x0000002cu, 0x0000020fu, 0x0000020cu, 0x0000020eu, + 0x000300f7u, 0x00000211u, 0x00000000u, 0x000400fau, 0x0000020fu, 0x00000210u, 0x000002bbu, 0x000200f8u, + 0x00000210u, 0x0004003du, 0x00000006u, 0x00000213u, 0x00000171u, 0x00050041u, 0x00000159u, 0x00000215u, + 0x00000157u, 0x00000214u, 0x0004003du, 0x00000006u, 0x00000216u, 0x00000215u, 0x00050084u, 0x00000006u, + 0x00000217u, 0x00000213u, 0x00000216u, 0x0004003du, 0x00000006u, 0x00000218u, 0x0000017du, 0x00050041u, + 0x00000159u, 0x0000021au, 0x00000157u, 0x00000219u, 0x0004003du, 0x00000006u, 0x0000021bu, 0x0000021au, + 0x00050084u, 0x00000006u, 0x0000021cu, 0x00000218u, 0x0000021bu, 0x00050080u, 0x00000006u, 0x0000021du, + 0x00000217u, 0x0000021cu, 0x0003003eu, 0x00000212u, 0x0000021du, 0x000300f7u, 0x00000223u, 0x00000000u, + 0x000400fau, 0x00000220u, 0x00000222u, 0x00000233u, 0x000200f8u, 0x00000222u, 0x00050041u, 0x00000159u, + 0x00000229u, 0x00000157u, 0x00000228u, 0x0004003du, 0x00000006u, 0x0000022au, 0x00000229u, 0x000500c2u, + 0x00000006u, 0x0000022bu, 0x0000022au, 0x00000185u, 0x0004003du, 0x00000006u, 0x0000022cu, 0x00000212u, + 0x0004003du, 0x00000006u, 0x0000022du, 0x000001f3u, 0x00050080u, 0x00000006u, 0x0000022eu, 0x0000022cu, + 0x0000022du, 0x00050080u, 0x00000006u, 0x0000022fu, 0x0000022bu, 0x0000022eu, 0x00060041u, 0x00000196u, + 0x00000230u, 0x00000227u, 0x000000d3u, 0x0000022fu, 0x0004003du, 0x00000006u, 0x00000231u, 0x00000230u, + 0x0004007cu, 0x00000008u, 0x00000232u, 0x00000231u, 0x0003003eu, 0x00000221u, 0x00000232u, 0x000200f9u, + 0x00000223u, 0x000200f8u, 0x00000233u, 0x00050041u, 0x00000159u, 0x00000238u, 0x00000157u, 0x00000228u, + 0x0004003du, 0x00000006u, 0x00000239u, 0x00000238u, 0x000500c2u, 0x00000006u, 0x0000023au, 0x00000239u, + 0x00000080u, 0x0004003du, 0x00000006u, 0x0000023bu, 0x00000212u, 0x0004003du, 0x00000006u, 0x0000023cu, + 0x000001f3u, 0x00050080u, 0x00000006u, 0x0000023du, 0x0000023bu, 0x0000023cu, 0x00050080u, 0x00000006u, + 0x0000023eu, 0x0000023au, 0x0000023du, 0x00060041u, 0x000001c7u, 0x0000023fu, 0x00000237u, 0x000000d3u, + 0x0000023eu, 0x0004003du, 0x000001bbu, 0x00000240u, 0x0000023fu, 0x00040071u, 0x00000006u, 0x00000241u, + 0x00000240u, 0x0003003eu, 0x00000242u, 0x00000241u, 0x0003003eu, 0x00000243u, 0x0000021fu, 0x00060039u, + 0x00000008u, 0x00000244u, 0x0000001bu, 0x00000242u, 0x00000243u, 0x0003003eu, 0x00000221u, 0x00000244u, + 0x000200f9u, 0x00000223u, 0x000200f8u, 0x00000223u, 0x0004003du, 0x00000008u, 0x00000245u, 0x00000221u, + 0x0003003eu, 0x0000021eu, 0x00000245u, 0x000300f7u, 0x0000024au, 0x00000000u, 0x000400fau, 0x00000247u, + 0x00000249u, 0x00000255u, 0x000200f8u, 0x00000249u, 0x00050041u, 0x00000159u, 0x0000024bu, 0x00000157u, + 0x00000228u, 0x0004003du, 0x00000006u, 0x0000024cu, 0x0000024bu, 0x000500c2u, 0x00000006u, 0x0000024du, + 0x0000024cu, 0x00000185u, 0x0004003du, 0x00000006u, 0x0000024eu, 0x00000212u, 0x0004003du, 0x00000006u, + 0x0000024fu, 0x000001feu, 0x00050080u, 0x00000006u, 0x00000250u, 0x0000024eu, 0x0000024fu, 0x00050080u, + 0x00000006u, 0x00000251u, 0x0000024du, 0x00000250u, 0x00060041u, 0x00000196u, 0x00000252u, 0x00000227u, + 0x000000d3u, 0x00000251u, 0x0004003du, 0x00000006u, 0x00000253u, 0x00000252u, 0x0004007cu, 0x00000008u, + 0x00000254u, 0x00000253u, 0x0003003eu, 0x00000248u, 0x00000254u, 0x000200f9u, 0x0000024au, 0x000200f8u, + 0x00000255u, 0x00050041u, 0x00000159u, 0x00000256u, 0x00000157u, 0x00000228u, 0x0004003du, 0x00000006u, + 0x00000257u, 0x00000256u, 0x000500c2u, 0x00000006u, 0x00000258u, 0x00000257u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x00000259u, 0x00000212u, 0x0004003du, 0x00000006u, 0x0000025au, 0x000001feu, 0x00050080u, + 0x00000006u, 0x0000025bu, 0x00000259u, 0x0000025au, 0x00050080u, 0x00000006u, 0x0000025cu, 0x00000258u, + 0x0000025bu, 0x00060041u, 0x000001c7u, 0x0000025du, 0x00000237u, 0x000000d3u, 0x0000025cu, 0x0004003du, + 0x000001bbu, 0x0000025eu, 0x0000025du, 0x00040071u, 0x00000006u, 0x0000025fu, 0x0000025eu, 0x0003003eu, + 0x00000260u, 0x0000025fu, 0x0003003eu, 0x00000261u, 0x0000021fu, 0x00060039u, 0x00000008u, 0x00000262u, + 0x0000001bu, 0x00000260u, 0x00000261u, 0x0003003eu, 0x00000248u, 0x00000262u, 0x000200f9u, 0x0000024au, + 0x000200f8u, 0x0000024au, 0x0004003du, 0x00000008u, 0x00000263u, 0x00000248u, 0x0003003eu, 0x00000246u, + 0x00000263u, 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000264u, 0x000400f6u, 0x00000266u, 0x00000267u, + 0x00000000u, 0x000200f9u, 0x00000265u, 0x000200f8u, 0x00000265u, 0x000300f7u, 0x0000026au, 0x00000000u, + 0x000400fau, 0x00000268u, 0x00000269u, 0x0000027bu, 0x000200f8u, 0x00000269u, 0x00050041u, 0x00000159u, + 0x0000026bu, 0x00000157u, 0x00000228u, 0x0004003du, 0x00000006u, 0x0000026cu, 0x0000026bu, 0x000500c2u, + 0x00000006u, 0x0000026du, 0x0000026cu, 0x00000185u, 0x0004003du, 0x00000006u, 0x0000026eu, 0x00000212u, + 0x0004003du, 0x00000006u, 0x0000026fu, 0x000001f3u, 0x00050080u, 0x00000006u, 0x00000270u, 0x0000026eu, + 0x0000026fu, 0x00050080u, 0x00000006u, 0x00000271u, 0x0000026du, 0x00000270u, 0x0004003du, 0x00000008u, + 0x00000272u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00000273u, 0x000001a5u, 0x00050085u, 0x00000008u, + 0x00000274u, 0x00000272u, 0x00000273u, 0x0004003du, 0x00000008u, 0x00000275u, 0x00000246u, 0x0004003du, + 0x00000008u, 0x00000276u, 0x000001cfu, 0x00050085u, 0x00000008u, 0x00000277u, 0x00000275u, 0x00000276u, + 0x00050083u, 0x00000008u, 0x00000278u, 0x00000274u, 0x00000277u, 0x0004007cu, 0x00000006u, 0x00000279u, + 0x00000278u, 0x00060041u, 0x00000196u, 0x0000027au, 0x00000227u, 0x000000d3u, 0x00000271u, 0x0003003eu, + 0x0000027au, 0x00000279u, 0x000200f9u, 0x0000026au, 0x000200f8u, 0x0000027bu, 0x00050041u, 0x00000159u, + 0x0000027cu, 0x00000157u, 0x00000228u, 0x0004003du, 0x00000006u, 0x0000027du, 0x0000027cu, 0x000500c2u, + 0x00000006u, 0x0000027eu, 0x0000027du, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000027fu, 0x00000212u, + 0x0004003du, 0x00000006u, 0x00000280u, 0x000001f3u, 0x00050080u, 0x00000006u, 0x00000281u, 0x0000027fu, + 0x00000280u, 0x00050080u, 0x00000006u, 0x00000282u, 0x0000027eu, 0x00000281u, 0x0004003du, 0x00000008u, + 0x00000283u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00000284u, 0x000001a5u, 0x00050085u, 0x00000008u, + 0x00000285u, 0x00000283u, 0x00000284u, 0x0004003du, 0x00000008u, 0x00000286u, 0x00000246u, 0x0004003du, + 0x00000008u, 0x00000287u, 0x000001cfu, 0x00050085u, 0x00000008u, 0x00000288u, 0x00000286u, 0x00000287u, + 0x00050083u, 0x00000008u, 0x00000289u, 0x00000285u, 0x00000288u, 0x0003003eu, 0x0000028au, 0x00000289u, + 0x0003003eu, 0x0000028bu, 0x0000021fu, 0x00060039u, 0x00000006u, 0x0000028cu, 0x00000020u, 0x0000028au, + 0x0000028bu, 0x00040071u, 0x000001bbu, 0x0000028du, 0x0000028cu, 0x00060041u, 0x000001c7u, 0x0000028eu, + 0x00000237u, 0x000000d3u, 0x00000282u, 0x0003003eu, 0x0000028eu, 0x0000028du, 0x000200f9u, 0x0000026au, + 0x000200f8u, 0x0000026au, 0x000200f9u, 0x00000267u, 0x000200f8u, 0x00000267u, 0x000400fau, 0x0000028fu, + 0x00000264u, 0x00000266u, 0x000200f8u, 0x00000266u, 0x000200f9u, 0x00000290u, 0x000200f8u, 0x00000290u, + 0x000400f6u, 0x00000292u, 0x00000293u, 0x00000000u, 0x000200f9u, 0x00000291u, 0x000200f8u, 0x00000291u, + 0x000300f7u, 0x00000296u, 0x00000000u, 0x000400fau, 0x00000294u, 0x00000295u, 0x000002a7u, 0x000200f8u, + 0x00000295u, 0x00050041u, 0x00000159u, 0x00000297u, 0x00000157u, 0x00000228u, 0x0004003du, 0x00000006u, + 0x00000298u, 0x00000297u, 0x000500c2u, 0x00000006u, 0x00000299u, 0x00000298u, 0x00000185u, 0x0004003du, + 0x00000006u, 0x0000029au, 0x00000212u, 0x0004003du, 0x00000006u, 0x0000029bu, 0x000001feu, 0x00050080u, + 0x00000006u, 0x0000029cu, 0x0000029au, 0x0000029bu, 0x00050080u, 0x00000006u, 0x0000029du, 0x00000299u, + 0x0000029cu, 0x0004003du, 0x00000008u, 0x0000029eu, 0x0000021eu, 0x0004003du, 0x00000008u, 0x0000029fu, + 0x000001cfu, 0x00050085u, 0x00000008u, 0x000002a0u, 0x0000029eu, 0x0000029fu, 0x0004003du, 0x00000008u, + 0x000002a1u, 0x00000246u, 0x0004003du, 0x00000008u, 0x000002a2u, 0x000001a5u, 0x00050085u, 0x00000008u, + 0x000002a3u, 0x000002a1u, 0x000002a2u, 0x00050081u, 0x00000008u, 0x000002a4u, 0x000002a0u, 0x000002a3u, + 0x0004007cu, 0x00000006u, 0x000002a5u, 0x000002a4u, 0x00060041u, 0x00000196u, 0x000002a6u, 0x00000227u, + 0x000000d3u, 0x0000029du, 0x0003003eu, 0x000002a6u, 0x000002a5u, 0x000200f9u, 0x00000296u, 0x000200f8u, + 0x000002a7u, 0x00050041u, 0x00000159u, 0x000002a8u, 0x00000157u, 0x00000228u, 0x0004003du, 0x00000006u, + 0x000002a9u, 0x000002a8u, 0x000500c2u, 0x00000006u, 0x000002aau, 0x000002a9u, 0x00000080u, 0x0004003du, + 0x00000006u, 0x000002abu, 0x00000212u, 0x0004003du, 0x00000006u, 0x000002acu, 0x000001feu, 0x00050080u, + 0x00000006u, 0x000002adu, 0x000002abu, 0x000002acu, 0x00050080u, 0x00000006u, 0x000002aeu, 0x000002aau, + 0x000002adu, 0x0004003du, 0x00000008u, 0x000002afu, 0x0000021eu, 0x0004003du, 0x00000008u, 0x000002b0u, + 0x000001cfu, 0x00050085u, 0x00000008u, 0x000002b1u, 0x000002afu, 0x000002b0u, 0x0004003du, 0x00000008u, + 0x000002b2u, 0x00000246u, 0x0004003du, 0x00000008u, 0x000002b3u, 0x000001a5u, 0x00050085u, 0x00000008u, + 0x000002b4u, 0x000002b2u, 0x000002b3u, 0x00050081u, 0x00000008u, 0x000002b5u, 0x000002b1u, 0x000002b4u, + 0x0003003eu, 0x000002b6u, 0x000002b5u, 0x0003003eu, 0x000002b7u, 0x0000021fu, 0x00060039u, 0x00000006u, + 0x000002b8u, 0x00000020u, 0x000002b6u, 0x000002b7u, 0x00040071u, 0x000001bbu, 0x000002b9u, 0x000002b8u, + 0x00060041u, 0x000001c7u, 0x000002bau, 0x00000237u, 0x000000d3u, 0x000002aeu, 0x0003003eu, 0x000002bau, + 0x000002b9u, 0x000200f9u, 0x00000296u, 0x000200f8u, 0x00000296u, 0x000200f9u, 0x00000293u, 0x000200f8u, + 0x00000293u, 0x000400fau, 0x0000028fu, 0x00000290u, 0x00000292u, 0x000200f8u, 0x00000292u, 0x000200f9u, + 0x00000211u, 0x000200f8u, 0x000002bbu, 0x0004003du, 0x00000006u, 0x000002bdu, 0x0000017du, 0x00050041u, + 0x00000159u, 0x000002beu, 0x00000157u, 0x00000158u, 0x0004003du, 0x00000006u, 0x000002bfu, 0x000002beu, + 0x00050082u, 0x00000006u, 0x000002c0u, 0x000002bdu, 0x000002bfu, 0x0003003eu, 0x000002bcu, 0x000002c0u, + 0x0004003du, 0x00000006u, 0x000002c2u, 0x00000171u, 0x00050041u, 0x00000159u, 0x000002c4u, 0x00000157u, + 0x000002c3u, 0x0004003du, 0x00000006u, 0x000002c5u, 0x000002c4u, 0x00050084u, 0x00000006u, 0x000002c6u, + 0x000002c2u, 0x000002c5u, 0x0004003du, 0x00000006u, 0x000002c7u, 0x000002bcu, 0x00050041u, 0x00000159u, + 0x000002c9u, 0x00000157u, 0x000002c8u, 0x0004003du, 0x00000006u, 0x000002cau, 0x000002c9u, 0x00050084u, + 0x00000006u, 0x000002cbu, 0x000002c7u, 0x000002cau, 0x00050080u, 0x00000006u, 0x000002ccu, 0x000002c6u, + 0x000002cbu, 0x0003003eu, 0x000002c1u, 0x000002ccu, 0x000300f7u, 0x000002d2u, 0x00000000u, 0x000400fau, + 0x000002cfu, 0x000002d1u, 0x000002e1u, 0x000200f8u, 0x000002d1u, 0x00050041u, 0x00000159u, 0x000002d7u, + 0x00000157u, 0x00000057u, 0x0004003du, 0x00000006u, 0x000002d8u, 0x000002d7u, 0x000500c2u, 0x00000006u, + 0x000002d9u, 0x000002d8u, 0x00000185u, 0x0004003du, 0x00000006u, 0x000002dau, 0x000002c1u, 0x0004003du, + 0x00000006u, 0x000002dbu, 0x000001f3u, 0x00050080u, 0x00000006u, 0x000002dcu, 0x000002dau, 0x000002dbu, + 0x00050080u, 0x00000006u, 0x000002ddu, 0x000002d9u, 0x000002dcu, 0x00060041u, 0x00000196u, 0x000002deu, + 0x000002d6u, 0x000000d3u, 0x000002ddu, 0x0004003du, 0x00000006u, 0x000002dfu, 0x000002deu, 0x0004007cu, + 0x00000008u, 0x000002e0u, 0x000002dfu, 0x0003003eu, 0x000002d0u, 0x000002e0u, 0x000200f9u, 0x000002d2u, + 0x000200f8u, 0x000002e1u, 0x00050041u, 0x00000159u, 0x000002e6u, 0x00000157u, 0x00000057u, 0x0004003du, + 0x00000006u, 0x000002e7u, 0x000002e6u, 0x000500c2u, 0x00000006u, 0x000002e8u, 0x000002e7u, 0x00000080u, + 0x0004003du, 0x00000006u, 0x000002e9u, 0x000002c1u, 0x0004003du, 0x00000006u, 0x000002eau, 0x000001f3u, + 0x00050080u, 0x00000006u, 0x000002ebu, 0x000002e9u, 0x000002eau, 0x00050080u, 0x00000006u, 0x000002ecu, + 0x000002e8u, 0x000002ebu, 0x00060041u, 0x000001c7u, 0x000002edu, 0x000002e5u, 0x000000d3u, 0x000002ecu, + 0x0004003du, 0x000001bbu, 0x000002eeu, 0x000002edu, 0x00040071u, 0x00000006u, 0x000002efu, 0x000002eeu, + 0x0003003eu, 0x000002f0u, 0x000002efu, 0x0003003eu, 0x000002f1u, 0x000002ceu, 0x00060039u, 0x00000008u, + 0x000002f2u, 0x0000001bu, 0x000002f0u, 0x000002f1u, 0x0003003eu, 0x000002d0u, 0x000002f2u, 0x000200f9u, + 0x000002d2u, 0x000200f8u, 0x000002d2u, 0x0004003du, 0x00000008u, 0x000002f3u, 0x000002d0u, 0x0003003eu, + 0x000002cdu, 0x000002f3u, 0x000300f7u, 0x000002f8u, 0x00000000u, 0x000400fau, 0x000002f5u, 0x000002f7u, + 0x00000303u, 0x000200f8u, 0x000002f7u, 0x00050041u, 0x00000159u, 0x000002f9u, 0x00000157u, 0x00000057u, + 0x0004003du, 0x00000006u, 0x000002fau, 0x000002f9u, 0x000500c2u, 0x00000006u, 0x000002fbu, 0x000002fau, + 0x00000185u, 0x0004003du, 0x00000006u, 0x000002fcu, 0x000002c1u, 0x0004003du, 0x00000006u, 0x000002fdu, + 0x000001feu, 0x00050080u, 0x00000006u, 0x000002feu, 0x000002fcu, 0x000002fdu, 0x00050080u, 0x00000006u, + 0x000002ffu, 0x000002fbu, 0x000002feu, 0x00060041u, 0x00000196u, 0x00000300u, 0x000002d6u, 0x000000d3u, + 0x000002ffu, 0x0004003du, 0x00000006u, 0x00000301u, 0x00000300u, 0x0004007cu, 0x00000008u, 0x00000302u, + 0x00000301u, 0x0003003eu, 0x000002f6u, 0x00000302u, 0x000200f9u, 0x000002f8u, 0x000200f8u, 0x00000303u, + 0x00050041u, 0x00000159u, 0x00000304u, 0x00000157u, 0x00000057u, 0x0004003du, 0x00000006u, 0x00000305u, + 0x00000304u, 0x000500c2u, 0x00000006u, 0x00000306u, 0x00000305u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x00000307u, 0x000002c1u, 0x0004003du, 0x00000006u, 0x00000308u, 0x000001feu, 0x00050080u, 0x00000006u, + 0x00000309u, 0x00000307u, 0x00000308u, 0x00050080u, 0x00000006u, 0x0000030au, 0x00000306u, 0x00000309u, + 0x00060041u, 0x000001c7u, 0x0000030bu, 0x000002e5u, 0x000000d3u, 0x0000030au, 0x0004003du, 0x000001bbu, + 0x0000030cu, 0x0000030bu, 0x00040071u, 0x00000006u, 0x0000030du, 0x0000030cu, 0x0003003eu, 0x0000030eu, + 0x0000030du, 0x0003003eu, 0x0000030fu, 0x000002ceu, 0x00060039u, 0x00000008u, 0x00000310u, 0x0000001bu, + 0x0000030eu, 0x0000030fu, 0x0003003eu, 0x000002f6u, 0x00000310u, 0x000200f9u, 0x000002f8u, 0x000200f8u, + 0x000002f8u, 0x0004003du, 0x00000008u, 0x00000311u, 0x000002f6u, 0x0003003eu, 0x000002f4u, 0x00000311u, + 0x000200f9u, 0x00000312u, 0x000200f8u, 0x00000312u, 0x000400f6u, 0x00000314u, 0x00000315u, 0x00000000u, + 0x000200f9u, 0x00000313u, 0x000200f8u, 0x00000313u, 0x000300f7u, 0x00000318u, 0x00000000u, 0x000400fau, + 0x00000316u, 0x00000317u, 0x00000329u, 0x000200f8u, 0x00000317u, 0x00050041u, 0x00000159u, 0x00000319u, + 0x00000157u, 0x00000057u, 0x0004003du, 0x00000006u, 0x0000031au, 0x00000319u, 0x000500c2u, 0x00000006u, + 0x0000031bu, 0x0000031au, 0x00000185u, 0x0004003du, 0x00000006u, 0x0000031cu, 0x000002c1u, 0x0004003du, + 0x00000006u, 0x0000031du, 0x000001f3u, 0x00050080u, 0x00000006u, 0x0000031eu, 0x0000031cu, 0x0000031du, + 0x00050080u, 0x00000006u, 0x0000031fu, 0x0000031bu, 0x0000031eu, 0x0004003du, 0x00000008u, 0x00000320u, + 0x000002cdu, 0x0004003du, 0x00000008u, 0x00000321u, 0x000001a5u, 0x00050085u, 0x00000008u, 0x00000322u, + 0x00000320u, 0x00000321u, 0x0004003du, 0x00000008u, 0x00000323u, 0x000002f4u, 0x0004003du, 0x00000008u, + 0x00000324u, 0x000001cfu, 0x00050085u, 0x00000008u, 0x00000325u, 0x00000323u, 0x00000324u, 0x00050083u, + 0x00000008u, 0x00000326u, 0x00000322u, 0x00000325u, 0x0004007cu, 0x00000006u, 0x00000327u, 0x00000326u, + 0x00060041u, 0x00000196u, 0x00000328u, 0x000002d6u, 0x000000d3u, 0x0000031fu, 0x0003003eu, 0x00000328u, + 0x00000327u, 0x000200f9u, 0x00000318u, 0x000200f8u, 0x00000329u, 0x00050041u, 0x00000159u, 0x0000032au, + 0x00000157u, 0x00000057u, 0x0004003du, 0x00000006u, 0x0000032bu, 0x0000032au, 0x000500c2u, 0x00000006u, + 0x0000032cu, 0x0000032bu, 0x00000080u, 0x0004003du, 0x00000006u, 0x0000032du, 0x000002c1u, 0x0004003du, + 0x00000006u, 0x0000032eu, 0x000001f3u, 0x00050080u, 0x00000006u, 0x0000032fu, 0x0000032du, 0x0000032eu, + 0x00050080u, 0x00000006u, 0x00000330u, 0x0000032cu, 0x0000032fu, 0x0004003du, 0x00000008u, 0x00000331u, + 0x000002cdu, 0x0004003du, 0x00000008u, 0x00000332u, 0x000001a5u, 0x00050085u, 0x00000008u, 0x00000333u, + 0x00000331u, 0x00000332u, 0x0004003du, 0x00000008u, 0x00000334u, 0x000002f4u, 0x0004003du, 0x00000008u, + 0x00000335u, 0x000001cfu, 0x00050085u, 0x00000008u, 0x00000336u, 0x00000334u, 0x00000335u, 0x00050083u, + 0x00000008u, 0x00000337u, 0x00000333u, 0x00000336u, 0x0003003eu, 0x00000338u, 0x00000337u, 0x0003003eu, + 0x00000339u, 0x000002ceu, 0x00060039u, 0x00000006u, 0x0000033au, 0x00000020u, 0x00000338u, 0x00000339u, + 0x00040071u, 0x000001bbu, 0x0000033bu, 0x0000033au, 0x00060041u, 0x000001c7u, 0x0000033cu, 0x000002e5u, + 0x000000d3u, 0x00000330u, 0x0003003eu, 0x0000033cu, 0x0000033bu, 0x000200f9u, 0x00000318u, 0x000200f8u, + 0x00000318u, 0x000200f9u, 0x00000315u, 0x000200f8u, 0x00000315u, 0x000400fau, 0x0000028fu, 0x00000312u, + 0x00000314u, 0x000200f8u, 0x00000314u, 0x000200f9u, 0x0000033du, 0x000200f8u, 0x0000033du, 0x000400f6u, + 0x0000033fu, 0x00000340u, 0x00000000u, 0x000200f9u, 0x0000033eu, 0x000200f8u, 0x0000033eu, 0x000300f7u, + 0x00000343u, 0x00000000u, 0x000400fau, 0x00000341u, 0x00000342u, 0x00000354u, 0x000200f8u, 0x00000342u, + 0x00050041u, 0x00000159u, 0x00000344u, 0x00000157u, 0x00000057u, 0x0004003du, 0x00000006u, 0x00000345u, + 0x00000344u, 0x000500c2u, 0x00000006u, 0x00000346u, 0x00000345u, 0x00000185u, 0x0004003du, 0x00000006u, + 0x00000347u, 0x000002c1u, 0x0004003du, 0x00000006u, 0x00000348u, 0x000001feu, 0x00050080u, 0x00000006u, + 0x00000349u, 0x00000347u, 0x00000348u, 0x00050080u, 0x00000006u, 0x0000034au, 0x00000346u, 0x00000349u, + 0x0004003du, 0x00000008u, 0x0000034bu, 0x000002cdu, 0x0004003du, 0x00000008u, 0x0000034cu, 0x000001cfu, + 0x00050085u, 0x00000008u, 0x0000034du, 0x0000034bu, 0x0000034cu, 0x0004003du, 0x00000008u, 0x0000034eu, + 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000034fu, 0x000001a5u, 0x00050085u, 0x00000008u, 0x00000350u, + 0x0000034eu, 0x0000034fu, 0x00050081u, 0x00000008u, 0x00000351u, 0x0000034du, 0x00000350u, 0x0004007cu, + 0x00000006u, 0x00000352u, 0x00000351u, 0x00060041u, 0x00000196u, 0x00000353u, 0x000002d6u, 0x000000d3u, + 0x0000034au, 0x0003003eu, 0x00000353u, 0x00000352u, 0x000200f9u, 0x00000343u, 0x000200f8u, 0x00000354u, + 0x00050041u, 0x00000159u, 0x00000355u, 0x00000157u, 0x00000057u, 0x0004003du, 0x00000006u, 0x00000356u, + 0x00000355u, 0x000500c2u, 0x00000006u, 0x00000357u, 0x00000356u, 0x00000080u, 0x0004003du, 0x00000006u, + 0x00000358u, 0x000002c1u, 0x0004003du, 0x00000006u, 0x00000359u, 0x000001feu, 0x00050080u, 0x00000006u, + 0x0000035au, 0x00000358u, 0x00000359u, 0x00050080u, 0x00000006u, 0x0000035bu, 0x00000357u, 0x0000035au, + 0x0004003du, 0x00000008u, 0x0000035cu, 0x000002cdu, 0x0004003du, 0x00000008u, 0x0000035du, 0x000001cfu, + 0x00050085u, 0x00000008u, 0x0000035eu, 0x0000035cu, 0x0000035du, 0x0004003du, 0x00000008u, 0x0000035fu, + 0x000002f4u, 0x0004003du, 0x00000008u, 0x00000360u, 0x000001a5u, 0x00050085u, 0x00000008u, 0x00000361u, + 0x0000035fu, 0x00000360u, 0x00050081u, 0x00000008u, 0x00000362u, 0x0000035eu, 0x00000361u, 0x0003003eu, + 0x00000363u, 0x00000362u, 0x0003003eu, 0x00000364u, 0x000002ceu, 0x00060039u, 0x00000006u, 0x00000365u, + 0x00000020u, 0x00000363u, 0x00000364u, 0x00040071u, 0x000001bbu, 0x00000366u, 0x00000365u, 0x00060041u, + 0x000001c7u, 0x00000367u, 0x000002e5u, 0x000000d3u, 0x0000035bu, 0x0003003eu, 0x00000367u, 0x00000366u, + 0x000200f9u, 0x00000343u, 0x000200f8u, 0x00000343u, 0x000200f9u, 0x00000340u, 0x000200f8u, 0x00000340u, + 0x000400fau, 0x0000028fu, 0x0000033du, 0x0000033fu, 0x000200f8u, 0x0000033fu, 0x000200f9u, 0x00000211u, + 0x000200f8u, 0x00000211u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, + 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, + 0x00000022u, 0x0000000au, 0x000500c4u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000024u, 0x0004007cu, + 0x00000008u, 0x00000026u, 0x00000025u, 0x000200feu, 0x00000026u, 0x00010038u, 0x00050036u, 0x00000006u, + 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, + 0x0004003bu, 0x00000007u, 0x00000029u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000042u, 0x00000007u, + 0x0004003du, 0x00000008u, 0x0000002au, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x0000002bu, 0x0000002au, + 0x0003003eu, 0x00000029u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000002du, 0x00000029u, 0x000500c7u, + 0x00000006u, 0x0000002fu, 0x0000002du, 0x0000002eu, 0x000500aau, 0x0000002cu, 0x00000030u, 0x0000002fu, + 0x0000002eu, 0x000300f7u, 0x00000032u, 0x00000000u, 0x000400fau, 0x00000030u, 0x00000031u, 0x00000032u, + 0x000200f8u, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000029u, 0x000500c7u, 0x00000006u, + 0x00000035u, 0x00000033u, 0x00000034u, 0x000500abu, 0x0000002cu, 0x00000037u, 0x00000035u, 0x00000036u, + 0x000200f9u, 0x00000032u, 0x000200f8u, 0x00000032u, 0x000700f5u, 0x0000002cu, 0x00000038u, 0x00000030u, + 0x00000011u, 0x00000037u, 0x00000031u, 0x000300f7u, 0x0000003au, 0x00000000u, 0x000400fau, 0x00000038u, + 0x00000039u, 0x0000003au, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003bu, 0x00000029u, + 0x000500c2u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x00000024u, 0x000500c5u, 0x00000006u, 0x0000003eu, + 0x0000003cu, 0x0000003du, 0x000500c7u, 0x00000006u, 0x00000040u, 0x0000003eu, 0x0000003fu, 0x000200feu, + 0x00000040u, 0x000200f8u, 0x0000003au, 0x0004003du, 0x00000006u, 0x00000044u, 0x00000029u, 0x000500c2u, + 0x00000006u, 0x00000045u, 0x00000044u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x00000047u, 0x00000045u, + 0x00000046u, 0x00050080u, 0x00000006u, 0x00000048u, 0x00000043u, 0x00000047u, 0x0003003eu, 0x00000042u, + 0x00000048u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000029u, 0x0004003du, 0x00000006u, 0x0000004au, + 0x00000042u, 0x00050080u, 0x00000006u, 0x0000004bu, 0x00000049u, 0x0000004au, 0x000500c2u, 0x00000006u, + 0x0000004cu, 0x0000004bu, 0x00000024u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004cu, 0x0000003fu, + 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, + 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000050u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005bu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000076u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000051u, + 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000053u, 0x00000051u, 0x00000052u, 0x000500c4u, 0x00000006u, + 0x00000054u, 0x00000053u, 0x00000024u, 0x0003003eu, 0x00000050u, 0x00000054u, 0x0004003du, 0x00000006u, + 0x00000056u, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, 0x000500c7u, + 0x00000006u, 0x0000005au, 0x00000058u, 0x00000059u, 0x0003003eu, 0x00000055u, 0x0000005au, 0x0004003du, + 0x00000006u, 0x0000005cu, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000005eu, 0x0000005cu, 0x0000005du, + 0x0003003eu, 0x0000005bu, 0x0000005eu, 0x0004003du, 0x00000006u, 0x0000005fu, 0x00000055u, 0x000500aau, + 0x0000002cu, 0x00000060u, 0x0000005fu, 0x00000059u, 0x000300f7u, 0x00000062u, 0x00000000u, 0x000400fau, + 0x00000060u, 0x00000061u, 0x00000062u, 0x000200f8u, 0x00000061u, 0x0004003du, 0x00000006u, 0x00000063u, + 0x00000050u, 0x000500c5u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000002eu, 0x0004003du, 0x00000006u, + 0x00000065u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000067u, 0x00000065u, 0x00000066u, 0x000500c5u, + 0x00000006u, 0x00000068u, 0x00000064u, 0x00000067u, 0x0004007cu, 0x00000008u, 0x00000069u, 0x00000068u, + 0x000200feu, 0x00000069u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000055u, + 0x000500aau, 0x0000002cu, 0x0000006cu, 0x0000006bu, 0x00000036u, 0x000300f7u, 0x0000006eu, 0x00000000u, + 0x000400fau, 0x0000006cu, 0x0000006du, 0x0000006eu, 0x000200f8u, 0x0000006du, 0x0004003du, 0x00000006u, + 0x0000006fu, 0x0000005bu, 0x000500aau, 0x0000002cu, 0x00000070u, 0x0000006fu, 0x00000036u, 0x000300f7u, + 0x00000072u, 0x00000000u, 0x000400fau, 0x00000070u, 0x00000071u, 0x00000072u, 0x000200f8u, 0x00000071u, + 0x0004003du, 0x00000006u, 0x00000073u, 0x00000050u, 0x0004007cu, 0x00000008u, 0x00000074u, 0x00000073u, + 0x000200feu, 0x00000074u, 0x000200f8u, 0x00000072u, 0x0003003eu, 0x00000076u, 0x00000036u, 0x000200f9u, + 0x00000077u, 0x000200f8u, 0x00000077u, 0x000400f6u, 0x00000079u, 0x0000007au, 0x00000000u, 0x000200f9u, + 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x0000007cu, 0x0000005bu, 0x000500c7u, + 0x00000006u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x000500aau, 0x0000002cu, 0x0000007fu, 0x0000007eu, + 0x00000036u, 0x000400fau, 0x0000007fu, 0x00000078u, 0x00000079u, 0x000200f8u, 0x00000078u, 0x0004003du, + 0x00000006u, 0x00000081u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x00000082u, 0x00000081u, 0x00000080u, + 0x0003003eu, 0x0000005bu, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000083u, 0x00000076u, 0x00050080u, + 0x00000006u, 0x00000084u, 0x00000083u, 0x00000046u, 0x0003003eu, 0x00000076u, 0x00000084u, 0x000200f9u, + 0x0000007au, 0x000200f8u, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003du, + 0x00000006u, 0x00000085u, 0x0000005bu, 0x000500c7u, 0x00000006u, 0x00000086u, 0x00000085u, 0x0000005du, + 0x0003003eu, 0x0000005bu, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000050u, 0x0004003du, + 0x00000006u, 0x00000089u, 0x00000076u, 0x00050082u, 0x00000006u, 0x0000008au, 0x00000088u, 0x00000089u, + 0x000500c4u, 0x00000006u, 0x0000008cu, 0x0000008au, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x0000008du, + 0x00000087u, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008eu, 0x0000005bu, 0x000500c4u, 0x00000006u, + 0x0000008fu, 0x0000008eu, 0x00000066u, 0x000500c5u, 0x00000006u, 0x00000090u, 0x0000008du, 0x0000008fu, + 0x0004007cu, 0x00000008u, 0x00000091u, 0x00000090u, 0x000200feu, 0x00000091u, 0x000200f8u, 0x0000006eu, + 0x0004003du, 0x00000006u, 0x00000093u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000055u, + 0x00050080u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500c4u, 0x00000006u, 0x00000097u, + 0x00000096u, 0x0000008bu, 0x000500c5u, 0x00000006u, 0x00000098u, 0x00000093u, 0x00000097u, 0x0004003du, + 0x00000006u, 0x00000099u, 0x0000005bu, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, 0x00000066u, + 0x000500c5u, 0x00000006u, 0x0000009bu, 0x00000098u, 0x0000009au, 0x0004007cu, 0x00000008u, 0x0000009cu, + 0x0000009bu, 0x000200feu, 0x0000009cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, + 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, + 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a2u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000a6u, 0x00000007u, 0x0004003bu, 0x000000abu, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bfu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000e6u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f0u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003du, 0x00000008u, + 0x000000a0u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000a1u, 0x000000a0u, 0x0003003eu, 0x0000009fu, + 0x000000a1u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x0000009fu, 0x000500c2u, 0x00000006u, 0x000000a4u, + 0x000000a3u, 0x00000024u, 0x000500c7u, 0x00000006u, 0x000000a5u, 0x000000a4u, 0x00000052u, 0x0003003eu, + 0x000000a2u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000009fu, 0x000500c2u, 0x00000006u, + 0x000000a8u, 0x000000a7u, 0x0000008bu, 0x000500c7u, 0x00000006u, 0x000000aau, 0x000000a8u, 0x000000a9u, + 0x0003003eu, 0x000000a6u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000a6u, 0x0004007cu, + 0x00000023u, 0x000000aeu, 0x000000adu, 0x00050082u, 0x00000023u, 0x000000b0u, 0x000000aeu, 0x000000afu, + 0x00050080u, 0x00000023u, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x0003003eu, 0x000000acu, 0x000000b2u, + 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000009fu, 0x000500c7u, 0x00000006u, 0x000000b5u, 0x000000b4u, + 0x00000034u, 0x0003003eu, 0x000000b3u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b6u, 0x000000a6u, + 0x000500aau, 0x0000002cu, 0x000000b7u, 0x000000b6u, 0x000000a9u, 0x000300f7u, 0x000000b9u, 0x00000000u, + 0x000400fau, 0x000000b7u, 0x000000b8u, 0x000000b9u, 0x000200f8u, 0x000000b8u, 0x0004003du, 0x00000006u, + 0x000000bau, 0x000000a2u, 0x000500c5u, 0x00000006u, 0x000000bcu, 0x000000bau, 0x000000bbu, 0x0004003du, + 0x00000006u, 0x000000bdu, 0x000000b3u, 0x000500abu, 0x0000002cu, 0x000000beu, 0x000000bdu, 0x00000036u, + 0x000300f7u, 0x000000c1u, 0x00000000u, 0x000400fau, 0x000000beu, 0x000000c0u, 0x000000c6u, 0x000200f8u, + 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c3u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x000000c4u, + 0x000000c3u, 0x00000066u, 0x000500c5u, 0x00000006u, 0x000000c5u, 0x000000c2u, 0x000000c4u, 0x0003003eu, + 0x000000bfu, 0x000000c5u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c6u, 0x0003003eu, 0x000000bfu, + 0x00000036u, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x000000c7u, + 0x000000bfu, 0x000500c5u, 0x00000006u, 0x000000c8u, 0x000000bcu, 0x000000c7u, 0x000200feu, 0x000000c8u, + 0x000200f8u, 0x000000b9u, 0x0004003du, 0x00000023u, 0x000000cau, 0x000000acu, 0x000500afu, 0x0000002cu, + 0x000000ccu, 0x000000cau, 0x000000cbu, 0x000300f7u, 0x000000ceu, 0x00000000u, 0x000400fau, 0x000000ccu, + 0x000000cdu, 0x000000ceu, 0x000200f8u, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000cfu, 0x000000a2u, + 0x000500c5u, 0x00000006u, 0x000000d0u, 0x000000cfu, 0x000000bbu, 0x000200feu, 0x000000d0u, 0x000200f8u, + 0x000000ceu, 0x0004003du, 0x00000023u, 0x000000d2u, 0x000000acu, 0x000500b3u, 0x0000002cu, 0x000000d4u, + 0x000000d2u, 0x000000d3u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, 0x000000d5u, + 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000023u, 0x000000d7u, 0x000000acu, 0x000500b1u, + 0x0000002cu, 0x000000d9u, 0x000000d7u, 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, 0x000400fau, + 0x000000d9u, 0x000000dau, 0x000000dbu, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000006u, 0x000000dcu, + 0x000000a2u, 0x000200feu, 0x000000dcu, 0x000200f8u, 0x000000dbu, 0x0004003du, 0x00000006u, 0x000000dfu, + 0x000000b3u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000dfu, 0x000000deu, 0x0003003eu, 0x000000b3u, + 0x000000e0u, 0x0004003du, 0x00000023u, 0x000000e3u, 0x000000acu, 0x00050082u, 0x00000023u, 0x000000e4u, + 0x000000e2u, 0x000000e3u, 0x0004007cu, 0x00000006u, 0x000000e5u, 0x000000e4u, 0x0003003eu, 0x000000e1u, + 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000e8u, + 0x000000e1u, 0x000500c2u, 0x00000006u, 0x000000e9u, 0x000000e7u, 0x000000e8u, 0x0003003eu, 0x000000e6u, + 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000ebu, 0x000000b3u, 0x0004003du, 0x00000006u, 0x000000ecu, + 0x000000e1u, 0x000500c4u, 0x00000006u, 0x000000edu, 0x00000046u, 0x000000ecu, 0x00050082u, 0x00000006u, + 0x000000eeu, 0x000000edu, 0x00000046u, 0x000500c7u, 0x00000006u, 0x000000efu, 0x000000ebu, 0x000000eeu, + 0x0003003eu, 0x000000eau, 0x000000efu, 0x0004003du, 0x00000006u, 0x000000f1u, 0x000000e1u, 0x00050082u, + 0x00000006u, 0x000000f2u, 0x000000f1u, 0x00000046u, 0x000500c4u, 0x00000006u, 0x000000f3u, 0x00000046u, + 0x000000f2u, 0x0003003eu, 0x000000f0u, 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000eau, + 0x0004003du, 0x00000006u, 0x000000f5u, 0x000000f0u, 0x000500acu, 0x0000002cu, 0x000000f6u, 0x000000f4u, + 0x000000f5u, 0x000400a8u, 0x0000002cu, 0x000000f7u, 0x000000f6u, 0x000300f7u, 0x000000f9u, 0x00000000u, + 0x000400fau, 0x000000f7u, 0x000000f8u, 0x000000f9u, 0x000200f8u, 0x000000f8u, 0x0004003du, 0x00000006u, + 0x000000fau, 0x000000eau, 0x0004003du, 0x00000006u, 0x000000fbu, 0x000000f0u, 0x000500aau, 0x0000002cu, + 0x000000fcu, 0x000000fau, 0x000000fbu, 0x000300f7u, 0x000000feu, 0x00000000u, 0x000400fau, 0x000000fcu, + 0x000000fdu, 0x000000feu, 0x000200f8u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000e6u, + 0x000500c7u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000101u, + 0x00000100u, 0x00000036u, 0x000200f9u, 0x000000feu, 0x000200f8u, 0x000000feu, 0x000700f5u, 0x0000002cu, + 0x00000102u, 0x000000fcu, 0x000000f8u, 0x00000101u, 0x000000fdu, 0x000200f9u, 0x000000f9u, 0x000200f8u, + 0x000000f9u, 0x000700f5u, 0x0000002cu, 0x00000103u, 0x000000f6u, 0x000000dbu, 0x00000102u, 0x000000feu, + 0x000300f7u, 0x00000105u, 0x00000000u, 0x000400fau, 0x00000103u, 0x00000104u, 0x00000105u, 0x000200f8u, + 0x00000104u, 0x0004003du, 0x00000006u, 0x00000106u, 0x000000e6u, 0x00050080u, 0x00000006u, 0x00000107u, + 0x00000106u, 0x00000046u, 0x0003003eu, 0x000000e6u, 0x00000107u, 0x000200f9u, 0x00000105u, 0x000200f8u, + 0x00000105u, 0x0004003du, 0x00000006u, 0x00000108u, 0x000000a2u, 0x0004003du, 0x00000006u, 0x00000109u, + 0x000000e6u, 0x000500c5u, 0x00000006u, 0x0000010au, 0x00000108u, 0x00000109u, 0x000200feu, 0x0000010au, + 0x000200f8u, 0x000000d6u, 0x0004003du, 0x00000023u, 0x0000010du, 0x000000acu, 0x0004007cu, 0x00000006u, + 0x0000010eu, 0x0000010du, 0x000500c4u, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00000057u, 0x0004003du, + 0x00000006u, 0x00000110u, 0x000000b3u, 0x000500c2u, 0x00000006u, 0x00000111u, 0x00000110u, 0x00000066u, + 0x000500c5u, 0x00000006u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x0003003eu, 0x0000010cu, 0x00000112u, + 0x0004003du, 0x00000006u, 0x00000114u, 0x000000b3u, 0x000500c7u, 0x00000006u, 0x00000116u, 0x00000114u, + 0x00000115u, 0x0003003eu, 0x00000113u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000113u, + 0x000500acu, 0x0000002cu, 0x00000119u, 0x00000117u, 0x00000118u, 0x000400a8u, 0x0000002cu, 0x0000011au, + 0x00000119u, 0x000300f7u, 0x0000011cu, 0x00000000u, 0x000400fau, 0x0000011au, 0x0000011bu, 0x0000011cu, + 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000113u, 0x000500aau, 0x0000002cu, + 0x0000011eu, 0x0000011du, 0x00000118u, 0x000300f7u, 0x00000120u, 0x00000000u, 0x000400fau, 0x0000011eu, + 0x0000011fu, 0x00000120u, 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000006u, 0x00000121u, 0x0000010cu, + 0x000500c7u, 0x00000006u, 0x00000122u, 0x00000121u, 0x00000046u, 0x000500abu, 0x0000002cu, 0x00000123u, + 0x00000122u, 0x00000036u, 0x000200f9u, 0x00000120u, 0x000200f8u, 0x00000120u, 0x000700f5u, 0x0000002cu, + 0x00000124u, 0x0000011eu, 0x0000011bu, 0x00000123u, 0x0000011fu, 0x000200f9u, 0x0000011cu, 0x000200f8u, + 0x0000011cu, 0x000700f5u, 0x0000002cu, 0x00000125u, 0x00000119u, 0x000000d6u, 0x00000124u, 0x00000120u, + 0x000300f7u, 0x00000127u, 0x00000000u, 0x000400fau, 0x00000125u, 0x00000126u, 0x00000127u, 0x000200f8u, + 0x00000126u, 0x0004003du, 0x00000006u, 0x00000128u, 0x0000010cu, 0x00050080u, 0x00000006u, 0x00000129u, + 0x00000128u, 0x00000046u, 0x0003003eu, 0x0000010cu, 0x00000129u, 0x000200f9u, 0x00000127u, 0x000200f8u, + 0x00000127u, 0x0004003du, 0x00000006u, 0x0000012au, 0x000000a2u, 0x0004003du, 0x00000006u, 0x0000012bu, + 0x0000010cu, 0x000500c5u, 0x00000006u, 0x0000012cu, 0x0000012au, 0x0000012bu, 0x000200feu, 0x0000012cu, + 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, + 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, + 0x00000131u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000138u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000001au, 0x000500aau, 0x0000002cu, + 0x00000130u, 0x0000012fu, 0x00000046u, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000400fau, 0x00000130u, + 0x00000132u, 0x00000137u, 0x000200f8u, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000135u, 0x00000019u, + 0x0003003eu, 0x00000134u, 0x00000135u, 0x00050039u, 0x00000008u, 0x00000136u, 0x00000013u, 0x00000134u, + 0x0003003eu, 0x00000131u, 0x00000136u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000137u, 0x0004003du, + 0x00000006u, 0x00000139u, 0x00000019u, 0x0003003eu, 0x00000138u, 0x00000139u, 0x00050039u, 0x00000008u, + 0x0000013au, 0x0000000bu, 0x00000138u, 0x0003003eu, 0x00000131u, 0x0000013au, 0x000200f9u, 0x00000133u, + 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x00000131u, 0x000200feu, 0x0000013bu, + 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, + 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, + 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000143u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x00000147u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000013eu, 0x0000001fu, 0x000500aau, 0x0000002cu, + 0x0000013fu, 0x0000013eu, 0x00000046u, 0x000300f7u, 0x00000142u, 0x00000000u, 0x000400fau, 0x0000013fu, + 0x00000141u, 0x00000146u, 0x000200f8u, 0x00000141u, 0x0004003du, 0x00000008u, 0x00000144u, 0x0000001eu, + 0x0003003eu, 0x00000143u, 0x00000144u, 0x00050039u, 0x00000006u, 0x00000145u, 0x00000016u, 0x00000143u, + 0x0003003eu, 0x00000140u, 0x00000145u, 0x000200f9u, 0x00000142u, 0x000200f8u, 0x00000146u, 0x0004003du, + 0x00000008u, 0x00000148u, 0x0000001eu, 0x0003003eu, 0x00000147u, 0x00000148u, 0x00050039u, 0x00000006u, + 0x00000149u, 0x00000010u, 0x00000147u, 0x0003003eu, 0x00000140u, 0x00000149u, 0x000200f9u, 0x00000142u, + 0x000200f8u, 0x00000142u, 0x0004003du, 0x00000006u, 0x0000014au, 0x00000140u, 0x000200feu, 0x0000014au, + 0x00010038u, +}; + constexpr uint32_t kSpv_vt_silu_and_mul[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000021bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -5033,10 +6100,18 @@ constexpr uint32_t kSpecIds_vt_paged_attn[] = { 0u, 1u, 2u, 3u, }; +constexpr uint32_t kSpecIds_vt_qkv_split[] = { + 0u, 1u, +}; + constexpr uint32_t kSpecIds_vt_reshape_and_cache[] = { 0u, }; +constexpr uint32_t kSpecIds_vt_rope_from_cache[] = { + 0u, 1u, 2u, 3u, 4u, +}; + } // namespace const SpirvModule kSpirvModules[] = { @@ -5048,9 +6123,11 @@ const SpirvModule kSpirvModules[] = { {"vt_layer_norm", kSpv_vt_layer_norm, sizeof(kSpv_vt_layer_norm) / sizeof(uint32_t), nullptr, 0}, {"vt_matmul", kSpv_vt_matmul, sizeof(kSpv_vt_matmul) / sizeof(uint32_t), kSpecIds_vt_matmul, 4}, {"vt_paged_attn", kSpv_vt_paged_attn, sizeof(kSpv_vt_paged_attn) / sizeof(uint32_t), kSpecIds_vt_paged_attn, 4}, + {"vt_qkv_split", kSpv_vt_qkv_split, sizeof(kSpv_vt_qkv_split) / sizeof(uint32_t), kSpecIds_vt_qkv_split, 2}, {"vt_relu", kSpv_vt_relu, sizeof(kSpv_vt_relu) / sizeof(uint32_t), nullptr, 0}, {"vt_reshape_and_cache", kSpv_vt_reshape_and_cache, sizeof(kSpv_vt_reshape_and_cache) / sizeof(uint32_t), kSpecIds_vt_reshape_and_cache, 1}, {"vt_rms_norm", kSpv_vt_rms_norm, sizeof(kSpv_vt_rms_norm) / sizeof(uint32_t), nullptr, 0}, + {"vt_rope_from_cache", kSpv_vt_rope_from_cache, sizeof(kSpv_vt_rope_from_cache) / sizeof(uint32_t), kSpecIds_vt_rope_from_cache, 5}, {"vt_silu_and_mul", kSpv_vt_silu_and_mul, sizeof(kSpv_vt_silu_and_mul) / sizeof(uint32_t), nullptr, 0}, }; const size_t kSpirvModuleCount = sizeof(kSpirvModules) / sizeof(kSpirvModules[0]); diff --git a/tests/scripts/test_gen_vulkan_spirv.py b/tests/scripts/test_gen_vulkan_spirv.py index 82e93a48..ad91fef1 100644 --- a/tests/scripts/test_gen_vulkan_spirv.py +++ b/tests/scripts/test_gen_vulkan_spirv.py @@ -104,6 +104,8 @@ def test_header_declares_but_does_not_define_the_blobs(self): "vt_embedding": "table/out dtype plus the id width", "vt_paged_attn": "query/k-cache/v-cache/out dtype", "vt_reshape_and_cache": "the 32- vs 16-bit copy width", + "vt_rope_from_cache": "q/k/cache dtype, pairing style, position width", + "vt_qkv_split": "source and destination dtype", } def test_specialized_shaders_declare_their_constants(self): diff --git a/tests/vt/test_backend_cross_device.cpp b/tests/vt/test_backend_cross_device.cpp index ec4a075e..b910718e 100644 --- a/tests/vt/test_backend_cross_device.cpp +++ b/tests/vt/test_backend_cross_device.cpp @@ -357,6 +357,75 @@ TEST_CASE("elementwise ops match the CPU oracle within NMSE <= 5e-4") { cpu.DestroyQueue(cq); } +TEST_CASE("RopeFromCache matches the CPU oracle within NMSE <= 5e-4, both styles") { + // The APPLY half of vLLM's rotary split: the cos/sin table is built once (on + // the portable tier, in double) and this rotates q and k with it. + constexpr int64_t kTokens = 11, kHq = 4, kHk = 2, kD = 16, kRot = 16; + constexpr int64_t kMaxPos = 64; + + const std::vector q0 = RandomVec(kTokens * kHq * kD, 801); + const std::vector k0 = RandomVec(kTokens * kHk * kD, 802); + const std::vector cache = RandomVec(kMaxPos * kRot, 803, -1.0f, 1.0f); + // Positions are NOT 0..n-1: a kernel that used the token index instead of the + // position would pass on the identity mapping and fail here. + std::vector pos(kTokens); + for (int64_t i = 0; i < kTokens; ++i) pos[static_cast(i)] = int32_t((i * 7 + 3) % kMaxPos); + + // NeoX rotates (pair, pair+half); GPT-J style rotates (2*pair, 2*pair+1). They + // are different element pairings, so a kernel that hardcoded one passes half + // the models and silently corrupts the other half. + for (bool neox : {true, false}) { + CAPTURE(neox); + vt::RopeArgs args; + args.rotary_dim = kRot; + args.is_neox_style = neox; + + vt::Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue cq = cpu.CreateQueue(); + const Device cd{DeviceType::kCPU, 0}; + std::vector refq = q0, refk = k0, ccache = cache; + std::vector cpos = pos; + { + Tensor tq = Tensor::Contiguous(refq.data(), DType::kF32, cd, {kTokens, kHq, kD}); + Tensor tk = Tensor::Contiguous(refk.data(), DType::kF32, cd, {kTokens, kHk, kD}); + Tensor tc = Tensor::Contiguous(ccache.data(), DType::kF32, cd, {kMaxPos, kRot}); + Tensor tp = Tensor::Contiguous(cpos.data(), DType::kI32, cd, {kTokens}); + vt::RopeFromCache(cq, tq, &tk, tp, tc, args); + } + cpu.DestroyQueue(cq); + + for (DeviceType dt : RegisteredDevices()) { + if (!OpAvailable(vt::OpId::kRopeFromCache, dt)) continue; + CAPTURE(DeviceName(dt)); + vt::Backend& dev = vt::GetBackend(dt); + Queue q = dev.CreateQueue(); + const Device d{dt, 0}; + + DevBuf dq(dev, q, kTokens * kHq * kD), dk(dev, q, kTokens * kHk * kD), + dc(dev, q, kMaxPos * kRot); + dq.Upload(q0); // rotation is IN PLACE, so re-upload the pristine input + dk.Upload(k0); + dc.Upload(cache); + void* dpos = dev.Alloc(kTokens * sizeof(int32_t)); + dev.Copy(q, dpos, pos.data(), kTokens * sizeof(int32_t)); + dev.Synchronize(q); + + Tensor tq = Tensor::Contiguous(dq.ptr(), DType::kF32, d, {kTokens, kHq, kD}); + Tensor tk = Tensor::Contiguous(dk.ptr(), DType::kF32, d, {kTokens, kHk, kD}); + Tensor tc = Tensor::Contiguous(dc.ptr(), DType::kF32, d, {kMaxPos, kRot}); + Tensor tp = Tensor::Contiguous(dpos, DType::kI32, d, {kTokens}); + vt::RopeFromCache(q, tq, &tk, tp, tc, args); + dev.Synchronize(q); + + CHECK(Nmse(refq, dq.Download()) <= kNmseTol); + CHECK(Nmse(refk, dk.Download()) <= kNmseTol); + + dev.Free(dpos); + dev.DestroyQueue(q); + } + } +} + TEST_CASE("ReshapeAndCache scatters into the KV cache BIT-EXACTLY") { // Byte movement, so the bar is memcmp against the CPU oracle, not NMSE. constexpr int64_t kTokens = 9, kHk = 2, kD = 8, kBS = 4, kBlocks = 6; diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index 262aacbf..28fddddd 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -53,7 +53,7 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // point of the split: at the target shader surface the words must not be // re-parsed by every TU that merely needs the table. const size_t n = vt::vulkan::kSpirvModuleCount; - CHECK(n == 12); + CHECK(n == 14); for (size_t mi = 0; mi < n; ++mi) { const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); @@ -65,8 +65,9 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // rather than at pipeline-creation time on a device we might not have. for (const char* want : {"vt_add", "vt_cast", "vt_embedding", "vt_fused_chain", "vt_greedy_argmax", "vt_layer_norm", "vt_matmul", - "vt_paged_attn", "vt_relu", "vt_reshape_and_cache", - "vt_rms_norm", "vt_silu_and_mul"}) { + "vt_paged_attn", "vt_qkv_split", "vt_relu", + "vt_reshape_and_cache", "vt_rms_norm", + "vt_rope_from_cache", "vt_silu_and_mul"}) { bool found = false; for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { if (std::strcmp(vt::vulkan::kSpirvModules[mi].name, want) == 0) found = true; @@ -109,6 +110,14 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const // table dtype, out dtype, id width (i32 vs i64). REQUIRE(m.spec_id_count == 3); for (uint32_t want = 0; want < 3; ++want) CHECK(m.spec_ids[want] == want); + } else if (std::strcmp(m.name, "vt_rope_from_cache") == 0) { + // q / k / cache dtype, the NeoX-vs-GPT-J pairing, and the position width. + REQUIRE(m.spec_id_count == 5); + for (uint32_t want = 0; want < 5; ++want) CHECK(m.spec_ids[want] == want); + } else if (std::strcmp(m.name, "vt_qkv_split") == 0) { + // source dtype, destination dtype. + REQUIRE(m.spec_id_count == 2); + for (uint32_t want = 0; want < 2; ++want) CHECK(m.spec_ids[want] == want); } else if (std::strcmp(m.name, "vt_reshape_and_cache") == 0) { // A single WIDTH selector, not a dtype code: this op moves bytes and // converts nothing, so 32-bit and 16-bit are the only two paths. @@ -319,10 +328,25 @@ TEST_CASE("Vulkan platform is registered and reports unified/no-pool residency") CHECK_FALSE(rp.release_host_weights_after_upload); CHECK_FALSE(rp.uses_device_memory_pool); - // No Vulkan attention kernel exists yet, so the priority list is EMPTY by - // design (see src/vllm/platforms/vulkan.cpp) — selection must fail loudly - // rather than name a backend whose kernels are absent. - CHECK(p.get_attn_backend_priority().empty()); + // Vulkan now HAS native kPagedAttention + kReshapeAndCache reading and writing + // the NHD layout FlashAttentionBackend::get_kv_cache_shape allocates, so the + // selector may reach FLASH_ATTN — on exactly the footing Metal reached it. + // This is what let OPT-125m run end to end on Vulkan. + { + vllm::platforms::AttnSelectorConfig cfg; + const auto prio = p.get_attn_backend_priority(cfg); + REQUIRE(prio.size() == 1); + CHECK(prio[0] == "FLASH_ATTN"); + } + // MLA stays EMPTY, and that is a capability statement rather than a stub: + // kMlaDecodeAttention / kMlaPrefillAttention / kConcatAndCacheMla have no + // Vulkan kernel, so naming a backend here would route an MLA model into one + // that cannot serve it. Selection must fail loudly instead. + { + vllm::platforms::AttnSelectorConfig mla; + mla.use_mla = true; + CHECK(p.get_attn_backend_priority(mla).empty()); + } } TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { @@ -337,13 +361,17 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { vt::OpId::kMatmul, vt::OpId::kMatmulBT, vt::OpId::kEmbedding, vt::OpId::kGreedyArgmax, // The attention block: paged attention (the one kernel - // with no llama.cpp Vulkan counterpart) and the KV write. - vt::OpId::kPagedAttention, vt::OpId::kReshapeAndCache}) { + // with no llama.cpp Vulkan counterpart), the KV write, the + // QKV split and the rotary APPLY. + vt::OpId::kPagedAttention, vt::OpId::kReshapeAndCache, + vt::OpId::kQkvSplit, vt::OpId::kRopeFromCache}) { CHECK(vt::OpRegistered(op, DeviceType::kVULKAN)); } - // No NATIVE Vulkan kernel yet for RoPE, quant, MoE, or the sampler beyond + // No NATIVE Vulkan kernel yet for the rotary TABLE BUILD (kRopeCosSinCache and + // kRopeNeox both construct the angle in double -- deliberately left on the + // portable tier, mirroring vLLM's own split), quant, MoE, or the sampler beyond // greedy argmax. - for (vt::OpId op : {vt::OpId::kRopeNeox, vt::OpId::kRopeFromCache, + for (vt::OpId op : {vt::OpId::kRopeNeox, vt::OpId::kRopeCosSinCache, vt::OpId::kApplyTemperature, vt::OpId::kMoeRouterTopK}) { CHECK_FALSE(vt::OpRegistered(op, DeviceType::kVULKAN)); } From 0be5d457f9e0fd16a8f282d54fe51389882f4f82 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 6 Aug 2026 23:40:55 +0000 Subject: [PATCH 17/17] record(vulkan): a model runs e2e on Vulkan, token-exact -- 16 native kernels opt-125m greedy: engine selects VULKAN on its own, all 9 OPT ops dispatch natively with 0 provider declines (kPagedAttention selections=1152), STRICT token-exact 6/6 prompts / 96/96 tokens vs the vLLM 0.25.0 oracle. Recorded with its limits attached everywhere the claim appears. It is a CORRECTNESS proof measured on llvmpipe, the software rasterizer, because no Vulkan GPU is reachable from this VM -- no speed number is measured, claimed or owed. 16 of 87 ops are native; the other 71 still run on the portable CPU tier. Quant, MoE, MLA and linear attention have no Vulkan kernels at all, and MLA is refused at the platform seam rather than mis-routed. The 0-declines figure is the part worth keeping: a provider can be selected and then decline INSIDE its kernel and forward to the CPU tier, so selections without declines is what separates "attention ran on Vulkan" from "a host fallback wearing its name". FOLLOWING_AGENTS_PROTOCOL Assisted-by: Claude Code:claude-opus-5 [Claude Code] --- .agents/feature-matrix.md | 2 +- .agents/specs/vulkan-full-support.md | 4 +- .agents/state.md | 55 ++++++++++++++++++++++++++++ docs/BENCHMARKS.md | 2 +- docs/FEATURES.md | 15 ++++---- docs/STATUS.md | 13 ++++--- 6 files changed, 73 insertions(+), 18 deletions(-) diff --git a/.agents/feature-matrix.md b/.agents/feature-matrix.md index 6f202137..2d6f2223 100644 --- a/.agents/feature-matrix.md +++ b/.agents/feature-matrix.md @@ -277,7 +277,7 @@ evidence. | `BACKEND-CPU` | production CPU | `PARTIAL` | persistent threadpool + chunked GEMM/row dispatch is 1/3/20-thread bit-identical and TSAN-clean; idle-host performance/RSS gate and compute-in-quant remain open | [backend matrix](backend-matrix.md) | | `BACKEND-ROCM` | ROCm | `INVENTORIED` | source/dispatch spike required; no "one flag" support claim | [backend matrix](backend-matrix.md) | | `BACKEND-MLX` | Apple Metal through MLX | `ACTIVE` | Metal/MLX skeleton ACTIVE: two models (OPT-125m, Qwen3-0.6B) run e2e + pass correctness, native-MSL GEMM, batched command buffers 1.50x (compute-bound at 98%+); optional MLX GEMM provider | [backend matrix](backend-matrix.md) | -| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | **14 NATIVE kernels** of the CPU backend's 87 registered ops (GEMM both orientations, embedding, greedy argmax, block-paged attention + KV write, elementwise/norm/fusion); the other 73 served by the portable reference tier (CPU kernel, unified memory). No model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | +| `BACKEND-VULKAN` | Vulkan | `ACTIVE` | **16 NATIVE kernels**; **opt-125m RUNS END TO END, STRICT token-exact 6/6 prompts / 96/96 tokens vs the vLLM 0.25.0 oracle, 0 provider declines** of the CPU backend's 87 registered ops (GEMM both orientations, embedding, greedy argmax, block-paged attention + KV write, QKV split, rotary apply, elementwise/norm/fusion); the other 71 served by the portable reference tier (CPU kernel, unified memory). No model run e2e, no speed number owed | [backend matrix](backend-matrix.md), [campaign spec](specs/vulkan-full-support.md) | | `BACKEND-XPU` | Intel XPU | `INVENTORIED` | loyal upstream-platform port, runtime absent | [backend matrix](backend-matrix.md) | | `BACKEND-ANE` | encoder/pooling accelerator | `INVENTORIED` | specialized CoreML route only | [backend matrix](backend-matrix.md) | diff --git a/.agents/specs/vulkan-full-support.md b/.agents/specs/vulkan-full-support.md index 53c3d87e..d71d7dd3 100644 --- a/.agents/specs/vulkan-full-support.md +++ b/.agents/specs/vulkan-full-support.md @@ -113,8 +113,8 @@ Vulkan-ON build, by asking `vt::OpRegistered` and `vt::GetOp` for every `OpId`: | | at `VK-A1` | after the first `VK-B` bricks | |---|---|---| | CPU-registered ops | **87** | **87** | -| **NATIVE** on Vulkan | **8** | **14** | -| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | **73** | +| **NATIVE** on Vulkan | **8** | **16** | +| served by the **portable reference tier** (S5, CPU kernel on shared memory) | **79** | **71** | | **ABSENT** (`GetOp` throws) | **0** | **0** | The six that moved are `kMatmul`, `kMatmulBT` (dense GEMM, both orientations), diff --git a/.agents/state.md b/.agents/state.md index f5dfa25f..4c980b0d 100644 --- a/.agents/state.md +++ b/.agents/state.md @@ -39918,3 +39918,58 @@ Box left clean (GPU idle, both locks free, worker down). Evidence: every sampler beyond greedy argmax. `get_attn_backend_priority()` remains EMPTY, so no model runs end to end on Vulkan and no speed number is measured, claimed or owed. + +- **2026-08-06 (later still, 4)** — **★ A MODEL RUNS END TO END ON VULKAN, STRICT + TOKEN-EXACT (`CLAIM-VULKAN-FULL-1`, row `BACKEND-VULKAN`).** Native **14 → 16**, + reference tier **73 → 71**. + + ``` + opt-125m: the engine selected device type 3 (VULKAN) + BACKEND PROOF — all 9 OPT ops dispatched on device type 3 with 0 declines + (kPagedAttention selections=1152) + STRICT correctness gate: 6/6 prompts token-exact (96/96 tokens) + vs the vLLM 0.25.0 oracle + ``` + + This is the STRONG form, not "it produced plausible text". The gate first + verifies vLLM's own greedy is DETERMINISTIC on these prompts (0 multi-valued + cells over K=5 runs), so it is the STRICT bar rather than the ratified + distributional one. The engine selected Vulkan ITSELF through + `CurrentPlatform()` with no test-side override. And **0 declines is the + load-bearing half**: a provider can be selected and then decline INSIDE its + kernel and forward down to the CPU tier, so 1152 `kPagedAttention` selections + with zero declines is what proves attention actually ran on Vulkan rather than + on the host fallback wearing its name. + + **Measured on llvmpipe** (software rasterizer) — no Vulkan GPU is reachable from + this VM. That is a correctness proof, not a performance one, and no speed number + is measured, claimed or owed. + + Three pieces closed the gap. (1) **RoPE split the way vLLM splits it** (user + directive "we want to be faithful to vllm"): `RotaryEmbedding` builds + `cos_sin_cache` once in `__init__` and the forward only applies it — which is + why `ops.rotary_embedding()` takes the cache rather than a base and a scaling + factor (`rotary_embedding/base.py:160-252`, `common.py:145-185` @ `e24d1b24fe96`). + So the TABLE build stays on the portable tier, where the double-precision + `pow`/`cos`/`sin` lives, and the per-token APPLY is native. Faithfulness and + numerics agreed: an f32 transcription of the angle construction is wrong at long + context AND would still pass a short-sequence gate. mrope DECLINES through the + provider seam rather than throwing. (2) **`kQkvSplit`**, mirroring + `QKVParallelLinear`'s `qkv.split([q_size, kv_size, kv_size])` — three + INDEPENDENT widths, because under GQA k and v are narrower than q. + (3) **`FLASH_ATTN` registered for `kVULKAN`** on exactly Metal's footing; the + real precondition is not the device name but that our `kPagedAttention` and + `kReshapeAndCache` use the same NHD layout `get_kv_cache_shape` allocates, which + they do because both are ports of the CPU pair. **MLA still returns EMPTY + deliberately** — `kMlaDecodeAttention`/`kMlaPrefillAttention`/ + `kConcatAndCacheMla` have no Vulkan kernel, and naming a backend there would + route an MLA model into one that cannot serve it. + + Gates: clean `-Werror` Vulkan-ON build 0 warnings; `test_vulkan_backend` 10/10 + (480 assertions), `test_backend_cross_device` 11/11 (123), `test_opt_load` 1/1 + (958), `test_opt_paged_engine` 1/1 (63), generator suite 13/13. CPU-only build + (`AUTO`=OFF) rebuilt clean and its ctest re-run, since `attention/backend.cpp` + is shared. + + Still on the reference tier: quant, MoE, GDN/MLA, the rotary TABLE build and + every sampler beyond greedy argmax. diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md index 5fa1321e..40075e67 100644 --- a/docs/BENCHMARKS.md +++ b/docs/BENCHMARKS.md @@ -304,7 +304,7 @@ built on it rather than keeping the flattering one. | vLLM 0.26 re-benchmark | Pending | Re-run the binding grids on the advanced pin | | MiniMax-H3 FP4 speed (W-FP4a) | **Measured GB10 (`row/H3-FP4-GPU-E2E`).** Marlin W4A16 byte-exact vs bf16; fp4 a memory win, 0.8x bf16/forward. Real-ckpt fp4-resident e2e RUNS (mp4/wav) but frame is a non-scene patch-grid | Render coherence ROOT-CAUSED (#70): VAE fine, DiT latent white. Geometry ladder (PR #74) REFUTES a DiT-math bug: ours==oracle to 8x8+temporal; white=trained-wts. fp4 speed CLOSED. Detail: benchmark-record + spec §8 | | MXFP4 Qwen3-8B (W4A16 Marlin) | **`KERNEL-MARLIN-DENSE-EXEC` x3 (dense-ON default): c1 1.020, c2/c4/c8 0.962/0.966/0.969, GPU mem 2.63x less** (beats #51 1.005/0.925/0.939/0.953 EVERY axis); #44 3/3, 32B-NVFP4A16 6/6; -Werror test-guard fixes x2 | **VT_MARLIN_DENSE default-ON** (+951us). `FLASH-OCCUPANCY` #75: matched-c8 ncu, occupancy IDENTICAL 8.33%; built vLLM's exact flash recipe, matched reg+instr, STILL +10us, gap is ptxas SASS quality, no lever/flip | -| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 14 NATIVE kernels; the other 73 CPU-registered ops run on the host reference tier. No model run e2e. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | +| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 16 NATIVE kernels; 71 on the host reference tier. opt-125m runs e2e token-exact; no speed measured. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, `llama-bench`, same GGUF, three columns (ours-Vulkan, llama.cpp-Vulkan, ours-CUDA). Until then: `GetReferenceTierHits()` must reach 0 | | SGLang floor arms | Never ran | Both arms of the SGLang comparison | | cuBLAS invocation-parity guard | CI guard landed (CPU); `kGemvHeuristicAlgos` refactor build-verify owed | `nvcc` rebuild + SACRED gate on dgx | | Ampere consumer (`sm_86`, RTX 3090 class) | **No number owed; no such board here.** 2026-08-06 build-verify: 7/7 FA2 TUs 0-warn, real `sm_86` SASS. [Detail](../.agents/benchmark-record.md) | External RTX 3090 report. Floor is llama.cpp on that card (GGUF, not our Blackwell-only NVFP4 grid) | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index a9186a51..c063c4bb 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -206,14 +206,13 @@ CUDA runtime-verified on GB10 (sm_121a), Jetson Thor (sm_110) and Jetson AGX Orin (sm_87). sm_110 is a correctness venue only: CUTLASS has no FP4 tensor-core kernels for it. -Vulkan is partial and the ◐ is honest but generous. It has **14 native compute -kernels** (dense GEMM in both orientations, block-paged attention and the KV -cache write, embedding, greedy argmax, and the elementwise/norm/fusion set); the -other 73 ops the CPU backend registers resolve -through the portable reference tier, which runs the CPU kernel against shared -memory on a unified device. That is correct and arbitrarily slow, no model has -been run end to end on it, and no speed number exists or is owed. Build it with -`-DVLLM_CPP_VULKAN=ON`; it is off by default. +Vulkan **runs a model end to end**: `opt-125m` greedy is STRICT token-exact, 6/6 +prompts / 96/96 tokens vs the vLLM 0.25.0 oracle, all nine of that model's ops +dispatched natively with **zero provider declines**, on llvmpipe (no Vulkan GPU is +reachable here). Still partial: **16 native kernels**, the other 71 ops fall back +to the portable CPU tier, and quant/MoE/MLA/linear-attention have none at all (MLA +is refused at the platform seam, not mis-routed). **No speed number is owed.** +Build with `-DVLLM_CPP_VULKAN=ON`; off by default. ## Serving, API and operations diff --git a/docs/STATUS.md b/docs/STATUS.md index 26d1c0a0..915a78e7 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -388,9 +388,10 @@ The correctness form and the full D0-D14 measured chronology live in ## Not supported yet LoRA (W1 CPU runtime brick landed — see the capability table; not yet usable -end-to-end), multi-GPU, Vulkan (14 native kernels, 73 ops on the CPU tier, no -model run e2e; [campaign](../.agents/specs/vulkan-full-support.md)), and the -full tool-calling template surface. **Scale-out / +end-to-end), multi-GPU, Vulkan (16 native kernels, 71 on the CPU tier; opt-125m +e2e token-exact, unbenched; +[campaign](../.agents/specs/vulkan-full-support.md)), and +the full tool-calling surface. **Scale-out / distributed execution is scoped but unbuilt** (spike, 2026-07-28): the engine is single-GPU today (verified — no NCCL / tensor-parallel / process-group code in `src/`). A single-dimension design is on record covering all three legs — @@ -1340,9 +1341,9 @@ portable-kernels-only (fp8/fp4/CUTLASS/Marlin/FA2 fast paths resolve EMPTY). non-GB10 runtime proof.** vllm.cpp was built natively for `sm_110` on an NVIDIA Jetson Thor board (aarch64, JetPack R38, nvcc 13.0, `compute_cap=11.0`; cutlass absent and not needed), Release `-Werror` 0 warnings, 16 TUs of real `sm_110` -SASS. It then ran the Llama-3.2-1B -paged-engine greedy gate and was **STRICT token-exact 12/16 prompts (192/192 -tokens) vs the committed vLLM oracle golden** (every vLLM-deterministic prompt), +SASS. It ran the Llama-3.2-1B paged-engine +greedy gate and was **STRICT token-exact 12/16 prompts (192/192 tokens) vs the +committed vLLM oracle golden** (every vLLM-deterministic prompt), **15/16 bit-identical to the GB10 `sm_121a` anchor**; the remaining 4/16 are the ratified bf16 near-tie prompts (committed teacher-forced gap 0.000 nats). Scope is precise: it covers only the portable bf16 path that ran; the fp8/fp4/CUTLASS